void BattlegroundAB::_NodeOccupied(uint8 node, Team team) { if (!AddSpiritGuide(node, BG_AB_SpiritGuidePos[node][0], BG_AB_SpiritGuidePos[node][1], BG_AB_SpiritGuidePos[node][2], BG_AB_SpiritGuidePos[node][3], team)) sLog->outError("Failed to spawn spirit guide! point: %u, team: %u, ", node, team); uint8 capturedNodes = 0; for (uint8 i = 0; i < BG_AB_DYNAMIC_NODES_COUNT; ++i) { if (m_Nodes[node] == GetTeamIndexByTeamId(team) + BG_AB_NODE_TYPE_OCCUPIED && !m_NodeTimers[i]) ++capturedNodes; } if (capturedNodes >= 5) CastSpellOnTeam(SPELL_AB_QUEST_REWARD_5_BASES, team); if (capturedNodes >= 4) CastSpellOnTeam(SPELL_AB_QUEST_REWARD_4_BASES, team); if (node >= BG_AB_DYNAMIC_NODES_COUNT)//only dynamic nodes, no start points return; Creature* trigger = GetBGCreature(node+7);//0-6 spirit guides if (!trigger) trigger = AddCreature(WORLD_TRIGGER, node+7, team, BG_AB_NodePositions[node][0], BG_AB_NodePositions[node][1], BG_AB_NodePositions[node][2], BG_AB_NodePositions[node][3]); //add bonus honor aura trigger creature when node is accupied //cast bonus aura (+50% honor in 25yards) //aura should only apply to players who have accupied the node, set correct faction for trigger if (trigger) { trigger->setFaction(team == ALLIANCE ? 84 : 83); trigger->CastSpell(trigger, SPELL_HONORABLE_DEFENDER_25Y, false); } }
/*! Handles end of battleground rewards (marks etc) * \param winningTeam Team that won the battleground * \returns True if CBattleground class should finish applying rewards, false if we handled it fully */ bool ArathiBasin::HandleFinishBattlegroundRewardCalculation(PlayerTeam winningTeam) { CastSpellOnTeam(winningTeam, 43484); CastSpellOnTeam(winningTeam, 69153); CastSpellOnTeam(winningTeam, 69499); CastSpellOnTeam(winningTeam, 69500); return true; }
/*! Handles end of battleground rewards (marks etc) * \param winningTeam Team that won the battleground * \returns True if CBattleground class should finish applying rewards, false if we handled it fully */ bool WarsongGulch::HandleFinishBattlegroundRewardCalculation(PlayerTeam winningTeam) { CastSpellOnTeam(winningTeam, 69158); CastSpellOnTeam(winningTeam, 69496); CastSpellOnTeam(winningTeam, 69497); CastSpellOnTeam(winningTeam, 69498); return true; }
void BattleGroundAV::HandleKillUnit(Creature* creature, Player* killer) { DEBUG_LOG("BattleGroundAV: HandleKillUnit %i", creature->GetEntry()); if (GetStatus() != STATUS_IN_PROGRESS) { return; } uint8 event1 = (sBattleGroundMgr.GetCreatureEventIndex(creature->GetGUIDLow())).event1; if (event1 == BG_EVENT_NONE) { return; } switch (event1) { case BG_AV_BOSS_A: CastSpellOnTeam(BG_AV_BOSS_KILL_QUEST_SPELL, HORDE); // this is a spell which finishes a quest where a player has to kill the boss RewardReputationToTeam(BG_AV_FACTION_H, m_RepBoss, HORDE); RewardHonorToTeam(GetBonusHonorFromKill(BG_AV_KILL_BOSS), HORDE); SendYellToAll(LANG_BG_AV_A_GENERAL_DEAD, LANG_UNIVERSAL, GetSingleCreatureGuid(BG_AV_HERALD, 0)); EndBattleGround(HORDE); break; case BG_AV_BOSS_H: CastSpellOnTeam(BG_AV_BOSS_KILL_QUEST_SPELL, ALLIANCE); // this is a spell which finishes a quest where a player has to kill the boss RewardReputationToTeam(BG_AV_FACTION_A, m_RepBoss, ALLIANCE); RewardHonorToTeam(GetBonusHonorFromKill(BG_AV_KILL_BOSS), ALLIANCE); SendYellToAll(LANG_BG_AV_H_GENERAL_DEAD, LANG_UNIVERSAL, GetSingleCreatureGuid(BG_AV_HERALD, 0)); EndBattleGround(ALLIANCE); break; case BG_AV_CAPTAIN_A: if (IsActiveEvent(BG_AV_NodeEventCaptainDead_A, 0)) { return; } RewardReputationToTeam(BG_AV_FACTION_H, m_RepCaptain, HORDE); RewardHonorToTeam(GetBonusHonorFromKill(BG_AV_KILL_CAPTAIN), HORDE); UpdateScore(BG_TEAM_ALLIANCE, (-1) * BG_AV_RES_CAPTAIN); // spawn destroyed aura SpawnEvent(BG_AV_NodeEventCaptainDead_A, 0, true); break; case BG_AV_CAPTAIN_H: if (IsActiveEvent(BG_AV_NodeEventCaptainDead_H, 0)) { return; } RewardReputationToTeam(BG_AV_FACTION_A, m_RepCaptain, ALLIANCE); RewardHonorToTeam(GetBonusHonorFromKill(BG_AV_KILL_CAPTAIN), ALLIANCE); UpdateScore(BG_TEAM_HORDE, (-1) * BG_AV_RES_CAPTAIN); // spawn destroyed aura SpawnEvent(BG_AV_NodeEventCaptainDead_H, 0, true); break; case BG_AV_MINE_BOSSES_NORTH: ChangeMineOwner(BG_AV_NORTH_MINE, GetAVTeamIndexByTeamId(killer->GetTeam())); break; case BG_AV_MINE_BOSSES_SOUTH: ChangeMineOwner(BG_AV_SOUTH_MINE, GetAVTeamIndexByTeamId(killer->GetTeam())); break; } }
bool EyeOfTheStorm::GivePoints(uint32 team, uint32 points) { //printf("EOTS: Give team %u %u points.\n", team, points); m_points[team] += points; if((m_points[team] - m_lastHonorGainPoints[team]) >= resourcesToGainBH) { uint32 honorToAdd = m_honorPerKill; m_mainLock.Acquire(); for(set<Player*>::iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) { (*itr)->m_bgScore.BonusHonor += honorToAdd; HonorHandler::AddHonorPointsToPlayer((*itr), honorToAdd); } UpdatePvPData(); m_mainLock.Release(); m_lastHonorGainPoints[team] += resourcesToGainBH; } if(m_points[team] >= 1600) { m_points[team] = 1600; m_ended = true; m_winningteam = static_cast<uint8>(team); m_nextPvPUpdateTime = 0; sEventMgr.RemoveEvents(this); sEventMgr.AddEvent(TO< CBattleground* >(this), &CBattleground::Close, EVENT_BATTLEGROUND_CLOSE, 120000, 1, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT); m_mainLock.Acquire(); AddHonorToTeam( m_winningteam, 3 * 185 ); CastSpellOnTeam( m_winningteam, 43477 ); CastSpellOnTeam( m_winningteam, 69156 ); if( m_winningteam == TEAM_ALLIANCE ) AddHonorToTeam( TEAM_HORDE, 1 * 185 ); else AddHonorToTeam( TEAM_ALLIANCE, 1 * 185 ); m_mainLock.Release(); SetWorldState(WORLDSTATE_EOTS_ALLIANCE_VICTORYPOINTS + team, m_points[team]); UpdatePvPData(); return true; } SetWorldState(WORLDSTATE_EOTS_ALLIANCE_VICTORYPOINTS + team, m_points[team]); return false; }
void BattleGroundAB::_NodeOccupied(uint8 node, Team team) { uint8 capturedNodes = 0; for (uint8 i = 0; i < BG_AB_NODES_MAX; ++i) { if (m_Nodes[node] == GetTeamIndexByTeamId(team) + BG_AB_NODE_TYPE_OCCUPIED && !m_NodeTimers[i]) ++capturedNodes; } if (capturedNodes >= 5) CastSpellOnTeam(SPELL_AB_QUEST_REWARD_5_BASES, team); if (capturedNodes >= 4) CastSpellOnTeam(SPELL_AB_QUEST_REWARD_4_BASES, team); }
void BattleGroundAB::_NodeOccupied(uint8 node,Team team) { if (!AddSpiritGuide(node, BG_AB_SpiritGuidePos[node][0], BG_AB_SpiritGuidePos[node][1], BG_AB_SpiritGuidePos[node][2], BG_AB_SpiritGuidePos[node][3], team)) sLog.outError("Failed to spawn spirit guide! point: %u, team: %u,", node, team); uint8 capturedNodes = 0; for (uint8 i = 0; i < BG_AB_NODES_MAX; ++i) { if (m_Nodes[node] == GetTeamIndexByTeamId(team) + BG_AB_NODE_TYPE_OCCUPIED && !m_NodeTimers[i]) ++capturedNodes; } if (capturedNodes >= 5) CastSpellOnTeam(SPELL_AB_QUEST_REWARD_5_BASES, team); if (capturedNodes >= 4) CastSpellOnTeam(SPELL_AB_QUEST_REWARD_4_BASES, team); }
void BattleGroundAB::_NodeOccupied(uint8 node,Team team) { if (!AddSpiritGuide(node, BG_AB_SpiritGuidePos[node][0], BG_AB_SpiritGuidePos[node][1], BG_AB_SpiritGuidePos[node][2], BG_AB_SpiritGuidePos[node][3], team)) sLog.outLog(LOG_DEFAULT, "ERROR: Failed to spawn spirit guide! point: %u, team: %u,", node, team); // SpawnBGCreature(node,RESPAWN_IMMEDIATELY); uint8 capturedNodes = 0; for (uint8 i = 0; i < BG_AB_DYNAMIC_NODES_COUNT; ++i) { if (m_Nodes[node] == GetTeamIndexByTeamId(team) + BG_AB_NODE_TYPE_OCCUPIED && !m_NodeTimers[i]) ++capturedNodes; } if (capturedNodes >= 5) CastSpellOnTeam(SPELL_AB_QUEST_REWARD_5_BASES, team); if (capturedNodes >= 4) CastSpellOnTeam(SPELL_AB_QUEST_REWARD_4_BASES, team); }
void BattlegroundAB::NodeOccupied(uint8 node) { ApplyPhaseMask(); AddSpiritGuide(node, BG_AB_SpiritGuidePos[node][0], BG_AB_SpiritGuidePos[node][1], BG_AB_SpiritGuidePos[node][2], BG_AB_SpiritGuidePos[node][3], _capturePointInfo[node]._ownerTeamId); ++_controlledPoints[_capturePointInfo[node]._ownerTeamId]; if (_controlledPoints[_capturePointInfo[node]._ownerTeamId] >= 5) CastSpellOnTeam(SPELL_AB_QUEST_REWARD_5_BASES, _capturePointInfo[node]._ownerTeamId); if (_controlledPoints[_capturePointInfo[node]._ownerTeamId] >= 4) CastSpellOnTeam(SPELL_AB_QUEST_REWARD_4_BASES, _capturePointInfo[node]._ownerTeamId); Creature* trigger = GetBgMap()->GetCreature(BgCreatures[BG_AB_ALL_NODES_COUNT + node]); if (!trigger) trigger = AddCreature(WORLD_TRIGGER, BG_AB_ALL_NODES_COUNT + node, BG_AB_NodePositions[node][0], BG_AB_NodePositions[node][1], BG_AB_NodePositions[node][2], BG_AB_NodePositions[node][3]); if (trigger) { trigger->setFaction(_capturePointInfo[node]._ownerTeamId == TEAM_ALLIANCE ? 84 : 83); trigger->CastSpell(trigger, SPELL_HONORABLE_DEFENDER_25Y, false); } }
void StrandOfTheAncient::Finish( uint32 winningteam ){ sEventMgr.RemoveEvents( this ); m_ended = true; m_winningteam = winningteam; uint32 losingteam; if( winningteam == TEAM_ALLIANCE ) losingteam = TEAM_HORDE; else losingteam = TEAM_ALLIANCE; AddHonorToTeam( winningteam, 3 * 185 ); AddHonorToTeam( losingteam, 1 * 185 ); CastSpellOnTeam( m_winningteam, 61213 ); UpdatePvPData(); sEventMgr.AddEvent( TO< CBattleground* >( this ), &CBattleground::Close, EVENT_BATTLEGROUND_CLOSE, 120 * 1000, 1,0 ); }
void IsleOfConquest::EventRefineryCaptured(){ ControlPointTypes state = controlpoint[ IOC_CONTROL_POINT_REFINERY ].state; uint32 newteam = 0; uint32 oldteam = 0; switch( state ){ case IOC_SPAWN_TYPE_ALLIANCE_CONTROLLED: newteam = TEAM_ALLIANCE; oldteam = TEAM_HORDE; break; case IOC_SPAWN_TYPE_HORDE_CONTROLLED: newteam = TEAM_HORDE; oldteam = TEAM_ALLIANCE; break; } RemoveAuraFromTeam( oldteam, IOC_REFINERY_BONUS ); CastSpellOnTeam( newteam, IOC_REFINERY_BONUS ); }
void IsleOfConquest::Finish( uint32 losingTeam ){ if( m_ended ) return; m_ended = true; sEventMgr.RemoveEvents(this); sEventMgr.AddEvent(TO< CBattleground* >(this), &CBattleground::Close, EVENT_BATTLEGROUND_CLOSE, 120 * 1000, 1,0); if( losingTeam == TEAM_ALLIANCE ) m_winningteam = TEAM_HORDE; else m_winningteam = TEAM_ALLIANCE; AddHonorToTeam( m_winningteam, 3 * 185 ); AddHonorToTeam( losingTeam, 1 * 185 ); CastSpellOnTeam( m_winningteam, 67033 ); UpdatePvPData(); }
void BattleGroundAV::Update(uint32 diff) { BattleGround::Update(diff); if (GetStatus() != STATUS_IN_PROGRESS) return; if (m_PlayerCheckTimer < diff) { BattleGroundAV::CheckPlayerSize(); m_PlayerCheckTimer = 1000; } else m_PlayerCheckTimer -= diff; // add points from mine owning, and look if the neutral team can reclaim the mine for(uint8 mine = 0; mine < BG_AV_MAX_MINES; mine++) { if (m_Mine_Owner[mine] != BG_AV_TEAM_NEUTRAL) { m_Mine_Timer[mine] -=diff; if (m_Mine_Timer[mine] <= 0) { m_Mine_Timer[mine] = BG_AV_MINE_TICK_TIMER; } if (m_Mine_Reclaim_Timer[mine] > diff) m_Mine_Reclaim_Timer[mine] -= diff; else ChangeMineOwner(mine, BG_AV_TEAM_NEUTRAL); } } // looks for all timers of the nodes and destroy the building (for graveyards the building wont get destroyed, it goes just to the other team for(BG_AV_Nodes i = BG_AV_NODES_FIRSTAID_STATION; i < BG_AV_NODES_MAX; ++i) { if (m_Nodes[i].State == POINT_ASSAULTED) { if (m_Nodes[i].Timer > diff) m_Nodes[i].Timer -= diff; else EventPlayerDestroyedPoint(i); } } for (uint8 i = 0; i < 2; i++) { //handle team captain buffs every 3 + random minutes until they are dead if (m_CaptainBuffTimer[i] != 0) { if (m_CaptainBuffTimer[i] <= diff) { if (i > 0) { if(!IsActiveEvent(BG_AV_NodeEventCaptainDead_H, 0)) { //text is missing / we cannot handle DoScriptText in core -> alterac valley/galvangar -> yell_buff CastSpellOnTeam(BG_AV_CAPTAIN_H_BUFF, HORDE); //PlaySoundToAll(); //probably wrong sound } } else { if(!IsActiveEvent(BG_AV_NodeEventCaptainDead_A, 0)) { //text is missing / we cannot handle DoScriptText in core -> alterac valley/balinda -> yell_buff CastSpellOnTeam(BG_AV_CAPTAIN_A_BUFF, ALLIANCE); //PlaySoundToAll(); //probably wrong sound } } m_CaptainBuffTimer[i] = (180000 + (urand(0,6) * 10000)); } else m_CaptainBuffTimer[i] -= diff; } //handle general warcry buff every 3 minutes + random if enough armor scraps are gathered if (m_GeneralBuffTimer[i] != 0) { if (m_GeneralBuffTimer[i] <= diff) { Team team[2] = {ALLIANCE, HORDE}; GossipIndex Channel; if (i > 0) { //text is missing / we cannot handle DoScriptText in core -> alterac valley/drekthar -> yell_random //PlaySoundToAll(); //probably wrong sound Channel = GOSSIP_CHANNEL2; } else { //text is missing / we cannot handle DoScriptText in core -> alterac valley/vanndar -> yell_random //PlaySoundToAll(); //probably wrong sound Channel = GOSSIP_CHANNEL1; } if (GetGossipStatus(Channel) == STATUS_ACTION1) CastSpellOnTeam(BG_AV_WARCRY_BUFF_1, team[i]); else if (GetGossipStatus(Channel) == STATUS_ACTION2) CastSpellOnTeam(BG_AV_WARCRY_BUFF_2, team[i]); else if (GetGossipStatus(Channel) == STATUS_ACTION3) CastSpellOnTeam(BG_AV_WARCRY_BUFF_3, team[i]); m_GeneralBuffTimer[i] = (180000 + (urand(0,6) * 10000)); } else m_GeneralBuffTimer[i] -= diff; } } }
void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture) { if (nodePoint->nodeType != NODE_TYPE_REFINERY && nodePoint->nodeType != NODE_TYPE_QUARRY) { if (!AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+nodePoint->nodeType-2, BG_IC_SpiritGuidePos[nodePoint->nodeType], nodePoint->faction)) TC_LOG_ERROR("bg.battleground", "Isle of Conquest: Failed to spawn spirit guide! point: %u, team: %u, ", nodePoint->nodeType, nodePoint->faction); } switch (nodePoint->gameobject_type) { case BG_IC_GO_HANGAR_BANNER: { if (!gunshipAlliance || !gunshipHorde) break; std::list<Creature*> cannons; if (nodePoint->faction == TEAM_ALLIANCE) gunshipAlliance->GetCreatureListWithEntryInGrid(cannons, NPC_ALLIANCE_GUNSHIP_CANNON, 150.0f); else gunshipHorde->GetCreatureListWithEntryInGrid(cannons, NPC_HORDE_GUNSHIP_CANNON, 150.0f); for (Creature* cannon : cannons) cannon->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); for (uint8 u = 0; u < MAX_HANGAR_TELEPORTERS_SPAWNS; ++u) { uint8 type = BG_IC_GO_HANGAR_TELEPORTER_1 + u; if (!AddObject(type, (nodePoint->faction == TEAM_ALLIANCE ? GO_ALLIANCE_GUNSHIP_PORTAL : GO_HORDE_GUNSHIP_PORTAL), BG_IC_HangarTeleporters[u], 0, 0, 0, 0, RESPAWN_ONE_DAY)) TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning a gunship portal. Type: %u", BG_IC_GO_HANGAR_TELEPORTER_1 + u); } for (uint8 u = 0; u < MAX_HANGAR_TELEPORTER_EFFECTS_SPAWNS; ++u) { uint8 type = BG_IC_GO_HANGAR_TELEPORTER_EFFECT_1 + u; if (!AddObject(type, (nodePoint->faction == TEAM_ALLIANCE ? GO_ALLIANCE_GUNSHIP_PORTAL_EFFECTS : GO_HORDE_GUNSHIP_PORTAL_EFFECTS), BG_IC_HangarTeleporterEffects[u], 0, 0, 0, 0, RESPAWN_ONE_DAY, GO_STATE_ACTIVE)) TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning a gunship portal effects. Type: %u", BG_IC_GO_HANGAR_TELEPORTER_1 + u); } for (uint8 u = 0; u < MAX_TRIGGER_SPAWNS_PER_FACTION; ++u) { if (!AddCreature(NPC_WORLD_TRIGGER_NOT_FLOATING, BG_IC_NPC_WORLD_TRIGGER_NOT_FLOATING, BG_IC_HangarTrigger[nodePoint->faction], nodePoint->faction, RESPAWN_ONE_DAY, nodePoint->faction == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)) TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning a world trigger. Type: %u", BG_IC_NPC_WORLD_TRIGGER_NOT_FLOATING); } for (uint8 u = 0; u < MAX_CAPTAIN_SPAWNS_PER_FACTION; ++u) { uint8 type = BG_IC_NPC_GUNSHIP_CAPTAIN_1 + u; if (type == BG_IC_NPC_GUNSHIP_CAPTAIN_1) if (AddCreature(nodePoint->faction == TEAM_ALLIANCE ? NPC_ALLIANCE_GUNSHIP_CAPTAIN : NPC_HORDE_GUNSHIP_CAPTAIN, type, BG_IC_HangarCaptains[nodePoint->faction == TEAM_ALLIANCE ? 2 : 0], nodePoint->faction, RESPAWN_ONE_DAY)) GetBGCreature(BG_IC_NPC_GUNSHIP_CAPTAIN_1)->GetAI()->DoAction(ACTION_GUNSHIP_READY); if (type == BG_IC_NPC_GUNSHIP_CAPTAIN_2) if (!AddCreature(nodePoint->faction == TEAM_ALLIANCE ? NPC_ALLIANCE_GUNSHIP_CAPTAIN : NPC_HORDE_GUNSHIP_CAPTAIN, type, BG_IC_HangarCaptains[nodePoint->faction == TEAM_ALLIANCE ? 3 : 1], nodePoint->faction, RESPAWN_ONE_DAY, nodePoint->faction == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)) TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning a world trigger. Type: %u", BG_IC_NPC_GUNSHIP_CAPTAIN_2); } (nodePoint->faction == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)->EnableMovement(true); break; } case BG_IC_GO_QUARRY_BANNER: RemoveAuraOnTeam(SPELL_QUARRY, (nodePoint->faction == TEAM_ALLIANCE ? HORDE : ALLIANCE)); CastSpellOnTeam(SPELL_QUARRY, (nodePoint->faction == TEAM_ALLIANCE ? ALLIANCE : HORDE)); break; case BG_IC_GO_REFINERY_BANNER: RemoveAuraOnTeam(SPELL_OIL_REFINERY, (nodePoint->faction == TEAM_ALLIANCE ? HORDE : ALLIANCE)); CastSpellOnTeam(SPELL_OIL_REFINERY, (nodePoint->faction == TEAM_ALLIANCE ? ALLIANCE : HORDE)); break; case BG_IC_GO_DOCKS_BANNER: if (recapture) break; if (docksTimer < DOCKS_UPDATE_TIME) docksTimer = DOCKS_UPDATE_TIME; // we must del opposing faction vehicles when the node is captured (unused ones) for (uint8 i = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_GLAIVE_THROWER_1_H : BG_IC_NPC_GLAIVE_THROWER_1_A); i < (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_GLAIVE_THROWER_2_H : BG_IC_NPC_GLAIVE_THROWER_2_A); ++i) { if (Creature* glaiveThrower = GetBGCreature(i, false)) { if (Vehicle* vehicleGlaive = glaiveThrower->GetVehicleKit()) { if (!vehicleGlaive->GetPassenger(0)) DelCreature(i); } } } for (uint8 i = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_CATAPULT_1_H : BG_IC_NPC_CATAPULT_1_A); i < (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_CATAPULT_4_H : BG_IC_NPC_CATAPULT_4_A); ++i) { if (Creature* catapult = GetBGCreature(i, false)) { if (Vehicle* vehicleGlaive = catapult->GetVehicleKit()) { if (!vehicleGlaive->GetPassenger(0)) DelCreature(i); } } } // spawning glaive throwers for (uint8 i = 0; i < MAX_GLAIVE_THROWERS_SPAWNS_PER_FACTION; ++i) { uint8 type = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_GLAIVE_THROWER_1_A : BG_IC_NPC_GLAIVE_THROWER_1_H)+i; if (GetBGCreature(type, false) && GetBGCreature(type)->IsAlive()) continue; if (AddCreature(nodePoint->faction == TEAM_ALLIANCE ? NPC_GLAIVE_THROWER_A : NPC_GLAIVE_THROWER_H, type, BG_IC_DocksVehiclesGlaives[i], nodePoint->faction, RESPAWN_ONE_DAY)) GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]); } // spawning catapults for (uint8 i = 0; i < MAX_CATAPULTS_SPAWNS_PER_FACTION; ++i) { uint8 type = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_CATAPULT_1_A : BG_IC_NPC_CATAPULT_1_H)+i; if (GetBGCreature(type, false) && GetBGCreature(type)->IsAlive()) continue; if (AddCreature(NPC_CATAPULT, type, BG_IC_DocksVehiclesCatapults[i], nodePoint->faction, RESPAWN_ONE_DAY)) GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]); } break; case BG_IC_GO_WORKSHOP_BANNER: { if (siegeEngineWorkshopTimer < WORKSHOP_UPDATE_TIME) siegeEngineWorkshopTimer = WORKSHOP_UPDATE_TIME; if (!recapture) { // we must del opposing faction vehicles when the node is captured (unused ones) for (uint8 i = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_DEMOLISHER_1_H : BG_IC_NPC_DEMOLISHER_1_A); i < (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_DEMOLISHER_4_H : BG_IC_NPC_DEMOLISHER_4_A); ++i) { if (Creature* demolisher = GetBGCreature(i, false)) { if (Vehicle* vehicleDemolisher = demolisher->GetVehicleKit()) { // is IsVehicleInUse working as expected? if (!vehicleDemolisher->IsVehicleInUse()) DelCreature(i); } } } for (uint8 i = 0; i < MAX_DEMOLISHERS_SPAWNS_PER_FACTION; ++i) { uint8 type = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_DEMOLISHER_1_A : BG_IC_NPC_DEMOLISHER_1_H)+i; if (GetBGCreature(type, false) && GetBGCreature(type)->IsAlive()) continue; if (AddCreature(NPC_DEMOLISHER, type, BG_IC_WorkshopVehicles[i], nodePoint->faction, RESPAWN_ONE_DAY)) GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]); } // we check if the opossing siege engine is in use int8 enemySiege = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_SIEGE_ENGINE_H : BG_IC_NPC_SIEGE_ENGINE_A); if (Creature* siegeEngine = GetBGCreature(enemySiege, false)) { if (Vehicle* vehicleSiege = siegeEngine->GetVehicleKit()) { // is VehicleInUse working as expected ? if (!vehicleSiege->IsVehicleInUse()) DelCreature(enemySiege); } } uint8 siegeType = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_SIEGE_ENGINE_A : BG_IC_NPC_SIEGE_ENGINE_H); if (!GetBGCreature(siegeType, false) || !GetBGCreature(siegeType)->IsAlive()) { AddCreature((nodePoint->faction == TEAM_ALLIANCE ? NPC_SIEGE_ENGINE_A : NPC_SIEGE_ENGINE_H), siegeType, BG_IC_WorkshopVehicles[4], nodePoint->faction, RESPAWN_ONE_DAY); if (Creature* siegeEngine = GetBGCreature(siegeType)) { siegeEngine->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_UNK_14|UNIT_FLAG_IMMUNE_TO_PC); siegeEngine->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]); } } } for (uint8 i = 0; i < MAX_WORKSHOP_BOMBS_SPAWNS_PER_FACTION; ++i) { AddObject(BG_IC_GO_SEAFORIUM_BOMBS_1+i, GO_SEAFORIUM_BOMBS, workshopBombs[i].GetPositionX(), workshopBombs[i].GetPositionY(), workshopBombs[i].GetPositionZ(), workshopBombs[i].GetOrientation(), 0, 0, 0, 0, 10); if (GameObject* seaforiumBombs = GetBGObject(BG_IC_GO_SEAFORIUM_BOMBS_1+i)) { seaforiumBombs->SetRespawnTime(10); seaforiumBombs->SetFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]); } } break; } default: break; } }
void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture) { if (nodePoint->nodeType != NODE_TYPE_REFINERY && nodePoint->nodeType != NODE_TYPE_QUARRY) { if (!AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+nodePoint->nodeType-2, BG_IC_SpiritGuidePos[nodePoint->nodeType][0], BG_IC_SpiritGuidePos[nodePoint->nodeType][1], BG_IC_SpiritGuidePos[nodePoint->nodeType][2], BG_IC_SpiritGuidePos[nodePoint->nodeType][3], nodePoint->faction)) sLog->outError("Isle of Conquest: Failed to spawn spirit guide! point: %u, team: %u, ", nodePoint->nodeType, nodePoint->faction); } switch (nodePoint->gameobject_type) { case BG_IC_GO_HANGAR_BANNER: { if (!gunshipAlliance || !gunshipHorde) break; std::list<Creature*> cannons; if (nodePoint->faction == TEAM_ALLIANCE) gunshipAlliance->GetCreatureListWithEntryInGrid(cannons, NPC_ALLIANCE_GUNSHIP_CANNON, 150.0f); else gunshipHorde->GetCreatureListWithEntryInGrid(cannons, NPC_HORDE_GUNSHIP_CANNON, 150.0f); for (std::list<Creature*>::const_iterator itr = cannons.begin(); itr != cannons.end(); ++itr) (*itr)->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); for (uint8 u = 0; u < MAX_HANGAR_TELEPORTERS_SPAWNS; ++u) { uint8 type = BG_IC_GO_HANGAR_TELEPORTER_1 + u; if (!AddObject(type, (nodePoint->faction == TEAM_ALLIANCE ? GO_ALLIANCE_GUNSHIP_PORTAL : GO_HORDE_GUNSHIP_PORTAL), BG_IC_HangarTeleporters[u].GetPositionX(), BG_IC_HangarTeleporters[u].GetPositionY(), BG_IC_HangarTeleporters[u].GetPositionZ(), BG_IC_HangarTeleporters[u].GetOrientation(), 0, 0, 0, 0, RESPAWN_ONE_DAY)) sLog->outError("Isle of Conquest: There was an error spawning a gunship portal. Type: %u", BG_IC_GO_HANGAR_TELEPORTER_1 + u); } for (uint8 u = 0; u < MAX_HANGAR_TELEPORTER_EFFECTS_SPAWNS; ++u) { uint8 type = BG_IC_GO_HANGAR_TELEPORTER_EFFECT_1 + u; if (!AddObject(type, (nodePoint->faction == TEAM_ALLIANCE ? GO_ALLIANCE_GUNSHIP_PORTAL_EFFECTS : GO_HORDE_GUNSHIP_PORTAL_EFFECTS), BG_IC_HangarTeleporterEffects[u].GetPositionX(), BG_IC_HangarTeleporterEffects[u].GetPositionY(), BG_IC_HangarTeleporterEffects[u].GetPositionZ(), BG_IC_HangarTeleporterEffects[u].GetOrientation(), 0, 0, 0, 0, RESPAWN_ONE_DAY, GO_STATE_ACTIVE)) sLog->outError("Isle of Conquest: There was an error spawning a gunship portal effects. Type: %u", BG_IC_GO_HANGAR_TELEPORTER_1 + u); } for (uint8 u = 0; u < MAX_TRIGGER_SPAWNS_PER_FACTION; ++u) { if (!AddCreature(NPC_WORLD_TRIGGER_NOT_FLOATING, BG_IC_NPC_WORLD_TRIGGER_NOT_FLOATING, BG_IC_HangarTrigger[nodePoint->faction].GetPositionX(), BG_IC_HangarTrigger[nodePoint->faction].GetPositionY(), BG_IC_HangarTrigger[nodePoint->faction].GetPositionZ(), BG_IC_HangarTrigger[nodePoint->faction].GetOrientation(), RESPAWN_ONE_DAY, nodePoint->faction == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)) sLog->outError("Isle of Conquest: There was an error spawning a world trigger. Type: %u", BG_IC_NPC_WORLD_TRIGGER_NOT_FLOATING); } for (uint8 u = 0; u < MAX_CAPTAIN_SPAWNS_PER_FACTION; ++u) { uint8 type = BG_IC_NPC_GUNSHIP_CAPTAIN_1 + u; if (type == BG_IC_NPC_GUNSHIP_CAPTAIN_1) if (AddCreature(nodePoint->faction == TEAM_ALLIANCE ? NPC_ALLIANCE_GUNSHIP_CAPTAIN : NPC_HORDE_GUNSHIP_CAPTAIN, type, BG_IC_HangarCaptains[nodePoint->faction == TEAM_ALLIANCE ? 2 : 0].GetPositionX(), BG_IC_HangarCaptains[nodePoint->faction == TEAM_ALLIANCE ? 2 : 0].GetPositionY(), BG_IC_HangarCaptains[nodePoint->faction == TEAM_ALLIANCE ? 2 : 0].GetPositionZ(), BG_IC_HangarCaptains[nodePoint->faction == TEAM_ALLIANCE ? 2 : 0].GetOrientation(), RESPAWN_ONE_DAY)) GetBGCreature(BG_IC_NPC_GUNSHIP_CAPTAIN_1)->GetAI()->DoAction(ACTION_GUNSHIP_READY); if (type == BG_IC_NPC_GUNSHIP_CAPTAIN_2) if (!AddCreature(nodePoint->faction == TEAM_ALLIANCE ? NPC_ALLIANCE_GUNSHIP_CAPTAIN : NPC_HORDE_GUNSHIP_CAPTAIN, type, BG_IC_HangarCaptains[nodePoint->faction == TEAM_ALLIANCE ? 3 : 1].GetPositionX(), BG_IC_HangarCaptains[nodePoint->faction == TEAM_ALLIANCE ? 3 : 1].GetPositionY(), BG_IC_HangarCaptains[nodePoint->faction == TEAM_ALLIANCE ? 3 : 1].GetPositionZ(), BG_IC_HangarCaptains[nodePoint->faction == TEAM_ALLIANCE ? 3 : 1].GetOrientation(), RESPAWN_ONE_DAY, nodePoint->faction == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)) sLog->outError("Isle of Conquest: There was an error spawning a world trigger. Type: %u", BG_IC_NPC_GUNSHIP_CAPTAIN_2); } (nodePoint->faction == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)->EnableMovement(true); break; } case BG_IC_GO_QUARRY_BANNER: RemoveAuraOnTeam(SPELL_QUARRY, GetOtherTeamId(nodePoint->faction)); CastSpellOnTeam(SPELL_QUARRY, nodePoint->faction); break; case BG_IC_GO_REFINERY_BANNER: RemoveAuraOnTeam(SPELL_OIL_REFINERY, GetOtherTeamId(nodePoint->faction)); CastSpellOnTeam(SPELL_OIL_REFINERY, nodePoint->faction); break; case BG_IC_GO_DOCKS_BANNER: if (recapture) break; if (docksTimer < DOCKS_UPDATE_TIME) docksTimer = DOCKS_UPDATE_TIME; // spawning glaive throwers for (uint8 i = 0; i < MAX_GLAIVE_THROWERS_SPAWNS_PER_FACTION; ++i) { uint8 type = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_GLAIVE_THROWER_1_A : BG_IC_NPC_GLAIVE_THROWER_1_H)+i; if (GetBGCreature(type)) continue; if (AddCreature(nodePoint->faction == TEAM_ALLIANCE ? NPC_GLAIVE_THROWER_A : NPC_GLAIVE_THROWER_H, type, BG_IC_DocksVehiclesGlaives[i].GetPositionX(), BG_IC_DocksVehiclesGlaives[i].GetPositionY(), BG_IC_DocksVehiclesGlaives[i].GetPositionZ(), BG_IC_DocksVehiclesGlaives[i].GetOrientation(), RESPAWN_ONE_DAY)) GetBGCreature(type)->setFaction(BG_IC_Factions[nodePoint->faction]); } // spawning catapults for (uint8 i = 0; i < MAX_CATAPULTS_SPAWNS_PER_FACTION; ++i) { uint8 type = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_CATAPULT_1_A : BG_IC_NPC_CATAPULT_1_H)+i; if (GetBGCreature(type)) continue; if (AddCreature(NPC_CATAPULT, type, BG_IC_DocksVehiclesCatapults[i].GetPositionX(), BG_IC_DocksVehiclesCatapults[i].GetPositionY(), BG_IC_DocksVehiclesCatapults[i].GetPositionZ(), BG_IC_DocksVehiclesCatapults[i].GetOrientation(), RESPAWN_ONE_DAY)) GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]); } break; case BG_IC_GO_WORKSHOP_BANNER: { if (siegeEngineWorkshopTimer < WORKSHOP_UPDATE_TIME) siegeEngineWorkshopTimer = WORKSHOP_UPDATE_TIME; if (!recapture) { for (uint8 i = 0; i < MAX_DEMOLISHERS_SPAWNS_PER_FACTION; ++i) { uint8 type = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_DEMOLISHER_1_A : BG_IC_NPC_DEMOLISHER_1_H)+i; if (GetBGCreature(type)) continue; if (AddCreature(NPC_DEMOLISHER, type, BG_IC_WorkshopVehicles[i].GetPositionX(), BG_IC_WorkshopVehicles[i].GetPositionY(), BG_IC_WorkshopVehicles[i].GetPositionZ(), BG_IC_WorkshopVehicles[i].GetOrientation(), RESPAWN_ONE_DAY)) GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]); } uint8 siegeType = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_SIEGE_ENGINE_A : BG_IC_NPC_SIEGE_ENGINE_H); if (!GetBGCreature(siegeType)) { AddCreature((nodePoint->faction == TEAM_ALLIANCE ? NPC_SIEGE_ENGINE_A : NPC_SIEGE_ENGINE_H), siegeType, BG_IC_WorkshopVehicles[4].GetPositionX(), BG_IC_WorkshopVehicles[4].GetPositionY(), BG_IC_WorkshopVehicles[4].GetPositionZ(), BG_IC_WorkshopVehicles[4].GetOrientation(), RESPAWN_ONE_DAY); } if (Creature* siegeEngine = GetBGCreature(siegeType)) { siegeEngine->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]); siegeEngine->SetCorpseDelay(5*MINUTE); if (siegeEngine->IsAlive()) if (Vehicle* siegeVehicle = siegeEngine->GetVehicleKit()) if (!siegeVehicle->IsVehicleInUse()) Unit::Kill(siegeEngine, siegeEngine); respawnMap[siegeEngine->GetGUIDLow()] = time(NULL) + VEHICLE_RESPAWN_TIME; } } for (uint8 i = 0; i < MAX_WORKSHOP_BOMBS_SPAWNS_PER_FACTION; ++i) { AddObject(BG_IC_GO_SEAFORIUM_BOMBS_1+i, GO_SEAFORIUM_BOMBS, workshopBombs[i].GetPositionX(), workshopBombs[i].GetPositionY(), workshopBombs[i].GetPositionZ(), workshopBombs[i].GetOrientation(), 0, 0, 0, 0, 10); if (GameObject* seaforiumBombs = GetBGObject(BG_IC_GO_SEAFORIUM_BOMBS_1+i)) { seaforiumBombs->SetRespawnTime(10); seaforiumBombs->SetUInt32Value(GAMEOBJECT_FACTION, BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]); } } break; } default: break; } }
void BattlegroundSA::TitanRelicActivated(Player* clicker) { if (!clicker) return; if (GateStatus[BG_SA_ANCIENT_GATE] == BG_SA_GATE_DESTROYED && GateStatus[BG_SA_YELLOW_GATE] == BG_SA_GATE_DESTROYED && (GateStatus[BG_SA_PURPLE_GATE] == BG_SA_GATE_DESTROYED || GateStatus[BG_SA_RED_GATE] == BG_SA_GATE_DESTROYED) && (GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED || GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED)) { if (clicker->GetBGTeamId() == Attackers) { if (clicker->GetBGTeamId() == TEAM_ALLIANCE) SendMessageToAll(LANG_BG_SA_ALLIANCE_CAPTURED_RELIC, CHAT_MSG_BG_SYSTEM_NEUTRAL); else SendMessageToAll(LANG_BG_SA_HORDE_CAPTURED_RELIC, CHAT_MSG_BG_SYSTEM_NEUTRAL); if (Status == BG_SA_ROUND_ONE) { RoundScores[0].winner = Attackers; RoundScores[0].time = TotalTime; // Achievement Storm the Beach (1310) for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) { if (Player* player = ObjectAccessor::FindPlayer(itr->first)) if (player->GetBGTeamId() == Attackers) player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, 65246); } Attackers = (Attackers == TEAM_ALLIANCE) ? TEAM_HORDE : TEAM_ALLIANCE; Status = BG_SA_SECOND_WARMUP; TotalTime = 0; ToggleTimer(); if (Creature* c = GetBGCreature(BG_SA_NPC_KANRETHAD)) SendChatMessage(c, TEXT_ROUND_1_FINISHED); UpdateWaitTimer = 5000; SignaledRoundTwo = false; SignaledRoundTwoHalfMin = false; InitSecondRound = true; ResetObjs(); GetBgMap()->UpdateAreaDependentAuras(); CastSpellOnTeam(SPELL_END_OF_ROUND, ALLIANCE); CastSpellOnTeam(SPELL_END_OF_ROUND, HORDE); } else if (Status == BG_SA_ROUND_TWO) { RoundScores[1].winner = Attackers; RoundScores[1].time = TotalTime; ToggleTimer(); // Achievement Storm the Beach (1310) for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) { if (Player* player = ObjectAccessor::FindPlayer(itr->first)) if (player->GetBGTeamId() == Attackers && RoundScores[1].winner == Attackers) player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, 65246); } if (RoundScores[0].time == RoundScores[1].time) EndBattleground(0); else if (RoundScores[0].time < RoundScores[1].time) EndBattleground(RoundScores[0].winner == TEAM_ALLIANCE ? ALLIANCE : HORDE); else EndBattleground(RoundScores[1].winner == TEAM_ALLIANCE ? ALLIANCE : HORDE); } } } }
void BattlegroundIC::_NodeOccupied(uint8 node,Team team) { if (node >= BG_IC_DYNAMIC_NODES_COUNT) return; if(m_IC_NodeData[node].current==STATE_BANNER_ALLY) team=ALLIANCE; else if(m_IC_NodeData[node].current==STATE_BANNER_HORDE) team=HORDE; else //Changing to neutral { _NodeDeOccupied(node); return; } if(node != BG_IC_NODE_QUARRY && node != BG_IC_NODE_REFINERY) if (!AddSpiritGuide(node, BG_IC_SpiritGuidePos[node][0], BG_IC_SpiritGuidePos[node][1], BG_IC_SpiritGuidePos[node][2], BG_IC_SpiritGuidePos[node][3], team)) sLog.outError("Failed to spawn spirit guide! point: %u, team: %u,", node, team); if (node == BG_IC_NODE_QUARRY) { uint32 otherTeam = GetOtherTeam(team); for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr) { if (itr->second.OfflineRemoveTime) continue; Player *plr = sObjectMgr.GetPlayer(itr->first); if (!plr) { sLog.outError("Battleground:CastSpellOnTeam: Player (GUID: %u) not found!", GUID_LOPART(itr->first)); continue; } uint32 teamID = itr->second.Team; if (!teamID) teamID = plr->GetTeam(); if (teamID == otherTeam) plr->RemoveAura(QUARRY); } CastSpellOnTeam(QUARRY, team); } if (node == BG_IC_NODE_REFINERY) { uint32 otherTeam = GetOtherTeam(team); for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr) { if (itr->second.OfflineRemoveTime) continue; Player *plr = sObjectMgr.GetPlayer(itr->first); if (!plr) { sLog.outError("Battleground:CastSpellOnTeam: Player (GUID: %u) not found!", GUID_LOPART(itr->first)); continue; } uint32 teamID = itr->second.Team; if (!teamID) teamID = plr->GetTeam(); if (teamID == otherTeam) plr->RemoveAura(OIL_REFINERY); } CastSpellOnTeam(OIL_REFINERY, team); } switch(node) { case BG_IC_NODE_WORKSHOP: //Pop de 4 v?hicule (d?molisseur) devant //Pop d'un engin de siege mais en r?paration (event 1 minute plus ou moins) if(m_IC_NodeData[node].current==STATE_BANNER_ALLY) { SpawnNpcType(IC_TYPE_DEMOLISSER_A); SpawnNpcType(IC_TYPE_SIEGE_A); } else { SpawnNpcType(IC_TYPE_DEMOLISSER_H); SpawnNpcType(IC_TYPE_SIEGE_H); } break ; case BG_IC_NODE_DOCK: //Spawn associate vehicle if(m_IC_NodeData[node].current==STATE_BANNER_ALLY) SpawnNpcType(IC_TYPE_DOCKVEHICLE_A); else SpawnNpcType(IC_TYPE_DOCKVEHICLE_H); break ; case BG_IC_NODE_HANGAR: //Activate transport if (m_GunshipA) m_GunshipA->BuildStartMovePacket(GetBgMap()); if (m_GunshipH) m_GunshipH->BuildStartMovePacket(GetBgMap()); for (int i = 0 ; i < MAX_BG_IC_OBJ; ++i) { if(BG_IC_OBJ[i].type == IC_TYPE_GUNSHIPTELEPORTER) { float x,y,z,o; x=BG_IC_OBJ[i].x; y=BG_IC_OBJ[i].y; z=BG_IC_OBJ[i].z; o=BG_IC_OBJ[i].o; uint8 id=BG_IC_OBJ[i].id; //TODO: AURA Des teleporteur if(!AddObject(id,team==ALLIANCE?BG_IC_ALLIANCE_GUNSHIP_PORTAL:BG_IC_HORDE_GUNSHIP_PORTAL,x,y,z,o,0,0,0,RESPAWN_ONE_DAY)) return; GetBGObject(id)->SetUInt32Value(GAMEOBJECT_FACTION, team==ALLIANCE?FACTION_GOB_ALLIANCE:FACTION_GOB_HORDE); SpawnBGObject(id, RESPAWN_IMMEDIATELY); } } break ; } }
/*! Handles end of battleground rewards (marks etc) * \param winningTeam Team that won the battleground * \returns True if CBattleground class should finish applying rewards, false if we handled it fully */ bool StrandOfTheAncient::HandleFinishBattlegroundRewardCalculation(PlayerTeam winningTeam) { CastSpellOnTeam(winningTeam, 61213); return true; }
/*! Handles end of battleground rewards (marks etc) * \param winningTeam Team that won the battleground * \returns True if CBattleground class should finish applying rewards, false if we handled it fully */ bool IsleOfConquest::HandleFinishBattlegroundRewardCalculation(PlayerTeam winningTeam) { CastSpellOnTeam(winningTeam, 67033); return true; }
void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture) { if (nodePoint->nodeType != NODE_TYPE_REFINERY && nodePoint->nodeType != NODE_TYPE_QUARRY) { if (!AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+nodePoint->nodeType-2, BG_IC_SpiritGuidePos[nodePoint->nodeType][0], BG_IC_SpiritGuidePos[nodePoint->nodeType][1], BG_IC_SpiritGuidePos[nodePoint->nodeType][2], BG_IC_SpiritGuidePos[nodePoint->nodeType][3], (nodePoint->faction == TEAM_ALLIANCE ? ALLIANCE : HORDE))) sLog->outError(LOG_FILTER_BATTLEGROUND, "Isle of Conquest: Failed to spawn spirit guide! point: %u, team: %u, ", nodePoint->nodeType, nodePoint->faction); } switch (nodePoint->gameobject_type) { case BG_IC_GO_HANGAR_BANNER: // all the players on the stopped transport should be teleported out if (!gunshipAlliance || !gunshipHorde) break; for (uint8 u = 0; u < MAX_HANGAR_TELEPORTERS_SPAWNS; ++u) { uint8 type = BG_IC_GO_HANGAR_TELEPORTER_1+u; AddObject(type, (nodePoint->faction == TEAM_ALLIANCE ? GO_ALLIANCE_GUNSHIP_PORTAL : GO_HORDE_GUNSHIP_PORTAL), BG_IC_HangarTeleporters[u].GetPositionX(), BG_IC_HangarTeleporters[u].GetPositionY(), BG_IC_HangarTeleporters[u].GetPositionZ(), BG_IC_HangarTeleporters[u].GetOrientation(), 0, 0, 0, 0, RESPAWN_ONE_DAY); } //sLog->outError(LOG_FILTER_BATTLEGROUND, "BG_IC_GO_HANGAR_BANNER CAPTURED Faction: %u", nodePoint->faction); (nodePoint->faction == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)->BuildStartMovePacket(GetBgMap()); (nodePoint->faction == TEAM_ALLIANCE ? gunshipHorde : gunshipAlliance)->BuildStopMovePacket(GetBgMap()); // we should spawn teleporters break; case BG_IC_GO_QUARRY_BANNER: RemoveAuraOnTeam(SPELL_QUARRY, (nodePoint->faction == TEAM_ALLIANCE ? HORDE : ALLIANCE)); CastSpellOnTeam(SPELL_QUARRY, (nodePoint->faction == TEAM_ALLIANCE ? ALLIANCE : HORDE)); break; case BG_IC_GO_REFINERY_BANNER: RemoveAuraOnTeam(SPELL_OIL_REFINERY, (nodePoint->faction == TEAM_ALLIANCE ? HORDE : ALLIANCE)); CastSpellOnTeam(SPELL_OIL_REFINERY, (nodePoint->faction == TEAM_ALLIANCE ? ALLIANCE : HORDE)); break; case BG_IC_GO_DOCKS_BANNER: if (recapture) break; if (docksTimer < DOCKS_UPDATE_TIME) docksTimer = DOCKS_UPDATE_TIME; // we must del opposing faction vehicles when the node is captured (unused ones) for (uint8 i = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_GLAIVE_THROWER_1_H : BG_IC_NPC_GLAIVE_THROWER_1_A); i < (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_GLAIVE_THROWER_2_H : BG_IC_NPC_GLAIVE_THROWER_2_A); ++i) { if (Creature* glaiveThrower = GetBGCreature(i)) { if (Vehicle* vehicleGlaive = glaiveThrower->GetVehicleKit()) { if (!vehicleGlaive->GetPassenger(0)) DelCreature(i); } } } for (uint8 i = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_CATAPULT_1_H : BG_IC_NPC_CATAPULT_1_A); i < (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_CATAPULT_4_H : BG_IC_NPC_CATAPULT_4_A); ++i) { if (Creature* catapult = GetBGCreature(i)) { if (Vehicle* vehicleGlaive = catapult->GetVehicleKit()) { if (!vehicleGlaive->GetPassenger(0)) DelCreature(i); } } } // spawning glaive throwers for (uint8 i = 0; i < MAX_GLAIVE_THROWERS_SPAWNS_PER_FACTION; ++i) { uint8 type = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_GLAIVE_THROWER_1_A : BG_IC_NPC_GLAIVE_THROWER_1_H)+i; if (GetBGCreature(type) && GetBGCreature(type)->isAlive()) continue; if (AddCreature(nodePoint->faction == TEAM_ALLIANCE ? NPC_GLAIVE_THROWER_A : NPC_GLAIVE_THROWER_H, type, nodePoint->faction, BG_IC_DocksVehiclesGlaives[i].GetPositionX(), BG_IC_DocksVehiclesGlaives[i].GetPositionY(), BG_IC_DocksVehiclesGlaives[i].GetPositionZ(), BG_IC_DocksVehiclesGlaives[i].GetOrientation(), RESPAWN_ONE_DAY)) GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]); } // spawning catapults for (uint8 i = 0; i < MAX_CATAPULTS_SPAWNS_PER_FACTION; ++i) { uint8 type = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_CATAPULT_1_A : BG_IC_NPC_CATAPULT_1_H)+i; if (GetBGCreature(type) && GetBGCreature(type)->isAlive()) continue; if (AddCreature(NPC_CATAPULT, type, nodePoint->faction, BG_IC_DocksVehiclesCatapults[i].GetPositionX(), BG_IC_DocksVehiclesCatapults[i].GetPositionY(), BG_IC_DocksVehiclesCatapults[i].GetPositionZ(), BG_IC_DocksVehiclesCatapults[i].GetOrientation(), RESPAWN_ONE_DAY)) GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]); } break; case BG_IC_GO_WORKSHOP_BANNER: { if (siegeEngineWorkshopTimer < WORKSHOP_UPDATE_TIME) siegeEngineWorkshopTimer = WORKSHOP_UPDATE_TIME; if (!recapture) { // we must del opposing faction vehicles when the node is captured (unused ones) for (uint8 i = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_DEMOLISHER_1_H : BG_IC_NPC_DEMOLISHER_1_A); i < (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_DEMOLISHER_4_H : BG_IC_NPC_DEMOLISHER_4_A); ++i) { if (Creature* demolisher = GetBGCreature(i)) { if (Vehicle* vehicleDemolisher = demolisher->GetVehicleKit()) { // is IsVehicleInUse working as expected? if (!vehicleDemolisher->IsVehicleInUse()) DelCreature(i); } } } for (uint8 i = 0; i < MAX_DEMOLISHERS_SPAWNS_PER_FACTION; ++i) { uint8 type = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_DEMOLISHER_1_A : BG_IC_NPC_DEMOLISHER_1_H)+i; if (GetBGCreature(type) && GetBGCreature(type)->isAlive()) continue; if (AddCreature(NPC_DEMOLISHER, type, nodePoint->faction, BG_IC_WorkshopVehicles[i].GetPositionX(), BG_IC_WorkshopVehicles[i].GetPositionY(), BG_IC_WorkshopVehicles[i].GetPositionZ(), BG_IC_WorkshopVehicles[i].GetOrientation(), RESPAWN_ONE_DAY)) GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]); } // we check if the opossing siege engine is in use int8 enemySiege = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_SIEGE_ENGINE_H : BG_IC_NPC_SIEGE_ENGINE_A); if (Creature* siegeEngine = GetBGCreature(enemySiege)) { if (Vehicle* vehicleSiege = siegeEngine->GetVehicleKit()) { // is VehicleInUse working as expected ? if (!vehicleSiege->IsVehicleInUse()) DelCreature(enemySiege); } } uint8 siegeType = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_SIEGE_ENGINE_A : BG_IC_NPC_SIEGE_ENGINE_H); if (!GetBGCreature(siegeType) || !GetBGCreature(siegeType)->isAlive()) { AddCreature((nodePoint->faction == TEAM_ALLIANCE ? NPC_SIEGE_ENGINE_A : NPC_SIEGE_ENGINE_H), siegeType, nodePoint->faction, BG_IC_WorkshopVehicles[4].GetPositionX(), BG_IC_WorkshopVehicles[4].GetPositionY(), BG_IC_WorkshopVehicles[4].GetPositionZ(), BG_IC_WorkshopVehicles[4].GetOrientation(), RESPAWN_ONE_DAY); if (Creature* siegeEngine = GetBGCreature(siegeType)) { siegeEngine->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_UNK_14|UNIT_FLAG_IMMUNE_TO_PC); siegeEngine->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]); } } } for (uint8 i = 0; i < MAX_WORKSHOP_BOMBS_SPAWNS_PER_FACTION; ++i) { AddObject(BG_IC_GO_SEAFORIUM_BOMBS_1+i, GO_SEAFORIUM_BOMBS, workshopBombs[i].GetPositionX(), workshopBombs[i].GetPositionY(), workshopBombs[i].GetPositionZ(), workshopBombs[i].GetOrientation(), 0, 0, 0, 0, 10); if (GameObject* seaforiumBombs = GetBGObject(BG_IC_GO_SEAFORIUM_BOMBS_1+i)) { seaforiumBombs->SetRespawnTime(10); seaforiumBombs->SetUInt32Value(GAMEOBJECT_FACTION, BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]); } } break; } default: break; } }
void BattlegroundSA::PostUpdateImpl(uint32 diff) { if (InitSecondRound) { if (UpdateWaitTimer < diff) { if (!SignaledRoundTwo) { SignaledRoundTwo = true; InitSecondRound = false; SendMessageToAll(LANG_BG_SA_ROUND_TWO_ONE_MINUTE, CHAT_MSG_BG_SYSTEM_NEUTRAL); } } else { UpdateWaitTimer -= diff; return; } } TotalTime += diff; if (Status == BG_SA_WARMUP) { EndRoundTimer = BG_SA_ROUNDLENGTH; if (TotalTime >= BG_SA_WARMUPLENGTH) { if (Creature* c = GetBGCreature(BG_SA_NPC_KANRETHAD)) SendChatMessage(c, TEXT_ROUND_STARTED); TotalTime = 0; ToggleTimer(); DemolisherStartState(false); Status = BG_SA_ROUND_ONE; StartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, (Attackers == TEAM_ALLIANCE) ? 23748 : 21702); } if (TotalTime >= BG_SA_BOAT_START) StartShips(); return; } else if (Status == BG_SA_SECOND_WARMUP) { if (RoundScores[0].time<BG_SA_ROUNDLENGTH) EndRoundTimer = RoundScores[0].time; else EndRoundTimer = BG_SA_ROUNDLENGTH; if (TotalTime >= 60000) { if (Creature* c = GetBGCreature(BG_SA_NPC_KANRETHAD)) SendChatMessage(c, TEXT_ROUND_STARTED); TotalTime = 0; ToggleTimer(); DemolisherStartState(false); _gateDestroyed = false; Status = BG_SA_ROUND_TWO; StartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, (Attackers == TEAM_ALLIANCE) ? 23748 : 21702); // status was set to STATUS_WAIT_JOIN manually for Preparation, set it back now SetStatus(STATUS_IN_PROGRESS); for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) if (Player* p = ObjectAccessor::FindPlayer(itr->first)) p->RemoveAurasDueToSpell(SPELL_PREPARATION); } if (TotalTime >= 30000) { if (!SignaledRoundTwoHalfMin) { SignaledRoundTwoHalfMin = true; SendMessageToAll(LANG_BG_SA_ROUND_TWO_START_HALF_MINUTE, CHAT_MSG_BG_SYSTEM_NEUTRAL); } } StartShips(); return; } else if (GetStatus() == STATUS_IN_PROGRESS) { if (Status == BG_SA_ROUND_ONE) { if (TotalTime >= BG_SA_ROUNDLENGTH) { CastSpellOnTeam(SPELL_END_OF_ROUND, ALLIANCE); CastSpellOnTeam(SPELL_END_OF_ROUND, HORDE); RoundScores[0].winner = Attackers; RoundScores[0].time = BG_SA_ROUNDLENGTH; TotalTime = 0; Status = BG_SA_SECOND_WARMUP; Attackers = (Attackers == TEAM_ALLIANCE) ? TEAM_HORDE : TEAM_ALLIANCE; UpdateWaitTimer = 5000; SignaledRoundTwo = false; SignaledRoundTwoHalfMin = false; InitSecondRound = true; ToggleTimer(); ResetObjs(); GetBgMap()->UpdateAreaDependentAuras(); return; } } else if (Status == BG_SA_ROUND_TWO) { if (TotalTime >= EndRoundTimer) { CastSpellOnTeam(SPELL_END_OF_ROUND, ALLIANCE); CastSpellOnTeam(SPELL_END_OF_ROUND, HORDE); RoundScores[1].time = BG_SA_ROUNDLENGTH; RoundScores[1].winner = (Attackers == TEAM_ALLIANCE) ? TEAM_HORDE : TEAM_ALLIANCE; if (RoundScores[0].time == RoundScores[1].time) EndBattleground(0); else if (RoundScores[0].time < RoundScores[1].time) EndBattleground(RoundScores[0].winner == TEAM_ALLIANCE ? ALLIANCE : HORDE); else EndBattleground(RoundScores[1].winner == TEAM_ALLIANCE ? ALLIANCE : HORDE); return; } } if (Status == BG_SA_ROUND_ONE || Status == BG_SA_ROUND_TWO) { SendTime(); UpdateDemolisherSpawns(); } } }
void ArathiBasin::EventUpdateResources(uint32 Team) { uint32 resource_fields[2] = { WORLDSTATE_AB_ALLIANCE_RESOURCES, WORLDSTATE_AB_HORDE_RESOURCES }; uint32 current_resources = m_resources[Team]; uint32 current_bases = m_capturedBases[Team]; if(current_bases > 5) current_bases = 5; // figure out how much resources we have to add to that team based on the number of captured bases. current_resources += (PointBonusPerUpdate[current_bases]); // did it change? if(current_resources == m_resources[Team]) return; // check for overflow if(current_resources > RESOURCES_WINVAL) current_resources = RESOURCES_WINVAL; m_resources[Team] = current_resources; if((current_resources - m_lastRepGainResources[Team]) >= resourcesToGainBR) { m_mainLock.Acquire(); for(set<Player*>::iterator itr = m_players[Team].begin(); itr != m_players[Team].end(); ++itr) { uint32 fact = (*itr)->IsTeamHorde() ? 510 : 509; //The Defilers : The League of Arathor (*itr)->ModStanding(fact, 10); } m_mainLock.Release(); m_lastRepGainResources[Team] += resourcesToGainBR; } if((current_resources - m_lastHonorGainResources[Team]) >= resourcesToGainBH) { uint32 honorToAdd = m_honorPerKill; m_mainLock.Acquire(); for(set<Player*>::iterator itr = m_players[Team].begin(); itr != m_players[Team].end(); ++itr) { (*itr)->m_bgScore.BonusHonor += honorToAdd; HonorHandler::AddHonorPointsToPlayer((*itr), honorToAdd); } UpdatePvPData(); m_mainLock.Release(); m_lastHonorGainResources[Team] += resourcesToGainBH; } // update the world states SetWorldState(resource_fields[Team], current_resources); if(current_resources >= RESOURCES_WARNING_THRESHOLD && !m_nearingVictory[Team]) { m_nearingVictory[Team] = true; SendChatMessage(Team ? CHAT_MSG_BG_EVENT_HORDE : CHAT_MSG_BG_EVENT_ALLIANCE, (uint64)0, "The %s has gathered %u resources and is nearing victory!", Team ? "Horde" : "Alliance", current_resources); uint32 sound = SOUND_ALLIANCE_BGALMOSTEND - Team; PlaySoundToAll(sound); } // check for winning condition if(current_resources == RESOURCES_WINVAL) { m_ended = true; m_winningteam = static_cast<uint8>(Team); m_nextPvPUpdateTime = 0; sEventMgr.RemoveEvents(this); sEventMgr.AddEvent(TO< CBattleground* >(this), &CBattleground::Close, EVENT_BATTLEGROUND_CLOSE, 120000, 1, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT); m_winningteam = Team; AddHonorToTeam( m_winningteam, 3 * 185 ); // Winning spells for AB CastSpellOnTeam( m_winningteam, 43484 ); CastSpellOnTeam( m_winningteam, 69153 ); CastSpellOnTeam( m_winningteam, 69499 ); CastSpellOnTeam( m_winningteam, 69500 ); if( m_winningteam == TEAM_ALLIANCE ) AddHonorToTeam( TEAM_HORDE, 1 * 185 ); else AddHonorToTeam( TEAM_ALLIANCE, 1 * 185 ); UpdatePvPData(); } }
void WarsongGulch::HookOnAreaTrigger(Player* plr, uint32 id) { int32 buffslot = -1; switch(id) { case 3686: // Speed buffslot = 0; break; case 3687: // Speed (Horde) buffslot = 1; break; case 3706: // Restoration buffslot = 2; break; case 3708: // Restoration (Horde) buffslot = 3; break; case 3707: // Berserking buffslot = 4; break; case 3709: // Berserking (Horde) buffslot = 5; break; } if(buffslot >= 0) { if(m_buffs[buffslot] != 0 && m_buffs[buffslot]->IsInWorld()) { /* apply the buff */ SpellEntry* sp = dbcSpell.LookupEntry(m_buffs[buffslot]->GetInfo()->sound3); Spell* s = sSpellFactoryMgr.NewSpell(plr, sp, true, 0); SpellCastTargets targets(plr->GetGUID()); s->prepare(&targets); /* despawn the gameobject (not delete!) */ m_buffs[buffslot]->Despawn(0, BUFF_RESPAWN_TIME); } return; } if(((id == 3646 && plr->IsTeamAlliance()) || (id == 3647 && plr->IsTeamHorde())) && (plr->m_bgHasFlag && m_flagHolders[plr->GetTeam()] == plr->GetLowGUID())) { if(m_flagHolders[plr->IsTeamHorde() ? TEAM_ALLIANCE : TEAM_HORDE] != 0 || m_dropFlags[plr->IsTeamHorde() ? TEAM_ALLIANCE : TEAM_HORDE]->IsInWorld()) { /* can't cap while flag dropped */ return; } float distance = plr->IsTeamAlliance() ? plr->CalcDistance(1540.29f, 1481.34f, 352.64f) : plr->CalcDistance(915.367f, 1433.78f, 346.089f); if(distance > 50.0f) { //50 yards from the spawn, gtfo hacker. sCheatLog.writefromsession(plr->GetSession(), "Tried to capture the flag in WSG while being more then 50 yards away. (%f yards)", plr->CalcDistance(915.367f, 1433.78f, 346.089f)); plr->GetSession()->Disconnect(); return; } /* remove the bool from the player so the flag doesn't drop */ m_flagHolders[plr->GetTeam()] = 0; plr->m_bgHasFlag = 0; /* remove flag aura from player */ plr->RemoveAura(23333 + (plr->GetTeam() * 2)); /* capture flag points */ plr->m_bgScore.MiscData[BG_SCORE_WSG_FLAGS_CAPTURED]++; PlaySoundToAll(plr->IsTeamHorde() ? SOUND_HORDE_SCORES : SOUND_ALLIANCE_SCORES); if(plr->IsTeamHorde()) SendChatMessage(CHAT_MSG_BG_EVENT_HORDE, plr->GetGUID(), "%s captured the Alliance flag!", plr->GetName()); else SendChatMessage(CHAT_MSG_BG_EVENT_ALLIANCE, plr->GetGUID(), "%s captured the Horde flag!", plr->GetName()); SetWorldState(plr->IsTeamHorde() ? WORLDSTATE_WSG_ALLIANCE_FLAG_DISPLAY : WORLDSTATE_WSG_HORDE_FLAG_DISPLAY, 1); // Remove the Other Flag if(m_homeFlags[plr->IsTeamHorde() ? TEAM_ALLIANCE : TEAM_HORDE]->IsInWorld()) m_homeFlags[plr->IsTeamHorde() ? TEAM_ALLIANCE : TEAM_HORDE]->RemoveFromWorld(false); // Add the Event to respawn the Flags sEventMgr.AddEvent(this, &WarsongGulch::EventReturnFlags, EVENT_BATTLEGROUND_WSG_AUTO_RETURN_FLAG, 20000, 1, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT); /* give each player on that team bonus honor and reputation*/ uint32 honorToAdd = 2 * m_honorPerKill; uint32 repToAdd = m_isWeekend ? 45 : 35; uint32 fact = plr->IsTeamHorde() ? 889 : 890; /*Warsong Outriders : Sliverwing Sentinels*/ for(set<Player*>::iterator itr = m_players[plr->GetTeam()].begin(); itr != m_players[plr->GetTeam()].end(); ++itr) { (*itr)->m_bgScore.BonusHonor += honorToAdd; HonorHandler::AddHonorPointsToPlayer((*itr), honorToAdd); plr->ModStanding(fact, repToAdd); } m_scores[plr->GetTeam()]++; if(m_scores[plr->GetTeam()] == 3) { /* victory! */ m_ended = true; m_winningteam = (uint8)plr->GetTeam(); m_nextPvPUpdateTime = 0; sEventMgr.RemoveEvents(this, EVENT_BATTLEGROUND_CLOSE); sEventMgr.AddEvent(TO< CBattleground* >(this), &CBattleground::Close, EVENT_BATTLEGROUND_CLOSE, 120000, 1, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT); AddHonorToTeam( m_winningteam, 3 * 185 ); CastSpellOnTeam( m_winningteam, 69158 ); CastSpellOnTeam( m_winningteam, 69496 ); CastSpellOnTeam( m_winningteam, 69497 ); CastSpellOnTeam( m_winningteam, 69498 ); if( m_winningteam == TEAM_ALLIANCE ) AddHonorToTeam( TEAM_HORDE, 1 * 185 ); else AddHonorToTeam( TEAM_ALLIANCE, 1 * 185 ); m_mainLock.Release(); } /* increment the score world state */ SetWorldState(plr->IsTeamHorde() ? WORLDSTATE_WSG_HORDE_SCORE : WORLDSTATE_WSG_ALLIANCE_SCORE, m_scores[plr->GetTeam()]); UpdatePvPData(); } }