diff options
| author | Kitzunu <24550914+Kitzunu@users.noreply.github.com> | 2025-01-16 20:49:26 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-16 20:49:26 +0100 |
| commit | 2aa8c8aa8089a9054e361edadb00a88857929da5 (patch) | |
| tree | c15a4265efcd8561680814128230f1976c512b63 /src/server/game/AI/SmartScripts | |
| parent | e2981cbbc9b7161d22d841e0256b3d935465c6ce (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.cpp | 139 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 1 |
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); |
