Core/SAI: Added SAI support for new areatriggers

This commit is contained in:
Shauren
2021-02-05 18:12:55 +01:00
parent db18aacc1f
commit 875fd4107f
6 changed files with 130 additions and 18 deletions

View File

@@ -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;