diff options
author | ModoX <moardox@gmail.com> | 2021-12-25 16:00:34 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-12-25 16:10:50 +0100 |
commit | accf27cb7b6662e65d8e854cc1746a3ea1163e5c (patch) | |
tree | c3d7b839fd8b8f6ca466ae077cce219f2c3a4c89 /src | |
parent | 77098375396a3b067cf06174bd464f65d7e0cd50 (diff) |
Core/SAI: added new action type SMART_ACTION_ADD_TO_STORED_TARGET_LIST (#27029)
(cherry picked from commit bc4e285c2104993f9eb8c0dc03e0eba800df1a88)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 20 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.h | 1 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 2 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 10 |
4 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 28e8da9ac62..e44735bbe92 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -112,6 +112,14 @@ void SmartScript::StoreTargetList(ObjectVector const& targets, uint32 id) _storedTargets.emplace(id, ObjectGuidVector(targets)); } +void SmartScript::AddToStoredTargetList(ObjectVector const& targets, uint32 id) +{ + auto [itr, inserted] = _storedTargets.try_emplace(id, targets); + if (!inserted) + for (WorldObject* obj : targets) + itr->second.AddGuid(obj->GetGUID()); +} + ObjectVector const* SmartScript::GetStoredTargetVector(uint32 id, WorldObject const& ref) const { auto itr = _storedTargets.find(id); @@ -2306,6 +2314,18 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u } break; } + case SMART_ACTION_ADD_TO_STORED_TARGET_LIST: + { + if (!targets.empty()) + AddToStoredTargetList(targets, e.action.addToStoredTargets.id); + else + { + WorldObject* baseObject = GetBaseObject(); + TC_LOG_WARN("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_ADD_TO_STORED_TARGET_LIST: var %u, baseObject %s, event %u - tried to add no targets to stored target list", + e.action.addToStoredTargets.id, !baseObject ? "" : baseObject->GetName().c_str(), e.event_id); + } + 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/SmartScript.h b/src/server/game/AI/SmartScripts/SmartScript.h index 1f7ea343e2f..51a12f3ce1f 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.h +++ b/src/server/game/AI/SmartScripts/SmartScript.h @@ -75,6 +75,7 @@ class TC_GAME_API SmartScript bool IsSmart(bool silent = false) const; void StoreTargetList(ObjectVector const& targets, uint32 id); + void AddToStoredTargetList(ObjectVector const& targets, uint32 id); ObjectVector const* GetStoredTargetVector(uint32 id, WorldObject const& ref) const; void StoreCounter(uint32 id, uint32 value, uint32 reset); diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 9a0c2a2e4a0..a2ac65bd05a 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -932,6 +932,7 @@ bool SmartAIMgr::CheckUnusedActionParams(SmartScriptHolder const& e) 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); + case SMART_ACTION_ADD_TO_STORED_TARGET_LIST: return sizeof(SmartAction::addToStoredTargets); 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()); @@ -2112,6 +2113,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) case SMART_ACTION_SPAWN_SPAWNGROUP: case SMART_ACTION_DESPAWN_SPAWNGROUP: case SMART_ACTION_PLAY_CINEMATIC: + case SMART_ACTION_ADD_TO_STORED_TARGET_LIST: break; // Unused case SMART_ACTION_SET_UNIT_FLAG: diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 11f8eb4d679..4bd15782b8d 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -585,8 +585,9 @@ enum SMART_ACTION SMART_ACTION_SET_IMMUNE_NPC = 145, // 0/1 SMART_ACTION_SET_UNINTERACTIBLE = 146, // 0/1 SMART_ACTION_ACTIVATE_GAMEOBJECT = 147, // GameObjectActions + SMART_ACTION_ADD_TO_STORED_TARGET_LIST = 148, // varID - SMART_ACTION_END = 148 + SMART_ACTION_END = 149 }; enum class SmartActionSummonCreatureFlags @@ -1168,6 +1169,11 @@ struct SmartAction uint32 gameObjectAction; } activateGameObject; + struct + { + uint32 id; + } addToStoredTargets; + //! Note for any new future actions //! All parameters must have type uint32 @@ -1585,6 +1591,8 @@ class ObjectGuidVector return &_objectVector; } + void AddGuid(ObjectGuid const& guid) { _guidVector.push_back(guid); } + ~ObjectGuidVector() { } private: |