summaryrefslogtreecommitdiff
path: root/src/Game/Actor/Query/queryHasSetItem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Game/Actor/Query/queryHasSetItem.cpp')
-rw-r--r--src/Game/Actor/Query/queryHasSetItem.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/Game/Actor/Query/queryHasSetItem.cpp b/src/Game/Actor/Query/queryHasSetItem.cpp
new file mode 100644
index 00000000..d96682e0
--- /dev/null
+++ b/src/Game/Actor/Query/queryHasSetItem.cpp
@@ -0,0 +1,38 @@
+#include "Game/Actor/Query/queryHasSetItem.h"
+#include <evfl/Query.h>
+#include "KingSystem/GameData/gdtManager.h"
+
+namespace uking::query {
+
+HasSetItem::HasSetItem(const InitArg& arg) : ksys::act::ai::Query(arg) {}
+
+HasSetItem::~HasSetItem() = default;
+
+int HasSetItem::doQuery() {
+ auto* gdm = ksys::gdt::Manager::instance();
+ if (gdm != nullptr) {
+ auto flag_type = gdm->getParam().get1().getBuffer()->getFlagType(mItemName);
+ if (flag_type == ksys::gdt::FlagType::Bool) {
+ bool value = false;
+ if (gdm->getParamBypassPerm().get().getBool(&value, mItemName))
+ return value;
+ } else if (flag_type == ksys::gdt::FlagType::S32) {
+ s32 value = 0;
+ if (gdm->getParamBypassPerm().get().getS32(&value, mItemName))
+ return value >= *mCount;
+ }
+ }
+ return 0;
+}
+
+void HasSetItem::loadParams(const evfl::QueryArg& arg) {
+ loadInt(arg.param_accessor, "Count");
+ loadString(arg.param_accessor, "ItemName");
+}
+
+void HasSetItem::loadParams() {
+ getDynamicParam(&mCount, "Count");
+ getDynamicParam(&mItemName, "ItemName");
+}
+
+} // namespace uking::query