Add uking::PlayReport (#112)

This commit is contained in:
Tonycons-dev 2023-01-22 12:17:04 -05:00 committed by GitHub
parent 19f115dcae
commit 50469a43fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 231 additions and 38 deletions

View File

@ -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.

View File

@ -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

View File

@ -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

20
src/Game/gamePlayReport.h Normal file
View File

@ -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

View File

@ -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;

View File

@ -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:

View File

@ -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];