diff options
author | Antonio MartÃn Berti <15972392+BertiRean@users.noreply.github.com> | 2022-06-08 10:50:44 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-08 15:50:44 +0200 |
commit | a4eafbd3f6a4d4ea4934dca564cd6c4beae54280 (patch) | |
tree | 532819ba9abacc1a4517fd6daa4f494699f5bf21 | |
parent | be800a983f5f8ed4befb8b9177f6bd46bef07039 (diff) |
Core/SAI: Added Action SMART_ACTION_DO_ACTION for calling DoAction on target AI (#27964)
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 18 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 2 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 8 |
3 files changed, 27 insertions, 1 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index f6acb262599..5f1d187ad8d 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2481,6 +2481,24 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u break; } + case SMART_ACTION_DO_ACTION: + { + for (WorldObject* target : targets) + { + if (Unit* unitTarget = Object::ToUnit(target)) + { + if (unitTarget->GetAI()) + unitTarget->GetAI()->DoAction(e.action.doAction.actionId); + } + else if (GameObject* goTarget = Object::ToGameObject(target)) + { + if (goTarget->AI()) + goTarget->AI()->DoAction(e.action.doAction.actionId); + } + } + + break; + } default: TC_LOG_ERROR("sql.sql", "SmartScript::ProcessAction: Entry " SI64FMTD " SourceType %u, Event %u, Unhandled Action type %u", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType()); break; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 69354579de7..c3a72c14fe9 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -1006,6 +1006,7 @@ bool SmartAIMgr::CheckUnusedActionParams(SmartScriptHolder const& e) case SMART_ACTION_ADD_TO_STORED_TARGET_LIST: return sizeof(SmartAction::addToStoredTargets); case SMART_ACTION_BECOME_PERSONAL_CLONE_FOR_PLAYER: return sizeof(SmartAction::becomePersonalClone); case SMART_ACTION_TRIGGER_GAME_EVENT: return sizeof(SmartAction::triggerGameEvent); + case SMART_ACTION_DO_ACTION: return sizeof(SmartAction::doAction); default: TC_LOG_WARN("sql.sql", "SmartAIMgr: Entry " SI64FMTD " SourceType %u Event %u Action %u is using an action with no unused params specified in SmartAIMgr::CheckUnusedActionParams(), please report this.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType()); @@ -2299,6 +2300,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) case SMART_ACTION_SPAWN_SPAWNGROUP: case SMART_ACTION_DESPAWN_SPAWNGROUP: case SMART_ACTION_ADD_TO_STORED_TARGET_LIST: + case SMART_ACTION_DO_ACTION: break; case SMART_ACTION_BECOME_PERSONAL_CLONE_FOR_PLAYER: { diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index aca6ed0e55a..e98f7c1dd09 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -604,7 +604,8 @@ enum SMART_ACTION SMART_ACTION_ADD_TO_STORED_TARGET_LIST = 148, // varID SMART_ACTION_BECOME_PERSONAL_CLONE_FOR_PLAYER = 149, // summonType 1-8, duration in ms SMART_ACTION_TRIGGER_GAME_EVENT = 150, // eventId, useSaiTargetAsGameEventSource - SMART_ACTION_END = 151 + SMART_ACTION_DO_ACTION = 151, // actionId + SMART_ACTION_END = 152 }; enum class SmartActionSummonCreatureFlags @@ -1224,6 +1225,11 @@ struct SmartAction SAIBool useSaiTargetAsGameEventSource; } triggerGameEvent; + struct + { + uint32 actionId; + } doAction; + //! Note for any new future actions //! All parameters must have type uint32 |