void BattleGroundTP::FillInitialWorldStates(WorldPacket& data, uint32& count) { FillInitialWorldState(data, count, BG_TP_FLAG_CAPTURES_ALLIANCE, m_TeamScores[TEAM_INDEX_ALLIANCE]); FillInitialWorldState(data, count, BG_TP_FLAG_CAPTURES_HORDE, m_TeamScores[TEAM_INDEX_HORDE]); if (m_FlagState[TEAM_INDEX_ALLIANCE] == BG_TP_FLAG_STATE_ON_GROUND) FillInitialWorldState(data, count, BG_TP_FLAG_UNK_ALLIANCE, -1); else if (m_FlagState[TEAM_INDEX_ALLIANCE] == BG_TP_FLAG_STATE_ON_PLAYER) FillInitialWorldState(data, count, BG_TP_FLAG_UNK_ALLIANCE, 1); else FillInitialWorldState(data, count, BG_TP_FLAG_UNK_ALLIANCE, 0); if (m_FlagState[TEAM_INDEX_HORDE] == BG_TP_FLAG_STATE_ON_GROUND) FillInitialWorldState(data, count, BG_TP_FLAG_UNK_HORDE, -1); else if (m_FlagState[TEAM_INDEX_HORDE] == BG_TP_FLAG_STATE_ON_PLAYER) FillInitialWorldState(data, count, BG_TP_FLAG_UNK_HORDE, 1); else FillInitialWorldState(data, count, BG_TP_FLAG_UNK_HORDE, 0); FillInitialWorldState(data, count, BG_TP_FLAG_CAPTURES_MAX, BG_TP_MAX_TEAM_SCORE); if (m_FlagState[TEAM_INDEX_HORDE] == BG_TP_FLAG_STATE_ON_PLAYER) FillInitialWorldState(data, count, BG_TP_FLAG_STATE_HORDE, 2); else FillInitialWorldState(data, count, BG_TP_FLAG_STATE_HORDE, 1); if (m_FlagState[TEAM_INDEX_ALLIANCE] == BG_TP_FLAG_STATE_ON_PLAYER) FillInitialWorldState(data, count, BG_TP_FLAG_STATE_ALLIANCE, 2); else FillInitialWorldState(data, count, BG_TP_FLAG_STATE_ALLIANCE, 1); FillInitialWorldState(data, count, BG_TP_TIME_ENABLED, WORLD_STATE_ADD); FillInitialWorldState(data, count, BG_TP_TIME_REMAINING, GetRemainingTimeInMinutes()); }
void BattleGroundWS::FillInitialWorldStates(WorldPacket& data, uint32& count) { FillInitialWorldState(data, count, BG_WS_FLAG_CAPTURES_ALLIANCE, GetTeamScore(ALLIANCE)); FillInitialWorldState(data, count, BG_WS_FLAG_CAPTURES_HORDE, GetTeamScore(HORDE)); if (m_FlagState[BG_TEAM_ALLIANCE] == BG_WS_FLAG_STATE_ON_GROUND) FillInitialWorldState(data, count, BG_WS_FLAG_UNK_ALLIANCE, -1); else if (m_FlagState[BG_TEAM_ALLIANCE] == BG_WS_FLAG_STATE_ON_PLAYER) FillInitialWorldState(data, count, BG_WS_FLAG_UNK_ALLIANCE, 1); else FillInitialWorldState(data, count, BG_WS_FLAG_UNK_ALLIANCE, 0); if (m_FlagState[BG_TEAM_HORDE] == BG_WS_FLAG_STATE_ON_GROUND) FillInitialWorldState(data, count, BG_WS_FLAG_UNK_HORDE, -1); else if (m_FlagState[BG_TEAM_HORDE] == BG_WS_FLAG_STATE_ON_PLAYER) FillInitialWorldState(data, count, BG_WS_FLAG_UNK_HORDE, 1); else FillInitialWorldState(data, count, BG_WS_FLAG_UNK_HORDE, 0); FillInitialWorldState(data, count, BG_WS_FLAG_CAPTURES_MAX, BG_WS_MAX_TEAM_SCORE); if (m_FlagState[BG_TEAM_HORDE] == BG_WS_FLAG_STATE_ON_PLAYER) FillInitialWorldState(data, count, BG_WS_FLAG_STATE_HORDE, 2); else FillInitialWorldState(data, count, BG_WS_FLAG_STATE_HORDE, 1); if (m_FlagState[BG_TEAM_ALLIANCE] == BG_WS_FLAG_STATE_ON_PLAYER) FillInitialWorldState(data, count, BG_WS_FLAG_STATE_ALLIANCE, 2); else FillInitialWorldState(data, count, BG_WS_FLAG_STATE_ALLIANCE, 1); FillInitialWorldState(data, count, BG_WS_TIME_ENABLED, 1); FillInitialWorldState(data, count, BG_WS_TIME_REMAINING, GetRemainingTimeInMinutes()); }
void BattleGroundWS::FillInitialWorldStates() { FillInitialWorldState(BG_WS_FLAG_CAPTURES_ALLIANCE, GetTeamScore(ALLIANCE)); FillInitialWorldState(BG_WS_FLAG_CAPTURES_HORDE, GetTeamScore(HORDE)); if (m_FlagState[TEAM_INDEX_ALLIANCE] == BG_WS_FLAG_STATE_ON_GROUND) FillInitialWorldState(BG_WS_FLAG_UNK_ALLIANCE, -1); else if (m_FlagState[TEAM_INDEX_ALLIANCE] == BG_WS_FLAG_STATE_ON_PLAYER) FillInitialWorldState(BG_WS_FLAG_UNK_ALLIANCE, 1); else FillInitialWorldState(BG_WS_FLAG_UNK_ALLIANCE, 0); if (m_FlagState[TEAM_INDEX_HORDE] == BG_WS_FLAG_STATE_ON_GROUND) FillInitialWorldState(BG_WS_FLAG_UNK_HORDE, -1); else if (m_FlagState[TEAM_INDEX_HORDE] == BG_WS_FLAG_STATE_ON_PLAYER) FillInitialWorldState(BG_WS_FLAG_UNK_HORDE, 1); else FillInitialWorldState(BG_WS_FLAG_UNK_HORDE, 0); FillInitialWorldState(BG_WS_FLAG_CAPTURES_MAX, BG_WS_MAX_TEAM_SCORE); if (m_FlagState[TEAM_INDEX_HORDE] == BG_WS_FLAG_STATE_ON_PLAYER) FillInitialWorldState(BG_WS_FLAG_STATE_HORDE, 2); else FillInitialWorldState(BG_WS_FLAG_STATE_HORDE, 1); if (m_FlagState[TEAM_INDEX_ALLIANCE] == BG_WS_FLAG_STATE_ON_PLAYER) FillInitialWorldState(BG_WS_FLAG_STATE_ALLIANCE, 2); else FillInitialWorldState(BG_WS_FLAG_STATE_ALLIANCE, 1); FillInitialWorldState(BG_WS_TIME_ENABLED, WORLD_STATE_ADD); FillInitialWorldState(BG_WS_TIME_REMAINING, GetRemainingTimeInMinutes()); }
void BattlegroundKT::FillInitialWorldStates(WorldPacket& data, uint32& count) { FillInitialWorldState(data, count, BG_KT_ORB_POINTS_A, GetTeamScore(ALLIANCE)); FillInitialWorldState(data, count, BG_KT_ORB_POINTS_H, GetTeamScore(HORDE)); /*if (m_OrbState[BG_TEAM_ALLIANCE] == BG_KT_ORB_STATE_ON_GROUND) FillInitialWorldState(data, count, BG_KT_ICON_A, -1); else if (m_OrbState[BG_TEAM_ALLIANCE] == BG_KT_ORB_STATE_ON_PLAYER) FillInitialWorldState(data, count, BG_KT_ICON_A, 1); else FillInitialWorldState(data, count, BG_KT_ICON_A, 0); if (m_OrbState[BG_TEAM_HORDE] == BG_KT_ORB_STATE_ON_GROUND) FillInitialWorldState(data, count, BG_KT_ICON_H, -1); else if (m_OrbState[BG_TEAM_HORDE] == BG_KT_ORB_STATE_ON_PLAYER) FillInitialWorldState(data, count, BG_KT_ICON_H, 1); else FillInitialWorldState(data, count, BG_KT_ICON_H, 0);*/ FillInitialWorldState(data, count, BG_KT_ORB_POINTS_MAX, BG_KT_MAX_TEAM_SCORE); /*if (m_OrbState[BG_TEAM_HORDE] == BG_KT_ORB_STATE_ON_PLAYER) FillInitialWorldState(data, count, BG_KT_ORB_STATE, 2); else FillInitialWorldState(data, count, BG_KT_ORB_STATE, 1); if (m_OrbState[BG_TEAM_ALLIANCE] == BG_KT_ORB_STATE_ON_PLAYER) FillInitialWorldState(data, count, BG_KT_ORB_STATE, 2); else FillInitialWorldState(data, count, BG_KT_ORB_STATE, 1);*/ FillInitialWorldState(data, count, BG_KT_TIME_ENABLED, 1); FillInitialWorldState(data, count, BG_KT_TIME_REMAINING, GetRemainingTimeInMinutes()); }
void BattlegroundKT::FillInitialWorldStates(ByteBuffer &data) { data << uint32(GetTeamScore(ALLIANCE)) << uint32(BG_KT_ORB_POINTS_A); data << uint32(GetTeamScore(HORDE)) << uint32(BG_KT_ORB_POINTS_H); data << uint32(0x1) << uint32(BG_KT_NEUTRAL_ORBS); data << uint32(0x1) << uint32(BG_KT_TIME_ENABLED); data << uint32(GetRemainingTimeInMinutes()) << uint32(BG_KT_TIME_REMAINING); /*if (m_OrbState[BG_TEAM_ALLIANCE] == BG_KT_ORB_STATE_ON_GROUND) Player::BuildWorldState(data, BG_KT_ICON_A, -1); else if (m_OrbState[BG_TEAM_ALLIANCE] == BG_KT_ORB_STATE_ON_PLAYER) Player::BuildWorldState(data, BG_KT_ICON_A, 1); else Player::BuildWorldState(data, BG_KT_ICON_A, 0); if (m_OrbState[BG_TEAM_HORDE] == BG_KT_ORB_STATE_ON_GROUND) Player::BuildWorldState(data, BG_KT_ICON_H, -1); else if (m_OrbState[BG_TEAM_HORDE] == BG_KT_ORB_STATE_ON_PLAYER) Player::BuildWorldState(data, BG_KT_ICON_H, 1); else Player::BuildWorldState(data, BG_KT_ICON_H, 0);*/ /*if (m_OrbState[BG_TEAM_HORDE] == BG_KT_ORB_STATE_ON_PLAYER) Player::BuildWorldState(data, BG_KT_ORB_STATE, 2); else Player::BuildWorldState(data, BG_KT_ORB_STATE, 1); if (m_OrbState[BG_TEAM_ALLIANCE] == BG_KT_ORB_STATE_ON_PLAYER) Player::BuildWorldState(data, BG_KT_ORB_STATE, 2); else Player::BuildWorldState(data, BG_KT_ORB_STATE, 1);*/ }
void BattlegroundKT::PostUpdateImpl(uint32 diff) { if (GetStatus() == STATUS_IN_PROGRESS) { if (m_EndTimer <= diff) { uint32 allianceScore = GetTeamScore(ALLIANCE); uint32 hordeScore = GetTeamScore(HORDE); if (allianceScore > hordeScore) EndBattleground(ALLIANCE); else if (allianceScore < hordeScore) EndBattleground(HORDE); else { // if 0 => tie EndBattleground(m_LastCapturedOrbTeam); } } else { uint32 minutesLeftPrev = GetRemainingTimeInMinutes(); m_EndTimer -= diff; uint32 minutesLeft = GetRemainingTimeInMinutes(); if (minutesLeft != minutesLeftPrev) UpdateWorldState(BG_KT_TIME_REMAINING, minutesLeft); } if (m_UpdatePointsTimer <= diff) { for (uint8 i = 0; i < MAX_ORBS; ++i) if (uint64 guid = m_OrbKeepers[i]) if (m_playersZone.find(guid) != m_playersZone.end()) if (Player* player = ObjectAccessor::FindPlayer(guid)) { AccumulateScore(player->GetTeamId(), m_playersZone[guid]); UpdatePlayerScore(player, SCORE_ORB_SCORE, m_playersZone[guid]); } m_UpdatePointsTimer = BG_KT_POINTS_UPDATE_TIME; } else m_UpdatePointsTimer -= diff; } }
void BattleGroundWS::Update(uint32 diff) { BattleGround::Update(diff); if (GetStatus() == STATUS_IN_PROGRESS) { if (m_FlagState[BG_TEAM_ALLIANCE] == BG_WS_FLAG_STATE_WAIT_RESPAWN) { m_FlagsTimer[BG_TEAM_ALLIANCE] -= diff; if (m_FlagsTimer[BG_TEAM_ALLIANCE] < 0) { m_FlagsTimer[BG_TEAM_ALLIANCE] = 0; RespawnFlag(ALLIANCE, true); } } if (m_FlagState[BG_TEAM_ALLIANCE] == BG_WS_FLAG_STATE_ON_GROUND) { m_FlagsDropTimer[BG_TEAM_ALLIANCE] -= diff; if (m_FlagsDropTimer[BG_TEAM_ALLIANCE] < 0) { m_FlagsDropTimer[BG_TEAM_ALLIANCE] = 0; RespawnDroppedFlag(ALLIANCE); } } if (m_FlagState[BG_TEAM_HORDE] == BG_WS_FLAG_STATE_WAIT_RESPAWN) { m_FlagsTimer[BG_TEAM_HORDE] -= diff; if (m_FlagsTimer[BG_TEAM_HORDE] < 0) { m_FlagsTimer[BG_TEAM_HORDE] = 0; RespawnFlag(HORDE, true); } } if (m_FlagState[BG_TEAM_HORDE] == BG_WS_FLAG_STATE_ON_GROUND) { m_FlagsDropTimer[BG_TEAM_HORDE] -= diff; if (m_FlagsDropTimer[BG_TEAM_HORDE] < 0) { m_FlagsDropTimer[BG_TEAM_HORDE] = 0; RespawnDroppedFlag(HORDE); } } if (m_EndTimer <= diff) { if (m_TeamScores[BG_TEAM_ALLIANCE] > m_TeamScores[BG_TEAM_HORDE]) EndBattleGround(ALLIANCE); else if (m_TeamScores[BG_TEAM_ALLIANCE] < m_TeamScores[BG_TEAM_HORDE]) EndBattleGround(HORDE); else { // if 0 => tie EndBattleGround(m_LastCapturedFlagTeam); } } else { uint32 minutesLeftPrev = GetRemainingTimeInMinutes(); m_EndTimer -= diff; uint32 minutesLeft = GetRemainingTimeInMinutes(); if (minutesLeft != minutesLeftPrev) UpdateWorldState(BG_WS_TIME_REMAINING, minutesLeft); } } }
void BattleGroundWS::Update(uint32 diff) { BattleGround::Update(diff); if (GetStatus() == STATUS_IN_PROGRESS) { if (m_FlagState[BG_TEAM_ALLIANCE] == BG_WS_FLAG_STATE_WAIT_RESPAWN) { m_FlagsTimer[BG_TEAM_ALLIANCE] -= diff; if (m_FlagsTimer[BG_TEAM_ALLIANCE] < 0) { m_FlagsTimer[BG_TEAM_ALLIANCE] = 0; RespawnFlag(ALLIANCE, true); } } if (m_FlagState[BG_TEAM_ALLIANCE] == BG_WS_FLAG_STATE_ON_GROUND) { m_FlagsDropTimer[BG_TEAM_ALLIANCE] -= diff; if (m_FlagsDropTimer[BG_TEAM_ALLIANCE] < 0) { m_FlagsDropTimer[BG_TEAM_ALLIANCE] = 0; RespawnFlagAfterDrop(ALLIANCE); } } if (m_FlagState[BG_TEAM_HORDE] == BG_WS_FLAG_STATE_WAIT_RESPAWN) { m_FlagsTimer[BG_TEAM_HORDE] -= diff; if (m_FlagsTimer[BG_TEAM_HORDE] < 0) { m_FlagsTimer[BG_TEAM_HORDE] = 0; RespawnFlag(HORDE, true); } } if (m_FlagState[BG_TEAM_HORDE] == BG_WS_FLAG_STATE_ON_GROUND) { m_FlagsDropTimer[BG_TEAM_HORDE] -= diff; if (m_FlagsDropTimer[BG_TEAM_HORDE] < 0) { m_FlagsDropTimer[BG_TEAM_HORDE] = 0; RespawnFlagAfterDrop(HORDE); } } if (m_FlagState[BG_TEAM_ALLIANCE] >= BG_WS_FLAG_STATE_ON_PLAYER && m_FlagState[BG_TEAM_HORDE] >= BG_WS_FLAG_STATE_ON_PLAYER) { if (m_FocusedAssault < BG_WS_FIVE_MINUTES) { for(uint8 i = 0; i < BG_TEAMS_COUNT; i++) { Player* carrier = sObjectMgr.GetPlayer(m_FlagKeepers[i]); if (!carrier) continue; if ((!carrier->HasAura(BG_WS_SPELL_FOCUSED_ASSAULT) && !carrier->HasAura(BG_WS_SPELL_BRUTAL_ASSAULT)) || (m_FocusedAssaultExtra && m_FocusedAssault < diff)) carrier->CastSpell(carrier, (m_FocusedAssault < diff) ? BG_WS_SPELL_BRUTAL_ASSAULT : BG_WS_SPELL_FOCUSED_ASSAULT, true); } if (m_FocusedAssault < BG_WS_FIVE_MINUTES && m_FocusedAssaultExtra) m_FocusedAssaultExtra = false; }else m_FocusedAssault -= diff; }else { m_FocusedAssault = BG_WS_CARRIER_DEBUFF; m_FocusedAssaultExtra = true; } if (m_EndTimer > 0) if (m_EndTimer <= diff) { uint32 allianceScore = GetTeamScore(ALLIANCE); uint32 hordeScore = GetTeamScore(HORDE); if (allianceScore > hordeScore) EndBattleGround(ALLIANCE); else if (allianceScore < hordeScore) EndBattleGround(HORDE); else { // if 0 => tie EndBattleGround(m_LastCapturedFlagTeam); } } else { uint32 minutesLeftPrev = GetRemainingTimeInMinutes(); m_EndTimer -= diff; uint32 minutesLeft = GetRemainingTimeInMinutes(); if (minutesLeft != minutesLeftPrev) UpdateWorldState(BG_WS_TIME_REMAINING, minutesLeft); } } }
void BattlegroundKT::PostUpdateImpl(uint32 diff) { if (GetStatus() == STATUS_WAIT_JOIN) { m_CheatersCheckTimer -= diff; if (m_CheatersCheckTimer <= 0) { for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) { Player * plr = ObjectAccessor::FindPlayer(itr->first); if (!plr || !plr->IsInWorld()) continue; if (plr->GetPositionZ() < 24.0f) { if (plr->GetBGTeam() == HORDE) plr->TeleportTo(998, 1781.31f, 1597.76f, 33.61f, plr->GetOrientation(), 0); else plr->TeleportTo(998, 1784.42f, 1072.73f, 29.88f, plr->GetOrientation(), 0); } } m_CheatersCheckTimer = 4000; } } if (GetStatus() == STATUS_IN_PROGRESS) { if (m_EndTimer <= diff) { uint32 allianceScore = GetTeamScore(ALLIANCE); uint32 hordeScore = GetTeamScore(HORDE); if (allianceScore > hordeScore) EndBattleground(ALLIANCE); else if (allianceScore < hordeScore) EndBattleground(HORDE); else EndBattleground(m_LastCapturedOrbTeam); // if 0 => tie } else { uint32 minutesLeftPrev = GetRemainingTimeInMinutes(); m_EndTimer -= diff; uint32 minutesLeft = GetRemainingTimeInMinutes(); if (minutesLeft != minutesLeftPrev) UpdateWorldState(BG_KT_TIME_REMAINING, minutesLeft); } if (m_UpdatePointsTimer <= diff) { for (uint8 i = 0; i < MAX_ORBS; ++i) { if (uint64 guid = m_OrbKeepers[i]) { if (m_playersZone.find(guid) != m_playersZone.end()) { if (Player* player = ObjectAccessor::FindPlayer(guid)) { AccumulateScore(player->GetBGTeam() == ALLIANCE ? BG_TEAM_ALLIANCE : BG_TEAM_HORDE, m_playersZone[guid]); UpdatePlayerScore(player, SCORE_ORB_SCORE, m_playersZone[guid]); } } } } m_UpdatePointsTimer = BG_KT_POINTS_UPDATE_TIME; } else m_UpdatePointsTimer -= diff; } }