aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGildor <gildor55@gmail.com>2019-07-25 12:55:42 +0200
committerGiacomo Pozzoni <giacomopoz@gmail.com>2019-07-25 12:55:42 +0200
commit6d2cd7f6873202877b3cf3685eb14f6690b6c6fb (patch)
tree4b53488634a6dfcbe15e460ebf6a4d174ba21627
parent0c317498a57b3983de61d381d684a77176b281e4 (diff)
Core/Arenas: Remove doors in RL, NA and BE when arena has begun (#23606)
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp22
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundBE.h16
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp22
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundNA.h16
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp22
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundRL.h16
6 files changed, 114 insertions, 0 deletions
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp
index abb75bc8361..5b10369889e 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp
@@ -27,6 +27,27 @@ BattlegroundBE::BattlegroundBE()
BgObjects.resize(BG_BE_OBJECT_MAX);
}
+void BattlegroundBE::PostUpdateImpl(uint32 diff)
+{
+ if (GetStatus() != STATUS_IN_PROGRESS)
+ return;
+
+ _events.Update(diff);
+
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case BG_BE_EVENT_REMOVE_DOORS:
+ for (uint32 i = BG_BE_OBJECT_DOOR_1; i <= BG_BE_OBJECT_DOOR_2; ++i)
+ DelObject(i);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
void BattlegroundBE::StartingEventCloseDoors()
{
for (uint32 i = BG_BE_OBJECT_DOOR_1; i <= BG_BE_OBJECT_DOOR_4; ++i)
@@ -40,6 +61,7 @@ void BattlegroundBE::StartingEventOpenDoors()
{
for (uint32 i = BG_BE_OBJECT_DOOR_1; i <= BG_BE_OBJECT_DOOR_2; ++i)
DoorOpen(i);
+ _events.ScheduleEvent(BG_BE_EVENT_REMOVE_DOORS, BG_BE_REMOVE_DOORS_TIMER);
for (uint32 i = BG_BE_OBJECT_BUFF_1; i <= BG_BE_OBJECT_BUFF_2; ++i)
SpawnBGObject(i, 60);
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundBE.h b/src/server/game/Battlegrounds/Zones/BattlegroundBE.h
index 9db9f9de5ed..7f6b1e157e3 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundBE.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundBE.h
@@ -20,6 +20,7 @@
#define __BATTLEGROUNDBE_H
#include "Arena.h"
+#include "EventMap.h"
enum BattlegroundBEObjectTypes
{
@@ -42,6 +43,16 @@ enum BattlegroundBEGameObjects
BG_BE_OBJECT_TYPE_BUFF_2 = 184664
};
+enum BattlegroundBEData
+{
+ BG_BE_REMOVE_DOORS_TIMER = 5000
+};
+
+enum BattlegroundBEEvents
+{
+ BG_BE_EVENT_REMOVE_DOORS = 1
+};
+
class BattlegroundBE : public Arena
{
public:
@@ -54,5 +65,10 @@ class BattlegroundBE : public Arena
void HandleAreaTrigger(Player* Source, uint32 Trigger) override;
bool SetupBattleground() override;
void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& packet) override;
+
+ private:
+ void PostUpdateImpl(uint32 diff) override;
+
+ EventMap _events;
};
#endif
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp
index cae952d8326..1fb9884ce90 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp
@@ -27,6 +27,27 @@ BattlegroundNA::BattlegroundNA()
BgObjects.resize(BG_NA_OBJECT_MAX);
}
+void BattlegroundNA::PostUpdateImpl(uint32 diff)
+{
+ if (GetStatus() != STATUS_IN_PROGRESS)
+ return;
+
+ _events.Update(diff);
+
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case BG_NA_EVENT_REMOVE_DOORS:
+ for (uint32 i = BG_NA_OBJECT_DOOR_1; i <= BG_NA_OBJECT_DOOR_2; ++i)
+ DelObject(i);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
void BattlegroundNA::StartingEventCloseDoors()
{
for (uint32 i = BG_NA_OBJECT_DOOR_1; i <= BG_NA_OBJECT_DOOR_4; ++i)
@@ -37,6 +58,7 @@ void BattlegroundNA::StartingEventOpenDoors()
{
for (uint32 i = BG_NA_OBJECT_DOOR_1; i <= BG_NA_OBJECT_DOOR_2; ++i)
DoorOpen(i);
+ _events.ScheduleEvent(BG_NA_EVENT_REMOVE_DOORS, BG_NA_REMOVE_DOORS_TIMER);
for (uint32 i = BG_NA_OBJECT_BUFF_1; i <= BG_NA_OBJECT_BUFF_2; ++i)
SpawnBGObject(i, 60);
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundNA.h b/src/server/game/Battlegrounds/Zones/BattlegroundNA.h
index 2bd1c5be3f9..0243f41c3e1 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundNA.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundNA.h
@@ -19,6 +19,7 @@
#define __BATTLEGROUNDNA_H
#include "Arena.h"
+#include "EventMap.h"
enum BattlegroundNAObjectTypes
{
@@ -41,6 +42,16 @@ enum BattlegroundNAGameObjects
BG_NA_OBJECT_TYPE_BUFF_2 = 184664
};
+enum BattlegroundNAData
+{
+ BG_NA_REMOVE_DOORS_TIMER = 5000
+};
+
+enum BattlegroundNAEvents
+{
+ BG_NA_EVENT_REMOVE_DOORS = 1
+};
+
class BattlegroundNA : public Arena
{
public:
@@ -53,5 +64,10 @@ class BattlegroundNA : public Arena
void HandleAreaTrigger(Player* Source, uint32 Trigger) override;
bool SetupBattleground() override;
void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& packet) override;
+
+ private:
+ void PostUpdateImpl(uint32 diff) override;
+
+ EventMap _events;
};
#endif
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp
index 6b68dc04f6c..5ac05722f35 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp
@@ -27,6 +27,27 @@ BattlegroundRL::BattlegroundRL()
BgObjects.resize(BG_RL_OBJECT_MAX);
}
+void BattlegroundRL::PostUpdateImpl(uint32 diff)
+{
+ if (GetStatus() != STATUS_IN_PROGRESS)
+ return;
+
+ _events.Update(diff);
+
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case BG_RL_EVENT_REMOVE_DOORS:
+ for (uint32 i = BG_RL_OBJECT_DOOR_1; i <= BG_RL_OBJECT_DOOR_2; ++i)
+ DelObject(i);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
void BattlegroundRL::StartingEventCloseDoors()
{
for (uint32 i = BG_RL_OBJECT_DOOR_1; i <= BG_RL_OBJECT_DOOR_2; ++i)
@@ -37,6 +58,7 @@ void BattlegroundRL::StartingEventOpenDoors()
{
for (uint32 i = BG_RL_OBJECT_DOOR_1; i <= BG_RL_OBJECT_DOOR_2; ++i)
DoorOpen(i);
+ _events.ScheduleEvent(BG_RL_EVENT_REMOVE_DOORS, BG_RL_REMOVE_DOORS_TIMER);
for (uint32 i = BG_RL_OBJECT_BUFF_1; i <= BG_RL_OBJECT_BUFF_2; ++i)
SpawnBGObject(i, 60);
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRL.h b/src/server/game/Battlegrounds/Zones/BattlegroundRL.h
index 759fdf4a659..d7514832b35 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundRL.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundRL.h
@@ -19,6 +19,7 @@
#define __BATTLEGROUNDRL_H
#include "Arena.h"
+#include "EventMap.h"
enum BattlegroundRLObjectTypes
{
@@ -37,6 +38,16 @@ enum BattlegroundRLGameObjects
BG_RL_OBJECT_TYPE_BUFF_2 = 184664
};
+enum BattlegroundRLData
+{
+ BG_RL_REMOVE_DOORS_TIMER = 5000
+};
+
+enum BattlegroundRLEvents
+{
+ BG_RL_EVENT_REMOVE_DOORS = 1
+};
+
class BattlegroundRL : public Arena
{
public:
@@ -49,5 +60,10 @@ class BattlegroundRL : public Arena
void HandleAreaTrigger(Player* Source, uint32 Trigger) override;
bool SetupBattleground() override;
+
+ private:
+ void PostUpdateImpl(uint32 diff) override;
+
+ EventMap _events;
};
#endif