diff options
| -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; };  };  | 
