aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Events/GameEventSender.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Events/GameEventSender.cpp')
-rw-r--r--src/server/game/Events/GameEventSender.cpp31
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);
}