mirror of https://github.com/zeldaret/botw.git
Add uking::PlayReport (#112)
This commit is contained in:
parent
19f115dcae
commit
50469a43fc
|
@ -61178,17 +61178,17 @@ Address,Quality,Size,Name
|
|||
0x0000007100a86950,U,000016,
|
||||
0x0000007100a86960,U,000480,
|
||||
0x0000007100a86b40,U,000288,trackerLoadFileStuff
|
||||
0x0000007100a86c60,U,000616,playReportKorok
|
||||
0x0000007100a86ec8,U,000360,PlayReport::Report::ctor
|
||||
0x0000007100a87030,U,001116,PlayReport::Report::addMapType
|
||||
0x0000007100a8748c,U,000908,playReportDungeon
|
||||
0x0000007100a87818,U,001256,playReportQuestEvent
|
||||
0x0000007100a86c60,O,000616,_ZN5uking11reportKorokERKN4sead7Vector3IfEE
|
||||
0x0000007100a86ec8,O,000360,_ZN5uking10PlayReportC1ERKN4sead15FixedSafeStringILi32EEEiPNS1_4HeapE
|
||||
0x0000007100a87030,O,001116,_ZN5uking10PlayReport10addMapTypeEv
|
||||
0x0000007100a8748c,O,000908,_ZN5uking13reportDungeonERKN4sead14SafeStringBaseIcEES4_
|
||||
0x0000007100a87818,U,001256,uking::reportQuestEvent
|
||||
0x0000007100a87d00,U,002908,getQuestId
|
||||
0x0000007100a8885c,U,000528,reportGanonQuestFinished
|
||||
0x0000007100a88a6c,U,001740,playReportGameOver
|
||||
0x0000007100a89138,U,001384,playReportBloodMoon
|
||||
0x0000007100a896a0,U,000852,playReportGetItem
|
||||
0x0000007100a899f4,U,008496,playReportOptionsFromTitleStage
|
||||
0x0000007100a8885c,U,000528,uking::reportGanonQuestFinished
|
||||
0x0000007100a88a6c,U,001740,uking::reportGameOver
|
||||
0x0000007100a89138,U,001384,uking::reportBloodMoon
|
||||
0x0000007100a896a0,U,000852,uking::reportGetItem
|
||||
0x0000007100a899f4,U,008496,uking::reportOptionsFromTitleStage
|
||||
0x0000007100a8bb24,U,000176,PosTrackerUploader::dtor
|
||||
0x0000007100a8bbd4,U,000184,PosTrackerUploader::dtorDelete
|
||||
0x0000007100a8bc8c,U,000220,PosTrackerUploader::createInstance
|
||||
|
@ -84470,10 +84470,10 @@ Address,Quality,Size,Name
|
|||
0x0000007100fd1184,U,000236,
|
||||
0x0000007100fd1270,U,000032,
|
||||
0x0000007100fd1290,O,000432,_ZN4ksys10PlayReport10setEventIdERN4sead22BufferedSafeStringBaseIcEE
|
||||
0x0000007100fd1440,O,000100,_ZN4ksys10PlayReport3addERKN4sead14SafeStringBaseIcEEj
|
||||
0x0000007100fd14a4,O,000100,_ZN4ksys10PlayReport3addERKN4sead14SafeStringBaseIcEEi
|
||||
0x0000007100fd1508,O,000100,_ZN4ksys10PlayReport3addERKN4sead14SafeStringBaseIcEEf
|
||||
0x0000007100fd156c,O,000120,_ZN4ksys10PlayReport3addERKN4sead14SafeStringBaseIcEES5_
|
||||
0x0000007100fd1440,O,000100,_ZN4ksys10PlayReport3addERKN4sead15FixedSafeStringILi48EEEj
|
||||
0x0000007100fd14a4,O,000100,_ZN4ksys10PlayReport3addERKN4sead15FixedSafeStringILi48EEEi
|
||||
0x0000007100fd1508,O,000100,_ZN4ksys10PlayReport3addERKN4sead15FixedSafeStringILi48EEEf
|
||||
0x0000007100fd156c,O,000120,_ZN4ksys10PlayReport3addERKN4sead15FixedSafeStringILi48EEERKNS1_14SafeStringBaseIcEE
|
||||
0x0000007100fd15e4,O,000140,_ZN4ksys10PlayReport4saveEv
|
||||
0x0000007100fd1670,O,000164,_ZN4ksys10PlayReport4initEiPN4sead4HeapE
|
||||
0x0000007100fd1714,O,000084,_ZN4ksys10PlayReportD1Ev
|
||||
|
@ -84499,10 +84499,10 @@ Address,Quality,Size,Name
|
|||
0x0000007100fd1e80,O,000280,_ZN4ksys15ProductReporter12updateTimersEv
|
||||
0x0000007100fd1f98,O,001672,_ZN4ksys15ProductReporter28incrementSceneAndRomWorkTimeEv
|
||||
0x0000007100fd2620,U,000076,
|
||||
0x0000007100fd266c,U,000620,playReportEmergencyHeapUse
|
||||
0x0000007100fd28d8,U,001436,PlayReport::Report::addRomVersions
|
||||
0x0000007100fd2e74,U,000688,PlayReport::Report::addPlayTimes
|
||||
0x0000007100fd3124,U,000476,PlayReport::Report::addPosition
|
||||
0x0000007100fd266c,U,000620,ksys::reportEmergencyHeapUse
|
||||
0x0000007100fd28d8,U,001436,ksys::PlayReport::addRomVersions
|
||||
0x0000007100fd2e74,O,000688,_ZN4ksys10PlayReport12addPlayTimesEv
|
||||
0x0000007100fd3124,O,000476,_ZN4ksys10PlayReport11addPositionERKN4sead7Vector2IfEE
|
||||
0x0000007100fd3300,O,000028,_ZNK4ksys15ProductReporter10saveReportEPNS_10PlayReportE
|
||||
0x0000007100fd331c,O,000112,_ZN4ksys15ProductReporter21initGameDataIteratorsEv
|
||||
0x0000007100fd338c,O,000428,_ZN4ksys13PlayReportKey5text_Ei
|
||||
|
@ -84517,15 +84517,15 @@ Address,Quality,Size,Name
|
|||
0x0000007100fd38b8,O,000040,_ZN4ksys13PlayReportMgrD1Ev
|
||||
0x0000007100fd38e0,O,000068,_ZN4ksys13PlayReportMgrD0Ev
|
||||
0x0000007100fd3924,U,000264,PlayReportMgr::init
|
||||
0x0000007100fd3a2c,U,000024,PlayReportMgr::calc
|
||||
0x0000007100fd3a44,U,000008,PlayReportMgr::__auto0
|
||||
0x0000007100fd3a2c,O,000024,_ZN4ksys13PlayReportMgr4calcEv
|
||||
0x0000007100fd3a44,O,000008,_ZNK4ksys13PlayReportMgr5auto0Ev
|
||||
0x0000007100fd3a4c,U,000004,nullsub_6149
|
||||
0x0000007100fd3a50,U,000004,
|
||||
0x0000007100fd3a54,U,000004,PlayReportMgr::reportDebug
|
||||
0x0000007100fd3a58,U,000024,PlayReportMgr::__auto2
|
||||
0x0000007100fd3a70,U,000028,PlayReportMgr::__auto1
|
||||
0x0000007100fd3a8c,U,000028,PlayReportMgr::__auto3
|
||||
0x0000007100fd3aa8,U,000028,PlayReportMgr::x
|
||||
0x0000007100fd3a54,O,000004,_ZN4ksys13PlayReportMgr11reportDebugERKN4sead14SafeStringBaseIcEES5_
|
||||
0x0000007100fd3a58,O,000024,_ZNK4ksys13PlayReportMgr22getPlayerTrackReporterEv
|
||||
0x0000007100fd3a70,O,000028,_ZN4ksys13PlayReportMgr24setPlayerTrackReporter28Ev
|
||||
0x0000007100fd3a8c,O,000028,_ZN4ksys13PlayReportMgr24setPlayerTrackReporter29Ev
|
||||
0x0000007100fd3aa8,O,000028,_ZN4ksys13PlayReportMgr24setPlayerTrackReporter30Ev
|
||||
0x0000007100fd3ac4,U,000004,ProductReporter::jInitGameDataIterators
|
||||
0x0000007100fd3ac8,O,000124,_ZN4ksys15ProductReporterD1Ev
|
||||
0x0000007100fd3b44,O,000132,_ZN4ksys15ProductReporterD0Ev
|
||||
|
|
Can't render this file because it is too large.
|
|
@ -7,6 +7,8 @@ add_subdirectory(UI)
|
|||
target_sources(uking PRIVATE
|
||||
gameItemUtils.cpp
|
||||
gameItemUtils.h
|
||||
gamePlayReport.cpp
|
||||
gamePlayReport.h
|
||||
gameScene.cpp
|
||||
gameScene.h
|
||||
gameStageInfo.cpp
|
||||
|
|
|
@ -0,0 +1,82 @@
|
|||
#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/System/ProductReporter.h"
|
||||
#include "KingSystem/System/StageInfo.h"
|
||||
|
||||
namespace uking {
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
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
|
|
@ -0,0 +1,20 @@
|
|||
#pragma once
|
||||
|
||||
#include <math/seadVectorFwd.h>
|
||||
#include "KingSystem/System/PlayReportMgr.h"
|
||||
|
||||
namespace uking {
|
||||
|
||||
void reportKorok(const sead::Vector3f& position);
|
||||
void reportDungeon(const sead::SafeString& name, const sead::SafeString& event);
|
||||
|
||||
// TODO: More functions
|
||||
|
||||
class PlayReport : public ksys::PlayReport {
|
||||
public:
|
||||
PlayReport(const sead::FixedSafeString<32>& event_id, s32 num_entries, sead::Heap* heap);
|
||||
|
||||
void addMapType();
|
||||
};
|
||||
|
||||
} // namespace uking
|
|
@ -13,6 +13,40 @@ PlayReportMgr::~PlayReportMgr() {
|
|||
delete mReporter;
|
||||
}
|
||||
|
||||
void PlayReportMgr::calc() {
|
||||
if (!_30 && mReporter)
|
||||
mReporter->updateTimers();
|
||||
}
|
||||
|
||||
void PlayReportMgr::reportDebug(const sead::SafeString& message, const sead::SafeString& data) {
|
||||
// Stubbed in release builds
|
||||
}
|
||||
|
||||
bool PlayReportMgr::auto0() const {
|
||||
return true;
|
||||
}
|
||||
|
||||
PlayerTrackReporter* PlayReportMgr::getPlayerTrackReporter() const {
|
||||
if (!mReporter)
|
||||
return nullptr;
|
||||
return mReporter->getPlayerTrackReporter();
|
||||
}
|
||||
|
||||
void PlayReportMgr::setPlayerTrackReporter28() {
|
||||
if (auto* reporter = getPlayerTrackReporter())
|
||||
reporter->_28 = true;
|
||||
}
|
||||
|
||||
void PlayReportMgr::setPlayerTrackReporter29() {
|
||||
if (auto* reporter = getPlayerTrackReporter())
|
||||
reporter->_29 = true;
|
||||
}
|
||||
|
||||
void PlayReportMgr::setPlayerTrackReporter30() {
|
||||
if (auto* reporter = getPlayerTrackReporter())
|
||||
reporter->_30 = true;
|
||||
}
|
||||
|
||||
bool PlayReport::setEventId(sead::BufferedSafeString& event_id) {
|
||||
if (!mHasNinPrepoReport)
|
||||
return false;
|
||||
|
@ -21,22 +55,48 @@ bool PlayReport::setEventId(sead::BufferedSafeString& event_id) {
|
|||
return mNinPlayReport->SetEventId(event_id.cstr()).IsSuccess();
|
||||
}
|
||||
|
||||
bool PlayReport::add(const sead::SafeString& key, u32 value) {
|
||||
[[gnu::noinline]] bool PlayReport::add(const sead::FixedSafeString<48>& key, u32 value) {
|
||||
return mHasNinPrepoReport && mNinPlayReport->Add(key.cstr(), s64(value)).IsSuccess();
|
||||
}
|
||||
|
||||
bool PlayReport::add(const sead::SafeString& key, s32 value) {
|
||||
[[gnu::noinline]] bool PlayReport::add(const sead::FixedSafeString<48>& key, s32 value) {
|
||||
return mHasNinPrepoReport && mNinPlayReport->Add(key.cstr(), s64(value)).IsSuccess();
|
||||
}
|
||||
|
||||
bool PlayReport::add(const sead::SafeString& key, f32 value) {
|
||||
[[gnu::noinline]] bool PlayReport::add(const sead::FixedSafeString<48>& key, f32 value) {
|
||||
return mHasNinPrepoReport && mNinPlayReport->Add(key.cstr(), value).IsSuccess();
|
||||
}
|
||||
|
||||
bool PlayReport::add(const sead::SafeString& key, const sead::SafeString& value) {
|
||||
[[gnu::noinline]] bool PlayReport::add(const sead::FixedSafeString<48>& key,
|
||||
const sead::SafeString& value) {
|
||||
return mHasNinPrepoReport && mNinPlayReport->Add(key.cstr(), value.cstr()).IsSuccess();
|
||||
}
|
||||
|
||||
void PlayReport::addPlayTimes() {
|
||||
if (!gdt::Manager::instance())
|
||||
return;
|
||||
|
||||
if (!PlayReportMgr::instance())
|
||||
return;
|
||||
|
||||
if (!PlayReportMgr::instance()->getReporter())
|
||||
return;
|
||||
|
||||
s32 playTime =
|
||||
PlayReportMgr::instance()->getReporter()->getS32(PlayReportKey::PlayReport_PlayTime);
|
||||
|
||||
s32 allPlayTime =
|
||||
PlayReportMgr::instance()->getReporter()->getS32(PlayReportKey::PlayReport_AllPlayTime);
|
||||
|
||||
add(sead::SafeString("PlayTime"), u32(playTime));
|
||||
add(sead::SafeString("AllPlayTime"), u32(allPlayTime));
|
||||
}
|
||||
|
||||
void PlayReport::addPosition(const sead::Vector2f& position) {
|
||||
add(sead::SafeString("PosX"), position.x);
|
||||
add(sead::SafeString("PosZ"), position.y);
|
||||
}
|
||||
|
||||
bool PlayReport::save() {
|
||||
if (!mHasNinPrepoReport)
|
||||
return false;
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#include <container/seadBuffer.h>
|
||||
#include <heap/seadDisposer.h>
|
||||
#include <prim/seadSafeString.h>
|
||||
#include "KingSystem/System/ProductReporter.h"
|
||||
#include "KingSystem/Utils/Types.h"
|
||||
|
||||
namespace nn::prepo {
|
||||
|
@ -29,6 +30,13 @@ public:
|
|||
|
||||
void reportDebug(const sead::SafeString& message, const sead::SafeString& data);
|
||||
|
||||
bool auto0() const;
|
||||
PlayerTrackReporter* getPlayerTrackReporter() const;
|
||||
|
||||
void setPlayerTrackReporter28();
|
||||
void setPlayerTrackReporter29();
|
||||
void setPlayerTrackReporter30();
|
||||
|
||||
ProductReporter* getReporter() const { return mReporter; }
|
||||
|
||||
bool get30() const { return _30; }
|
||||
|
@ -43,20 +51,28 @@ KSYS_CHECK_SIZE_NX150(PlayReportMgr, 0x40);
|
|||
|
||||
class PlayReport {
|
||||
public:
|
||||
PlayReport(const sead::SafeString& event_id, s32 num_entries, sead::Heap* heap) {
|
||||
inline PlayReport(const sead::FixedSafeString<32>& event_id, s32 num_entries,
|
||||
sead::Heap* heap) {
|
||||
init(num_entries, heap);
|
||||
sead::FixedSafeString<32> event_id_;
|
||||
event_id_.cutOffCopy(event_id);
|
||||
sead::FixedSafeString<32> event_id_ = event_id;
|
||||
setEventId(event_id_);
|
||||
}
|
||||
|
||||
~PlayReport();
|
||||
|
||||
bool setEventId(sead::BufferedSafeString& event_id);
|
||||
bool add(const sead::SafeString& key, u32 value);
|
||||
bool add(const sead::SafeString& key, s32 value);
|
||||
bool add(const sead::SafeString& key, f32 value);
|
||||
bool add(const sead::SafeString& key, const sead::SafeString& value);
|
||||
|
||||
bool add(const sead::FixedSafeString<48>& key, u32 value);
|
||||
bool add(const sead::FixedSafeString<48>& key, s32 value);
|
||||
bool add(const sead::FixedSafeString<48>& key, f32 value);
|
||||
bool add(const sead::FixedSafeString<48>& key, const sead::SafeString& value);
|
||||
|
||||
// TODO: requires LayoutResourceMgr
|
||||
void addRomVersions();
|
||||
|
||||
void addPlayTimes();
|
||||
void addPosition(const sead::Vector2f& position);
|
||||
|
||||
bool save();
|
||||
|
||||
private:
|
||||
|
|
|
@ -29,8 +29,11 @@ public:
|
|||
void init(sead::Heap* heap);
|
||||
void setPosTrackEnd();
|
||||
|
||||
private:
|
||||
u8 _0[48];
|
||||
u8 _0[40];
|
||||
bool _28;
|
||||
bool _29;
|
||||
bool _30;
|
||||
u8 _3a[5];
|
||||
};
|
||||
|
||||
class ProductReporter {
|
||||
|
@ -82,6 +85,16 @@ public:
|
|||
u32 mBufferLength;
|
||||
};
|
||||
|
||||
sead::Heap* getHeap() const { return mHeap; }
|
||||
|
||||
PlayerTrackReporter* getPlayerTrackReporter() const { return mPlayerTrackReporter; }
|
||||
|
||||
inline s32 getS32(s32 key) {
|
||||
s32 out = 0;
|
||||
gdt::Manager::instance()->getS32(mGameDataHandles[key], &out);
|
||||
return out;
|
||||
}
|
||||
|
||||
private:
|
||||
u8 _0[8];
|
||||
|
||||
|
|
Loading…
Reference in New Issue