void BattlefieldTB::OnBattleStart() { // Rebuild all wall /*for (TBGameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr) if ((*itr)) (*itr)->Rebuild();*/ m_Data32[BATTLEFIELD_TB_DATA_BROKEN_TOWER_DEF] = 0; m_Data32[BATTLEFIELD_TB_DATA_CAPTURED_FORT_DEF] = 3; m_Data32[BATTLEFIELD_TB_DATA_CAPTURED_FORT_ATT] = 0; // Update graveyard (in no war time all graveyard is to deffender, in war time, depend of base) for (TBWorkShop::const_iterator itr = WorkShopList.begin(); itr != WorkShopList.end(); ++itr) { if ((*itr)) (*itr)->UpdateGraveYardAndWorkshop(); } //Hide keep npc for (GuidSet::const_iterator itr = KeepCreature[GetAttackerTeam()].begin(); itr != KeepCreature[GetAttackerTeam()].end(); ++itr) if (Unit* unit = ObjectAccessor::FindUnit((*itr))) if (Creature* creature = unit->ToCreature()) HideNpc(creature); for (GuidSet::const_iterator itr = KeepCreature[GetDefenderTeam()].begin(); itr != KeepCreature[GetDefenderTeam()].end(); ++itr) if (Unit* unit = ObjectAccessor::FindUnit((*itr))) if (Creature* creature = unit->ToCreature()) HideNpc(creature); //Show battle npcs for (GuidSet::const_iterator itr = WarCreature[GetDefenderTeam()].begin(); itr != WarCreature[GetDefenderTeam()].end(); ++itr) if (Unit* unit = ObjectAccessor::FindUnit((*itr))) if (Creature* creature = unit->ToCreature()) HideNpc(creature); //Show battle npcs for (GuidSet::const_iterator itr = WarCreature[GetAttackerTeam()].begin(); itr != WarCreature[GetAttackerTeam()].end(); ++itr) if (Unit* unit = ObjectAccessor::FindUnit((*itr))) if (Creature* creature = unit->ToCreature()) HideNpc(creature); //Warnin message SendWarningToAllInZone(BATTLEFIELD_TB_TEXT_START); }
void BattlefieldWG::OnStartGrouping() { SendWarningToAllInZone(BATTLEFIELD_WG_TEXT_WILL_START); }
void BattlefieldWG::OnBattleEnd(bool endByTimer) { // Remove relic if (m_titansRelicGUID) if (GameObject* relic = GetGameObject(m_titansRelicGUID)) relic->RemoveFromWorld(); m_titansRelicGUID = 0; // Remove turret for (GuidSet::const_iterator itr = CanonList.begin(); itr != CanonList.end(); ++itr) { if (Creature* creature = GetCreature(*itr)) { if (!endByTimer) creature->setFaction(WintergraspFaction[GetDefenderTeam()]); HideNpc(creature); } } if (!endByTimer) // One player triggered the relic { // Change all npc in keep for (GuidSet::const_iterator itr = KeepCreature[GetAttackerTeam()].begin(); itr != KeepCreature[GetAttackerTeam()].end(); ++itr) if (Creature* creature = GetCreature(*itr)) HideNpc(creature); for (GuidSet::const_iterator itr = KeepCreature[GetDefenderTeam()].begin(); itr != KeepCreature[GetDefenderTeam()].end(); ++itr) if (Creature* creature = GetCreature(*itr)) ShowNpc(creature, true); // Change all npc out of keep for (GuidSet::const_iterator itr = OutsideCreature[GetDefenderTeam()].begin(); itr != OutsideCreature[GetDefenderTeam()].end(); ++itr) if (Creature* creature = GetCreature(*itr)) HideNpc(creature); for (GuidSet::const_iterator itr = OutsideCreature[GetAttackerTeam()].begin(); itr != OutsideCreature[GetAttackerTeam()].end(); ++itr) if (Creature* creature = GetCreature(*itr)) ShowNpc(creature, true); } // Update all graveyard, control is to defender when no wartime for (uint8 i = 0; i < BATTLEFIELD_WG_GY_HORDE; i++) if (BfGraveyard* graveyard = GetGraveyardById(i)) graveyard->GiveControlTo(GetDefenderTeam()); for (GuidSet::const_iterator itr = m_KeepGameObject[GetDefenderTeam()].begin(); itr != m_KeepGameObject[GetDefenderTeam()].end(); ++itr) if (GameObject* object = GetGameObject(*itr)) object->SetRespawnTime(RESPAWN_IMMEDIATELY); for (GuidSet::const_iterator itr = m_KeepGameObject[GetAttackerTeam()].begin(); itr != m_KeepGameObject[GetAttackerTeam()].end(); ++itr) if (GameObject* object = GetGameObject(*itr)) object->SetRespawnTime(RESPAWN_ONE_DAY); // Update portal defender faction for (GuidSet::const_iterator itr = DefenderPortalList.begin(); itr != DefenderPortalList.end(); ++itr) if (GameObject* portal = GetGameObject(*itr)) portal->SetFaction(WintergraspFaction[GetDefenderTeam()]); // Saving data for (GameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr) (*itr)->Save(); for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr) (*itr)->Save(); for (GuidSet::const_iterator itr = m_PlayersInWar[GetDefenderTeam()].begin(); itr != m_PlayersInWar[GetDefenderTeam()].end(); ++itr) { if (Player* player = sObjectAccessor->FindPlayer(*itr)) { player->CastSpell(player, SPELL_ESSENCE_OF_WINTERGRASP, true); player->CastSpell(player, SPELL_VICTORY_REWARD, true); // Send Wintergrasp victory achievement DoCompleteOrIncrementAchievement(ACHIEVEMENTS_WIN_WG, player); // Award achievement for succeeding in Wintergrasp in 10 minutes or less if (!endByTimer && GetTimer() <= 10000) DoCompleteOrIncrementAchievement(ACHIEVEMENTS_WIN_WG_TIMER_10, player); } } for (GuidSet::const_iterator itr = m_PlayersInWar[GetAttackerTeam()].begin(); itr != m_PlayersInWar[GetAttackerTeam()].end(); ++itr) if (Player* player = sObjectAccessor->FindPlayer(*itr)) player->CastSpell(player, SPELL_DEFEAT_REWARD, true); for (uint8 team = 0; team < 2; ++team) { for (GuidSet::const_iterator itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr) if (Player* player = sObjectAccessor->FindPlayer(*itr)) RemoveAurasFromPlayer(player); m_PlayersInWar[team].clear(); for (GuidSet::const_iterator itr = m_vehicles[team].begin(); itr != m_vehicles[team].end(); ++itr) if (Creature* creature = GetCreature(*itr)) if (creature->IsVehicle()) creature->DespawnOrUnsummon(); m_vehicles[team].clear(); } if (!endByTimer) { for (uint8 team = 0; team < 2; ++team) { for (GuidSet::const_iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) { if (Player* player = sObjectAccessor->FindPlayer(*itr)) { player->RemoveAurasDueToSpell(m_DefenderTeam == TEAM_ALLIANCE ? SPELL_HORDE_CONTROL_PHASE_SHIFT : SPELL_ALLIANCE_CONTROL_PHASE_SHIFT, player->GetGUID()); player->AddAura(m_DefenderTeam == TEAM_HORDE ? SPELL_HORDE_CONTROL_PHASE_SHIFT : SPELL_ALLIANCE_CONTROL_PHASE_SHIFT, player); } } } } if (!endByTimer) // win alli/horde SendWarningToAllInZone((GetDefenderTeam() == TEAM_ALLIANCE) ? BATTLEFIELD_WG_TEXT_WIN_KEEP : BATTLEFIELD_WG_TEXT_WIN_KEEP + 1); else // defend alli/horde SendWarningToAllInZone((GetDefenderTeam() == TEAM_ALLIANCE) ? BATTLEFIELD_WG_TEXT_DEFEND_KEEP : BATTLEFIELD_WG_TEXT_DEFEND_KEEP + 1); }
void BattlefieldWG::OnBattleStart() { // Spawn titan relic if (GameObject* relic = SpawnGameObject(GO_WINTERGRASP_TITAN_S_RELIC, 5440.0f, 2840.8f, 430.43f, 0)) { // Update faction of relic, only attacker can click on relic->SetFaction(WintergraspFaction[GetAttackerTeam()]); // Set in use (not allow to click on before last door is broken) relic->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE); m_titansRelicGUID = relic->GetGUID(); } else TC_LOG_ERROR("bg.battlefield", "WG: Failed to spawn titan relic."); // Update tower visibility and update faction for (GuidSet::const_iterator itr = CanonList.begin(); itr != CanonList.end(); ++itr) { if (Creature* creature = GetCreature(*itr)) { ShowNpc(creature, true); creature->setFaction(WintergraspFaction[GetDefenderTeam()]); } } // Rebuild all wall for (GameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr) { if (*itr) { (*itr)->Rebuild(); (*itr)->UpdateTurretAttack(false); } } SetData(BATTLEFIELD_WG_DATA_BROKEN_TOWER_ATT, 0); SetData(BATTLEFIELD_WG_DATA_BROKEN_TOWER_DEF, 0); SetData(BATTLEFIELD_WG_DATA_DAMAGED_TOWER_ATT, 0); SetData(BATTLEFIELD_WG_DATA_DAMAGED_TOWER_DEF, 0); // Update graveyard (in no war time all graveyard is to deffender, in war time, depend of base) for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr) if (*itr) (*itr)->UpdateGraveyardAndWorkshop(); for (uint8 team = 0; team < 2; ++team) for (GuidSet::const_iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) { // Kick player in orb room, TODO: offline player ? if (Player* player = sObjectAccessor->FindPlayer(*itr)) { float x, y, z; player->GetPosition(x, y, z); if (5500 > x && x > 5392 && y < 2880 && y > 2800 && z < 480) player->TeleportTo(571, 5349.8686f, 2838.481f, 409.240f, 0.046328f); SendInitWorldStatesTo(player); } } // Initialize vehicle counter UpdateCounterVehicle(true); // Send start warning to all players SendWarningToAllInZone(BATTLEFIELD_WG_TEXT_START); }
void BattlefieldTB::OnStartGrouping() { //Warn SendWarningToAllInZone(BATTLEFIELD_TB_TEXT_WILL_START); }
void BattlefieldTB::OnBattleEnd(bool endbytimer) { if(!endbytimer) { //Change all npc in keep for (GuidSet::const_iterator itr = KeepCreature[GetAttackerTeam()].begin(); itr != KeepCreature[GetAttackerTeam()].end(); ++itr) { if (Unit* unit = ObjectAccessor::FindUnit((*itr))) if (Creature* creature = unit->ToCreature()) HideNpc(creature); } for (GuidSet::const_iterator itr = KeepCreature[GetDefenderTeam()].begin(); itr != KeepCreature[GetDefenderTeam()].end(); ++itr) { if (Unit* unit = ObjectAccessor::FindUnit((*itr))) if (Creature* creature = unit->ToCreature()) ShowNpc(creature, true); } // Hide creatures that should be visible only when battle is on. for (GuidSet::const_iterator itr = WarCreature[GetAttackerTeam()].begin(); itr != WarCreature[GetAttackerTeam()].end(); ++itr) { if (Unit* unit = ObjectAccessor::FindUnit((*itr))) if (Creature* creature = unit->ToCreature()) HideNpc(creature); } for (GuidSet::const_iterator itr = WarCreature[GetDefenderTeam()].begin(); itr != WarCreature[GetDefenderTeam()].end(); ++itr) { if (Unit* unit = ObjectAccessor::FindUnit((*itr))) if (Creature* creature = unit->ToCreature()) HideNpc(creature); } /*//Change all npc out of keep for (GuidSet::const_iterator itr = OutsideCreature[GetDefenderTeam()].begin(); itr != OutsideCreature[GetDefenderTeam()].end(); ++itr) { if (Unit* unit = ObjectAccessor::FindUnit((*itr))) if (Creature* creature = unit->ToCreature()) HideNpc(creature); } for (GuidSet::const_iterator itr = OutsideCreature[GetAttackerTeam()].begin(); itr != OutsideCreature[GetAttackerTeam()].end(); ++itr) { if (Unit* unit = ObjectAccessor::FindUnit((*itr))) if (Creature* creature = unit->ToCreature()) ShowNpc(creature, true); }*/ } for (TBGameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr) if ((*itr)) if (!endbytimer) (*itr)->Rebuild(); // Update all graveyard, control is to defender when no wartime for (uint8 i = 0; i<BATTLEFIELD_TB_GY_HORDE; i++) { if (GetGraveYardById(i)) { GetGraveYardById(i)->ChangeControl(GetDefenderTeam()); } } for (TBGameObjectSet::const_iterator itr = m_KeepGameObject[GetDefenderTeam()].begin(); itr != m_KeepGameObject[GetDefenderTeam()].end(); ++itr) (*itr)->SetRespawnTime(RESPAWN_IMMEDIATELY); for (TBGameObjectSet::const_iterator itr = m_KeepGameObject[GetAttackerTeam()].begin(); itr != m_KeepGameObject[GetAttackerTeam()].end(); ++itr) (*itr)->SetRespawnTime(RESPAWN_ONE_DAY); //Saving data for (TBGameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr) (*itr)->Save(); for (TBWorkShop::const_iterator itr = WorkShopList.begin(); itr != WorkShopList.end(); ++itr) (*itr)->Save(); for (GuidSet::const_iterator itr = m_PlayersInWar[GetDefenderTeam()].begin(); itr != m_PlayersInWar[GetDefenderTeam()].end(); ++itr) { if (Player* player = ObjectAccessor::FindPlayer((*itr))) { if (player->GetTeamId() == TEAM_HORDE) { player->CastSpell(player, SPELL_TOL_BARAD_VICTORY_HORDE, true); player->CastSpell(player, SPELL_TOL_BARAD_QUEST_HORDE, true); } else { player->CastSpell(player, SPELL_TOL_BARAD_VICTORY_ALLIANCE, true); player->CastSpell(player, SPELL_TOL_BARAD_QUEST_ALLIANCE, true); } // Victory, TB TODO //DoCompleteOrIncrementAchievement(ACHIEVEMENTS_WIN_TB, player); // Ployez sous notre joug /*if (GetTimer() <= 10000 && !endbytimer) DoCompleteOrIncrementAchievement(ACHIEVEMENTS_WIN_TB_TIMER_10, player);*/ } } for (GuidSet::const_iterator itr = m_PlayersInWar[GetAttackerTeam()].begin(); itr != m_PlayersInWar[GetAttackerTeam()].end(); ++itr) { if (Player* player = ObjectAccessor::FindPlayer((*itr))) { player->CastSpell(player, SPELL_TOL_BARAD_DEFEAT, true); } } for (uint8 team = 0; team < 2; ++team) { for (GuidSet::const_iterator itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr) { if (Player* player = ObjectAccessor::FindPlayer((*itr))) { player->RemoveAura(SPELL_TOWER_BONUS); player->RemoveAurasDueToSpell(SPELL_VETERAN); player->RemoveAurasDueToSpell(SPELL_SPIRITUAL_IMMUNITY_TB); } } m_PlayersInWar[team].clear(); for (GuidSet::const_iterator itr = m_vehicles[team].begin(); itr != m_vehicles[team].end(); ++itr) { if (Unit* unit = ObjectAccessor::FindUnit((*itr))) if (Creature* creature = unit->ToCreature()) if (creature->IsVehicle()) creature->GetVehicleKit()->Dismiss(); } m_vehicles[team].clear(); } if(!endbytimer) { SendWarningToAllInZone(BATTLEFIELD_TB_TEXT_WIN_KEEP, sObjectMgr->GetSkyFireStringForDBCLocale((GetDefenderTeam() == TEAM_ALLIANCE) ? BATTLEFIELD_TB_TEXT_ALLIANCE : BATTLEFIELD_TB_TEXT_HORDE)); } else { SendWarningToAllInZone(BATTLEFIELD_TB_TEXT_DEFEND_KEEP, sObjectMgr->GetSkyFireStringForDBCLocale((GetDefenderTeam() == TEAM_ALLIANCE) ? BATTLEFIELD_TB_TEXT_ALLIANCE : BATTLEFIELD_TB_TEXT_HORDE)); } }
void BattlefieldWG::OnBattleEnd(bool endbytimer) { // Remove relic if (m_relic) m_relic->RemoveFromWorld(); m_relic = NULL; // Remove turret for (GuidSet::const_iterator itr = CanonList.begin(); itr != CanonList.end(); ++itr) { if (Unit* unit = ObjectAccessor::FindUnit(*itr)) { if (Creature* creature = unit->ToCreature()) { if (!endbytimer) creature->setFaction(WintergraspFaction[GetDefenderTeam()]); HideNpc(creature); } } } // If endbytimer is false, battle is end by clicking on relic if (!endbytimer) { // Change all npc in keep for (GuidSet::const_iterator itr = KeepCreature[GetAttackerTeam()].begin(); itr != KeepCreature[GetAttackerTeam()].end(); ++itr) { if (Unit* unit = ObjectAccessor::FindUnit(*itr)) if (Creature* creature = unit->ToCreature()) HideNpc(creature); } for (GuidSet::const_iterator itr = KeepCreature[GetDefenderTeam()].begin(); itr != KeepCreature[GetDefenderTeam()].end(); ++itr) { if (Unit* unit = ObjectAccessor::FindUnit(*itr)) if (Creature* creature = unit->ToCreature()) ShowNpc(creature, true); } // Change all npc out of keep for (GuidSet::const_iterator itr = OutsideCreature[GetDefenderTeam()].begin(); itr != OutsideCreature[GetDefenderTeam()].end(); ++itr) { if (Unit* unit = ObjectAccessor::FindUnit(*itr)) if (Creature* creature = unit->ToCreature()) HideNpc(creature); } for (GuidSet::const_iterator itr = OutsideCreature[GetAttackerTeam()].begin(); itr != OutsideCreature[GetAttackerTeam()].end(); ++itr) { if (Unit* unit = ObjectAccessor::FindUnit(*itr)) if (Creature* creature = unit->ToCreature()) ShowNpc(creature, true); } } // Update all graveyard, control is to defender when no wartime for (uint8 i = 0; i < BATTLEFIELD_WG_GY_HORDE; i++) { if (GetGraveYardById(i)) { GetGraveYardById(i)->ChangeControl(GetDefenderTeam()); } } for (GameObjectSet::const_iterator itr = m_KeepGameObject[GetDefenderTeam()].begin(); itr != m_KeepGameObject[GetDefenderTeam()].end(); ++itr) (*itr)->SetRespawnTime(RESPAWN_IMMEDIATELY); for (GameObjectSet::const_iterator itr = m_KeepGameObject[GetAttackerTeam()].begin(); itr != m_KeepGameObject[GetAttackerTeam()].end(); ++itr) (*itr)->SetRespawnTime(RESPAWN_ONE_DAY); // Update portal defender faction for (GameObjectSet::const_iterator itr = DefenderPortalList.begin(); itr != DefenderPortalList.end(); ++itr) (*itr)->SetUInt32Value(GAMEOBJECT_FACTION, WintergraspFaction[GetDefenderTeam()]); // Saving data for (GameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr) (*itr)->Save(); for (WorkShop::const_iterator itr = WorkShopList.begin(); itr != WorkShopList.end(); ++itr) (*itr)->Save(); uint32 WinHonor = 0; uint32 LossHonor = 0; if (!endbytimer) { WinHonor = 3000 + 400 * m_Data32[BATTLEFIELD_WG_DATA_BROKEN_TOWER_DEF] + 100 * m_Data32[BATTLEFIELD_WG_DATA_DAMAGED_TOWER_DEF]; LossHonor = 1000 + 400 * m_Data32[BATTLEFIELD_WG_DATA_BROKEN_TOWER_ATT] + 100 * m_Data32[BATTLEFIELD_WG_DATA_DAMAGED_TOWER_ATT]; } else { WinHonor = 3000 + 400 * m_Data32[BATTLEFIELD_WG_DATA_BROKEN_TOWER_ATT] + 100 * m_Data32[BATTLEFIELD_WG_DATA_DAMAGED_TOWER_ATT]; LossHonor = 1000 + 400 * m_Data32[BATTLEFIELD_WG_DATA_BROKEN_TOWER_DEF] + 100 * m_Data32[BATTLEFIELD_WG_DATA_DAMAGED_TOWER_DEF]; } for (GuidSet::const_iterator itr = m_PlayersInWar[GetDefenderTeam()].begin(); itr != m_PlayersInWar[GetDefenderTeam()].end(); ++itr) { if (Player* player = ObjectAccessor::FindPlayer(*itr)) { player->AddAura(SPELL_ESSENCE_OF_WINTERGRASP, player); if (player->HasAura(SPELL_LIEUTENANT)) { player->RewardHonor(NULL, 1, WinHonor); RewardMarkOfHonor(player, 3); } else if (player->HasAura(SPELL_CORPORAL)) { player->RewardHonor(NULL, 1, WinHonor); RewardMarkOfHonor(player, 2); } IncrementQuest(player, WGQuest[player->GetTeamId()][1], true); // Send Wintergrasp victory achievement DoCompleteOrIncrementAchievement(ACHIEVEMENTS_WIN_WG, player); // Award achievement for succeeding in Wintergrasp in 10 minutes or less if (!endbytimer && GetTimer() <= 10000) DoCompleteOrIncrementAchievement(ACHIEVEMENTS_WIN_WG_TIMER_10, player); } } for (GuidSet::const_iterator itr = m_PlayersInWar[GetAttackerTeam()].begin(); itr != m_PlayersInWar[GetAttackerTeam()].end(); ++itr) { if (Player* player = ObjectAccessor::FindPlayer(*itr)) { if (player->HasAura(SPELL_LIEUTENANT)) { player->RewardHonor(NULL, 1, LossHonor); RewardMarkOfHonor(player, 1); } else if (player->HasAura(SPELL_CORPORAL)) { player->RewardHonor(NULL, 1, LossHonor); RewardMarkOfHonor(player, 1); } } } for (uint8 team = 0; team < 2; ++team) { for (GuidSet::const_iterator itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr) { if (Player* player = ObjectAccessor::FindPlayer(*itr)) { player->RemoveAura(SPELL_TOWER_CONTROL); player->RemoveAurasDueToSpell(SPELL_RECRUIT); player->RemoveAurasDueToSpell(SPELL_CORPORAL); player->RemoveAurasDueToSpell(SPELL_LIEUTENANT); player->RemoveAurasDueToSpell(SPELL_TENACITY); player->RemoveAurasDueToSpell(SPELL_SPIRITUAL_IMMUNITY); } } m_PlayersInWar[team].clear(); for (GuidSet::const_iterator itr = m_vehicles[team].begin(); itr != m_vehicles[team].end(); ++itr) { if (Unit* unit = ObjectAccessor::FindUnit(*itr)) if (Creature* creature = unit->ToCreature()) if (creature->IsVehicle()) creature->GetVehicleKit()->Dismiss(); } m_vehicles[team].clear(); } if (!endbytimer) { for (uint8 team = 0; team < 2; ++team) { for (GuidSet::const_iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) { if (Player* player = ObjectAccessor::FindPlayer(*itr)) { player->RemoveAurasDueToSpell(m_DefenderTeam == TEAM_ALLIANCE ? SPELL_HORDE_CONTROL_PHASE_SHIFT : SPELL_ALLIANCE_CONTROL_PHASE_SHIFT, player->GetGUID()); player->AddAura(m_DefenderTeam == TEAM_HORDE ? SPELL_HORDE_CONTROL_PHASE_SHIFT : SPELL_ALLIANCE_CONTROL_PHASE_SHIFT, player); } } } } if (!endbytimer) { // win alli/horde SendWarningToAllInZone((GetDefenderTeam() == TEAM_ALLIANCE) ? BATTLEFIELD_WG_TEXT_WIN_KEEP : BATTLEFIELD_WG_TEXT_WIN_KEEP + 1); } else { // defend alli/horde SendWarningToAllInZone((GetDefenderTeam() == TEAM_ALLIANCE) ? BATTLEFIELD_WG_TEXT_DEFEND_KEEP : BATTLEFIELD_WG_TEXT_DEFEND_KEEP + 1); } }
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); }