summaryrefslogtreecommitdiff
path: root/src/Game/AI
diff options
context:
space:
mode:
authortheo3 <arisstephenson2@gmail.com>2021-07-01 19:28:09 -0700
committertheo3 <arisstephenson2@gmail.com>2021-07-01 21:05:10 -0700
commit60dd80779a92120c74e7bda9e1ccf2695e2c7c19 (patch)
tree4d76dc03072740a41634893a9062d6a7e4626f68 /src/Game/AI
parent112c1f987d3831df97f46c0f9e4ae977fba59484 (diff)
match some ai::Query
Diffstat (limited to 'src/Game/AI')
-rw-r--r--src/Game/AI/Query/queryCheckHorseCustomizeSelect.cpp11
-rw-r--r--src/Game/AI/Query/queryCheckHorseTakenOut.cpp9
-rw-r--r--src/Game/AI/Query/queryCheckManufactResult.cpp11
-rw-r--r--src/Game/AI/Query/queryCheckPorchInItem.cpp5
-rw-r--r--src/Game/AI/Query/queryCheckProConUse.cpp3
-rw-r--r--src/Game/AI/Query/queryCheckRupee.cpp8
-rw-r--r--src/Game/AI/Query/queryCheckSellResult.cpp13
-rw-r--r--src/Game/AI/Query/queryCheckShopSelectedItemName.cpp6
-rw-r--r--src/Game/AI/Query/queryCheckTimeType.cpp15
-rw-r--r--src/Game/AI/Query/queryCheckWarpMist.cpp4
-rw-r--r--src/Game/AI/Query/queryComparePlayerHeart.cpp8
-rw-r--r--src/Game/AI/Query/queryComparePlayerMaxHeart.cpp9
-rw-r--r--src/Game/AI/Query/queryComparePlayerMaxStamina.cpp12
-rw-r--r--src/Game/AI/Query/queryComparePlayerOriginalHeart.cpp16
-rw-r--r--src/Game/AI/Query/queryCountFlag4.cpp26
-rw-r--r--src/Game/AI/Query/queryEnemyDieCheck.cpp4
-rw-r--r--src/Game/AI/Query/queryEnemyRestLifeRate.cpp12
-rw-r--r--src/Game/AI/Query/queryGeneralChoice2.cpp8
-rw-r--r--src/Game/AI/Query/queryGeneralChoice3.cpp8
-rw-r--r--src/Game/AI/Query/queryGeneralChoice4.cpp7
-rw-r--r--src/Game/AI/Query/queryGeneralChoice8.cpp7
-rw-r--r--src/Game/AI/Query/queryHasArmorAlreadyDyed.cpp8
-rw-r--r--src/Game/AI/Query/queryHasArmorDye.cpp8
-rw-r--r--src/Game/AI/Query/queryHasCookResultInPorch.cpp43
-rw-r--r--src/Game/AI/Query/queryHasCookResultInPorch.h2
-rw-r--r--src/Game/AI/Query/queryHasEnoughPayment.cpp12
-rw-r--r--src/Game/AI/Query/queryHasItemDye.cpp7
-rw-r--r--src/Game/AI/Query/queryHasPorchArrow.cpp7
-rw-r--r--src/Game/AI/Query/queryHasPorchItem.cpp4
-rw-r--r--src/Game/AI/Query/queryHasPorchItemByCategory.cpp69
-rw-r--r--src/Game/AI/Query/queryHasPouchItemByPouchCategory.cpp41
-rw-r--r--src/Game/AI/Query/queryHasSetItem.cpp20
-rw-r--r--src/Game/AI/Query/queryIsAppAlreadyExchanged.cpp3
-rw-r--r--src/Game/AI/Query/queryIsBloodyMoonTrig.cpp4
-rw-r--r--src/Game/AI/Query/queryIsCurrentAocFieldStage.cpp4
-rw-r--r--src/Game/AI/Query/queryIsCurrentCDungeonStage.cpp4
-rw-r--r--src/Game/AI/Query/queryIsCurrentMainFieldDungeonStage.cpp4
-rw-r--r--src/Game/AI/Query/queryIsCurrentMainFieldStage.cpp4
-rw-r--r--src/Game/AI/Query/queryIsItemInStock.cpp12
-rw-r--r--src/Game/AI/Query/queryIsOnInstEventFlag.cpp4
-rw-r--r--src/Game/AI/Query/queryIsSuccessEndLastDemoAction.cpp13
-rw-r--r--src/Game/AI/Query/queryIsTerrorDisappeared.cpp3
-rw-r--r--src/Game/AI/Query/queryWhatDayOfTheWeek.cpp4
-rw-r--r--src/Game/AI/Query/queryWhatDungeonType.cpp4
-rw-r--r--src/Game/AI/Query/queryWhatMoonName.cpp5
45 files changed, 406 insertions, 85 deletions
diff --git a/src/Game/AI/Query/queryCheckHorseCustomizeSelect.cpp b/src/Game/AI/Query/queryCheckHorseCustomizeSelect.cpp
index 6244cffe..37ac8f43 100644
--- a/src/Game/AI/Query/queryCheckHorseCustomizeSelect.cpp
+++ b/src/Game/AI/Query/queryCheckHorseCustomizeSelect.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryCheckHorseCustomizeSelect.h"
#include <evfl/Query.h>
+#include "KingSystem/GameData/gdtCommonFlagsUtils.h"
namespace uking::query {
@@ -8,9 +9,15 @@ CheckHorseCustomizeSelect::CheckHorseCustomizeSelect(const InitArg& arg)
CheckHorseCustomizeSelect::~CheckHorseCustomizeSelect() = default;
-// FIXME: implement
int CheckHorseCustomizeSelect::doQuery() {
- return -1;
+ if (ksys::gdt::getFlag_Shop_IsDecide()) {
+ s32 state = ksys::gdt::getFlag_Shop_CurrentItemState();
+ if (state == 0)
+ return 0;
+ if (state == 0xF)
+ return 1;
+ }
+ return 2;
}
void CheckHorseCustomizeSelect::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryCheckHorseTakenOut.cpp b/src/Game/AI/Query/queryCheckHorseTakenOut.cpp
index fbaa8bed..d1b25b35 100644
--- a/src/Game/AI/Query/queryCheckHorseTakenOut.cpp
+++ b/src/Game/AI/Query/queryCheckHorseTakenOut.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryCheckHorseTakenOut.h"
#include <evfl/Query.h>
+#include "KingSystem/GameData/gdtSpecialFlags.h"
namespace uking::query {
@@ -7,9 +8,13 @@ CheckHorseTakenOut::CheckHorseTakenOut(const InitArg& arg) : ksys::act::ai::Quer
CheckHorseTakenOut::~CheckHorseTakenOut() = default;
-// FIXME: implement
int CheckHorseTakenOut::doQuery() {
- return -1;
+ s32 active = ksys::gdt::getS32ByKey("Horse_ActiveIndex");
+ if (active < 0)
+ return 2;
+
+ s32 selected = ksys::gdt::getS32ByKey("Horse_SelectedIndex");
+ return active == selected;
}
void CheckHorseTakenOut::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryCheckManufactResult.cpp b/src/Game/AI/Query/queryCheckManufactResult.cpp
index 25bdf663..d87c84de 100644
--- a/src/Game/AI/Query/queryCheckManufactResult.cpp
+++ b/src/Game/AI/Query/queryCheckManufactResult.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryCheckManufactResult.h"
#include <evfl/Query.h>
+#include "KingSystem/GameData/gdtCommonFlagsUtils.h"
namespace uking::query {
@@ -7,9 +8,15 @@ CheckManufactResult::CheckManufactResult(const InitArg& arg) : ksys::act::ai::Qu
CheckManufactResult::~CheckManufactResult() = default;
-// FIXME: implement
+static constexpr s32 sManufactResults[8] = {0, 6, 4, 6, 1, 2, 3, 5};
+
int CheckManufactResult::doQuery() {
- return -1;
+ if (ksys::gdt::getFlag_Shop_IsDecide()) {
+ s32 state = ksys::gdt::getFlag_Shop_CurrentItemState();
+ if (state < 8 && state >= 0)
+ return sManufactResults[state];
+ }
+ return 6;
}
void CheckManufactResult::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryCheckPorchInItem.cpp b/src/Game/AI/Query/queryCheckPorchInItem.cpp
index e848e0bf..585d5b7b 100644
--- a/src/Game/AI/Query/queryCheckPorchInItem.cpp
+++ b/src/Game/AI/Query/queryCheckPorchInItem.cpp
@@ -1,5 +1,7 @@
#include "Game/AI/Query/queryCheckPorchInItem.h"
#include <evfl/Query.h>
+#include "KingSystem/ActorSystem/actActorUtil.h"
+#include "KingSystem/ActorSystem/actTag.h"
namespace uking::query {
@@ -7,9 +9,8 @@ CheckPorchInItem::CheckPorchInItem(const InitArg& arg) : ksys::act::ai::Query(ar
CheckPorchInItem::~CheckPorchInItem() = default;
-// FIXME: implement
int CheckPorchInItem::doQuery() {
- return -1;
+ return ksys::act::hasTag(mPorchItemName, ksys::act::tags::CanGetPouch);
}
void CheckPorchInItem::loadParams(const evfl::QueryArg& arg) {
diff --git a/src/Game/AI/Query/queryCheckProConUse.cpp b/src/Game/AI/Query/queryCheckProConUse.cpp
index 8a0fd1f2..ce740b77 100644
--- a/src/Game/AI/Query/queryCheckProConUse.cpp
+++ b/src/Game/AI/Query/queryCheckProConUse.cpp
@@ -7,9 +7,8 @@ CheckProConUse::CheckProConUse(const InitArg& arg) : ksys::act::ai::Query(arg) {
CheckProConUse::~CheckProConUse() = default;
-// FIXME: implement
int CheckProConUse::doQuery() {
- return -1;
+ return 0;
}
void CheckProConUse::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryCheckRupee.cpp b/src/Game/AI/Query/queryCheckRupee.cpp
index c0ae87b3..59dcb572 100644
--- a/src/Game/AI/Query/queryCheckRupee.cpp
+++ b/src/Game/AI/Query/queryCheckRupee.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryCheckRupee.h"
#include <evfl/Query.h>
+#include "KingSystem/GameData/gdtManager.h"
namespace uking::query {
@@ -7,9 +8,12 @@ CheckRupee::CheckRupee(const InitArg& arg) : ksys::act::ai::Query(arg) {}
CheckRupee::~CheckRupee() = default;
-// FIXME: implement
+// NON_MATCHING
int CheckRupee::doQuery() {
- return -1;
+ s32 value = 0;
+ if (!ksys::gdt::Manager::instance()->getParamBypassPerm().get().getS32(&value, "CurrentRupee"))
+ return 0;
+ return value >= *mValue;
}
void CheckRupee::loadParams(const evfl::QueryArg& arg) {
diff --git a/src/Game/AI/Query/queryCheckSellResult.cpp b/src/Game/AI/Query/queryCheckSellResult.cpp
index db9a2718..b68dd89a 100644
--- a/src/Game/AI/Query/queryCheckSellResult.cpp
+++ b/src/Game/AI/Query/queryCheckSellResult.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryCheckSellResult.h"
#include <evfl/Query.h>
+#include "KingSystem/GameData/gdtCommonFlagsUtils.h"
namespace uking::query {
@@ -7,9 +8,17 @@ CheckSellResult::CheckSellResult(const InitArg& arg) : ksys::act::ai::Query(arg)
CheckSellResult::~CheckSellResult() = default;
-// FIXME: implement
int CheckSellResult::doQuery() {
- return -1;
+ if (ksys::gdt::getFlag_Shop_IsDecide()) {
+ s32 flag = ksys::gdt::getFlag_Shop_CurrentItemState();
+ if (flag == 0)
+ return 0;
+ if (flag == 0xD)
+ return 1;
+ if (flag == 0xE)
+ return 2;
+ }
+ return 3;
}
void CheckSellResult::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryCheckShopSelectedItemName.cpp b/src/Game/AI/Query/queryCheckShopSelectedItemName.cpp
index 85a4d04b..e78a3009 100644
--- a/src/Game/AI/Query/queryCheckShopSelectedItemName.cpp
+++ b/src/Game/AI/Query/queryCheckShopSelectedItemName.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryCheckShopSelectedItemName.h"
#include <evfl/Query.h>
+#include "KingSystem/GameData/gdtSpecialFlags.h"
namespace uking::query {
@@ -8,9 +9,10 @@ CheckShopSelectedItemName::CheckShopSelectedItemName(const InitArg& arg)
CheckShopSelectedItemName::~CheckShopSelectedItemName() = default;
-// FIXME: implement
int CheckShopSelectedItemName::doQuery() {
- return -1;
+ const char* result = &sead::SafeString::cNullChar;
+ ksys::gdt::getStr64ByKey(&result, "Shop_SelectItemName");
+ return mPorchItemName == result;
}
void CheckShopSelectedItemName::loadParams(const evfl::QueryArg& arg) {
diff --git a/src/Game/AI/Query/queryCheckTimeType.cpp b/src/Game/AI/Query/queryCheckTimeType.cpp
index b66d2c06..287059b1 100644
--- a/src/Game/AI/Query/queryCheckTimeType.cpp
+++ b/src/Game/AI/Query/queryCheckTimeType.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryCheckTimeType.h"
#include <evfl/Query.h>
+#include "KingSystem/World/worldManager.h"
namespace uking::query {
@@ -7,9 +8,19 @@ CheckTimeType::CheckTimeType(const InitArg& arg) : ksys::act::ai::Query(arg) {}
CheckTimeType::~CheckTimeType() = default;
-// FIXME: implement
int CheckTimeType::doQuery() {
- return -1;
+ auto* wm = ksys::world::Manager::instance();
+ if (wm == nullptr)
+ return 0;
+
+ auto* tm = wm->getTimeMgr();
+ if (tm == nullptr)
+ return 0;
+
+ u32 division = tm->getTimeDivision();
+ if (division < 8)
+ return division;
+ return 0;
}
void CheckTimeType::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryCheckWarpMist.cpp b/src/Game/AI/Query/queryCheckWarpMist.cpp
index 7f129694..e6533cba 100644
--- a/src/Game/AI/Query/queryCheckWarpMist.cpp
+++ b/src/Game/AI/Query/queryCheckWarpMist.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryCheckWarpMist.h"
#include <evfl/Query.h>
+#include "KingSystem/World/worldManager.h"
namespace uking::query {
@@ -7,9 +8,8 @@ CheckWarpMist::CheckWarpMist(const InitArg& arg) : ksys::act::ai::Query(arg) {}
CheckWarpMist::~CheckWarpMist() = default;
-// FIXME: implement
int CheckWarpMist::doQuery() {
- return -1;
+ return ksys::world::Manager::instance()->getEnvMgr()->getWarpMistIntensity() > 0.0f;
}
void CheckWarpMist::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryComparePlayerHeart.cpp b/src/Game/AI/Query/queryComparePlayerHeart.cpp
index 10b81ba2..b7742ad6 100644
--- a/src/Game/AI/Query/queryComparePlayerHeart.cpp
+++ b/src/Game/AI/Query/queryComparePlayerHeart.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryComparePlayerHeart.h"
#include <evfl/Query.h>
+#include "KingSystem/ActorSystem/actPlayerInfo.h"
namespace uking::query {
@@ -7,9 +8,12 @@ ComparePlayerHeart::ComparePlayerHeart(const InitArg& arg) : ksys::act::ai::Quer
ComparePlayerHeart::~ComparePlayerHeart() = default;
-// FIXME: implement
int ComparePlayerHeart::doQuery() {
- return -1;
+ auto* pi = ksys::act::PlayerInfo::instance();
+ if (pi == nullptr)
+ return 0;
+
+ return pi->getLife() >= *mThreshold;
}
void ComparePlayerHeart::loadParams(const evfl::QueryArg& arg) {
diff --git a/src/Game/AI/Query/queryComparePlayerMaxHeart.cpp b/src/Game/AI/Query/queryComparePlayerMaxHeart.cpp
index 08b49cb7..4482a6f7 100644
--- a/src/Game/AI/Query/queryComparePlayerMaxHeart.cpp
+++ b/src/Game/AI/Query/queryComparePlayerMaxHeart.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryComparePlayerMaxHeart.h"
#include <evfl/Query.h>
+#include "KingSystem/ActorSystem/actPlayerInfo.h"
namespace uking::query {
@@ -7,9 +8,13 @@ ComparePlayerMaxHeart::ComparePlayerMaxHeart(const InitArg& arg) : ksys::act::ai
ComparePlayerMaxHeart::~ComparePlayerMaxHeart() = default;
-// FIXME: implement
int ComparePlayerMaxHeart::doQuery() {
- return -1;
+ auto* pi = ksys::act::PlayerInfo::instance();
+ if (pi == nullptr)
+ return 0;
+
+ s32 full_hearts = pi->getMaxHearts() / 4;
+ return full_hearts >= *mThreshold;
}
void ComparePlayerMaxHeart::loadParams(const evfl::QueryArg& arg) {
diff --git a/src/Game/AI/Query/queryComparePlayerMaxStamina.cpp b/src/Game/AI/Query/queryComparePlayerMaxStamina.cpp
index 44706d71..fa2c8c54 100644
--- a/src/Game/AI/Query/queryComparePlayerMaxStamina.cpp
+++ b/src/Game/AI/Query/queryComparePlayerMaxStamina.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryComparePlayerMaxStamina.h"
#include <evfl/Query.h>
+#include "KingSystem/ActorSystem/actPlayerInfo.h"
namespace uking::query {
@@ -7,9 +8,16 @@ ComparePlayerMaxStamina::ComparePlayerMaxStamina(const InitArg& arg) : ksys::act
ComparePlayerMaxStamina::~ComparePlayerMaxStamina() = default;
-// FIXME: implement
int ComparePlayerMaxStamina::doQuery() {
- return -1;
+ auto* pi = ksys::act::PlayerInfo::instance();
+ if (pi == nullptr)
+ return 0;
+
+ s32 stamina = pi->getMaxStamina();
+ if (stamina % 200 <= 0)
+ return stamina / 200 >= *mThreshold;
+ else
+ return stamina / 200 + 1 >= *mThreshold;
}
void ComparePlayerMaxStamina::loadParams(const evfl::QueryArg& arg) {
diff --git a/src/Game/AI/Query/queryComparePlayerOriginalHeart.cpp b/src/Game/AI/Query/queryComparePlayerOriginalHeart.cpp
index 8c0422dd..a107699a 100644
--- a/src/Game/AI/Query/queryComparePlayerOriginalHeart.cpp
+++ b/src/Game/AI/Query/queryComparePlayerOriginalHeart.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryComparePlayerOriginalHeart.h"
#include <evfl/Query.h>
+#include "KingSystem/ActorSystem/actPlayerInfo.h"
namespace uking::query {
@@ -8,9 +9,20 @@ ComparePlayerOriginalHeart::ComparePlayerOriginalHeart(const InitArg& arg)
ComparePlayerOriginalHeart::~ComparePlayerOriginalHeart() = default;
-// FIXME: implement
int ComparePlayerOriginalHeart::doQuery() {
- return -1;
+ using PlayerInfo = ksys::act::PlayerInfo;
+
+ if (PlayerInfo::instance() == nullptr)
+ return 0;
+
+ s32 life = PlayerInfo::instance()->getLife();
+ s32 hearts = PlayerInfo::instance()->getMaxHearts();
+ s32 compare;
+ if (life <= hearts)
+ compare = life;
+ else
+ compare = hearts;
+ return compare >= *mThreshold;
}
void ComparePlayerOriginalHeart::loadParams(const evfl::QueryArg& arg) {
diff --git a/src/Game/AI/Query/queryCountFlag4.cpp b/src/Game/AI/Query/queryCountFlag4.cpp
index 0b7210b4..e3a163e3 100644
--- a/src/Game/AI/Query/queryCountFlag4.cpp
+++ b/src/Game/AI/Query/queryCountFlag4.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryCountFlag4.h"
#include <evfl/Query.h>
+#include "KingSystem/GameData/gdtManager.h"
namespace uking::query {
@@ -7,9 +8,30 @@ CountFlag4::CountFlag4(const InitArg& arg) : ksys::act::ai::Query(arg) {}
CountFlag4::~CountFlag4() = default;
-// FIXME: implement
int CountFlag4::doQuery() {
- return -1;
+ auto* gdm = ksys::gdt::Manager::instance();
+ if (gdm == nullptr)
+ return 0;
+
+ bool x = false;
+ int result = 0;
+
+ auto isOn = [&](const sead::SafeString& s) {
+ return gdm->getParamBypassPerm().get().getBool(&x, s) && x;
+ };
+
+ if (!mGameDataFlagNo0.isEmpty())
+ result += isOn(mGameDataFlagNo0);
+ if (!mGameDataFlagNo1.isEmpty())
+ result += isOn(mGameDataFlagNo1);
+ if (!mGameDataFlagNo2.isEmpty())
+ result += isOn(mGameDataFlagNo2);
+ if (!mGameDataFlagNo3.isEmpty())
+ result += isOn(mGameDataFlagNo3);
+ if (!mGameDataFlagNo4.isEmpty())
+ result += isOn(mGameDataFlagNo4);
+
+ return result;
}
void CountFlag4::loadParams(const evfl::QueryArg& arg) {
diff --git a/src/Game/AI/Query/queryEnemyDieCheck.cpp b/src/Game/AI/Query/queryEnemyDieCheck.cpp
index 6d52c5e5..16068b31 100644
--- a/src/Game/AI/Query/queryEnemyDieCheck.cpp
+++ b/src/Game/AI/Query/queryEnemyDieCheck.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryEnemyDieCheck.h"
#include <evfl/Query.h>
+#include "KingSystem/ActorSystem/actActor.h"
namespace uking::query {
@@ -7,9 +8,8 @@ EnemyDieCheck::EnemyDieCheck(const InitArg& arg) : ksys::act::ai::Query(arg) {}
EnemyDieCheck::~EnemyDieCheck() = default;
-// FIXME: implement
int EnemyDieCheck::doQuery() {
- return -1;
+ return mActor->getActorFlags2().isOff(ksys::act::Actor::ActorFlag2::Alive);
}
void EnemyDieCheck::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryEnemyRestLifeRate.cpp b/src/Game/AI/Query/queryEnemyRestLifeRate.cpp
index a119fd9a..0d98b36f 100644
--- a/src/Game/AI/Query/queryEnemyRestLifeRate.cpp
+++ b/src/Game/AI/Query/queryEnemyRestLifeRate.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryEnemyRestLifeRate.h"
#include <evfl/Query.h>
+#include "KingSystem/ActorSystem/actActor.h"
namespace uking::query {
@@ -7,9 +8,16 @@ EnemyRestLifeRate::EnemyRestLifeRate(const InitArg& arg) : ksys::act::ai::Query(
EnemyRestLifeRate::~EnemyRestLifeRate() = default;
-// FIXME: implement
int EnemyRestLifeRate::doQuery() {
- return -1;
+ s32* life = mActor->getLife();
+ float value;
+
+ if (life != nullptr)
+ value = *life;
+ else
+ value = 1.0f;
+
+ return mActor->getMaxLife() * *mCheckRate <= value;
}
void EnemyRestLifeRate::loadParams(const evfl::QueryArg& arg) {
diff --git a/src/Game/AI/Query/queryGeneralChoice2.cpp b/src/Game/AI/Query/queryGeneralChoice2.cpp
index 7ff555df..9bb73aaf 100644
--- a/src/Game/AI/Query/queryGeneralChoice2.cpp
+++ b/src/Game/AI/Query/queryGeneralChoice2.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryGeneralChoice2.h"
#include <evfl/Query.h>
+#include "KingSystem/ActorSystem/actActorUtil.h"
namespace uking::query {
@@ -7,9 +8,12 @@ GeneralChoice2::GeneralChoice2(const InitArg& arg) : ksys::act::ai::Query(arg) {
GeneralChoice2::~GeneralChoice2() = default;
-// FIXME: implement
int GeneralChoice2::doQuery() {
- return -1;
+ s32 idx = ksys::act::getSelectedChoiceIdx(2, getName());
+ if (idx < 0)
+ return 0;
+
+ return idx;
}
void GeneralChoice2::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryGeneralChoice3.cpp b/src/Game/AI/Query/queryGeneralChoice3.cpp
index e805e35a..39862387 100644
--- a/src/Game/AI/Query/queryGeneralChoice3.cpp
+++ b/src/Game/AI/Query/queryGeneralChoice3.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryGeneralChoice3.h"
#include <evfl/Query.h>
+#include "KingSystem/ActorSystem/actActorUtil.h"
namespace uking::query {
@@ -7,9 +8,12 @@ GeneralChoice3::GeneralChoice3(const InitArg& arg) : ksys::act::ai::Query(arg) {
GeneralChoice3::~GeneralChoice3() = default;
-// FIXME: implement
int GeneralChoice3::doQuery() {
- return -1;
+ s32 idx = ksys::act::getSelectedChoiceIdx(3, getName());
+ if (idx < 0)
+ return 0;
+
+ return idx;
}
void GeneralChoice3::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryGeneralChoice4.cpp b/src/Game/AI/Query/queryGeneralChoice4.cpp
index 290602f4..cc7b9599 100644
--- a/src/Game/AI/Query/queryGeneralChoice4.cpp
+++ b/src/Game/AI/Query/queryGeneralChoice4.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryGeneralChoice4.h"
#include <evfl/Query.h>
+#include "KingSystem/ActorSystem/actActorUtil.h"
namespace uking::query {
@@ -9,7 +10,11 @@ GeneralChoice4::~GeneralChoice4() = default;
// FIXME: implement
int GeneralChoice4::doQuery() {
- return -1;
+ s32 idx = ksys::act::getSelectedChoiceIdx(4, getName());
+ if (idx < 0)
+ return 0;
+
+ return idx;
}
void GeneralChoice4::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryGeneralChoice8.cpp b/src/Game/AI/Query/queryGeneralChoice8.cpp
index c6345b8f..74a9784a 100644
--- a/src/Game/AI/Query/queryGeneralChoice8.cpp
+++ b/src/Game/AI/Query/queryGeneralChoice8.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryGeneralChoice8.h"
#include <evfl/Query.h>
+#include "KingSystem/ActorSystem/actActorUtil.h"
namespace uking::query {
@@ -9,7 +10,11 @@ GeneralChoice8::~GeneralChoice8() = default;
// FIXME: implement
int GeneralChoice8::doQuery() {
- return -1;
+ s32 idx = ksys::act::getSelectedChoiceIdx(8, getName());
+ if (idx < 0)
+ return 0;
+
+ return idx;
}
void GeneralChoice8::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryHasArmorAlreadyDyed.cpp b/src/Game/AI/Query/queryHasArmorAlreadyDyed.cpp
index 7ad39f2c..b042a651 100644
--- a/src/Game/AI/Query/queryHasArmorAlreadyDyed.cpp
+++ b/src/Game/AI/Query/queryHasArmorAlreadyDyed.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryHasArmorAlreadyDyed.h"
#include <evfl/Query.h>
+#include "Game/UI/uiPauseMenuDataMgr.h"
namespace uking::query {
@@ -7,9 +8,12 @@ HasArmorAlreadyDyed::HasArmorAlreadyDyed(const InitArg& arg) : ksys::act::ai::Qu
HasArmorAlreadyDyed::~HasArmorAlreadyDyed() = default;
-// FIXME: implement
int HasArmorAlreadyDyed::doQuery() {
- return -1;
+ auto* pm = ui::PauseMenuDataMgr::instance();
+ if (pm == nullptr)
+ return 0;
+
+ return pm->countAlreadyDyedArmor() > 0;
}
void HasArmorAlreadyDyed::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryHasArmorDye.cpp b/src/Game/AI/Query/queryHasArmorDye.cpp
index 20c209a4..3910b5ee 100644
--- a/src/Game/AI/Query/queryHasArmorDye.cpp
+++ b/src/Game/AI/Query/queryHasArmorDye.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryHasArmorDye.h"
#include <evfl/Query.h>
+#include "Game/UI/uiPauseMenuDataMgr.h"
namespace uking::query {
@@ -7,9 +8,12 @@ HasArmorDye::HasArmorDye(const InitArg& arg) : ksys::act::ai::Query(arg) {}
HasArmorDye::~HasArmorDye() = default;
-// FIXME: implement
int HasArmorDye::doQuery() {
- return -1;
+ auto* pm = ui::PauseMenuDataMgr::instance();
+ if (pm == nullptr)
+ return 0;
+
+ return pm->countArmorDye() > 0;
}
void HasArmorDye::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryHasCookResultInPorch.cpp b/src/Game/AI/Query/queryHasCookResultInPorch.cpp
index 581803ec..534de0f5 100644
--- a/src/Game/AI/Query/queryHasCookResultInPorch.cpp
+++ b/src/Game/AI/Query/queryHasCookResultInPorch.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryHasCookResultInPorch.h"
#include <evfl/Query.h>
+#include "Game/UI/uiUtils.h"
namespace uking::query {
@@ -7,8 +8,48 @@ HasCookResultInPorch::HasCookResultInPorch(const InitArg& arg) : ksys::act::ai::
HasCookResultInPorch::~HasCookResultInPorch() = default;
-// FIXME: implement
int HasCookResultInPorch::doQuery() {
+ s32 num;
+
+ if (mCookEffectType == "AllOK")
+ num = ui::countCookResultsAllOk(mPorchItemName);
+ else
+ num = ui::countCookResultsCheck(mPorchItemName, getEffect());
+
+ if (num < *mCount)
+ return 0;
+ else if (num == *mCount)
+ return 1;
+ else if (num > *mCount)
+ return 2;
+ return 0;
+}
+
+int HasCookResultInPorch::getEffect() const {
+ if (mCookEffectType == "None")
+ return -1;
+ if (mCookEffectType == "ResistHot")
+ return 4;
+ if (mCookEffectType == "ResistCold")
+ return 5;
+ if (mCookEffectType == "ResistElectric")
+ return 6;
+ if (mCookEffectType == "AttackUp")
+ return 10;
+ if (mCookEffectType == "DefenseUp")
+ return 11;
+ if (mCookEffectType == "Quietness")
+ return 12;
+ if (mCookEffectType == "AllSpeed")
+ return 13;
+ if (mCookEffectType == "Fireproof")
+ return 16;
+ if (mCookEffectType == "GutsRecover")
+ return 14;
+ if (mCookEffectType == "ExGutsMaxUp")
+ return 15;
+ if (mCookEffectType == "LifeMaxUp")
+ return 2;
return -1;
}
diff --git a/src/Game/AI/Query/queryHasCookResultInPorch.h b/src/Game/AI/Query/queryHasCookResultInPorch.h
index 592eeb91..0c3606d1 100644
--- a/src/Game/AI/Query/queryHasCookResultInPorch.h
+++ b/src/Game/AI/Query/queryHasCookResultInPorch.h
@@ -11,6 +11,8 @@ public:
~HasCookResultInPorch() override;
int doQuery() override;
+ int getEffect() const;
+
void loadParams() override;
void loadParams(const evfl::QueryArg& arg) override;
diff --git a/src/Game/AI/Query/queryHasEnoughPayment.cpp b/src/Game/AI/Query/queryHasEnoughPayment.cpp
index 5ef119da..52b86453 100644
--- a/src/Game/AI/Query/queryHasEnoughPayment.cpp
+++ b/src/Game/AI/Query/queryHasEnoughPayment.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryHasEnoughPayment.h"
#include <evfl/Query.h>
+#include "KingSystem/GameData/gdtManager.h"
namespace uking::query {
@@ -7,9 +8,16 @@ HasEnoughPayment::HasEnoughPayment(const InitArg& arg) : ksys::act::ai::Query(ar
HasEnoughPayment::~HasEnoughPayment() = default;
-// FIXME: implement
int HasEnoughPayment::doQuery() {
- return -1;
+ auto* gdm = ksys::gdt::Manager::instance();
+ if (gdm != nullptr) {
+ s32 state = -1;
+ if (!gdm->getParam().get().getS32(&state, "Shop_CurrentItemState"))
+ return 1;
+ if (state == 2 || state == 3)
+ return 0;
+ }
+ return 1;
}
void HasEnoughPayment::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryHasItemDye.cpp b/src/Game/AI/Query/queryHasItemDye.cpp
index cdb5b6f0..f78b0e8b 100644
--- a/src/Game/AI/Query/queryHasItemDye.cpp
+++ b/src/Game/AI/Query/queryHasItemDye.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryHasItemDye.h"
#include <evfl/Query.h>
+#include "Game/UI/uiPauseMenuDataMgr.h"
namespace uking::query {
@@ -7,9 +8,11 @@ HasItemDye::HasItemDye(const InitArg& arg) : ksys::act::ai::Query(arg) {}
HasItemDye::~HasItemDye() = default;
-// FIXME: implement
int HasItemDye::doQuery() {
- return -1;
+ auto* pm = ui::PauseMenuDataMgr::instance();
+ if (pm == nullptr)
+ return 0;
+ return pm->hasItemDye();
}
void HasItemDye::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryHasPorchArrow.cpp b/src/Game/AI/Query/queryHasPorchArrow.cpp
index 3d571d30..b29c2b37 100644
--- a/src/Game/AI/Query/queryHasPorchArrow.cpp
+++ b/src/Game/AI/Query/queryHasPorchArrow.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryHasPorchArrow.h"
#include <evfl/Query.h>
+#include "Game/UI/uiUtils.h"
namespace uking::query {
@@ -7,9 +8,11 @@ HasPorchArrow::HasPorchArrow(const InitArg& arg) : ksys::act::ai::Query(arg) {}
HasPorchArrow::~HasPorchArrow() = default;
-// FIXME: implement
int HasPorchArrow::doQuery() {
- return -1;
+ s32 arrow_cnt = ui::getItemValue("NormalArrow") + ui::getItemValue("FireArrow") +
+ ui::getItemValue("IceArrow") + ui::getItemValue("ElectricArrow") +
+ ui::getItemValue("BombArrow_A") + ui::getItemValue("AncientArrow");
+ return arrow_cnt < *mCheckNum;
}
void HasPorchArrow::loadParams(const evfl::QueryArg& arg) {
diff --git a/src/Game/AI/Query/queryHasPorchItem.cpp b/src/Game/AI/Query/queryHasPorchItem.cpp
index dbfb4b46..1d14acae 100644
--- a/src/Game/AI/Query/queryHasPorchItem.cpp
+++ b/src/Game/AI/Query/queryHasPorchItem.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryHasPorchItem.h"
#include <evfl/Query.h>
+#include "Game/UI/uiUtils.h"
namespace uking::query {
@@ -7,9 +8,8 @@ HasPorchItem::HasPorchItem(const InitArg& arg) : ksys::act::ai::Query(arg) {}
HasPorchItem::~HasPorchItem() = default;
-// FIXME: implement
int HasPorchItem::doQuery() {
- return -1;
+ return ui::getItemValue(mPorchItemName) >= *mCount;
}
void HasPorchItem::loadParams(const evfl::QueryArg& arg) {
diff --git a/src/Game/AI/Query/queryHasPorchItemByCategory.cpp b/src/Game/AI/Query/queryHasPorchItemByCategory.cpp
index e9ac46a9..fea15c52 100644
--- a/src/Game/AI/Query/queryHasPorchItemByCategory.cpp
+++ b/src/Game/AI/Query/queryHasPorchItemByCategory.cpp
@@ -1,5 +1,7 @@
#include "Game/AI/Query/queryHasPorchItemByCategory.h"
#include <evfl/Query.h>
+#include "Game/UI/uiPauseMenuDataMgr.h"
+#include "KingSystem/ActorSystem/actTag.h"
namespace uking::query {
@@ -7,9 +9,72 @@ HasPorchItemByCategory::HasPorchItemByCategory(const InitArg& arg) : ksys::act::
HasPorchItemByCategory::~HasPorchItemByCategory() = default;
-// FIXME: implement
int HasPorchItemByCategory::doQuery() {
- return -1;
+ s32 result = 0;
+ using namespace ksys::act::tags;
+
+ auto* pm = ui::PauseMenuDataMgr::instance();
+ if (pm == nullptr)
+ return 1;
+
+ switch (*mCategory) {
+ case 0:
+ result = pm->countItemsWithProfile("WeaponBow", true);
+ break;
+ case 1:
+ result = pm->countItemsWithProfile("WeaponShield", true);
+ break;
+ case 2:
+ result = pm->countItemsWithProfile("WeaponSpear", true);
+ break;
+ case 3:
+ result = pm->countItemsWithProfile("WeaponSmallSword", true);
+ break;
+ case 4:
+ result = pm->countItemsWithTag(Arrow, false);
+ break;
+ case 16:
+ result = pm->countItemsWithTag(Arrow, true);
+ break;
+ case 5:
+ result = pm->countItemsWithProfile("WeaponLargeSword", true);
+ break;
+ case 6:
+ result = pm->countItemsWithTag(CookMushroom, true);
+ break;
+ case 7:
+ result = pm->countItemsWithTag(RoastItem, true);
+ break;
+ case 8:
+ result = pm->countItemsWithTag(CookFruit, true);
+ break;
+ case 9:
+ result = pm->countItemsWithTag(CookOre, true);
+ break;
+ case 10:
+ result = pm->countItemsWithTag(CookPlant, true);
+ break;
+ case 11:
+ result = pm->countItemsWithTag(EnemyMaterial, true);
+ break;
+ case 12:
+ result = pm->countItemsWithTag(CookMeat, true);
+ break;
+ case 13:
+ result = pm->countItemsWithTag(CookMaterial, true);
+ break;
+ case 14:
+ result = pm->countItemsWithProfile("HorseReins", true);
+ break;
+ case 15:
+ result = pm->countItemsWithProfile("HorseSaddle", true);
+ break;
+ default:
+ result = 0;
+ break;
+ }
+
+ return result < *mCount;
}
void HasPorchItemByCategory::loadParams(const evfl::QueryArg& arg) {
diff --git a/src/Game/AI/Query/queryHasPouchItemByPouchCategory.cpp b/src/Game/AI/Query/queryHasPouchItemByPouchCategory.cpp
index c38664ab..30f4e2bc 100644
--- a/src/Game/AI/Query/queryHasPouchItemByPouchCategory.cpp
+++ b/src/Game/AI/Query/queryHasPouchItemByPouchCategory.cpp
@@ -1,5 +1,7 @@
#include "Game/AI/Query/queryHasPouchItemByPouchCategory.h"
#include <evfl/Query.h>
+#include "Game/UI/uiPauseMenuDataMgr.h"
+#include "KingSystem/ActorSystem/actTag.h"
namespace uking::query {
@@ -8,9 +10,44 @@ HasPouchItemByPouchCategory::HasPouchItemByPouchCategory(const InitArg& arg)
HasPouchItemByPouchCategory::~HasPouchItemByPouchCategory() = default;
-// FIXME: implement
int HasPouchItemByPouchCategory::doQuery() {
- return -1;
+ s32 result = 0;
+ using namespace ksys::act::tags;
+
+ auto* pm = ui::PauseMenuDataMgr::instance();
+ if (pm == nullptr)
+ return 1;
+
+ switch (*mCategory) {
+ case 0:
+ result = pm->countItemsWithCategory(ui::PouchCategory::Sword);
+ break;
+ case 1:
+ result = pm->countItemsWithProfile("WeaponBow", false);
+ break;
+ case 2:
+ result = pm->countItemsWithTag(Arrow, false);
+ break;
+ case 3:
+ result = pm->countItemsWithCategory(ui::PouchCategory::Shield);
+ break;
+ case 4:
+ result = pm->countItemsWithCategory(ui::PouchCategory::Armor);
+ break;
+ case 5:
+ result = pm->countItemsWithCategory(ui::PouchCategory::Material);
+ break;
+ case 6:
+ result = pm->countItemsWithCategory(ui::PouchCategory::Food);
+ break;
+ case 7:
+ result = pm->countItemsWithCategory(ui::PouchCategory::KeyItem);
+ break;
+ default:
+ result = 0;
+ break;
+ }
+ return result < *mCount;
}
void HasPouchItemByPouchCategory::loadParams(const evfl::QueryArg& arg) {
diff --git a/src/Game/AI/Query/queryHasSetItem.cpp b/src/Game/AI/Query/queryHasSetItem.cpp
index aff0ede7..7b8ccd7d 100644
--- a/src/Game/AI/Query/queryHasSetItem.cpp
+++ b/src/Game/AI/Query/queryHasSetItem.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryHasSetItem.h"
#include <evfl/Query.h>
+#include "KingSystem/GameData/gdtManager.h"
namespace uking::query {
@@ -7,9 +8,24 @@ HasSetItem::HasSetItem(const InitArg& arg) : ksys::act::ai::Query(arg) {}
HasSetItem::~HasSetItem() = default;
-// FIXME: implement
+// NON_MATCHING: temp duplication
int HasSetItem::doQuery() {
- return -1;
+ auto* gdm = ksys::gdt::Manager::instance();
+ if (gdm == nullptr)
+ return 0;
+
+ 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) {
diff --git a/src/Game/AI/Query/queryIsAppAlreadyExchanged.cpp b/src/Game/AI/Query/queryIsAppAlreadyExchanged.cpp
index a70d5909..d665a0db 100644
--- a/src/Game/AI/Query/queryIsAppAlreadyExchanged.cpp
+++ b/src/Game/AI/Query/queryIsAppAlreadyExchanged.cpp
@@ -7,9 +7,8 @@ IsAppAlreadyExchanged::IsAppAlreadyExchanged(const InitArg& arg) : ksys::act::ai
IsAppAlreadyExchanged::~IsAppAlreadyExchanged() = default;
-// FIXME: implement
int IsAppAlreadyExchanged::doQuery() {
- return -1;
+ return 1;
}
void IsAppAlreadyExchanged::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryIsBloodyMoonTrig.cpp b/src/Game/AI/Query/queryIsBloodyMoonTrig.cpp
index 81a31bcc..9c65fbed 100644
--- a/src/Game/AI/Query/queryIsBloodyMoonTrig.cpp
+++ b/src/Game/AI/Query/queryIsBloodyMoonTrig.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryIsBloodyMoonTrig.h"
#include <evfl/Query.h>
+#include "KingSystem/World/worldManager.h"
namespace uking::query {
@@ -7,9 +8,8 @@ IsBloodyMoonTrig::IsBloodyMoonTrig(const InitArg& arg) : ksys::act::ai::Query(ar
IsBloodyMoonTrig::~IsBloodyMoonTrig() = default;
-// FIXME: implement
int IsBloodyMoonTrig::doQuery() {
- return -1;
+ return ksys::world::Manager::instance()->getTimeMgr()->wasBloodyDayAndDayPassed();
}
void IsBloodyMoonTrig::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryIsCurrentAocFieldStage.cpp b/src/Game/AI/Query/queryIsCurrentAocFieldStage.cpp
index 58a52f3d..fab8122e 100644
--- a/src/Game/AI/Query/queryIsCurrentAocFieldStage.cpp
+++ b/src/Game/AI/Query/queryIsCurrentAocFieldStage.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryIsCurrentAocFieldStage.h"
#include <evfl/Query.h>
+#include "KingSystem/System/StageInfo.h"
namespace uking::query {
@@ -7,9 +8,8 @@ IsCurrentAocFieldStage::IsCurrentAocFieldStage(const InitArg& arg) : ksys::act::
IsCurrentAocFieldStage::~IsCurrentAocFieldStage() = default;
-// FIXME: implement
int IsCurrentAocFieldStage::doQuery() {
- return -1;
+ return ksys::StageInfo::sIsAocField;
}
void IsCurrentAocFieldStage::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryIsCurrentCDungeonStage.cpp b/src/Game/AI/Query/queryIsCurrentCDungeonStage.cpp
index a2a6c1d9..dc422aa8 100644
--- a/src/Game/AI/Query/queryIsCurrentCDungeonStage.cpp
+++ b/src/Game/AI/Query/queryIsCurrentCDungeonStage.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryIsCurrentCDungeonStage.h"
#include <evfl/Query.h>
+#include "KingSystem/System/StageInfo.h"
namespace uking::query {
@@ -7,9 +8,8 @@ IsCurrentCDungeonStage::IsCurrentCDungeonStage(const InitArg& arg) : ksys::act::
IsCurrentCDungeonStage::~IsCurrentCDungeonStage() = default;
-// FIXME: implement
int IsCurrentCDungeonStage::doQuery() {
- return -1;
+ return ksys::StageInfo::sIsCDungeon;
}
void IsCurrentCDungeonStage::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryIsCurrentMainFieldDungeonStage.cpp b/src/Game/AI/Query/queryIsCurrentMainFieldDungeonStage.cpp
index e3eedd18..08e3bfe1 100644
--- a/src/Game/AI/Query/queryIsCurrentMainFieldDungeonStage.cpp
+++ b/src/Game/AI/Query/queryIsCurrentMainFieldDungeonStage.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryIsCurrentMainFieldDungeonStage.h"
#include <evfl/Query.h>
+#include "KingSystem/System/StageInfo.h"
namespace uking::query {
@@ -8,9 +9,8 @@ IsCurrentMainFieldDungeonStage::IsCurrentMainFieldDungeonStage(const InitArg& ar
IsCurrentMainFieldDungeonStage::~IsCurrentMainFieldDungeonStage() = default;
-// FIXME: implement
int IsCurrentMainFieldDungeonStage::doQuery() {
- return -1;
+ return ksys::StageInfo::sIsMainFieldDungeon;
}
void IsCurrentMainFieldDungeonStage::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryIsCurrentMainFieldStage.cpp b/src/Game/AI/Query/queryIsCurrentMainFieldStage.cpp
index ca4bc4c4..ddd0aa88 100644
--- a/src/Game/AI/Query/queryIsCurrentMainFieldStage.cpp
+++ b/src/Game/AI/Query/queryIsCurrentMainFieldStage.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryIsCurrentMainFieldStage.h"
#include <evfl/Query.h>
+#include "KingSystem/System/StageInfo.h"
namespace uking::query {
@@ -7,9 +8,8 @@ IsCurrentMainFieldStage::IsCurrentMainFieldStage(const InitArg& arg) : ksys::act
IsCurrentMainFieldStage::~IsCurrentMainFieldStage() = default;
-// FIXME: implement
int IsCurrentMainFieldStage::doQuery() {
- return -1;
+ return ksys::StageInfo::getCurrentMapType() == "MainField";
}
void IsCurrentMainFieldStage::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryIsItemInStock.cpp b/src/Game/AI/Query/queryIsItemInStock.cpp
index 9f957af8..f3d40e8e 100644
--- a/src/Game/AI/Query/queryIsItemInStock.cpp
+++ b/src/Game/AI/Query/queryIsItemInStock.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryIsItemInStock.h"
#include <evfl/Query.h>
+#include "KingSystem/GameData/gdtManager.h"
namespace uking::query {
@@ -7,9 +8,16 @@ IsItemInStock::IsItemInStock(const InitArg& arg) : ksys::act::ai::Query(arg) {}
IsItemInStock::~IsItemInStock() = default;
-// FIXME: implement
int IsItemInStock::doQuery() {
- return -1;
+ auto* gdm = ksys::gdt::Manager::instance();
+ if (gdm != nullptr) {
+ s32 state = -1;
+ if (!gdm->getParam().get().getS32(&state, "Shop_CurrentItemState"))
+ return 1;
+ if (state == 1)
+ return 0;
+ }
+ return 1;
}
void IsItemInStock::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryIsOnInstEventFlag.cpp b/src/Game/AI/Query/queryIsOnInstEventFlag.cpp
index e46a17e7..987b69c6 100644
--- a/src/Game/AI/Query/queryIsOnInstEventFlag.cpp
+++ b/src/Game/AI/Query/queryIsOnInstEventFlag.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryIsOnInstEventFlag.h"
#include <evfl/Query.h>
+#include "KingSystem/ActorSystem/actActor.h"
namespace uking::query {
@@ -7,9 +8,8 @@ IsOnInstEventFlag::IsOnInstEventFlag(const InitArg& arg) : ksys::act::ai::Query(
IsOnInstEventFlag::~IsOnInstEventFlag() = default;
-// FIXME: implement
int IsOnInstEventFlag::doQuery() {
- return -1;
+ return mActor->getActorFlags2().isOn(ksys::act::Actor::ActorFlag2::InstEvent);
}
void IsOnInstEventFlag::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryIsSuccessEndLastDemoAction.cpp b/src/Game/AI/Query/queryIsSuccessEndLastDemoAction.cpp
index a34df9e3..37d33fc2 100644
--- a/src/Game/AI/Query/queryIsSuccessEndLastDemoAction.cpp
+++ b/src/Game/AI/Query/queryIsSuccessEndLastDemoAction.cpp
@@ -1,5 +1,7 @@
#include "Game/AI/Query/queryIsSuccessEndLastDemoAction.h"
#include <evfl/Query.h>
+#include "KingSystem/ActorSystem/actActor.h"
+#include "KingSystem/ActorSystem/actAiRoot.h"
namespace uking::query {
@@ -8,9 +10,16 @@ IsSuccessEndLastDemoAction::IsSuccessEndLastDemoAction(const InitArg& arg)
IsSuccessEndLastDemoAction::~IsSuccessEndLastDemoAction() = default;
-// FIXME: implement
int IsSuccessEndLastDemoAction::doQuery() {
- return -1;
+ if (mActor != nullptr && mActor->getRootAi() != nullptr) {
+ auto* action = mActor->getRootAi()->getCurrentAction();
+ if (action == nullptr)
+ return 0;
+
+ if (action->isFinished())
+ return 1;
+ }
+ return 0;
}
void IsSuccessEndLastDemoAction::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryIsTerrorDisappeared.cpp b/src/Game/AI/Query/queryIsTerrorDisappeared.cpp
index 58731f5c..b535891d 100644
--- a/src/Game/AI/Query/queryIsTerrorDisappeared.cpp
+++ b/src/Game/AI/Query/queryIsTerrorDisappeared.cpp
@@ -7,9 +7,8 @@ IsTerrorDisappeared::IsTerrorDisappeared(const InitArg& arg) : ksys::act::ai::Qu
IsTerrorDisappeared::~IsTerrorDisappeared() = default;
-// FIXME: implement
int IsTerrorDisappeared::doQuery() {
- return -1;
+ return 0;
}
void IsTerrorDisappeared::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryWhatDayOfTheWeek.cpp b/src/Game/AI/Query/queryWhatDayOfTheWeek.cpp
index 77da0090..f5c7f78b 100644
--- a/src/Game/AI/Query/queryWhatDayOfTheWeek.cpp
+++ b/src/Game/AI/Query/queryWhatDayOfTheWeek.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryWhatDayOfTheWeek.h"
#include <evfl/Query.h>
+#include "KingSystem/World/worldManager.h"
namespace uking::query {
@@ -7,9 +8,8 @@ WhatDayOfTheWeek::WhatDayOfTheWeek(const InitArg& arg) : ksys::act::ai::Query(ar
WhatDayOfTheWeek::~WhatDayOfTheWeek() = default;
-// FIXME: implement
int WhatDayOfTheWeek::doQuery() {
- return -1;
+ return u8(ksys::world::Manager::instance()->getTimeMgr()->getNumberOfDays() % 7);
}
void WhatDayOfTheWeek::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryWhatDungeonType.cpp b/src/Game/AI/Query/queryWhatDungeonType.cpp
index de51f151..ae02bdb8 100644
--- a/src/Game/AI/Query/queryWhatDungeonType.cpp
+++ b/src/Game/AI/Query/queryWhatDungeonType.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryWhatDungeonType.h"
#include <evfl/Query.h>
+#include "KingSystem/World/worldManager.h"
namespace uking::query {
@@ -7,9 +8,8 @@ WhatDungeonType::WhatDungeonType(const InitArg& arg) : ksys::act::ai::Query(arg)
WhatDungeonType::~WhatDungeonType() = default;
-// FIXME: implement
int WhatDungeonType::doQuery() {
- return -1;
+ return u8(ksys::world::Manager::instance()->getDungeonType());
}
void WhatDungeonType::loadParams(const evfl::QueryArg& arg) {}
diff --git a/src/Game/AI/Query/queryWhatMoonName.cpp b/src/Game/AI/Query/queryWhatMoonName.cpp
index df5cc2dd..11c4c275 100644
--- a/src/Game/AI/Query/queryWhatMoonName.cpp
+++ b/src/Game/AI/Query/queryWhatMoonName.cpp
@@ -1,5 +1,6 @@
#include "Game/AI/Query/queryWhatMoonName.h"
#include <evfl/Query.h>
+#include "KingSystem/World/worldManager.h"
namespace uking::query {
@@ -7,9 +8,9 @@ WhatMoonName::WhatMoonName(const InitArg& arg) : ksys::act::ai::Query(arg) {}
WhatMoonName::~WhatMoonName() = default;
-// FIXME: implement
int WhatMoonName::doQuery() {
- return -1;
+ auto* tm = ksys::world::Manager::instance()->getTimeMgr();
+ return static_cast<int>(tm->getMoonType());
}
void WhatMoonName::loadParams(const evfl::QueryArg& arg) {}