summaryrefslogtreecommitdiff
path: root/src/server/game/AI/SmartScripts
diff options
context:
space:
mode:
authorKitzunu <24550914+Kitzunu@users.noreply.github.com>2025-01-16 20:49:26 +0100
committerGitHub <noreply@github.com>2025-01-16 20:49:26 +0100
commit2aa8c8aa8089a9054e361edadb00a88857929da5 (patch)
treec15a4265efcd8561680814128230f1976c512b63 /src/server/game/AI/SmartScripts
parente2981cbbc9b7161d22d841e0256b3d935465c6ce (diff)
refactor(Core/SmartScripts): Clean up validation logic by replacing A… (#21184)
Diffstat (limited to 'src/server/game/AI/SmartScripts')
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp139
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h1
2 files changed, 42 insertions, 98 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
index ab81002eac..f79ed9e14b 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
@@ -27,14 +27,15 @@
#include "ScriptedCreature.h"
#include "SpellMgr.h"
-#define AC_SAI_IS_BOOLEAN_VALID(e, value) \
-{ \
- if (value > 1) \
- { \
- LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses param {} of type Boolean with value {}, valid values are 0 or 1, skipped.", \
- e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), STRINGIZE(value), value); \
- return false; \
- } \
+bool SmartAIMgr::IsSAIBoolValid(SmartScriptHolder const& e, SAIBool value)
+{
+ if (value != 0 && value != 1)
+ {
+ LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses param {} of type Boolean with value {}, valid values are 0 or 1, skipped.",
+ e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), STRINGIZE(value), value);
+ return false;
+ }
+ return true;
}
SmartWaypointMgr* SmartWaypointMgr::instance()
@@ -513,23 +514,22 @@ bool SmartAIMgr::IsTargetValid(SmartScriptHolder const& e)
case SMART_TARGET_HOSTILE_LAST_AGGRO:
case SMART_TARGET_HOSTILE_RANDOM:
case SMART_TARGET_HOSTILE_RANDOM_NOT_TOP:
- AC_SAI_IS_BOOLEAN_VALID(e, e.target.hostileRandom.playerOnly);
- break;
+ return IsSAIBoolValid(e, e.target.hostileRandom.playerOnly);
case SMART_TARGET_FARTHEST:
- AC_SAI_IS_BOOLEAN_VALID(e, e.target.farthest.playerOnly);
- AC_SAI_IS_BOOLEAN_VALID(e, e.target.farthest.isInLos);
+ return IsSAIBoolValid(e, e.target.farthest.playerOnly) &&
+ IsSAIBoolValid(e, e.target.farthest.isInLos);
break;
case SMART_TARGET_CLOSEST_CREATURE:
- AC_SAI_IS_BOOLEAN_VALID(e, e.target.unitClosest.dead);
+ return IsSAIBoolValid(e, e.target.unitClosest.dead);
break;
case SMART_TARGET_CLOSEST_ENEMY:
- AC_SAI_IS_BOOLEAN_VALID(e, e.target.closestAttackable.playerOnly);
+ return IsSAIBoolValid(e, e.target.closestAttackable.playerOnly);
break;
case SMART_TARGET_CLOSEST_FRIENDLY:
- AC_SAI_IS_BOOLEAN_VALID(e, e.target.closestFriendly.playerOnly);
+ return IsSAIBoolValid(e, e.target.closestFriendly.playerOnly);
break;
case SMART_TARGET_OWNER_OR_SUMMONER:
- AC_SAI_IS_BOOLEAN_VALID(e, e.target.owner.useCharmerOrOwner);
+ return IsSAIBoolValid(e, e.target.owner.useCharmerOrOwner);
break;
case SMART_TARGET_STORED:
case SMART_TARGET_PLAYER_WITH_AURA:
@@ -1079,9 +1079,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_EVENT_OOC_LOS:
case SMART_EVENT_IC_LOS:
if (!IsMinMaxValid(e, e.event.los.cooldownMin, e.event.los.cooldownMax))
- {
return false;
- }
if (e.event.los.hostilityMode >= AsUnderlyingType(SmartEvent::LOSHostilityMode::End))
{
@@ -1090,8 +1088,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
return false;
}
- AC_SAI_IS_BOOLEAN_VALID(e, e.event.los.playerOnly);
- break;
+ return IsSAIBoolValid(e, e.event.los.playerOnly);
case SMART_EVENT_RESPAWN:
if (e.event.respawn.type == SMART_SCRIPT_RESPAWN_CONDITION_MAP && !sMapStore.LookupEntry(e.event.respawn.map))
{
@@ -1134,8 +1131,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
if (e.event.kill.creature && !IsCreatureValid(e, e.event.kill.creature))
return false;
- AC_SAI_IS_BOOLEAN_VALID(e, e.event.kill.playerOnly);
- break;
+ return IsSAIBoolValid(e, e.event.kill.playerOnly);
case SMART_EVENT_VICTIM_CASTING:
if (e.event.targetCasting.spellId > 0 && !sSpellMgr->GetSpellInfo(e.event.targetCasting.spellId))
{
@@ -1164,14 +1160,10 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_EVENT_ACCEPTED_QUEST:
case SMART_EVENT_REWARD_QUEST:
if (e.event.quest.quest && !IsQuestValid(e, e.event.quest.quest))
- {
return false;
- }
if (!IsMinMaxValid(e, e.event.quest.cooldownMin, e.event.quest.cooldownMax))
- {
return false;
- }
break;
case SMART_EVENT_RECEIVE_EMOTE:
{
@@ -1464,8 +1456,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_ACTION_SOUND:
if (!IsSoundValid(e, e.action.sound.sound))
return false;
- AC_SAI_IS_BOOLEAN_VALID(e, e.action.sound.onlySelf);
- break;
+ return IsSAIBoolValid(e, e.action.sound.onlySelf);
case SMART_ACTION_RANDOM_SOUND:
if (e.action.randomSound.sound1 && !IsSoundValid(e, e.action.randomSound.sound1))
return false;
@@ -1505,8 +1496,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
if (!IsQuestValid(e, e.action.questOffer.questID))
return false;
- AC_SAI_IS_BOOLEAN_VALID(e, e.action.questOffer.directAdd);
- break;
+ return IsSAIBoolValid(e, e.action.questOffer.directAdd);
case SMART_ACTION_FAIL_QUEST:
if (!IsQuestValid(e, e.action.quest.quest))
return false;
@@ -1651,8 +1641,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
return false;
}
- AC_SAI_IS_BOOLEAN_VALID(e, e.action.summonCreature.attackInvoker);
- break;
+ return IsSAIBoolValid(e, e.action.summonCreature.attackInvoker);
case SMART_ACTION_CALL_KILLEDMONSTER:
if (!IsCreatureValid(e, e.action.killedMonster.creature))
return false;
@@ -1660,8 +1649,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_ACTION_UPDATE_TEMPLATE:
if (!IsCreatureValid(e, e.action.updateTemplate.creature))
return false;
- AC_SAI_IS_BOOLEAN_VALID(e, e.action.updateTemplate.updateLevel);
- break;
+ return IsSAIBoolValid(e, e.action.updateTemplate.updateLevel);
case SMART_ACTION_SET_SHEATH:
if (e.action.setSheath.sheath && e.action.setSheath.sheath >= MAX_SHEATH_STATE)
{
@@ -1707,8 +1695,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_ACTION_WP_STOP:
if (e.action.wpStop.quest && !IsQuestValid(e, e.action.wpStop.quest))
return false;
- AC_SAI_IS_BOOLEAN_VALID(e, e.action.wpStop.fail);
- break;
+ return IsSAIBoolValid(e, e.action.wpStop.fail);
case SMART_ACTION_WP_START:
{
if (!sSmartWaypointMgr->GetPath(e.action.wpStart.pathID))
@@ -1729,9 +1716,8 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
return false;
}
- AC_SAI_IS_BOOLEAN_VALID(e, e.action.wpStart.run);
- AC_SAI_IS_BOOLEAN_VALID(e, e.action.wpStart.repeat);
- break;
+ return IsSAIBoolValid(e, e.action.wpStart.run) &&
+ IsSAIBoolValid(e, e.action.wpStart.repeat);
}
case SMART_ACTION_CREATE_TIMED_EVENT:
{
@@ -1872,85 +1858,42 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
break;
}
case SMART_ACTION_AUTO_ATTACK:
- {
- AC_SAI_IS_BOOLEAN_VALID(e, e.action.autoAttack.attack);
- break;
- }
+ return IsSAIBoolValid(e, e.action.autoAttack.attack);
case SMART_ACTION_ALLOW_COMBAT_MOVEMENT:
- {
- AC_SAI_IS_BOOLEAN_VALID(e, e.action.combatMove.move);
- break;
- }
+ return IsSAIBoolValid(e, e.action.combatMove.move);
case SMART_ACTION_CALL_FOR_HELP:
- {
- AC_SAI_IS_BOOLEAN_VALID(e, e.action.callHelp.withEmote);
- break;
- }
+ return IsSAIBoolValid(e, e.action.callHelp.withEmote);
case SMART_ACTION_SET_VISIBILITY:
- {
- AC_SAI_IS_BOOLEAN_VALID(e, e.action.visibility.state);
- break;
- }
+ return IsSAIBoolValid(e, e.action.visibility.state);
case SMART_ACTION_SET_RUN:
- {
- AC_SAI_IS_BOOLEAN_VALID(e, e.action.setRun.run);
- break;
- }
+ return IsSAIBoolValid(e, e.action.setRun.run);
case SMART_ACTION_SET_CAN_FLY:
- {
- AC_SAI_IS_BOOLEAN_VALID(e, e.action.setFly.fly);
- break;
- }
+ return IsSAIBoolValid(e, e.action.setFly.fly);
case SMART_ACTION_SET_SWIM:
- {
- AC_SAI_IS_BOOLEAN_VALID(e, e.action.setSwim.swim);
- break;
- }
+ return IsSAIBoolValid(e, e.action.setSwim.swim);
case SMART_ACTION_SET_COUNTER:
- {
- AC_SAI_IS_BOOLEAN_VALID(e, e.action.setCounter.reset);
- break;
- }
+ return IsSAIBoolValid(e, e.action.setCounter.reset);
case SMART_ACTION_INTERRUPT_SPELL:
- {
- AC_SAI_IS_BOOLEAN_VALID(e, e.action.interruptSpellCasting.withDelayed);
- AC_SAI_IS_BOOLEAN_VALID(e, e.action.interruptSpellCasting.withInstant);
- break;
- }
+ return IsSAIBoolValid(e, e.action.interruptSpellCasting.withDelayed) &&
+ IsSAIBoolValid(e, e.action.interruptSpellCasting.withInstant);
case SMART_ACTION_SET_ROOT:
- {
- AC_SAI_IS_BOOLEAN_VALID(e, e.action.setRoot.root);
- break;
- }
+ return IsSAIBoolValid(e, e.action.setRoot.root);
case SMART_ACTION_DISABLE_EVADE:
- {
- AC_SAI_IS_BOOLEAN_VALID(e, e.action.disableEvade.disable);
- break;
- }
+ return IsSAIBoolValid(e, e.action.disableEvade.disable);
case SMART_ACTION_LOAD_EQUIPMENT:
- {
- AC_SAI_IS_BOOLEAN_VALID(e, e.action.loadEquipment.force);
- break;
- }
+ return IsSAIBoolValid(e, e.action.loadEquipment.force);
case SMART_ACTION_TALK:
- AC_SAI_IS_BOOLEAN_VALID(e, e.action.talk.useTalkTarget);
if (!IsTextValid(e, e.action.talk.textGroupID))
return false;
- break;
+ return IsSAIBoolValid(e, e.action.talk.useTalkTarget);
case SMART_ACTION_SIMPLE_TALK:
if (!IsTextValid(e, e.action.simpleTalk.textGroupID))
return false;
break;
case SMART_ACTION_SET_HEALTH_REGEN:
- {
- AC_SAI_IS_BOOLEAN_VALID(e, e.action.setHealthRegen.regenHealth);
- break;
- }
+ return IsSAIBoolValid(e, e.action.setHealthRegen.regenHealth);
case SMART_ACTION_CALL_TIMED_ACTIONLIST:
- {
- AC_SAI_IS_BOOLEAN_VALID(e, e.action.timedActionList.allowOverride);
- break;
- }
+ return IsSAIBoolValid(e, e.action.timedActionList.allowOverride);
case SMART_ACTION_FLEE_FOR_ASSIST:
case SMART_ACTION_MOVE_TO_POS:
case SMART_ACTION_EVADE:
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
index 7ca18d2f64..159f8cb875 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -2219,6 +2219,7 @@ private:
return true;
}
+ static bool IsSAIBoolValid(SmartScriptHolder const& e, SAIBool value);
static bool IsTextValid(SmartScriptHolder const& e, uint32 id);
static bool CheckUnusedEventParams(SmartScriptHolder const& e);
static bool CheckUnusedActionParams(SmartScriptHolder const& e);