diff options
| author | Giacomo Pozzoni <giacomopoz@gmail.com> | 2021-11-07 19:17:12 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-11-07 20:17:12 +0200 |
| commit | 0817be8f76dead48e2c0eeb7d5a7434a452f0dcf (patch) | |
| tree | 0a49a89d1928ae1ec6023bf208017fc4a10826fe /src/server/game/AI/SmartScripts | |
| parent | 8f4bf97b44ace657a288a3bc99afb56e0151d76a (diff) | |
Core/SAI: Add SMART_ACTION_ACTIVATE_GAMEOBJECT action (#27216)
Closes #27196
Diffstat (limited to 'src/server/game/AI/SmartScripts')
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 11 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 14 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 8 |
3 files changed, 32 insertions, 1 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 7eae8e1d039..b24f7b76773 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2381,6 +2381,17 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u } break; } + case SMART_ACTION_ACTIVATE_GAMEOBJECT: + { + for (WorldObject* target : targets) + { + if (GameObject* targetGo = target->ToGameObject()) + { + targetGo->ActivateObject(GameObjectActions(e.action.activateGameObject.gameObjectAction)); + } + } + break; + } default: TC_LOG_ERROR("sql.sql", "SmartScript::ProcessAction: Entry %d 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 6f8299c22da..578b1f958fe 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -943,6 +943,7 @@ bool SmartAIMgr::CheckUnusedActionParams(SmartScriptHolder const& e) case SMART_ACTION_SET_IMMUNE_PC: return sizeof(SmartAction::setImmunePC); case SMART_ACTION_SET_IMMUNE_NPC: return sizeof(SmartAction::setImmuneNPC); case SMART_ACTION_SET_UNINTERACTIBLE: return sizeof(SmartAction::setUninteractible); + case SMART_ACTION_ACTIVATE_GAMEOBJECT: return sizeof(SmartAction::activateGameObject); default: TC_LOG_WARN("sql.sql", "SmartAIMgr: Entry %d 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()); @@ -2123,6 +2124,19 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) TC_SAI_IS_BOOLEAN_VALID(e, e.action.setUninteractible.uninteractible); break; } + case SMART_ACTION_ACTIVATE_GAMEOBJECT: + { + if (!NotNULL(e, e.action.activateGameObject.gameObjectAction)) + return false; + + if (e.action.activateGameObject.gameObjectAction >= uint32(GameObjectActions::Max)) + { + TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry %d SourceType %u Event %u Action %u has gameObjectAction parameter out of range (max allowed %u, current value %u), skipped.", + e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), uint32(GameObjectActions::Max), e.action.activateGameObject.gameObjectAction); + return false; + } + break; + } case SMART_ACTION_FOLLOW: case SMART_ACTION_SET_ORIENTATION: case SMART_ACTION_STORE_TARGET_LIST: diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index d422377b628..7d3600f51a4 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -589,8 +589,9 @@ enum SMART_ACTION SMART_ACTION_SET_IMMUNE_PC = 144, // 0/1 SMART_ACTION_SET_IMMUNE_NPC = 145, // 0/1 SMART_ACTION_SET_UNINTERACTIBLE = 146, // 0/1 + SMART_ACTION_ACTIVATE_GAMEOBJECT = 147, // GameObjectActions - SMART_ACTION_END = 147 + SMART_ACTION_END = 148 }; enum class SmartActionSummonCreatureFlags @@ -1197,6 +1198,11 @@ struct SmartAction SAIBool uninteractible; } setUninteractible; + struct + { + uint32 gameObjectAction; + } activateGameObject; + //! Note for any new future actions //! All parameters must have type uint32 |
