void BattlefieldWG::OnPlayerJoinWar(Player* player) { RemoveAurasFromPlayer(player); player->CastSpell(player, SPELL_RECRUIT, true); if (player->GetZoneId() != m_ZoneId) { if (player->GetTeamId() == GetDefenderTeam()) player->TeleportTo(571, 5345, 2842, 410, 3.14f); else { if (player->GetTeamId() == TEAM_HORDE) player->TeleportTo(571, 5025.857422f, 3674.628906f, 362.737122f, 4.135169f); else player->TeleportTo(571, 5101.284f, 2186.564f, 373.549f, 3.812f); } } UpdateTenacity(); if (player->GetTeamId() == GetAttackerTeam()) { if (GetData(BATTLEFIELD_WG_DATA_BROKEN_TOWER_ATT) < 3) player->SetAuraStack(SPELL_TOWER_CONTROL, player, 3 - GetData(BATTLEFIELD_WG_DATA_BROKEN_TOWER_ATT)); } else { if (GetData(BATTLEFIELD_WG_DATA_BROKEN_TOWER_ATT) > 0) player->SetAuraStack(SPELL_TOWER_CONTROL, player, GetData(BATTLEFIELD_WG_DATA_BROKEN_TOWER_ATT)); } SendInitWorldStatesTo(player); }
void BattlefieldTB::OnBattleEnd(bool endByTimer) { if (!endByTimer) // Attackers win (but now they are defenders already) SendWarning(GetDefenderTeam() == TEAM_ALLIANCE ? TB_TEXT_FORTRESS_CAPTURE_ALLIANCE : TB_TEXT_FORTRESS_CAPTURE_HORDE); else // Defenders win SendWarning(GetDefenderTeam() == TEAM_ALLIANCE ? TB_TEXT_FORTRESS_DEFEND_ALLIANCE : TB_TEXT_FORTRESS_DEFEND_HORDE); // UpdateNPCsAndGameObjects() must be called 1 minute after battle ends m_updateObjectsTimer = 1 * MINUTE * IN_MILLISECONDS; updatedNPCAndObjects = false; // Complete quest TeamCastSpell(GetDefenderTeam(), GetDefenderTeam() == TEAM_ALLIANCE ? SPELL_VICTORY_ALLIANCE : SPELL_VICTORY_HORDE); // Rewards TeamCastSpell(GetDefenderTeam(), GetDefenderTeam() == TEAM_ALLIANCE ? SPELL_REWARD_VICTORY_ALLIANCE : SPELL_REWARD_VICTORY_HORDE); for (uint32 i = 0; i < GetData(BATTLEFIELD_TB_DATA_TOWERS_INTACT); i++) // Unsure, for each intact tower or only once for having any tower intact? TeamCastSpell(GetDefenderTeam(), SPELL_REWARD_TOWER_INTACT); TeamCastSpell(GetAttackerTeam(), SPELL_REWARD_DEFEAT); for (uint8 team = 0; team < 2; ++team) { for (ObjectGuid const& guid : m_PlayersInWar[team]) if (Player* player = ObjectAccessor::FindPlayer(guid)) RemoveAurasFromPlayer(player); m_PlayersInWar[team].clear(); } // Reset time warning vars warnedFiveMinutes = false; warnedTwoMinutes = false; warnedOneMinute = false; };
void BattlefieldTB::OnPlayerEnterZone(Player* player) { if (!m_isActive) RemoveAurasFromPlayer(player); SendInitWorldStatesTo(player); }
void BattlefieldWG::OnPlayerEnterZone(Player* player) { if (!m_isActive) RemoveAurasFromPlayer(player); player->AddAura(m_DefenderTeam == TEAM_HORDE ? SPELL_HORDE_CONTROL_PHASE_SHIFT : SPELL_ALLIANCE_CONTROL_PHASE_SHIFT, player); // Send worldstate to player SendInitWorldStatesTo(player); }
void BattlefieldWG::OnPlayerLeaveZone(Player* player) { if (!m_isActive) RemoveAurasFromPlayer(player); player->RemoveAurasDueToSpell(SPELL_HORDE_CONTROLS_FACTORY_PHASE_SHIFT); player->RemoveAurasDueToSpell(SPELL_ALLIANCE_CONTROLS_FACTORY_PHASE_SHIFT); player->RemoveAurasDueToSpell(SPELL_HORDE_CONTROL_PHASE_SHIFT); player->RemoveAurasDueToSpell(SPELL_ALLIANCE_CONTROL_PHASE_SHIFT); }
void BattlefieldTB::OnPlayerJoinWar(Player* player) { RemoveAurasFromPlayer(player); player->SetPvP(true); // Bonus damage buff for attackers if (player->GetTeamId() == GetAttackerTeam() && GetData(BATTLEFIELD_TB_DATA_TOWERS_DESTROYED) > 0) player->CastCustomSpell(SPELL_TOWER_ATTACK_BONUS, SPELLVALUE_AURA_STACK, GetData(BATTLEFIELD_TB_DATA_TOWERS_DESTROYED), player, TRIGGERED_FULL_MASK); }
void BattlefieldWG::OnPlayerLeaveWar(Player* player) { // Remove all aura from WG // TODO: false we can go out of this zone on retail and keep Rank buff, remove on end of WG if (!player->GetSession()->PlayerLogout()) { if (player->GetVehicle()) // Remove vehicle of player if he go out. player->GetVehicle()->Dismiss(); RemoveAurasFromPlayer(player); } player->RemoveAurasDueToSpell(SPELL_HORDE_CONTROLS_FACTORY_PHASE_SHIFT); player->RemoveAurasDueToSpell(SPELL_ALLIANCE_CONTROLS_FACTORY_PHASE_SHIFT); player->RemoveAurasDueToSpell(SPELL_HORDE_CONTROL_PHASE_SHIFT); player->RemoveAurasDueToSpell(SPELL_ALLIANCE_CONTROL_PHASE_SHIFT); }
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::OnPlayerLeaveWar(Player* player) { RemoveAurasFromPlayer(player); }
void BattlefieldTB::OnPlayerLeaveZone(Player* player) { if (!m_isActive) RemoveAurasFromPlayer(player); }