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 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::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::UpdateNPCsAndGameObjects() { for (ObjectGuid guid : BattleInactiveNPCs) if (Creature* creature = GetCreature(guid)) HideNpc(creature); for (ObjectGuid guid : BattleInactiveGOs) if (GameObject* gameobject = GetGameObject(guid)) gameobject->SetRespawnTime(RESPAWN_ONE_DAY); for (ObjectGuid guid : TemporaryNPCs) if (Creature* creature = GetCreature(guid)) creature->RemoveFromWorld(); TemporaryNPCs.clear(); for (ObjectGuid guid : TemporaryGOs) if (GameObject* gameobject = GetGameObject(guid)) gameobject->Delete(); TemporaryGOs.clear(); // Tol Barad gates - closed during warmup if (GameObject* gates = GetGameObject(TBGatesGUID)) gates->SetGoState(GetState() == BATTLEFIELD_WARMUP ? GO_STATE_READY : GO_STATE_ACTIVE); // Baradin Hold door - open when inactive if (GameObject* door = GetGameObject(TBDoorGUID)) door->SetGoState(GetState() == BATTLEFIELD_INACTIVE ? GO_STATE_ACTIVE : GO_STATE_READY); // Decide which cellblock and questgiver will be active. m_iCellblockRandom = GetState() == BATTLEFIELD_INACTIVE ? urand(CELLBLOCK_THE_HOLE, CELLBLOCK_CURSED_DEPTHS) : uint8(CELLBLOCK_NONE); // To The Hole gate if (GameObject* door = GetGameObject(m_gateToTheHoleGUID)) door->SetGoState(m_iCellblockRandom == CELLBLOCK_THE_HOLE ? GO_STATE_ACTIVE : GO_STATE_READY); // D-Block gate if (GameObject* door = GetGameObject(m_gateDBlockGUID)) door->SetGoState(m_iCellblockRandom == CELLBLOCK_D_BLOCK ? GO_STATE_ACTIVE : GO_STATE_READY); // Cursed Depths gate if (GameObject* door = GetGameObject(m_gateCursedDepthsGUID)) door->SetGoState(m_iCellblockRandom == CELLBLOCK_CURSED_DEPTHS ? GO_STATE_ACTIVE : GO_STATE_READY); if (GetState() == BATTLEFIELD_INACTIVE) { // Delete capture points for (BfCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr) itr->second->DelCapturePoint(); m_capturePoints.clear(); // Create capture points for (uint8 i = 0; i < TB_BASE_COUNT; i++) { TolBaradCapturePoint* capturePoint = new TolBaradCapturePoint(this, GetDefenderTeam()); //Spawn flag pole if (GameObject* go = SpawnGameObject(TBCapturePoints[i].entryFlagPole[GetDefenderTeam()], TBCapturePoints[i].pos, QuaternionData())) { go->SetGoArtKit(GetDefenderTeam() == TEAM_ALLIANCE ? TB_GO_ARTKIT_FLAG_ALLIANCE : TB_GO_ARTKIT_FLAG_HORDE); capturePoint->SetCapturePointData(go); } AddCapturePoint(capturePoint); } for (ObjectGuid guid : BattleInactiveNPCs) if (Creature* creature = GetCreature(guid)) ShowNpc(creature, true); for (ObjectGuid guid : BattleInactiveGOs) if (GameObject* gameobject = GetGameObject(guid)) gameobject->SetRespawnTime(RESPAWN_IMMEDIATELY); for (uint8 i = 0; i < TB_QUEST_INFANTRY_MAX; i++) { uint32 entry = TB_QUEST_INFANTRY[GetDefenderTeam()][urand(0,3)]; if (Creature* creature = SpawnCreature(entry, TBQuestInfantrySpawnData[i])) TemporaryNPCs.insert(creature->GetGUID()); } for (uint8 i = 0; i < TB_GUARDS_MAX; i++) if (Creature* creature = SpawnCreature(GetDefenderTeam() == TEAM_ALLIANCE ? NPC_BARADIN_GUARD : NPC_HELLSCREAMS_SENTRY, GuardNPCSpawns[i])) TemporaryNPCs.insert(creature->GetGUID()); for (uint8 i = 0; i < TB_FACTION_NPC_MAX; i++) if (Creature* creature = SpawnCreature(GetDefenderTeam() == TEAM_ALLIANCE ? FactionNPCSpawns[i].entryAlliance : FactionNPCSpawns[i].entryHorde, FactionNPCSpawns[i].pos)) TemporaryNPCs.insert(creature->GetGUID()); if (Creature* creature = SpawnCreature(RandomQuestgivers[GetDefenderTeam()][m_iCellblockRandom], RandomQuestgiverPos)) TemporaryNPCs.insert(creature->GetGUID()); // Spawn portals for (uint8 i = 0; i < TB_PORTAL_MAX; i++) if (GameObject* go = SpawnGameObject(TBPortalEntry[GetDefenderTeam()], TBPortals[i], QuaternionData())) TemporaryGOs.insert(go->GetGUID()); // Update towers for (ObjectGuid guid : Towers) if (GameObject* go = GetGameObject(guid)) go->SetDestructibleState(GO_DESTRUCTIBLE_REBUILDING); } else if (GetState() == BATTLEFIELD_IN_PROGRESS) { for (uint8 i = 0; i < TB_ABANDONED_SIEGE_ENGINE_COUNT; i++) if (Creature* creature = SpawnCreature(NPC_ABANDONED_SIEGE_ENGINE, TBAbandonedSiegeEngineSpawnData[i])) TemporaryNPCs.insert(creature->GetGUID()); for (ObjectGuid guid : Towers) { if (GameObject* go = GetGameObject(guid)) { go->SetDestructibleState(GO_DESTRUCTIBLE_INTACT); go->ModifyHealth(go->GetGOValue()->Building.MaxHealth); } } } // Spawn banners for (uint8 i = 0; i < TB_BANNER_MAX; i++) if (GameObject* go = SpawnGameObject(TBBannerEntry[GetDefenderTeam()], TBBanners[i], QuaternionData())) TemporaryGOs.insert(go->GetGUID()); // Set graveyard controls for (uint8 i = 0; i < BATTLEFIELD_TB_GRAVEYARD_MAX; i++) if (BfGraveyard* graveyard = GetGraveyardById(i)) graveyard->GiveControlTo(!IsWarTime() || TBGraveyards[i].defenderControls ? GetDefenderTeam() : GetAttackerTeam()); };
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); } }
bool BattlefieldTB::SetupBattlefield() { m_TypeId = BATTLEFIELD_TB; m_BattleId = BATTLEFIELD_BATTLEID_TB; m_ZoneId = BATTLEFIELD_TB_ZONEID; m_MapId = BATTLEFIELD_TB_MAPID; m_MaxPlayer = sWorld->getIntConfig(CONFIG_TOL_BARAD_PLR_MAX); m_IsEnabled = sWorld->getBoolConfig(CONFIG_TOL_BARAD_ENABLE); m_MinPlayer = sWorld->getIntConfig(CONFIG_TOL_BARAD_PLR_MIN); m_MinLevel = sWorld->getIntConfig(CONFIG_TOL_BARAD_PLR_MIN_LVL); m_BattleTime = sWorld->getIntConfig(CONFIG_TOL_BARAD_BATTLETIME) * MINUTE * IN_MILLISECONDS; m_NoWarBattleTime = sWorld->getIntConfig(CONFIG_TOL_BARAD_NOBATTLETIME) * MINUTE * IN_MILLISECONDS; m_RestartAfterCrash = sWorld->getIntConfig(CONFIG_TOL_BARAD_RESTART_AFTER_CRASH) * MINUTE * IN_MILLISECONDS; m_TimeForAcceptInvite = 20; m_StartGroupingTimer = 15 * MINUTE * IN_MILLISECONDS; m_StartGrouping = false; KickPosition.Relocate(-630.460f, 1184.504f, 95.766f, 0); KickPosition.m_mapId = m_MapId; RegisterZone(m_ZoneId); m_Data32.resize(BATTLEFIELD_TB_DATA_MAX); m_Data32[BATTLEFIELD_TB_DATA_CAPTURED] = 0; m_saveTimer = 60000; SetGraveyardNumber(BATTLEFIELD_TB_GY_MAX); if ((sWorld->getWorldState(WS_TB_NEXT_BATTLE_TIMER_ENABLED) == 0) && (sWorld->getWorldState(WS_TB_HORDE_DEFENCE) == 0) && (sWorld->getWorldState(ClockBTWorldState[0]) == 0)) { sWorld->setWorldState(WS_TB_NEXT_BATTLE_TIMER_ENABLED, uint64(false)); sWorld->setWorldState(WS_TB_HORDE_DEFENCE, uint64(urand(0, 1))); sWorld->setWorldState(ClockBTWorldState[0], uint64(m_NoWarBattleTime)); } if (sWorld->getWorldState(WS_TB_UNK) == 0) sWorld->setWorldState(WS_TB_UNK, urand(1, 3)); if (sWorld->getWorldState(WS_TB_UNK_2) == 0) sWorld->setWorldState(WS_TB_UNK_2, time(NULL) + 86400); m_isActive = bool(sWorld->getWorldState(WS_TB_NEXT_BATTLE_TIMER_ENABLED)); m_DefenderTeam = (TeamId)sWorld->getWorldState(WS_TB_HORDE_DEFENCE); m_Timer = sWorld->getWorldState(ClockBTWorldState[0]); if (m_isActive) { m_isActive = false; m_Timer = m_RestartAfterCrash; } for (uint8 i = 0; i < BATTLEFIELD_TB_GY_MAX; i++) { BfGraveyardTB* graveyard = new BfGraveyardTB(this); graveyard->Initialize(TBGraveYard[i].entryh, TBGraveYard[i].entrya, TBGraveYard[i].x, TBGraveYard[i].y, TBGraveYard[i].z, TBGraveYard[i].o, m_DefenderTeam, TBGraveYard[i].gyid); m_GraveyardList[i] = graveyard; } for (uint8 i = 0; i < TB_MAX_WORKSHOP; i++) { BfTBWorkShopData* workshop = new BfTBWorkShopData(this); workshop->Init(TBWorkShopDataBase[i].worldstate, TBWorkShopDataBase[i].type, TBWorkShopDataBase[i].nameid); workshop->ChangeControl(GetDefenderTeam(),true); BfCapturePointTB* point = new BfCapturePointTB(this, GetDefenderTeam()); point->SetCapturePointData(GetDefenderTeam() == TEAM_ALLIANCE ? TBWorkShopDataBase[i].CapturePoint.entrya : TBWorkShopDataBase[i].CapturePoint.entryh, BATTLEFIELD_TB_MAPID, TBWorkShopDataBase[i].CapturePoint.x, TBWorkShopDataBase[i].CapturePoint.y, TBWorkShopDataBase[i].CapturePoint.z, 0); point->LinkToWorkShop(workshop); AddCapturePoint(point); CapturePoints.insert(point); WorkShopList.insert(workshop); } for (uint8 i = 0; i < TB_MAX_DESTROY_MACHINE_NPC; i++) { if (Creature* creature = SpawnCreature(TBDestroyMachineNPC[i].entrya, TBDestroyMachineNPC[i].x, TBDestroyMachineNPC[i].y, TBDestroyMachineNPC[i].z, TBDestroyMachineNPC[i].o, GetAttackerTeam())) { HideNpc(creature); Vehicles.insert(creature->GetGUID()); } } for (uint8 i = 0; i < TB_MAX_OBJ; i++) { GameObject* go = SpawnGameObject(TBGameObjectBuillding[i].entry, BATTLEFIELD_TB_MAPID, TBGameObjectBuillding[i].x, TBGameObjectBuillding[i].y, TBGameObjectBuillding[i].z, TBGameObjectBuillding[i].o); BfTBGameObjectBuilding* b = new BfTBGameObjectBuilding(this); b->Init(go,TBGameObjectBuillding[i].type,TBGameObjectBuillding[i].WorldState,TBGameObjectBuillding[i].nameid); b->m_State = BATTLEFIELD_TB_OBJECTSTATE_ALLIANCE_INTACT - (GetDefenderTeam() * 3); BuildingsInZone.insert(b); } for (uint8 i = 0; i < 4; i++) { if (Creature* creature = SpawnCreature(QuestGivers[i].entrya, QuestGivers[i].x, QuestGivers[i].y, QuestGivers[i].z, QuestGivers[i].o, TEAM_ALLIANCE)) { HideNpc(creature); creature->setFaction(TolBaradFaction[TEAM_ALLIANCE]); questgiversA.insert(creature->GetGUID()); } } for (uint8 i = 0; i < 4; i++) { if (Creature* creature = SpawnCreature(QuestGivers[i].entryh, QuestGivers[i].x, QuestGivers[i].y, QuestGivers[i].z, QuestGivers[i].o, TEAM_HORDE)) { HideNpc(creature); creature->setFaction(TolBaradFaction[TEAM_HORDE]); questgiversH.insert(creature->GetGUID()); } } { int i = 0; GuidSet questgivers = (GetDefenderTeam() == TEAM_ALLIANCE ? questgiversA : questgiversH); for (GuidSet::const_iterator itr = questgivers.begin(); itr != questgivers.end(); ++itr) { if (Unit* unit = sObjectAccessor->FindUnit((*itr))) { if (Creature* creature = unit->ToCreature()) { if (!i || i == sWorld->getWorldState(WS_TB_UNK)) if (!m_isActive) ShowNpc(creature, true); i++; } } } } for (uint8 i = 0; i < 23; i++) { if (Creature* creature = SpawnCreature(AllianceSpawnNPC[i].entrya, AllianceSpawnNPC[i].x, AllianceSpawnNPC[i].y, AllianceSpawnNPC[i].z, AllianceSpawnNPC[i].o, TEAM_ALLIANCE)) { creature->setFaction(TolBaradFaction[TEAM_ALLIANCE]); npcAlliance.insert(creature->GetGUID()); } } for (uint8 i = 0; i < 23; i++) { if (Creature* creature = SpawnCreature(HordeSpawnNPC[i].entrya, HordeSpawnNPC[i].x, HordeSpawnNPC[i].y, HordeSpawnNPC[i].z, HordeSpawnNPC[i].o, TEAM_HORDE)) { creature->setFaction(TolBaradFaction[TEAM_HORDE]); npcHorde.insert(creature->GetGUID()); } } for (uint8 i = 0; i < 130; i++) { if (Creature* creature = SpawnCreature(TbOldNpcStructure[i].entrya, TbOldNpcStructure[i].x, TbOldNpcStructure[i].y, TbOldNpcStructure[i].z, TbOldNpcStructure[i].o, TEAM_NEUTRAL)) { creature->SetRespawnRadius(15.0f); creature->SetDefaultMovementType(RANDOM_MOTION_TYPE); creature->GetMotionMaster()->Initialize(); npcOld.insert(creature->GetGUID()); } } for (uint8 i = 0; i < 4; i++) { if (GameObject* go = SpawnGameObject(TBGameobjectsDoor[i].entrya, BATTLEFIELD_TB_MAPID, TBGameobjectsDoor[i].x, TBGameobjectsDoor[i].y, TBGameobjectsDoor[i].z, TBGameobjectsDoor[i].o)) { go->ToGameObject()->SetLootState(GO_READY); go->ToGameObject()->UseDoorOrButton(); goDoors.insert(go); } } return true; }
void BattlefieldTB::OnBattleEnd(bool endbytimer) { if (sWorld->getWorldState(WS_TB_UNK_2) > (uint64)time(NULL)) { if (sWorld->getWorldState(WS_TB_UNK) > 2) sWorld->setWorldState(WS_TB_UNK, 1); else sWorld->setWorldState(WS_TB_UNK, (sWorld->getWorldState(WS_TB_UNK) + 1)); sWorld->setWorldState(WS_TB_UNK_2, time(NULL) + 86400); } 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 (endbytimer) { if (plr->GetTeamId() == GetDefenderTeam()) { switch (plr->GetTeamId()) { case TEAM_ALLIANCE: plr->CastSpell(plr, SPELL_TB_VICTORY_REWARD_ALLIANCE, true); plr->CastSpell(plr, SPELL_TB_TOL_BARAD_VETERAN, true); plr->CastSpell(plr, SPELL_TB_TOL_BARAD_TOWER_BONUS, true); IncrementQuest(plr, QUEST_TB_TOL_BARAD_VICTORY_IN_TOL_BARAD_A, true); break; case TEAM_HORDE: plr->CastSpell(plr, SPELL_TB_VICTORY_REWARD_HORDE, true); plr->CastSpell(plr, SPELL_TB_TOL_BARAD_VETERAN, true); plr->CastSpell(plr, SPELL_TB_TOL_BARAD_TOWER_BONUS, true); IncrementQuest(plr, QUEST_TB_TOL_BARAD_VICTORY_IN_TOL_BARAD_H, true); break; } DoCompleteOrIncrementAchievement(ACHIEVEMENT_TOL_BARAD_VICTORY, plr, 1); if (m_Data32[BATTLEFIELD_TB_DATA_DESTROYED] == 0) plr->CastSpell(plr, SPELL_TB_TOL_BARAD_TOWER_DEFENDED, true); } else { switch (plr->GetTeamId()) { case TEAM_ALLIANCE: IncrementQuest(plr, QUEST_TB_TOL_BARAD_VICTORY_IN_TOL_BARAD_A, true); break; case TEAM_HORDE: IncrementQuest(plr, QUEST_TB_TOL_BARAD_VICTORY_IN_TOL_BARAD_H, true); break; } plr->CastSpell(plr, SPELL_TB_LOOSER_REWARD, true); plr->RepopAtGraveyard(); } } else { if (plr->GetTeamId() == GetAttackerTeam()) { switch (team) { case TEAM_ALLIANCE: plr->CastSpell(plr, SPELL_TB_VICTORY_REWARD_ALLIANCE, true); break; case TEAM_HORDE: plr->CastSpell(plr, SPELL_TB_VICTORY_REWARD_HORDE, true); break; } } else { plr->CastSpell(plr, SPELL_TB_LOOSER_REWARD, true); plr->RepopAtGraveyard(); } } } } m_PlayersInWar[team].clear(); } 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 (BfCapturePointSet::const_iterator itr = CapturePoints.begin(); itr != CapturePoints.end(); ++itr) if ((*itr)) (*itr)->UpdateCapturePointValue(); for (uint8 i = 0; i < BATTLEFIELD_TB_GY_MAX; i++) m_GraveyardList[i]->GiveControlTo(GetDefenderTeam()); if (GetDefenderTeam() == TEAM_ALLIANCE) { for (GuidSet::const_iterator itr = npcAlliance.begin(); itr != npcAlliance.end(); ++itr) if (Unit* unit = sObjectAccessor->FindUnit((*itr))) if (Creature* creature = unit->ToCreature()) ShowNpc(creature, true); for (GuidSet::const_iterator itr = npcHorde.begin(); itr != npcHorde.end(); ++itr) if (Unit* unit = sObjectAccessor->FindUnit((*itr))) if (Creature* creature = unit->ToCreature()) HideNpc(creature); } else if (GetDefenderTeam() == TEAM_HORDE) { for (GuidSet::const_iterator itr = npcAlliance.begin(); itr != npcAlliance.end(); ++itr) if (Unit* unit = sObjectAccessor->FindUnit((*itr))) if (Creature* creature = unit->ToCreature()) ShowNpc(creature, true); 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()) ShowNpc(creature, true); 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()) HideNpc(creature); 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); int i = 0; GuidSet questgivers = GetDefenderTeam() == TEAM_ALLIANCE ? questgiversA : questgiversH; for (GuidSet::const_iterator itr = questgivers.begin(); itr != questgivers.end(); ++itr) { if (Unit* unit = sObjectAccessor->FindUnit((*itr))) { if (Creature* creature = unit->ToCreature()) { if (!i || i == sWorld->getWorldState(WS_TB_UNK)) ShowNpc(creature, true); i++; } } } 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, 0); plr->SendUpdateWorldState(WS_TB_BATTLE_TIMER, 0); plr->SendUpdateWorldState(WS_TB_COUNTER_BUILDINGS, 0); plr->SendUpdateWorldState(WS_TB_COUNTER_BUILDINGS_ENABLED, 0); plr->SendUpdateWorldState(WS_TB_HORDE_DEFENCE, 0); plr->SendUpdateWorldState(WS_TB_ALLIANCE_DEFENCE, 0); plr->SendUpdateWorldState(WS_TB_NEXT_BATTLE_TIMER_ENABLED, 1); 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, 0); plr->SendUpdateWorldState(WS_TB_HORDE_ATTACK, 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; } } } m_Data32[BATTLEFIELD_TB_DATA_CAPTURED] = 0; m_Data32[BATTLEFIELD_TB_DATA_DESTROYED] = 0; }
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); }