aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSouler <soulerhyd@gmail.com>2012-02-11 20:45:31 +0100
committerSouler <soulerhyd@gmail.com>2012-02-11 21:08:26 +0100
commit491c25ddc52a7e1a32398868d97f1a2aedd840a7 (patch)
tree26eb019095d14c5ba99e4eeefbf04954ddeaed51 /src
parent987860c09ca4d9f1b77724ecf7066e341e501830 (diff)
Core/Arenas/Dalaran Sewers: Add warning before fully activating the waterfall
Diffstat (limited to 'src')
-rw-r--r--[-rwxr-xr-x]src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp39
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundDS.h11
2 files changed, 33 insertions, 17 deletions
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp
index 0b96627ad6c..928fab6d786 100755..100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp
@@ -46,25 +46,34 @@ BattlegroundDS::~BattlegroundDS()
void BattlegroundDS::PostUpdateImpl(uint32 diff)
{
+ if (GetStatus() != STATUS_IN_PROGRESS)
+ return;
+
if (getWaterFallTimer() < diff)
{
- if (isWaterFallActive())
+ if (getWaterFallStatus() == BG_DS_WATERFALL_STATUS_OFF) // Add the water
{
- setWaterFallTimer(urand(BG_DS_WATERFALL_TIMER_MIN, BG_DS_WATERFALL_TIMER_MAX));
- SpawnBGObject(BG_DS_OBJECT_WATER_2, getWaterFallTimer());
- // turn off collision
- if (GameObject* gob = GetBgMap()->GetGameObject(m_BgObjects[BG_DS_OBJECT_WATER_1]))
- gob->SetGoState(GO_STATE_ACTIVE);
- setWaterFallActive(false);
+ DoorClose(BG_DS_OBJECT_WATER_2);
+ setWaterFallTimer(BG_DS_WATERFALL_WARNING_DURATION);
+ setWaterFallStatus(BG_DS_WATERFALL_STATUS_WARNING);
}
- else
+ else if (getWaterFallStatus() == BG_DS_WATERFALL_STATUS_WARNING) // Active collision
{
- setWaterFallTimer(BG_DS_WATERFALL_DURATION);
- SpawnBGObject(BG_DS_OBJECT_WATER_2, RESPAWN_IMMEDIATELY);
- // Turn on collision
if (GameObject* gob = GetBgMap()->GetGameObject(m_BgObjects[BG_DS_OBJECT_WATER_1]))
gob->SetGoState(GO_STATE_READY);
- setWaterFallActive(true);
+
+ setWaterFallTimer(BG_DS_WATERFALL_DURATION);
+ setWaterFallStatus(BG_DS_WATERFALL_STATUS_ON);
+ }
+ else //if (getWaterFallStatus() == BG_DS_WATERFALL_STATUS_ON) // Remove collision and water
+ {
+ // turn off collision
+ if (GameObject* gob = GetBgMap()->GetGameObject(m_BgObjects[BG_DS_OBJECT_WATER_1]))
+ gob->SetGoState(GO_STATE_ACTIVE);
+
+ DoorOpen(BG_DS_OBJECT_WATER_2);
+ setWaterFallTimer(urand(BG_DS_WATERFALL_TIMER_MIN, BG_DS_WATERFALL_TIMER_MAX));
+ setWaterFallStatus(BG_DS_WATERFALL_STATUS_OFF);
}
}
else
@@ -86,9 +95,11 @@ void BattlegroundDS::StartingEventOpenDoors()
SpawnBGObject(i, 60);
setWaterFallTimer(urand(BG_DS_WATERFALL_TIMER_MIN, BG_DS_WATERFALL_TIMER_MAX));
- setWaterFallActive(false);
+ setWaterFallStatus(BG_DS_WATERFALL_STATUS_OFF);
+
+ SpawnBGObject(BG_DS_OBJECT_WATER_2, RESPAWN_IMMEDIATELY);
+ DoorOpen(BG_DS_OBJECT_WATER_2);
- SpawnBGObject(BG_DS_OBJECT_WATER_2, getWaterFallTimer());
// Turn off collision
if (GameObject* gob = GetBgMap()->GetGameObject(m_BgObjects[BG_DS_OBJECT_WATER_1]))
gob->SetGoState(GO_STATE_ACTIVE);
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundDS.h b/src/server/game/Battlegrounds/Zones/BattlegroundDS.h
index 1ec465864d5..3e9e285cc92 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundDS.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundDS.h
@@ -46,7 +46,12 @@ enum BattlegroundDSData
{ // These values are NOT blizzlike... need the correct data!
BG_DS_WATERFALL_TIMER_MIN = 30000,
BG_DS_WATERFALL_TIMER_MAX = 60000,
+ BG_DS_WATERFALL_WARNING_DURATION = 7000,
BG_DS_WATERFALL_DURATION = 10000,
+
+ BG_DS_WATERFALL_STATUS_WARNING = 1, // Water starting to fall, but no LoS Blocking nor movement blocking
+ BG_DS_WATERFALL_STATUS_ON = 2, // LoS and Movement blocking active
+ BG_DS_WATERFALL_STATUS_OFF = 3,
};
class BattlegroundDSScore : public BattlegroundScore
@@ -77,12 +82,12 @@ class BattlegroundDS : public Battleground
bool HandlePlayerUnderMap(Player* player);
private:
uint32 m_waterTimer;
- bool m_waterfallActive;
+ uint8 m_waterfallStatus;
virtual void PostUpdateImpl(uint32 diff);
protected:
- bool isWaterFallActive() { return m_waterfallActive; };
- void setWaterFallActive(bool active) { m_waterfallActive = active; };
+ uint32 getWaterFallStatus() { return m_waterfallStatus; };
+ void setWaterFallStatus(uint32 status) { m_waterfallStatus = status; };
void setWaterFallTimer(uint32 timer) { m_waterTimer = timer; };
uint32 getWaterFallTimer() { return m_waterTimer; };
};