Scripts/SmartAI: Forward invoker to invoked action list actions. Also JustAppeared -> InitializeAI.

# Conflicts:
#	src/server/game/AI/SmartScripts/SmartScript.h
This commit is contained in:
Treeston authored and Ovahlord committed 2019-04-26 18:51:19 +02:00
1 parent 7c025ee803
commit 99a2c24116
2 files changed
+12 -13

No files matched your search

@@ -235,7 +235,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (!roll_chance_i(e.event.event_chance))
return;
}
e.runOnce = true;//used for repeat check
e.runOnce = true; //used for repeat check
if (unit)
mLastInvoker = unit->GetGUID();
@@ -3533,9 +3533,12 @@ void SmartScript::UpdateTimer(SmartScriptHolder& e, uint32 const diff)
case SMART_EVENT_DISTANCE_CREATURE:
case SMART_EVENT_DISTANCE_GAMEOBJECT:
{
ProcessEvent(e);
if (e.GetScriptType() == SMART_SCRIPT_TYPE_TIMED_ACTIONLIST)
{
Unit* invoker9 = nullptr;
if (me && mTimedActionListInvoker)
invoker9 = ObjectAccessor::GetUnit(*me, mTimedActionListInvoker);
ProcessEvent(e, invoker9);
e.enableTimed = false;//disable event if it is in an ActionList and was processed once
for (SmartAIEventList::iterator i = mTimedActionList.begin(); i != mTimedActionList.end(); ++i)
{
@@ -3547,6 +3550,8 @@ void SmartScript::UpdateTimer(SmartScriptHolder& e, uint32 const diff)
}
}
}
else
ProcessEvent(e);
break;
}
}
@@ -3840,7 +3845,7 @@ Unit* SmartScript::DoFindClosestFriendlyInRange(float range, bool playerOnly)
return unit;
}
void SmartScript::SetScript9(SmartScriptHolder& e, uint32 entry)
void SmartScript::SetScript9(SmartScriptHolder& e, uint32 entry, Unit* invoker)
{
//do NOT clear mTimedActionList if it's being iterated because it will invalidate the iterator and delete
// any SmartScriptHolder contained like the "e" parameter passed to this function
@@ -3854,6 +3859,7 @@ void SmartScript::SetScript9(SmartScriptHolder& e, uint32 entry)
mTimedActionList = sSmartScriptMgr->GetScript(entry, SMART_SCRIPT_TYPE_TIMED_ACTIONLIST);
if (mTimedActionList.empty())
return;
mTimedActionListInvoker = invoker ? invoker->GetGUID() : ObjectGuid::Empty;
for (SmartAIEventList::iterator i = mTimedActionList.begin(); i != mTimedActionList.end(); ++i)
{
i->enableTimed = i == mTimedActionList.begin();//enable processing only for the first action