diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 49d4f948..1cd24582 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -74060,10 +74060,10 @@ 0x0000007100d5a49c,AI_QueryBase::getIntDynamic,84,_ZNK4ksys3act2ai5Query15getDynamicParamEPPiRKN4sead14SafeStringBaseIcEE 0x0000007100d5a4f0,sub_7100D5A4F0,80,_ZNK4ksys3act2ai5Query15getDynamicParamEPPfRKN4sead14SafeStringBaseIcEE 0x0000007100d5a540,sub_7100D5A540,80,_ZNK4ksys3act2ai5Query15getDynamicParamEPPbRKN4sead14SafeStringBaseIcEE -0x0000007100d5a590,AI_QueryBase::getArgument_m10,196, -0x0000007100d5a654,sub_7100D5A654,184, -0x0000007100d5a70c,sub_7100D5A70C,184, -0x0000007100d5a7c4,sub_7100D5A7C4,184, +0x0000007100d5a590,AI_QueryBase::getArgument_m10,196,_ZN4ksys3act2ai5Query10loadStringERKN4evfl13ParamAccessorERKN4sead14SafeStringBaseIcEE +0x0000007100d5a654,sub_7100D5A654,184,_ZN4ksys3act2ai5Query7loadIntERKN4evfl13ParamAccessorERKN4sead14SafeStringBaseIcEE +0x0000007100d5a70c,sub_7100D5A70C,184,_ZN4ksys3act2ai5Query9loadFloatERKN4evfl13ParamAccessorERKN4sead14SafeStringBaseIcEE +0x0000007100d5a7c4,sub_7100D5A7C4,184,_ZN4ksys3act2ai5Query8loadBoolERKN4evfl13ParamAccessorERKN4sead14SafeStringBaseIcEE 0x0000007100d5a87c,sub_7100D5A87C,12,_ZNK4ksys3act2ai5Query17getAITreeVariableEPPN4sead14SafeStringBaseIcEERKS5_ 0x0000007100d5a888,sub_7100D5A888,12,_ZNK4ksys3act2ai5Query17getAITreeVariableEPPvRKN4sead14SafeStringBaseIcEE 0x0000007100d5a894,sub_7100D5A894,236, diff --git a/src/KingSystem/ActorSystem/actAiParam.h b/src/KingSystem/ActorSystem/actAiParam.h index 5644b56c..e132ef8b 100644 --- a/src/KingSystem/ActorSystem/actAiParam.h +++ b/src/KingSystem/ActorSystem/actAiParam.h @@ -74,10 +74,12 @@ public: T* getVariable(const sead::SafeString& key, AIDefParamType type, bool a4 = true) const; template - void setVariable(const sead::SafeString& key, AIDefParamType type, const T& val) const { + bool setVariable(const sead::SafeString& key, AIDefParamType type, const T& val) const { T* variable = getVariable(key, type, true); - if (variable) - *variable = val; + if (!variable) + return false; + *variable = val; + return true; } bool load(const Actor& actor, const ParamNameTypePairs& pairs, s32 count, sead::Heap* heap); diff --git a/src/KingSystem/ActorSystem/actAiQuery.cpp b/src/KingSystem/ActorSystem/actAiQuery.cpp index b5467bb2..87b7af6b 100644 --- a/src/KingSystem/ActorSystem/actAiQuery.cpp +++ b/src/KingSystem/ActorSystem/actAiQuery.cpp @@ -1,4 +1,5 @@ #include "KingSystem/ActorSystem/actAiQuery.h" +#include #include "KingSystem/ActorSystem/actActor.h" #include "KingSystem/ActorSystem/actActorParam.h" #include "KingSystem/ActorSystem/actAiClassDef.h" @@ -70,6 +71,38 @@ bool Query::getDynamicParam(bool** value, const sead::SafeString& param) const { return ret != nullptr; } +bool Query::loadString(const evfl::ParamAccessor& accessor, const sead::SafeString& param) { + ore::StringView value; + if (!accessor.FindString(&value, param.cstr())) + return false; + + return mParamPack.setString(value.data(), param); +} + +bool Query::loadInt(const evfl::ParamAccessor& accessor, const sead::SafeString& param) { + int value; + if (!accessor.FindInt(&value, param.cstr())) + return false; + + return mParamPack.setVariable(param, AIDefParamType::Int, value); +} + +bool Query::loadFloat(const evfl::ParamAccessor& accessor, const sead::SafeString& param) { + float value; + if (!accessor.FindFloat(&value, param.cstr())) + return false; + + return mParamPack.setVariable(param, AIDefParamType::Float, value); +} + +bool Query::loadBool(const evfl::ParamAccessor& accessor, const sead::SafeString& param) { + bool value; + if (!accessor.FindBool(&value, param.cstr())) + return false; + + return mParamPack.setVariable(param, AIDefParamType::Bool, value); +} + bool Query::getAITreeVariable(sead::SafeString** value, const sead::SafeString& param) const { return mActor->getRootAi()->getAITreeVariable(value, param); }