diff options
Diffstat (limited to 'src/server/game/Events/GameEventSender.cpp')
-rw-r--r-- | src/server/game/Events/GameEventSender.cpp | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/src/server/game/Events/GameEventSender.cpp b/src/server/game/Events/GameEventSender.cpp index a454ce547a2..0d798826197 100644 --- a/src/server/game/Events/GameEventSender.cpp +++ b/src/server/game/Events/GameEventSender.cpp @@ -22,6 +22,7 @@ #include "InstanceScript.h" #include "Map.h" #include "ObjectMgr.h" +#include "Player.h" #include "Util.h" void GameEvents::Trigger(uint32 gameEventId, WorldObject* source, WorldObject* target) @@ -38,15 +39,27 @@ void GameEvents::Trigger(uint32 gameEventId, WorldObject* source, WorldObject* t zoneScript->ProcessEvent(target, gameEventId, source); Map* map = refForMapAndZoneScript->GetMap(); - if (target) - { - if (GameObject* goTarget = target->ToGameObject()) - if (GameObjectAI* goAI = goTarget->AI()) - goAI->EventInform(gameEventId); - - if (BattlegroundMap* bgMap = map->ToBattlegroundMap()) - bgMap->GetBG()->ProcessEvent(target, gameEventId, source); - } + if (GameObject* goTarget = Object::ToGameObject(target)) + if (GameObjectAI* goAI = goTarget->AI()) + goAI->EventInform(gameEventId); + + if (Player* sourcePlayer = Object::ToPlayer(source)) + TriggerForPlayer(gameEventId, sourcePlayer); + + TriggerForMap(gameEventId, map, source, target); +} + +void GameEvents::TriggerForPlayer(uint32 gameEventId, Player* source) +{ + Map* map = source->GetMap(); + if (map->Instanceable()) + source->StartCriteriaTimer(CriteriaStartEvent::SendEvent, gameEventId); +} + +void GameEvents::TriggerForMap(uint32 gameEventId, Map* map, WorldObject* source, WorldObject* target) +{ + if (BattlegroundMap* bgMap = map->ToBattlegroundMap()) + bgMap->GetBG()->ProcessEvent(target, gameEventId, source); map->ScriptsStart(sEventScripts, gameEventId, source, target); } |