diff --git a/data/status_query.yml b/data/status_query.yml index 8ed1ce8a..6268ac7b 100644 --- a/data/status_query.yml +++ b/data/status_query.yml @@ -81,7 +81,7 @@ query::CheckGameDataFloat: query::CheckGameDataInt: status: done query::CheckGetDemoTypeFromArg: - status: pending + status: done query::CheckGiveReward: status: pending query::CheckHasManifactureArmor: diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 6de2f102..af66c012 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -40819,7 +40819,7 @@ 0x000000710068debc,AI_Query_CheckGetDemoTypeFromArg::ctor,76,_ZN5uking5query23CheckGetDemoTypeFromArgC1ERKN4ksys3act2ai5Query7InitArgE 0x000000710068df08,AI_Query_CheckGetDemoTypeFromArg::dtor,20,_ZN5uking5query23CheckGetDemoTypeFromArgD1Ev 0x000000710068df1c,AI_Query_CheckGetDemoTypeFromArg::dtorDelete,52,_ZN5uking5query23CheckGetDemoTypeFromArgD0Ev -0x000000710068df50,determine_get_item_sound_maybe,280, +0x000000710068df50,determine_get_item_sound_maybe,280,_ZN5uking5query23CheckGetDemoTypeFromArg7doQueryEv 0x000000710068e068,AI_Query_CheckGetDemoTypeFromArg::m10,112,_ZN5uking5query23CheckGetDemoTypeFromArg10loadParamsERKN4evfl8QueryArgE 0x000000710068e0d8,AI_Query_CheckGetDemoTypeFromArg::loadParams,100,_ZN5uking5query23CheckGetDemoTypeFromArg10loadParamsEv 0x000000710068e13c,AI_Query_CheckGetDemoTypeFromArg::rtti1,204,_ZNK5uking5query23CheckGetDemoTypeFromArg27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE diff --git a/src/Game/AI/Query/queryCheckGetDemoTypeFromArg.cpp b/src/Game/AI/Query/queryCheckGetDemoTypeFromArg.cpp index ad81da26..ca273197 100644 --- a/src/Game/AI/Query/queryCheckGetDemoTypeFromArg.cpp +++ b/src/Game/AI/Query/queryCheckGetDemoTypeFromArg.cpp @@ -1,15 +1,50 @@ #include "Game/AI/Query/queryCheckGetDemoTypeFromArg.h" #include +#include "Game/UI/uiPauseMenuDataMgr.h" +#include "KingSystem/ActorSystem/actActorUtil.h" +#include "KingSystem/ActorSystem/actTag.h" namespace uking::query { +namespace { +enum CheckGetDemoTypeFromArgResult { + Result_Default = 0, + Result_Deluxe = 1, + Result_HighGrade = 2, +}; +} + CheckGetDemoTypeFromArg::CheckGetDemoTypeFromArg(const InitArg& arg) : ksys::act::ai::Query(arg) {} CheckGetDemoTypeFromArg::~CheckGetDemoTypeFromArg() = default; -// FIXME: implement int CheckGetDemoTypeFromArg::doQuery() { - return -1; + if (*mUseLastTryGetItemName && ui::PauseMenuDataMgr::instance()) { + auto* item = ui::PauseMenuDataMgr::instance()->getLastAddedItem(); + if (item->get25()) { + if (ksys::act::hasTag(item->getName(), ksys::act::tags::ApplyHighGradeGetDemo)) + return Result_HighGrade; + if (ksys::act::hasTag(item->getName(), ksys::act::tags::ApplyDeluxeGetDemo)) + return Result_Deluxe; + return Result_Default; + } + } + + if (mCheckTargetActorName.isEmpty()) { + if (auto* actor = mActor) { + if (ksys::act::hasTag(actor, ksys::act::tags::ApplyHighGradeGetDemo)) + return Result_HighGrade; + if (ksys::act::hasTag(actor, ksys::act::tags::ApplyDeluxeGetDemo)) + return Result_Deluxe; + } + } else { + if (ksys::act::hasTag(mCheckTargetActorName, ksys::act::tags::ApplyHighGradeGetDemo)) + return Result_HighGrade; + if (ksys::act::hasTag(mCheckTargetActorName, ksys::act::tags::ApplyDeluxeGetDemo)) + return Result_Deluxe; + } + + return Result_Default; } void CheckGetDemoTypeFromArg::loadParams(const evfl::QueryArg& arg) {