aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game')
-rw-r--r--src/server/game/Battlegrounds/Battleground.cpp6
-rw-r--r--src/server/game/Battlegrounds/Battleground.h2
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp2
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp2
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp2
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp6
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp2
-rw-r--r--src/server/game/Events/GameEventSender.cpp31
-rw-r--r--src/server/game/Events/GameEventSender.h4
9 files changed, 38 insertions, 19 deletions
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp
index 2cfed828de7..00bb9245c19 100644
--- a/src/server/game/Battlegrounds/Battleground.cpp
+++ b/src/server/game/Battlegrounds/Battleground.cpp
@@ -25,6 +25,7 @@
#include "DatabaseEnv.h"
#include "DB2Stores.h"
#include "Formulas.h"
+#include "GameEventSender.h"
#include "GameTime.h"
#include "GridNotifiersImpl.h"
#include "Group.h"
@@ -1933,11 +1934,12 @@ WorldSafeLocsEntry const* Battleground::GetClosestGraveyard(Player* player)
return sObjectMgr->GetClosestGraveyard(*player, GetPlayerTeam(player->GetGUID()), player);
}
-void Battleground::StartCriteriaTimer(CriteriaStartEvent startEvent, uint32 entry)
+void Battleground::TriggerGameEvent(uint32 gameEventId)
{
+ GameEvents::TriggerForMap(gameEventId, GetBgMap());
for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
if (Player* player = ObjectAccessor::FindPlayer(itr->first))
- player->StartCriteriaTimer(startEvent, entry);
+ GameEvents::TriggerForPlayer(gameEventId, player);
}
void Battleground::SetBracket(PVPDifficultyEntry const* bracketEntry)
diff --git a/src/server/game/Battlegrounds/Battleground.h b/src/server/game/Battlegrounds/Battleground.h
index 5bbb0eeeca8..f8bf078651e 100644
--- a/src/server/game/Battlegrounds/Battleground.h
+++ b/src/server/game/Battlegrounds/Battleground.h
@@ -288,7 +288,7 @@ class TC_GAME_API Battleground
/* achievement req. */
virtual bool IsAllNodesControlledByTeam(uint32 /*team*/) const { return false; }
- void StartCriteriaTimer(CriteriaStartEvent startEvent, uint32 entry);
+ void TriggerGameEvent(uint32 gameEventId);
virtual bool CheckAchievementCriteriaMeet(uint32 /*criteriaId*/, Player const* /*player*/, Unit const* /*target*/ = nullptr, uint32 /*miscvalue1*/ = 0);
/* Battleground */
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp
index 46e72dded0c..dbdc498df01 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp
@@ -217,7 +217,7 @@ void BattlegroundAB::StartingEventOpenDoors()
DoorOpen(BG_AB_OBJECT_GATE_H);
// Achievement: Let's Get This Done
- StartCriteriaTimer(CriteriaStartEvent::SendEvent, AB_EVENT_START_BATTLE);
+ TriggerGameEvent(AB_EVENT_START_BATTLE);
}
void BattlegroundAB::AddPlayer(Player* player)
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp
index 89c401a9d89..3c6e769f44f 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp
@@ -432,7 +432,7 @@ void BattlegroundAV::StartingEventOpenDoors()
DoorOpen(BG_AV_OBJECT_DOOR_A);
// Achievement: The Alterac Blitz
- StartCriteriaTimer(CriteriaStartEvent::SendEvent, BG_AV_EVENT_START_BATTLE);
+ TriggerGameEvent(BG_AV_EVENT_START_BATTLE);
}
void BattlegroundAV::AddPlayer(Player* player)
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp
index b02bbddc158..0a0618dbc47 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp
@@ -142,7 +142,7 @@ void BattlegroundEY::StartingEventOpenDoors()
}
// Achievement: Flurry
- StartCriteriaTimer(CriteriaStartEvent::SendEvent, BG_EY_EVENT_START_BATTLE);
+ TriggerGameEvent(BG_EY_EVENT_START_BATTLE);
}
void BattlegroundEY::AddPoints(uint32 Team, uint32 Points)
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
index 544ab43174c..aa2647ce944 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
@@ -345,7 +345,7 @@ void BattlegroundSA::PostUpdateImpl(uint32 diff)
ToggleTimer();
DemolisherStartState(false);
Status = BG_SA_ROUND_ONE;
- StartCriteriaTimer(CriteriaStartEvent::SendEvent, (Attackers == TEAM_ALLIANCE) ? 23748 : 21702);
+ TriggerGameEvent((Attackers == TEAM_ALLIANCE) ? 23748 : 21702);
}
if (TotalTime >= BG_SA_BOAT_START)
StartShips();
@@ -367,7 +367,7 @@ void BattlegroundSA::PostUpdateImpl(uint32 diff)
ToggleTimer();
DemolisherStartState(false);
Status = BG_SA_ROUND_TWO;
- StartCriteriaTimer(CriteriaStartEvent::SendEvent, (Attackers == TEAM_ALLIANCE) ? 23748 : 21702);
+ TriggerGameEvent((Attackers == TEAM_ALLIANCE) ? 23748 : 21702);
// status was set to STATUS_WAIT_JOIN manually for Preparation, set it back now
SetStatus(STATUS_IN_PROGRESS);
for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
@@ -544,7 +544,7 @@ void BattlegroundSA::TeleportToEntrancePosition(Player* player)
void BattlegroundSA::ProcessEvent(WorldObject* obj, uint32 eventId, WorldObject* invoker /*= nullptr*/)
{
- if (GameObject* go = obj->ToGameObject())
+ if (GameObject* go = Object::ToGameObject(obj))
{
switch (go->GetGoType())
{
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp
index 1a1ae1d8c65..e810e408e37 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp
@@ -223,7 +223,7 @@ void BattlegroundWS::StartingEventOpenDoors()
SpawnBGObject(BG_WS_OBJECT_DOOR_H_4, RESPAWN_ONE_DAY);
// players joining later are not eligibles
- StartCriteriaTimer(CriteriaStartEvent::SendEvent, WS_EVENT_START_BATTLE);
+ TriggerGameEvent(WS_EVENT_START_BATTLE);
}
void BattlegroundWS::AddPlayer(Player* player)
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__