diff --git a/data/uking_functions.csv b/data/uking_functions.csv index c6f20a31..49d4f948 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -1510,7 +1510,7 @@ 0x00000071000547d0,_ZN5uking6action18CurseRRematchCountD1Ev,20,_ZN5uking6action18CurseRRematchCountD1Ev 0x00000071000547e4,_ZN5uking6action18CurseRRematchCountD0Ev,52,_ZN5uking6action18CurseRRematchCountD0Ev 0x0000007100054818,_ZN5uking6action18CurseRRematchCount5init_EPN4sead4HeapE,8,_ZN5uking6action18CurseRRematchCount5init_EPN4sead4HeapE -0x0000007100054820,_ZN5uking6action18CurseRRematchCount8oneShot_Ev,208, +0x0000007100054820,_ZN5uking6action18CurseRRematchCount8oneShot_Ev,208,_ZN5uking6action18CurseRRematchCount8oneShot_Ev 0x00000071000548f0,_ZN5uking6action18CurseRRematchCount11loadParams_Ev,220,_ZN5uking6action18CurseRRematchCount11loadParams_Ev 0x00000071000549cc,_ZNK5uking6action18CurseRRematchCount27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE,288,_ZNK5uking6action18CurseRRematchCount27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE 0x0000007100054aec,_ZNK5uking6action18CurseRRematchCount18getRuntimeTypeInfoEv,92,_ZNK5uking6action18CurseRRematchCount18getRuntimeTypeInfoEv @@ -40628,7 +40628,7 @@ 0x000000710068851c,AI_Query_CheckCurseRRetryEverOnce::ctor,52,_ZN5uking5query24CheckCurseRRetryEverOnceC1ERKN4ksys3act2ai5Query7InitArgE 0x0000007100688550,AI_Query_CheckCurseRRetryEverOnce::dtor,20,_ZN5uking5query24CheckCurseRRetryEverOnceD1Ev 0x0000007100688564,AI_Query_CheckCurseRRetryEverOnce::dtorDelete,52,_ZN5uking5query24CheckCurseRRetryEverOnceD0Ev -0x0000007100688598,AI_Query_CheckCurseRRetryEverOnce::doQuery,76, +0x0000007100688598,AI_Query_CheckCurseRRetryEverOnce::doQuery,76,_ZN5uking5query24CheckCurseRRetryEverOnce7doQueryEv 0x00000071006885e4,AI_Query_CheckCurseRRetryEverOnce::m10,64,_ZN5uking5query24CheckCurseRRetryEverOnce10loadParamsERKN4evfl8QueryArgE 0x0000007100688624,AI_Query_CheckCurseRRetryEverOnce::loadParams,64,_ZN5uking5query24CheckCurseRRetryEverOnce10loadParamsEv 0x0000007100688664,AI_Query_CheckCurseRRetryEverOnce::rtti1,204,_ZNK5uking5query24CheckCurseRRetryEverOnce27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE diff --git a/src/Game/AI/Action/actionCurseRRematchCount.cpp b/src/Game/AI/Action/actionCurseRRematchCount.cpp index eb326234..5194ef82 100644 --- a/src/Game/AI/Action/actionCurseRRematchCount.cpp +++ b/src/Game/AI/Action/actionCurseRRematchCount.cpp @@ -1,4 +1,6 @@ #include "Game/AI/Action/actionCurseRRematchCount.h" +#include "Game/DLC/aocChampionBalladManager.h" +#include "KingSystem/GameData/gdtManager.h" namespace uking::action { @@ -16,4 +18,32 @@ void CurseRRematchCount::loadParams_() { getDynamicParam(&mGameDataStringCounterName_d, "GameDataStringCounterName"); } +bool CurseRRematchCount::oneShot_() { + auto* manager = ChampionBalladManager::instance(); + if (!manager) + return false; + + auto blight = BlightType(*mCurseRType_d); + if (blight > BlightType::Water) + return false; + + if (*mRematchCount_d == 0) + manager->incrementBlightRematchCount(blight); + else if (*mRematchCount_d == 1) + manager->setBlightRematchCount(0, blight); + else + return false; + + if (mGameDataStringCounterName_d.isEmpty()) + return true; + + auto* game_data_manager = ksys::gdt::Manager::instance(); + if (game_data_manager) { + s8 rematchCount = manager->getBlightRematchCount(blight); + game_data_manager->setS32(rematchCount, mGameDataStringCounterName_d); + return true; + } + return false; +} + } // namespace uking::action diff --git a/src/Game/AI/Action/actionCurseRRematchCount.h b/src/Game/AI/Action/actionCurseRRematchCount.h index bb4aac86..edb7cdac 100644 --- a/src/Game/AI/Action/actionCurseRRematchCount.h +++ b/src/Game/AI/Action/actionCurseRRematchCount.h @@ -14,6 +14,8 @@ public: void loadParams_() override; protected: + bool oneShot_() override; + // dynamic_param at offset 0x20 int* mRematchCount_d{}; // dynamic_param at offset 0x28 diff --git a/src/Game/AI/Query/queryCheckCurseRRetryEverOnce.cpp b/src/Game/AI/Query/queryCheckCurseRRetryEverOnce.cpp index b1924e07..9dfa77a0 100644 --- a/src/Game/AI/Query/queryCheckCurseRRetryEverOnce.cpp +++ b/src/Game/AI/Query/queryCheckCurseRRetryEverOnce.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryCheckCurseRRetryEverOnce.h" #include +#include "Game/DLC/aocChampionBalladManager.h" namespace uking::query { @@ -8,9 +9,15 @@ CheckCurseRRetryEverOnce::CheckCurseRRetryEverOnce(const InitArg& arg) CheckCurseRRetryEverOnce::~CheckCurseRRetryEverOnce() = default; -// FIXME: implement int CheckCurseRRetryEverOnce::doQuery() { - return -1; + auto* manager = ChampionBalladManager::instance(); + if (!manager) + return 0; + + auto blight = BlightType(*mCurseRType); + if (blight <= BlightType::Water) + return manager->getBlightRematchCount(blight) > 0; + return 0; } void CheckCurseRRetryEverOnce::loadParams(const evfl::QueryArg& arg) {