botw/src/Game/gamePlayReport.cpp

109 lines
3.5 KiB
C++

#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