summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp38
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h2
2 files changed, 22 insertions, 18 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index f4f9e82da9..1a64641e95 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -640,7 +640,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
Unit* caster = me;
// Areatrigger Cast!
- if (e.GetScriptType() == SMART_SCRIPT_TYPE_AREATRIGGER)
+ if (e.IsAreatriggerScript())
caster = unit->SummonTrigger(unit->GetPositionX(), unit->GetPositionY(), unit->GetPositionZ(), unit->GetOrientation(), 5000);
if (e.action.cast.targetsLimit)
@@ -3990,27 +3990,29 @@ void SmartScript::GetTargets(ObjectVector& targets, SmartScriptHolder const& e,
}
case SMART_TARGET_INSTANCE_STORAGE:
{
- if (InstanceScript* instance = GetBaseObject()->GetInstanceScript())
- {
- if (e.target.instanceStorage.type == 1)
- {
- if (Creature* creature = instance->GetCreature(e.target.instanceStorage.index))
- {
- targets.push_back(creature);
- }
- }
- else if (e.target.instanceStorage.type == 2)
- {
- if (GameObject* go = instance->GetGameObject(e.target.instanceStorage.index))
- {
- targets.push_back(go);
- }
- }
- }
+ InstanceScript* instance = nullptr;
+
+ if (e.IsAreatriggerScript() && scriptTrigger)
+ instance = scriptTrigger->GetInstanceScript();
else
+ instance = GetBaseObject()->GetInstanceScript();
+
+ if (!instance)
{
LOG_ERROR("scripts.ai.sai", "SMART_TARGET_INSTANCE_STORAGE: Entry {} SourceType {} Event {} Action {} Target {} called outside an instance map.",
e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.GetTargetType());
+ return;
+ }
+
+ if (e.target.instanceStorage.type == 1)
+ {
+ if (Creature* creature = instance->GetCreature(e.target.instanceStorage.index))
+ targets.push_back(creature);
+ }
+ else if (e.target.instanceStorage.type == 2)
+ {
+ if (GameObject* go = instance->GetGameObject(e.target.instanceStorage.index))
+ targets.push_back(go);
}
break;
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
index e589d7bf1a..47b0d47961 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -1993,6 +1993,8 @@ public:
uint32 GetActionType() const { return (uint32)action.type; }
uint32 GetTargetType() const { return (uint32)target.type; }
+ [[nodiscard]] bool IsAreatriggerScript() const { return source_type == SMART_SCRIPT_TYPE_AREATRIGGER; }
+
uint32 timer;
uint32 priority;
bool active;