void BattlegroundDS::Update (uint32 diff) { Battleground::Update(diff); if (GetStatus() == STATUS_IN_PROGRESS) { if (GetStartTime() >= 47 * MINUTE * IN_MILLISECONDS) // after 47 minutes without one team losing, the arena closes with no winner and no rating change { UpdateArenaWorldState(); CheckArenaAfterTimerConditions(); } } if (getWaterFallTimer() < diff) { if (isWaterFallActive()) { setWaterFallTimer(urand(BG_DS_WATERFALL_TIMER_MIN, BG_DS_WATERFALL_TIMER_MAX)); for (uint32 i = BG_DS_OBJECT_WATER_1; i <= BG_DS_OBJECT_WATER_2; ++i) SpawnBGObject(i, getWaterFallTimer()); setWaterFallActive(false); } else { setWaterFallTimer(BG_DS_WATERFALL_DURATION); for (uint32 i = BG_DS_OBJECT_WATER_1; i <= BG_DS_OBJECT_WATER_2; ++i) SpawnBGObject(i, RESPAWN_IMMEDIATELY); setWaterFallActive(true); } } else setWaterFallTimer(getWaterFallTimer() - diff); }
void BattlegroundDS::PostUpdateImpl(uint32 diff) { if (GetStatus() != STATUS_IN_PROGRESS) return; if (getWaterFallTimer() < diff) { 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(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 { // turn off collision if (GameObject* gob = GetBgMap()->GetGameObject(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 setWaterFallTimer(getWaterFallTimer() - diff); }
void BattlegroundDS::PostUpdateImpl(uint32 diff) { if (GetStatus() != STATUS_IN_PROGRESS) return; if (getPipeKnockBackCount() < BG_DS_PIPE_KNOCKBACK_TOTAL_COUNT) { if (getPipeKnockBackTimer() < diff) { for (uint32 i = BG_DS_NPC_PIPE_KNOCKBACK_1; i <= BG_DS_NPC_PIPE_KNOCKBACK_2; ++i) if (Creature* waterSpout = GetBgMap()->GetCreature(BgCreatures[i])) waterSpout->CastSpell(waterSpout, BG_DS_SPELL_FLUSH, true); setPipeKnockBackCount(getPipeKnockBackCount() + 1); setPipeKnockBackTimer(BG_DS_PIPE_KNOCKBACK_DELAY); } else setPipeKnockBackTimer(getPipeKnockBackTimer() - diff); } if (getWaterFallTimer() < diff) { 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 and perform knockback { if (Creature* waterSpout = GetBgMap()->GetCreature(BgCreatures[BG_DS_NPC_WATERFALL_KNOCKBACK])) waterSpout->CastSpell(waterSpout, BG_DS_SPELL_WATER_SPOUT, true); if (GameObject* gob = GetBgMap()->GetGameObject(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 { // turn off collision if (GameObject* gob = GetBgMap()->GetGameObject(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 setWaterFallTimer(getWaterFallTimer() - diff); }
void BattlegroundDS::Update(uint32 diff) { Battleground::Update(diff); if (GetStatus() == STATUS_IN_PROGRESS) { if (GetStartTime() >= 47*MINUTE*IN_MILLISECONDS) // after 47 minutes without one team losing, the arena closes with no winner and no rating change { UpdateArenaWorldState(); CheckArenaAfterTimerConditions(); } } if (getWaterFallTimer() < diff) { if (GetBgMap(false)) if (isWaterFallActive()) { setWaterFallTimer(urand(BG_DS_WATERFALL_TIMER_MIN, BG_DS_WATERFALL_TIMER_MAX)); for (uint32 i = BG_DS_OBJECT_WATER_1; i <= BG_DS_OBJECT_WATER_2; ++i) SpawnBGObject(i, getWaterFallTimer()); setWaterFallActive(false); } else { setWaterFallTimer(BG_DS_WATERFALL_DURATION); for (uint32 i = BG_DS_OBJECT_WATER_1; i <= BG_DS_OBJECT_WATER_2; ++i) SpawnBGObject(i, RESPAWN_IMMEDIATELY); setWaterFallActive(true); } } else setWaterFallTimer(getWaterFallTimer() - diff); if (GetStatus() == STATUS_IN_PROGRESS) { if(m_knockback < diff && m_knockbackCheck) { for(BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); itr++) { Player * plr = sObjectMgr->GetPlayer(itr->first); if (plr->GetTeam() == ALLIANCE && plr->GetDistance2d(1214, 765) <= 50 && plr->GetPositionZ() > 10) KnockBackPlayer(plr, 6.15f, 50.00f, 7.00f); if (plr->GetTeam() == HORDE && plr->GetDistance2d(1369, 817) <= 50 && plr->GetPositionZ() > 10) KnockBackPlayer(plr, 3.10f, 50.00f, 7.00f); plr->RemoveAurasDueToSpell(48018); } m_knockbackCheck = false; } else m_knockback -= diff; } }
void BattlegroundDS::StartingEventOpenDoors() { for (uint32 i = BG_DS_OBJECT_DOOR_1; i <= BG_DS_OBJECT_DOOR_2; ++i) DoorOpen(i); for (uint32 i = BG_DS_OBJECT_BUFF_1; i <= BG_DS_OBJECT_BUFF_2; ++i) SpawnBGObject(i, 60); for (uint32 i = BG_DS_OBJECT_READYMARKER_1; i <= BG_DS_OBJECT_READYMARKER_2; ++i) DelObject(i); setWaterFallTimer(urand(BG_DS_WATERFALL_TIMER_MIN, BG_DS_WATERFALL_TIMER_MAX)); setWaterFallStatus(BG_DS_WATERFALL_STATUS_OFF); setPipeKnockBackTimer(BG_DS_PIPE_KNOCKBACK_FIRST_DELAY); setPipeKnockBackCount(0); SpawnBGObject(BG_DS_OBJECT_WATER_2, RESPAWN_IMMEDIATELY); DoorOpen(BG_DS_OBJECT_WATER_2); // Turn off collision if (GameObject* gob = GetBgMap()->GetGameObject(BgObjects[BG_DS_OBJECT_WATER_1])) 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 (player->HasAura(48018)) player->RemoveAurasDueToSpell(48018); }
void BattlegroundDS::PostUpdateImpl(uint32 diff) { if (getWaterFallTimer() < diff) { if (isWaterFallActive()) { setWaterFallTimer(urand(BG_DS_WATERFALL_TIMER_MIN, BG_DS_WATERFALL_TIMER_MAX)); for (uint32 i = BG_DS_OBJECT_WATER_1; i <= BG_DS_OBJECT_WATER_2; ++i) SpawnBGObject(i, getWaterFallTimer()); setWaterFallActive(false); } else { setWaterFallTimer(BG_DS_WATERFALL_DURATION); for (uint32 i = BG_DS_OBJECT_WATER_1; i <= BG_DS_OBJECT_WATER_2; ++i) SpawnBGObject(i, RESPAWN_IMMEDIATELY); setWaterFallActive(true); } } else setWaterFallTimer(getWaterFallTimer() - diff); if (GetStatus() == STATUS_IN_PROGRESS) { if(m_knockback < diff && m_knockbackCheck) { for(BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); itr++) { Player * plr = sObjectMgr->GetPlayerByLowGUID(itr->first); if(plr) { if (plr->GetTeam() == ALLIANCE && plr->GetDistance2d(1214, 765) <= 50 && plr->GetPositionZ() > 10) KnockBackPlayer(plr, 6.15f, 50.00f, 7.00f); if (plr->GetTeam() == HORDE && plr->GetDistance2d(1369, 817) <= 50 && plr->GetPositionZ() > 10) KnockBackPlayer(plr, 3.10f, 50.00f, 7.00f); if(plr->HasAura(SPELL_DEMONIC_CIRCLE)) plr->RemoveAurasDueToSpell(SPELL_DEMONIC_CIRCLE); } } m_knockbackCheck = false; } else m_knockback -= diff; } }
void BattlegroundDS::PostUpdateImpl(uint32 diff) { if (GetStartTime() >= 75*IN_MILLISECONDS) { for(BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end();itr++) { Player *plr = ObjectAccessor::FindPlayer(itr->first); if (plr && plr->isAlive() && plr->GetPositionX() < 1260 && plr->GetPositionY() >755 && plr->GetPositionY() < 775 && plr->GetPositionZ() > 13) { KnockBackPlayer(plr, 6.15f, 50.00f, 5.00f); plr->RemoveAurasDueToSpell(48018); } if (plr && plr->isAlive() && plr->GetPositionX() > 1330 && plr->GetPositionY() >805 && plr->GetPositionY() < 825 && plr->GetPositionZ() > 13) { KnockBackPlayer(plr, 3.10f, 50.00f, 5.00f); plr->RemoveAurasDueToSpell(48018); } } } if (getWaterFallTimer() < diff) { if (isWaterFallActive()) { setWaterFallTimer(urand(BG_DS_WATERFALL_TIMER_MIN, BG_DS_WATERFALL_TIMER_MAX)); for (uint32 i = BG_DS_OBJECT_WATER_1; i <= BG_DS_OBJECT_WATER_2; ++i) SpawnBGObject(i, getWaterFallTimer()); setWaterFallActive(false); } else { setWaterFallTimer(BG_DS_WATERFALL_DURATION); for (uint32 i = BG_DS_OBJECT_WATER_1; i <= BG_DS_OBJECT_WATER_2; ++i) SpawnBGObject(i, RESPAWN_IMMEDIATELY); setWaterFallActive(true); } } else setWaterFallTimer(getWaterFallTimer() - diff); }
void BattlegroundDS::PostUpdateImpl(uint32 diff) { if (getWaterFallTimer() < diff) { if (isWaterFallActive()) { setWaterFallTimer(urand(BG_DS_WATERFALL_TIMER_MIN, BG_DS_WATERFALL_TIMER_MAX)); for (uint32 i = BG_DS_OBJECT_WATER_1; i <= BG_DS_OBJECT_WATER_2; ++i) SpawnBGObject(i, getWaterFallTimer()); setWaterFallActive(false); } else { setWaterFallTimer(BG_DS_WATERFALL_DURATION); for (uint32 i = BG_DS_OBJECT_WATER_1; i <= BG_DS_OBJECT_WATER_2; ++i) SpawnBGObject(i, RESPAWN_IMMEDIATELY); setWaterFallActive(true); } } else setWaterFallTimer(getWaterFallTimer() - diff); }
void BattlegroundDS::StartingEventOpenDoors () { for (uint32 i = BG_DS_OBJECT_DOOR_1; i <= BG_DS_OBJECT_DOOR_2; ++i) DoorOpen(i); for (uint32 i = BG_DS_OBJECT_BUFF_1; i <= BG_DS_OBJECT_BUFF_2; ++i) SpawnBGObject(i, 60); setWaterFallTimer(urand(BG_DS_WATERFALL_TIMER_MIN, BG_DS_WATERFALL_TIMER_MAX)); setWaterFallActive(false); for (uint32 i = BG_DS_OBJECT_WATER_1; i <= BG_DS_OBJECT_WATER_2; ++i) SpawnBGObject(i, getWaterFallTimer()); }
void BattlegroundDS::StartingEventOpenDoors() { for(uint32 i = BG_DS_OBJECT_DOOR_1; i <= BG_DS_OBJECT_DOOR_2; ++i) DoorOpen(i); for(uint32 i = BG_DS_OBJECT_BUFF_1; i <= BG_DS_OBJECT_BUFF_2; ++i) SpawnBGObject(i, 60); SpawnBGObject(BG_DS_OBJECT_WATER_1, RESPAWN_ONE_DAY); SpawnBGObject(BG_DS_OBJECT_WATER_2, RESPAWN_IMMEDIATELY); DoorOpen(BG_DS_OBJECT_WATER_2); setWaterFallTimer(urand(BG_DS_WATERFALL_TIMER_MIN, BG_DS_WATERFALL_TIMER_MAX)); setWaterFallStatus(BG_DS_WATERFALL_STATUS_OFF); setPipeKnockBackTimer(BG_DS_PIPE_KNOCKBACK_FIRST_DELAY); setPipeKnockBackCount(0); }
void BattlegroundDS::StartingEventOpenDoors() { for (uint32 i = BG_DS_OBJECT_DOOR_1; i <= BG_DS_OBJECT_DOOR_2; ++i) DoorOpen(i); for (uint32 i = BG_DS_OBJECT_BUFF_1; i <= BG_DS_OBJECT_BUFF_2; ++i) SpawnBGObject(i, 60); setWaterFallTimer(urand(BG_DS_WATERFALL_TIMER_MIN, BG_DS_WATERFALL_TIMER_MAX)); setWaterFallStatus(BG_DS_WATERFALL_STATUS_OFF); SpawnBGObject(BG_DS_OBJECT_WATER_2, RESPAWN_IMMEDIATELY); DoorOpen(BG_DS_OBJECT_WATER_2); // Turn off collision if (GameObject* gob = GetBgMap()->GetGameObject(BgObjects[BG_DS_OBJECT_WATER_1])) gob->SetGoState(GO_STATE_ACTIVE); }
void BattlegroundDS::PostUpdateImpl(uint32 diff) { if (GetStatus() != STATUS_IN_PROGRESS) return; if (getPipeKnockBackCount() < BG_DS_PIPE_KNOCKBACK_TOTAL_COUNT) { if (getPipeKnockBackTimer() < diff) { for (uint32 i = BG_DS_NPC_PIPE_KNOCKBACK_1; i <= BG_DS_NPC_PIPE_KNOCKBACK_2; ++i) if (Creature* waterSpout = GetBgMap()->GetCreature(BgCreatures[i])) waterSpout->CastSpell(waterSpout, BG_DS_SPELL_FLUSH, true); setPipeKnockBackCount(getPipeKnockBackCount() + 1); setPipeKnockBackTimer(BG_DS_PIPE_KNOCKBACK_DELAY); } else 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 (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 and start knockback timer { if (GameObject* gob = GetBgMap()->GetGameObject(BgObjects[BG_DS_OBJECT_WATER_1])) gob->SetGoState(GO_STATE_READY); setWaterFallTimer(BG_DS_WATERFALL_DURATION); setWaterFallStatus(BG_DS_WATERFALL_STATUS_ON); setWaterFallKnockbackTimer(BG_DS_WATERFALL_KNOCKBACK_TIMER); } else //if (getWaterFallStatus() == BG_DS_WATERFALL_STATUS_ON) // Remove collision and water { // turn off collision if (GameObject* gob = GetBgMap()->GetGameObject(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 setWaterFallTimer(getWaterFallTimer() - diff); if (GetStatus() == STATUS_IN_PROGRESS) { if(knockback < diff && knockbackCheck) { for(BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end();itr++) { Player * plr = ObjectAccessor::FindPlayer(itr->first); if (plr->GetTeam() == ALLIANCE && plr->GetDistance2d(1214, 765) <= 50 && plr->GetPositionZ() > 10) KnockBackPlayer(plr, 6.15f, 50.00f, 7.00f); if (plr->GetTeam() == HORDE && plr->GetDistance2d(1369, 817) <= 50 && plr->GetPositionZ() > 10) KnockBackPlayer(plr, 3.10f, 50.00f, 7.00f); plr->RemoveAurasDueToSpell(48018); } knockbackCheck = false; } else knockback -= diff; } }
void BattlegroundDS::Update(uint32 diff) { Battleground::Update(diff); if(GetStatus() != STATUS_IN_PROGRESS) return; if(GetStatus() == STATUS_IN_PROGRESS) { if(GetStartTime() >= 47*MINUTE*IN_MILLISECONDS) // after 47 minutes without one team losing, the arena closes with no winner and no rating change { UpdateArenaWorldState(); CheckArenaAfterTimerConditions(); } } if(getPipeKnockBackCount() < BG_DS_PIPE_KNOCKBACK_TOTAL_COUNT) { if(getPipeKnockBackTimer() < diff) { for(uint32 i = BG_DS_NPC_PIPE_KNOCKBACK_1; i <= BG_DS_NPC_PIPE_KNOCKBACK_2; ++i) if(Creature* waterSpout = GetBgMap()->GetCreature(BGArrayForCreatures[i])) waterSpout->CastSpell(waterSpout, BG_DS_SPELL_FLUSH, true); setPipeKnockBackCount(getPipeKnockBackCount() + 1); setPipeKnockBackTimer(BG_DS_PIPE_KNOCKBACK_DELAY); } else setPipeKnockBackTimer(getPipeKnockBackTimer() - diff); } //if(!m_knockback && m_teleport) //{ // if(m_teleport <= diff) // { // for(BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) // { // Player* plr = ObjectAccessor::FindPlayer(itr->first); // if(!plr) // continue; // if(plr->GetPositionZ() > 13.0f) // HandlePlayerUnderMap(plr); // } // m_teleport = 5 * IN_MILLISECONDS; // } // else // m_teleport -= diff; //} if(getWaterFallTimer() < diff) { switch(getWaterFallStatus()) { case 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); break; case BG_DS_WATERFALL_STATUS_WARNING: // Active collision and start knockback timer if(GameObject* gob = GetBgMap()->GetGameObject(BGArrayForObjects[BG_DS_OBJECT_WATER_1])) gob->SetGoState(GO_STATE_READY); setWaterFallTimer(BG_DS_WATERFALL_DURATION); setWaterFallStatus(BG_DS_WATERFALL_STATUS_ON); setWaterFallKnockbackTimer(BG_DS_WATERFALL_KNOCKBACK_TIMER); break; case BG_DS_WATERFALL_STATUS_ON: // Remove collision and water // turn off collision if(GameObject* gob = GetBgMap()->GetGameObject(BGArrayForObjects[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); break; } } else setWaterFallTimer(getWaterFallTimer() - diff); }