diff --git a/data/status_query.yml b/data/status_query.yml index d39c2cb7..a33b0ab3 100644 --- a/data/status_query.yml +++ b/data/status_query.yml @@ -199,7 +199,7 @@ query::CompareGameDataFloat: query::CompareGameDataInt: status: done query::CompareGameDataTime: - status: pending + status: done query::ComparePlayerFireResistantLevel: status: pending query::ComparePlayerHeart: diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 1a0c3db3..1c3e6792 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -41247,7 +41247,7 @@ 0x0000007100698430,AI_Query_CompareGameDataTime::ctor,92,_ZN5uking5query19CompareGameDataTimeC1ERKN4ksys3act2ai5Query7InitArgE 0x000000710069848c,AI_Query_CompareGameDataTime::dtor,20,_ZN5uking5query19CompareGameDataTimeD1Ev 0x00000071006984a0,AI_Query_CompareGameDataTime::dtorDelete,52,_ZN5uking5query19CompareGameDataTimeD0Ev -0x00000071006984d4,AI_Query_CompareGameDataTime::doQuery,336, +0x00000071006984d4,AI_Query_CompareGameDataTime::doQuery,336,_ZN5uking5query19CompareGameDataTime7doQueryEv 0x0000007100698624,AI_Query_CompareGameDataTime::m10,224,_ZN5uking5query19CompareGameDataTime10loadParamsERKN4evfl8QueryArgE 0x0000007100698704,AI_Query_CompareGameDataTime::loadParams,212,_ZN5uking5query19CompareGameDataTime10loadParamsEv 0x00000071006987d8,AI_Query_CompareGameDataTime::rtti1,204,_ZNK5uking5query19CompareGameDataTime27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE diff --git a/src/Game/AI/Query/queryCompareGameDataTime.cpp b/src/Game/AI/Query/queryCompareGameDataTime.cpp index 257ab9d4..b65d01bb 100644 --- a/src/Game/AI/Query/queryCompareGameDataTime.cpp +++ b/src/Game/AI/Query/queryCompareGameDataTime.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryCompareGameDataTime.h" #include +#include "KingSystem/GameData/gdtManager.h" namespace uking::query { @@ -7,8 +8,40 @@ CompareGameDataTime::CompareGameDataTime(const InitArg& arg) : ksys::act::ai::Qu CompareGameDataTime::~CompareGameDataTime() = default; -// FIXME: implement int CompareGameDataTime::doQuery() { + int min_a{}; + int sec_a{}; + int milli_a{}; + int min_b{}; + int sec_b{}; + int milli_b{}; + + auto* gdt = ksys::gdt::Manager::instance(); + if (!gdt) + return 0; + if (!gdt->getParamBypassPerm().get().getS32(&min_a, mGameDataIntMinA)) + return 0; + if (!gdt->getParamBypassPerm().get().getS32(&sec_a, mGameDataIntSecA)) + return 0; + if (!gdt->getParamBypassPerm().get().getS32(&milli_a, mGameDataIntMilliA)) + return 0; + if (!gdt->getParamBypassPerm().get().getS32(&min_b, mGameDataIntMinB)) + return 0; + if (!gdt->getParamBypassPerm().get().getS32(&sec_b, mGameDataIntSecB)) + return 0; + if (!gdt->getParamBypassPerm().get().getS32(&milli_b, mGameDataIntMilliB)) + return 0; + + const int time_a = (60 * 1000 * min_a) + (1000 * sec_a) + milli_a; + const int time_b = (60 * 1000 * min_b) + (1000 * sec_b) + milli_b; + + if (time_a < time_b) + return 0; + if (time_a == time_b) + return 1; + if (time_a != time_b) + return 2; + SEAD_ASSERT(false); return -1; }