void Battlefield::EndBattle(bool endByTimer) { if (!m_isActive) return; m_isActive = false; m_StartGrouping = false; if (!endByTimer) SetDefenderTeam(GetAttackerTeam()); if (GetDefenderTeam() == TEAM_ALLIANCE) DoPlaySoundToAll(BF_ALLIANCE_WINS); else DoPlaySoundToAll(BF_HORDE_WINS); OnBattleEnd(endByTimer); // Reset battlefield timer m_Timer = m_NoWarBattleTime; SendInitWorldStatesToAll(); }
void Battlefield::StartBattle() { if (m_isActive) return; for (int team = 0; team < BG_TEAMS_COUNT; team++) { m_PlayersInWar[team].clear(); m_Groups[team].clear(); } m_Timer = m_BattleTime; m_isActive = true; InvitePlayersInZoneToWar(); InvitePlayersInQueueToWar(); DoPlaySoundToAll(BF_START); OnBattleStart(); }
void BattlefieldTB::OnBattleStart() { m_Data32[BATTLEFIELD_TB_DATA_CAPTURED] = 0; m_Data32[BATTLEFIELD_TB_DATA_DESTROYED] = 0; for (TbGameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr) if ((*itr)) (*itr)->Rebuild(); for (TbWorkShop::const_iterator itr = WorkShopList.begin(); itr != WorkShopList.end(); ++itr) if ((*itr)) (*itr)->UpdateWorkshop(); for (uint8 i = 0; i < BATTLEFIELD_TB_GY_MAX; i++) { BfGraveyardTB* graveyard = new BfGraveyardTB(this); if (i == BATTLEFIELD_TB_GY_BARADIN_HOLD) m_GraveyardList[i]->GiveControlTo(GetDefenderTeam()); else m_GraveyardList[i]->GiveControlTo(GetAttackerTeam()); m_GraveyardList[i] = graveyard; } for (GuidSet::const_iterator itr = npcAlliance.begin(); itr != npcAlliance.end(); ++itr) if (Unit* unit = sObjectAccessor->FindUnit((*itr))) if (Creature* creature = unit->ToCreature()) HideNpc(creature); for (GuidSet::const_iterator itr = npcHorde.begin(); itr != npcHorde.end(); ++itr) if (Unit* unit = sObjectAccessor->FindUnit((*itr))) if (Creature* creature = unit->ToCreature()) HideNpc(creature); for (GuidSet::const_iterator itr = npcOld.begin(); itr != npcOld.end(); ++itr) if (Unit* unit = sObjectAccessor->FindUnit((*itr))) if (Creature* creature = unit->ToCreature()) HideNpc(creature); for (GameobjectSet::const_iterator itr = goDoors.begin(); itr != goDoors.end(); ++itr) { if (*itr) { (*itr)->ToGameObject()->SetLootState(GO_READY); (*itr)->ToGameObject()->UseDoorOrButton(); } } for (GuidSet::const_iterator itr = Vehicles.begin(); itr != Vehicles.end(); ++itr) { if (Unit* unit = sObjectAccessor->FindUnit((*itr))) { if (Creature* creature = unit->ToCreature()) { ShowNpc(creature, false); creature->setFaction(TolBaradFaction[GetAttackerTeam()]); } } } for (GuidSet::const_iterator itr = questgiversA.begin(); itr != questgiversA.end(); ++itr) if (Unit* unit = sObjectAccessor->FindUnit((*itr))) if (Creature* creature = unit->ToCreature()) HideNpc(creature); for (GuidSet::const_iterator itr = questgiversH.begin(); itr != questgiversH.end(); ++itr) if (Unit* unit = sObjectAccessor->FindUnit((*itr))) if (Creature* creature = unit->ToCreature()) HideNpc(creature); HashMapHolder<Player>::MapType const& plist = sObjectAccessor->GetPlayers(); for (HashMapHolder<Player>::MapType::const_iterator itr = plist.begin(); itr != plist.end(); ++itr) { if (Player* plr = itr->second) { plr->SendUpdateWorldState(WS_TB_BATTLE_TIMER_ENABLED, 1); plr->SendUpdateWorldState(WS_TB_BATTLE_TIMER, uint32(time(NULL) + GetTimer() / 1000)); plr->SendUpdateWorldState(WS_TB_COUNTER_BUILDINGS, 0); plr->SendUpdateWorldState(WS_TB_COUNTER_BUILDINGS_ENABLED, 1); plr->SendUpdateWorldState(WS_TB_HORDE_DEFENCE, GetDefenderTeam() == TEAM_HORDE ? 1 : 0); plr->SendUpdateWorldState(WS_TB_ALLIANCE_DEFENCE, GetDefenderTeam() == TEAM_ALLIANCE ? 1 : 0); plr->SendUpdateWorldState(WS_TB_NEXT_BATTLE_TIMER_ENABLED, 0); plr->SendUpdateWorldState(WS_TB_KEEP_HORDE_DEFENCE, GetDefenderTeam() == TEAM_HORDE ? 1 : 0); plr->SendUpdateWorldState(WS_TB_KEEP_ALLIANCE_DEFENCE, GetDefenderTeam() == TEAM_ALLIANCE ? 1 : 0); plr->SendUpdateWorldState(WS_TB_ALLIANCE_ATTACK, GetDefenderTeam() == TEAM_HORDE ? 1 : 0); plr->SendUpdateWorldState(WS_TB_HORDE_ATTACK, GetDefenderTeam() == TEAM_ALLIANCE ? 1 : 0); switch (GetDefenderTeam()) { case TEAM_ALLIANCE: for (int i = 0; i < MAX_CP_DIFF; i++) { if (i == ALLIANCE_DEFENCE) plr->SendUpdateWorldState(WS_TB_SOUTH_CAPTURE_POINT + i, 1); else plr->SendUpdateWorldState(WS_TB_SOUTH_CAPTURE_POINT + i, 0); } for (int i = 0; i < MAX_CP_DIFF; i++) { if (i == ALLIANCE_DEFENCE) plr->SendUpdateWorldState(WS_TB_EAST_CAPTURE_POINT + i, 1); else plr->SendUpdateWorldState(WS_TB_EAST_CAPTURE_POINT + i, 0); } for (int i = 0; i < MAX_CP_DIFF; i++) { if (i == ALLIANCE_DEFENCE) plr->SendUpdateWorldState(WS_TB_WEST_CAPTURE_POINT + i, 1); else plr->SendUpdateWorldState(WS_TB_WEST_CAPTURE_POINT + i, 0); } for (int i = 0; i < BUILDING_MAX_DIFF; i++) { if (i == BUILDING_ALLIANCE_DEFENCE) plr->SendUpdateWorldState(WS_TB_EAST_SPIRE + i, 1); else plr->SendUpdateWorldState(WS_TB_EAST_SPIRE + i, 0); } for (int i = 0; i < BUILDING_MAX_DIFF; i++) { if (i == BUILDING_ALLIANCE_DEFENCE) plr->SendUpdateWorldState(WS_TB_SOUTH_SPIRE + i, 1); else plr->SendUpdateWorldState(WS_TB_SOUTH_SPIRE + i, 0); } for (int i = 0; i < BUILDING_MAX_DIFF; i++) { if (i == BUILDING_ALLIANCE_DEFENCE) plr->SendUpdateWorldState(WS_TB_WEST_SPIRE + i, 1); else plr->SendUpdateWorldState(WS_TB_WEST_SPIRE + i, 0); } break; case TEAM_HORDE: for (int i = 0; i < MAX_CP_DIFF; i++) { if (i == HORDE_DEFENCE) plr->SendUpdateWorldState(WS_TB_SOUTH_CAPTURE_POINT + i, 1); else plr->SendUpdateWorldState(WS_TB_SOUTH_CAPTURE_POINT + i, 0); } for (int i = 0; i < MAX_CP_DIFF; i++) { if (i == HORDE_DEFENCE) plr->SendUpdateWorldState(WS_TB_EAST_CAPTURE_POINT + i, 1); else plr->SendUpdateWorldState(WS_TB_EAST_CAPTURE_POINT + i, 0); } for (int i = 0; i < MAX_CP_DIFF; i++) { if (i == HORDE_DEFENCE) plr->SendUpdateWorldState(WS_TB_WEST_CAPTURE_POINT + i, 1); else plr->SendUpdateWorldState(WS_TB_WEST_CAPTURE_POINT + i, 0); } for (int i = 0; i < BUILDING_MAX_DIFF; i++) { if (i == BUILDING_HORDE_DEFENCE) plr->SendUpdateWorldState(WS_TB_EAST_SPIRE + i, 1); else plr->SendUpdateWorldState(WS_TB_EAST_SPIRE + i, 0); } for (int i = 0; i < BUILDING_MAX_DIFF; i++) { if (i == BUILDING_HORDE_DEFENCE) plr->SendUpdateWorldState(WS_TB_SOUTH_SPIRE + i, 1); else plr->SendUpdateWorldState(WS_TB_SOUTH_SPIRE + i, 0); } for (int i = 0; i < BUILDING_MAX_DIFF; i++) { if (i == BUILDING_HORDE_DEFENCE) plr->SendUpdateWorldState(WS_TB_WEST_SPIRE + i, 1); else plr->SendUpdateWorldState(WS_TB_WEST_SPIRE + i, 0); } break; } } } for (uint8 team = 0; team < 2; ++team) { for (GuidSet::const_iterator itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr) { if (Player* plr = sObjectMgr->GetPlayerByLowGUID((*itr))) { if (plr->GetTeamId() == GetDefenderTeam()) { uint32 k = urand(0, 3); plr->TeleportTo(BATTLEFIELD_TB_MAPID, TbDefencerStartPosition[k].m_positionX, TbDefencerStartPosition[k].m_positionY, TbDefencerStartPosition[k].m_positionZ, TbDefencerStartPosition[k].m_orientation); plr->CastSpell(plr, SPELL_TB_TOL_BARAD_SLOW_FALL, true); } else plr->TeleportTo(BATTLEFIELD_TB_MAPID, TbDefencerStartPosition[4].m_positionX, TbDefencerStartPosition[4].m_positionY, TbDefencerStartPosition[4].m_positionZ, TbDefencerStartPosition[4].m_orientation); } } } DoPlaySoundToAll(BATTLEFIELD_TB_START); SendWarningToAllInZone(BATTLEFIELD_TB_TEXT_START); }