Core/Arenas/Dalaran Sewers: Add warning before fully activating the waterfall

This commit is contained in:
Souler
2012-02-11 20:45:31 +01:00
parent 987860c09c
commit 491c25ddc5
2 changed files with 34 additions and 18 deletions

41
src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp Executable file → Normal file
View File

@@ -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
{
DoorClose(BG_DS_OBJECT_WATER_2);
setWaterFallTimer(BG_DS_WATERFALL_WARNING_DURATION);
setWaterFallStatus(BG_DS_WATERFALL_STATUS_WARNING);
}
else if (getWaterFallStatus() == BG_DS_WATERFALL_STATUS_WARNING) // Active collision
{
if (GameObject* gob = GetBgMap()->GetGameObject(m_BgObjects[BG_DS_OBJECT_WATER_1]))
gob->SetGoState(GO_STATE_READY);
setWaterFallTimer(BG_DS_WATERFALL_DURATION);
setWaterFallStatus(BG_DS_WATERFALL_STATUS_ON);
}
else //if (getWaterFallStatus() == BG_DS_WATERFALL_STATUS_ON) // Remove collision and 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);
}
else
{
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);
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);

View File

@@ -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; };
};