From 111fc6ac6fd703bb645046e7a477a986d8519a64 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 24 Apr 2022 12:09:10 +0200 Subject: Core/Battlegrounds: Replace manual criteria timer starts in battlegrounds with new GameEvents api --- src/server/game/Events/GameEventSender.cpp | 31 +++++++++++++++++++++--------- src/server/game/Events/GameEventSender.h | 4 ++++ 2 files changed, 26 insertions(+), 9 deletions(-) (limited to 'src/server/game/Events') 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); } diff --git a/src/server/game/Events/GameEventSender.h b/src/server/game/Events/GameEventSender.h index b2e599ddb51..5ec31aa41c5 100644 --- a/src/server/game/Events/GameEventSender.h +++ b/src/server/game/Events/GameEventSender.h @@ -20,11 +20,15 @@ #include "Define.h" +class Map; +class Player; class WorldObject; namespace GameEvents { TC_GAME_API void Trigger(uint32 gameEventId, WorldObject* source, WorldObject* target); +TC_GAME_API void TriggerForPlayer(uint32 gameEventId, Player* source); +TC_GAME_API void TriggerForMap(uint32 gameEventId, Map* map, WorldObject* source = nullptr, WorldObject* target = nullptr); } #endif // GameEventSender_h__ -- cgit v1.2.3