fix(Core/SAI): Fix crash when using SMART_TARGET_INSTANCE_STORAGE in … (#23033)
This commit is contained in:
@@ -640,7 +640,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
|
|||||||
|
|
||||||
Unit* caster = me;
|
Unit* caster = me;
|
||||||
// Areatrigger Cast!
|
// Areatrigger Cast!
|
||||||
if (e.GetScriptType() == SMART_SCRIPT_TYPE_AREATRIGGER)
|
if (e.IsAreatriggerScript())
|
||||||
caster = unit->SummonTrigger(unit->GetPositionX(), unit->GetPositionY(), unit->GetPositionZ(), unit->GetOrientation(), 5000);
|
caster = unit->SummonTrigger(unit->GetPositionX(), unit->GetPositionY(), unit->GetPositionZ(), unit->GetOrientation(), 5000);
|
||||||
|
|
||||||
if (e.action.cast.targetsLimit)
|
if (e.action.cast.targetsLimit)
|
||||||
@@ -3990,28 +3990,30 @@ void SmartScript::GetTargets(ObjectVector& targets, SmartScriptHolder const& e,
|
|||||||
}
|
}
|
||||||
case SMART_TARGET_INSTANCE_STORAGE:
|
case SMART_TARGET_INSTANCE_STORAGE:
|
||||||
{
|
{
|
||||||
if (InstanceScript* instance = GetBaseObject()->GetInstanceScript())
|
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 (e.target.instanceStorage.type == 1)
|
||||||
{
|
{
|
||||||
if (Creature* creature = instance->GetCreature(e.target.instanceStorage.index))
|
if (Creature* creature = instance->GetCreature(e.target.instanceStorage.index))
|
||||||
{
|
|
||||||
targets.push_back(creature);
|
targets.push_back(creature);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else if (e.target.instanceStorage.type == 2)
|
else if (e.target.instanceStorage.type == 2)
|
||||||
{
|
{
|
||||||
if (GameObject* go = instance->GetGameObject(e.target.instanceStorage.index))
|
if (GameObject* go = instance->GetGameObject(e.target.instanceStorage.index))
|
||||||
{
|
|
||||||
targets.push_back(go);
|
targets.push_back(go);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
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());
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1993,6 +1993,8 @@ public:
|
|||||||
uint32 GetActionType() const { return (uint32)action.type; }
|
uint32 GetActionType() const { return (uint32)action.type; }
|
||||||
uint32 GetTargetType() const { return (uint32)target.type; }
|
uint32 GetTargetType() const { return (uint32)target.type; }
|
||||||
|
|
||||||
|
[[nodiscard]] bool IsAreatriggerScript() const { return source_type == SMART_SCRIPT_TYPE_AREATRIGGER; }
|
||||||
|
|
||||||
uint32 timer;
|
uint32 timer;
|
||||||
uint32 priority;
|
uint32 priority;
|
||||||
bool active;
|
bool active;
|
||||||
|
|||||||
Reference in New Issue
Block a user