diff options
author | Souler <soulerhyd@gmail.com> | 2012-02-11 20:45:31 +0100 |
---|---|---|
committer | Souler <soulerhyd@gmail.com> | 2012-02-11 21:08:26 +0100 |
commit | 491c25ddc52a7e1a32398868d97f1a2aedd840a7 (patch) | |
tree | 26eb019095d14c5ba99e4eeefbf04954ddeaed51 /src | |
parent | 987860c09ca4d9f1b77724ecf7066e341e501830 (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.cpp | 39 | ||||
-rwxr-xr-x | src/server/game/Battlegrounds/Zones/BattlegroundDS.h | 11 |
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; }; }; |