mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-13 11:43:18 -04:00
Core/SAI: Added SAI support for new areatriggers
This commit is contained in:
@@ -48,6 +48,7 @@ SmartScript::SmartScript()
|
||||
go = nullptr;
|
||||
me = nullptr;
|
||||
trigger = nullptr;
|
||||
areaTrigger = nullptr;
|
||||
sceneTemplate = nullptr;
|
||||
mEventPhase = 0;
|
||||
mPathId = 0;
|
||||
@@ -170,6 +171,7 @@ void SmartScript::ResetBaseObject()
|
||||
{
|
||||
me = m;
|
||||
go = nullptr;
|
||||
areaTrigger = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -179,6 +181,7 @@ void SmartScript::ResetBaseObject()
|
||||
{
|
||||
me = nullptr;
|
||||
go = o;
|
||||
areaTrigger = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1618,6 +1621,9 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
|
||||
if (IsSmartGO(goTarget))
|
||||
ENSURE_AI(SmartGameObjectAI, goTarget->AI())->SetScript9(e, e.action.timedActionList.id, GetLastInvoker());
|
||||
}
|
||||
else if (AreaTrigger* areaTriggerTarget = target->ToAreaTrigger())
|
||||
if (SmartAreaTriggerAI* atSAI = CAST_AI(SmartAreaTriggerAI, areaTriggerTarget->AI()))
|
||||
atSAI->SetScript9(e, e.action.timedActionList.id, GetLastInvoker());
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1705,6 +1711,9 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
|
||||
if (IsSmartGO(goTarget))
|
||||
ENSURE_AI(SmartGameObjectAI, goTarget->AI())->SetScript9(e, id, GetLastInvoker());
|
||||
}
|
||||
else if (AreaTrigger* areaTriggerTarget = target->ToAreaTrigger())
|
||||
if (SmartAreaTriggerAI* atSAI = CAST_AI(SmartAreaTriggerAI, areaTriggerTarget->AI()))
|
||||
atSAI->SetScript9(e, id, GetLastInvoker());
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1729,6 +1738,9 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
|
||||
if (IsSmartGO(goTarget))
|
||||
ENSURE_AI(SmartGameObjectAI, goTarget->AI())->SetScript9(e, id, GetLastInvoker());
|
||||
}
|
||||
else if (AreaTrigger* areaTriggerTarget = target->ToAreaTrigger())
|
||||
if (SmartAreaTriggerAI* atSAI = CAST_AI(SmartAreaTriggerAI, areaTriggerTarget->AI()))
|
||||
atSAI->SetScript9(e, id, GetLastInvoker());
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -3608,7 +3620,11 @@ bool SmartScript::IsGameObject(WorldObject* obj)
|
||||
|
||||
void SmartScript::OnUpdate(uint32 const diff)
|
||||
{
|
||||
if ((mScriptType == SMART_SCRIPT_TYPE_CREATURE || mScriptType == SMART_SCRIPT_TYPE_GAMEOBJECT) && !GetBaseObject())
|
||||
if ((mScriptType == SMART_SCRIPT_TYPE_CREATURE
|
||||
|| mScriptType == SMART_SCRIPT_TYPE_GAMEOBJECT
|
||||
|| mScriptType == SMART_SCRIPT_TYPE_AREATRIGGER_ENTITY
|
||||
|| mScriptType == SMART_SCRIPT_TYPE_AREATRIGGER_ENTITY_SERVERSIDE)
|
||||
&& !GetBaseObject())
|
||||
return;
|
||||
|
||||
InstallEvents();//before UpdateTimers
|
||||
@@ -3743,6 +3759,11 @@ void SmartScript::GetScript()
|
||||
e = sSmartScriptMgr->GetScript((int32)trigger->ID, mScriptType);
|
||||
FillScript(std::move(e), nullptr, trigger, nullptr);
|
||||
}
|
||||
else if (areaTrigger)
|
||||
{
|
||||
e = sSmartScriptMgr->GetScript((int32)areaTrigger->GetEntry(), mScriptType);
|
||||
FillScript(std::move(e), areaTrigger, nullptr, nullptr);
|
||||
}
|
||||
else if (sceneTemplate)
|
||||
{
|
||||
e = sSmartScriptMgr->GetScript(sceneTemplate->SceneId, mScriptType);
|
||||
@@ -3766,6 +3787,11 @@ void SmartScript::OnInitialize(WorldObject* obj, AreaTriggerEntry const* at, Sce
|
||||
go = obj->ToGameObject();
|
||||
TC_LOG_DEBUG("scripts.ai", "SmartScript::OnInitialize: source is GameObject %u", go->GetEntry());
|
||||
break;
|
||||
case TYPEID_AREATRIGGER:
|
||||
areaTrigger = obj->ToAreaTrigger();
|
||||
mScriptType = areaTrigger->IsServerSide() ? SMART_SCRIPT_TYPE_AREATRIGGER_ENTITY_SERVERSIDE : SMART_SCRIPT_TYPE_AREATRIGGER_ENTITY;
|
||||
TC_LOG_DEBUG("scripts.ai", "SmartScript::OnInitialize: source is AreaTrigger %u, IsServerSide %u", areaTrigger->GetEntry(), uint32(areaTrigger->IsServerSide()));
|
||||
break;
|
||||
default:
|
||||
TC_LOG_ERROR("misc", "SmartScript::OnInitialize: Unhandled TypeID !WARNING!");
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user