Merge pull request #5559 from Souler/fix_ds_pipe_knockback

More Dalaran Sewers Arena fixes
This commit is contained in:
Subv
2012-03-04 14:22:58 -08:00
2 changed files with 29 additions and 0 deletions
@@ -65,6 +65,19 @@ void BattlegroundDS::PostUpdateImpl(uint32 diff)
setPipeKnockBackTimer(getPipeKnockBackTimer() - diff); setPipeKnockBackTimer(getPipeKnockBackTimer() - diff);
} }
if (getWaterFallStatus() == BG_DS_WATERFALL_STATUS_ON) // Repeat knockback while the waterfall still active
{
if (getWaterFallKnockbackTimer() < diff)
{
if (Creature* waterSpout = GetBgMap()->GetCreature(BgCreatures[BG_DS_NPC_WATERFALL_KNOCKBACK]))
waterSpout->CastSpell(waterSpout, BG_DS_SPELL_WATER_SPOUT, true);
setWaterFallKnockbackTimer(BG_DS_WATERFALL_KNOCKBACK_TIMER);
}
else
setWaterFallKnockbackTimer(getWaterFallKnockbackTimer() - diff);
}
if (getWaterFallTimer() < diff) if (getWaterFallTimer() < diff)
{ {
if (getWaterFallStatus() == BG_DS_WATERFALL_STATUS_OFF) // Add the water if (getWaterFallStatus() == BG_DS_WATERFALL_STATUS_OFF) // Add the water
@@ -83,6 +96,7 @@ void BattlegroundDS::PostUpdateImpl(uint32 diff)
setWaterFallTimer(BG_DS_WATERFALL_DURATION); setWaterFallTimer(BG_DS_WATERFALL_DURATION);
setWaterFallStatus(BG_DS_WATERFALL_STATUS_ON); setWaterFallStatus(BG_DS_WATERFALL_STATUS_ON);
setWaterFallKnockbackTimer(BG_DS_WATERFALL_KNOCKBACK_TIMER);
} }
else //if (getWaterFallStatus() == BG_DS_WATERFALL_STATUS_ON) // Remove collision and water else //if (getWaterFallStatus() == BG_DS_WATERFALL_STATUS_ON) // Remove collision and water
{ {
@@ -125,6 +139,12 @@ void BattlegroundDS::StartingEventOpenDoors()
// Turn off collision // Turn off collision
if (GameObject* gob = GetBgMap()->GetGameObject(BgObjects[BG_DS_OBJECT_WATER_1])) if (GameObject* gob = GetBgMap()->GetGameObject(BgObjects[BG_DS_OBJECT_WATER_1]))
gob->SetGoState(GO_STATE_ACTIVE); gob->SetGoState(GO_STATE_ACTIVE);
// Remove effects of Demonic Circle Summon
for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
if (Player* player = ObjectAccessor::FindPlayer(itr->first))
if (itr->HasAura(48018))
itr->RemoveAurasDueToSpell(48018);
} }
void BattlegroundDS::AddPlayer(Player* player) void BattlegroundDS::AddPlayer(Player* player)
@@ -173,6 +193,10 @@ void BattlegroundDS::HandleAreaTrigger(Player* Source, uint32 Trigger)
{ {
case 5347: case 5347:
case 5348: case 5348:
// Remove effects of Demonic Circle Summon
if (Source->HasAura(48018))
Source->RemoveAurasDueToSpell(48018);
// Someone has get back into the pipes and the knockback has already been performed, // Someone has get back into the pipes and the knockback has already been performed,
// so we reset the knockback count for kicking the player again into the arena. // so we reset the knockback count for kicking the player again into the arena.
if (getPipeKnockBackCount() >= BG_DS_PIPE_KNOCKBACK_TOTAL_COUNT) if (getPipeKnockBackCount() >= BG_DS_PIPE_KNOCKBACK_TOTAL_COUNT)
@@ -68,6 +68,8 @@ enum BattlegroundDSData
BG_DS_WATERFALL_TIMER_MAX = 60000, BG_DS_WATERFALL_TIMER_MAX = 60000,
BG_DS_WATERFALL_WARNING_DURATION = 7000, BG_DS_WATERFALL_WARNING_DURATION = 7000,
BG_DS_WATERFALL_DURATION = 10000, BG_DS_WATERFALL_DURATION = 10000,
BG_DS_WATERFALL_KNOCKBACK_TIMER = 500,
BG_DS_PIPE_KNOCKBACK_FIRST_DELAY = 5000, BG_DS_PIPE_KNOCKBACK_FIRST_DELAY = 5000,
BG_DS_PIPE_KNOCKBACK_DELAY = 3000, BG_DS_PIPE_KNOCKBACK_DELAY = 3000,
BG_DS_PIPE_KNOCKBACK_TOTAL_COUNT = 2, BG_DS_PIPE_KNOCKBACK_TOTAL_COUNT = 2,
@@ -106,6 +108,7 @@ class BattlegroundDS : public Battleground
private: private:
uint32 _waterfallTimer; uint32 _waterfallTimer;
uint8 _waterfallStatus; uint8 _waterfallStatus;
uint32 _waterfallKnockbackTimer;
uint32 _pipeKnockBackTimer; uint32 _pipeKnockBackTimer;
uint8 _pipeKnockBackCount; uint8 _pipeKnockBackCount;
@@ -115,6 +118,8 @@ class BattlegroundDS : public Battleground
void setWaterFallStatus(uint8 status) { _waterfallStatus = status; }; void setWaterFallStatus(uint8 status) { _waterfallStatus = status; };
uint32 getWaterFallTimer() { return _waterfallTimer; }; uint32 getWaterFallTimer() { return _waterfallTimer; };
void setWaterFallTimer(uint32 timer) { _waterfallTimer = timer; }; void setWaterFallTimer(uint32 timer) { _waterfallTimer = timer; };
uint32 getWaterFallKnockbackTimer() { return _waterfallTimer; };
void setWaterFallKnockbackTimer(uint32 timer) { _waterfallKnockbackTimer = timer; };
uint8 getPipeKnockBackCount() { return _pipeKnockBackCount; }; uint8 getPipeKnockBackCount() { return _pipeKnockBackCount; };
void setPipeKnockBackCount(uint8 count) { _pipeKnockBackCount = count; }; void setPipeKnockBackCount(uint8 count) { _pipeKnockBackCount = count; };
uint32 getPipeKnockBackTimer() { return _pipeKnockBackTimer; }; uint32 getPipeKnockBackTimer() { return _pipeKnockBackTimer; };