diff options
Diffstat (limited to 'src/server')
| -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(); | 
