aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorModoX <moardox@gmail.com>2021-12-25 16:00:34 +0100
committerShauren <shauren.trinity@gmail.com>2021-12-25 16:10:50 +0100
commitaccf27cb7b6662e65d8e854cc1746a3ea1163e5c (patch)
treec3d7b839fd8b8f6ca466ae077cce219f2c3a4c89 /src
parent77098375396a3b067cf06174bd464f65d7e0cd50 (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.cpp20
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.h1
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp2
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h10
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: