diff options
author | Rat <none@none> | 2010-11-04 19:56:39 +0100 |
---|---|---|
committer | Rat <none@none> | 2010-11-04 19:56:39 +0100 |
commit | 54b11cce015b71e665bf22827fbf97ef86e569e0 (patch) | |
tree | f1ca352fdc5db70d69622f0fda65795c0370c10d /src | |
parent | cf475e75cafa4b83d5020ea0cfbebdc514ad01df (diff) |
Core/SmartAI: store event invoker when available, and use it for Invoker target
note: dont forget to call script_reset when script is over!
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 34 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.h | 1 |
2 files changed, 22 insertions, 13 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 9b034e522f1..d4d60071c12 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -52,6 +52,7 @@ SmartScript::SmartScript() meOrigGUID = 0; goOrigGUID = 0; mResumeActionList = true; + mLastInvoker = NULL; } void SmartScript::OnReset() @@ -64,6 +65,7 @@ void SmartScript::OnReset() (*i).runOnce = false; } ProcessEventsFor(SMART_EVENT_RESET); + mLastInvoker = NULL; } void SmartScript::ProcessEventsFor(SMART_EVENT e, Unit* unit, uint32 var0, uint32 var1, bool bvar, const SpellEntry* spell, GameObject* gob) @@ -105,6 +107,9 @@ void SmartScript::ProcessAction(SmartScriptHolder &e, Unit* unit, uint32 var0, u } e.runOnce = true;//used for repeat check + if (unit) + mLastInvoker = unit; + if (e.link && e.link != e.event_id) { SmartScriptHolder linked = FindLinkedEvent(e.link); @@ -1171,6 +1176,11 @@ SmartScriptHolder SmartScript::CreateEvent(SMART_EVENT e, uint32 event_flags, ui ObjectList* SmartScript::GetTargets(SmartScriptHolder e, Unit* invoker) { + Unit* trigger = NULL; + if (invoker) + trigger = invoker; + else if (mLastInvoker) + trigger = mLastInvoker; ObjectList* l = new ObjectList(); switch (e.GetTargetType()) { @@ -1204,22 +1214,20 @@ ObjectList* SmartScript::GetTargets(SmartScriptHolder e, Unit* invoker) break; case SMART_TARGET_NONE: case SMART_TARGET_ACTION_INVOKER: - if (invoker) - { - l->push_back(invoker); - } + if (trigger) + l->push_back(trigger); break; case SMART_TARGET_ACTION_INVOKER_VEHICLE: - if (invoker && invoker->GetVehicle() && invoker->GetVehicle()->GetBase()) + if (trigger && trigger->GetVehicle() && trigger->GetVehicle()->GetBase()) { - l->push_back(invoker->GetVehicle()->GetBase()); + l->push_back(trigger->GetVehicle()->GetBase()); } break; case SMART_TARGET_INVOKER_PARTY: - if (invoker) + if (trigger) { - l->push_back(invoker); - if (Player* plr = invoker->ToPlayer()) + l->push_back(trigger); + if (Player* plr = trigger->ToPlayer()) { if (Group *pGroup = plr->GetGroup()) { @@ -1303,12 +1311,12 @@ ObjectList* SmartScript::GetTargets(SmartScriptHolder e, Unit* invoker) target = HashMapHolder<Creature>::Find(guid); } else { - if (!invoker && !GetBaseObject()) + if (!trigger && !GetBaseObject()) { sLog.outErrorDb("SMART_TARGET_CREATURE_GUID can not be used without invoker and without entry"); return NULL; } - target = FindCreatureNear(invoker?invoker:GetBaseObject(), e.target.unitGUID.guid); + target = FindCreatureNear(trigger?trigger:GetBaseObject(), e.target.unitGUID.guid); } if (target) { @@ -1325,12 +1333,12 @@ ObjectList* SmartScript::GetTargets(SmartScriptHolder e, Unit* invoker) target = HashMapHolder<GameObject>::Find(guid); } else { - if (!invoker && !GetBaseObject()) + if (!trigger && !GetBaseObject()) { sLog.outErrorDb("SMART_TARGET_GAMEOBJECT_GUID can not be used without invoker and without entry"); return NULL; } - target = FindGameObjectNear(invoker?invoker:GetBaseObject(), e.target.goGUID.guid); + target = FindGameObjectNear(trigger?trigger:GetBaseObject(), e.target.goGUID.guid); } if (target) { diff --git a/src/server/game/AI/SmartScripts/SmartScript.h b/src/server/game/AI/SmartScripts/SmartScript.h index 8a15e6b725c..345ab58c8d8 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.h +++ b/src/server/game/AI/SmartScripts/SmartScript.h @@ -214,6 +214,7 @@ class SmartScript uint64 mTextGUID; Creature* talker; bool mUseTextTimer; + Unit* mLastInvoker; SMARTAI_TEMPLATE mTemplate; void InstallEvents(); |