summaryrefslogtreecommitdiff
path: root/src/Game/gamePlayReport.cpp
blob: 165010c535834a1d0cda4e71aae2efdceecf205c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include "Game/gamePlayReport.h"
#include <math/seadVector.h>
#include "KingSystem/GameData/gdtCommonFlagsUtils.h"
#include "KingSystem/GameData/gdtManager.h"
#include "KingSystem/GameData/gdtTriggerParam.h"
#include "KingSystem/Quest/qstQuest.h"
#include "KingSystem/System/ProductReporter.h"
#include "KingSystem/System/StageInfo.h"

namespace uking {
unsigned int getQuestId(const sead::SafeString& quest_name);
void reportKorok(const sead::Vector3f& position) {
    ksys::ProductReporter::getSomeBool();
    s32 id = ksys::gdt::getFlag_HiddenKorok_Number();

    PlayReport report(sead::SafeString("korok"), 7,
                      ksys::PlayReportMgr::instance()->getReporter()->getHeap());

    report.addMapType();
    report.add(sead::SafeString("Id"), u32(id));

    report.addPlayTimes();
    report.addPosition({position.x, position.z});

    if (ksys::PlayReportMgr::instance()) {
        auto* reporter = ksys::PlayReportMgr::instance()->getReporter();
        if (reporter && reporter->isEnabled())
            reporter->saveReport(&report);
    }
}

void reportDungeon(const sead::SafeString& name, const sead::SafeString& event) {
    ksys::ProductReporter::getSomeBool();
    if (name.findIndex("Remains") == -1 && name.findIndex("Dungeon") == -1 &&
        name.findIndex("FinalTrial") == -1)
        return;

    PlayReport report(sead::SafeString("dungeon"), 6,
                      ksys::PlayReportMgr::instance()->getReporter()->getHeap());

    report.addMapType();

    report.add(sead::SafeString("Name"), name);
    report.add(sead::SafeString("Event"), event);

    report.addPlayTimes();

    if (ksys::PlayReportMgr::instance()) {
        auto* reporter = ksys::PlayReportMgr::instance()->getReporter();
        if (reporter && reporter->isEnabled())
            reporter->saveReport(&report);
    }
}

void reportQuestStep(const ksys::qst::Quest* quest, int step_index) {
    if (quest && step_index >= 0 && step_index < quest->mSteps.size()) {
        const sead::SafeString& name = quest->mName;
        const sead::SafeString step_name = quest->mSteps[step_index]->name;

        ksys::ProductReporter::getSomeBool();

        const unsigned int quest_id = getQuestId(name);

        PlayReport report(sead::SafeString("challenge"), 7,
                          ksys::PlayReportMgr::instance()->getReporter()->getHeap());

        report.addMapType();
        report.add(sead::SafeString("Id"), quest_id);
        report.add(sead::SafeString("Name"), name);
        report.add(sead::SafeString("Step"), step_index);
        report.add(sead::SafeString("StepName"), step_name);
        report.addPlayTimes();

        if (ksys::PlayReportMgr::instance()) {
            auto* reporter = ksys::PlayReportMgr::instance()->getReporter();
            if (reporter && reporter->isEnabled())
                reporter->saveReport(&report);
        }
    }
}
PlayReport::PlayReport(const sead::FixedSafeString<32>& event_id, s32 num_entries, sead::Heap* heap)
    : ksys::PlayReport(event_id, num_entries, heap) {}

void PlayReport::addMapType() {
    if (!ksys::gdt::Manager::instance())
        return;

    add(sead::SafeString("IsHardMode"), ksys::gdt::getFlag_AoC_HardMode_Enabled());

    const sead::SafeString& current_map = ksys::StageInfo::getCurrentMapType();
    u32 type = 0;

    if (current_map == "MainField")
        type = 1;

    if (current_map == "AocField")
        type = 2;

    if (current_map == "CDungeon")
        type = 3;

    if (current_map == "MainFieldDungeon")
        type = 4;

    add(sead::SafeString("MapType"), type);
}

}  // namespace uking