void ArathiBasin::CaptureControlPoint(uint32 Id, uint32 Team) { if(m_basesOwnedBy[Id] != -1) { // there is a very slim chance of this happening, 2 teams evnets could clash.. // just in case... return; } // anticheat, not really necessary because this is a server method but anyway if(m_basesAssaultedBy[Id] != (int32)Team) return; m_basesLastOwnedBy[Id] = Team; m_flagIsVirgin[Id] = false; m_basesOwnedBy[Id] = Team; m_basesAssaultedBy[Id]=-1; // remove the other spirit guide (if it exists) // burlex: shouldnt' happen if(m_spiritGuides[Id] != NULL) { RemoveSpiritGuide(m_spiritGuides[Id]); m_spiritGuides[Id]->Despawn(0,0); } // spawn the spirit guide for our faction m_spiritGuides[Id] = SpawnSpiritGuide(GraveyardLocations[Id][0], GraveyardLocations[Id][1], GraveyardLocations[Id][2], 0.0f, Team); AddSpiritGuide(m_spiritGuides[Id]); // send the chat message/sounds out PlaySoundToAll(Team ? SOUND_HORDE_SCORES : SOUND_ALLIANCE_SCORES); SendChatMessage(Team ? CHAT_MSG_BG_SYSTEM_HORDE : CHAT_MSG_BG_SYSTEM_ALLIANCE, 0, "The %s has taken the %s!", Team ? "Horde" : "Alliance", ControlPointNames[Id]); // update the overhead display on the clients (world states) m_capturedBases[Team]++; m_mapMgr->GetStateManager().UpdateWorldState(Team ? WORLDSTATE_AB_HORDE_CAPTUREBASE : WORLDSTATE_AB_ALLIANCE_CAPTUREBASE, m_capturedBases[Team]); // respawn the control point with the correct aura SpawnControlPoint(Id, Team ? AB_SPAWN_TYPE_HORDE_CONTROLLED : AB_SPAWN_TYPE_ALLIANCE_CONTROLLED); // update the map m_mapMgr->GetStateManager().UpdateWorldState(AssaultFields[Id][Team], 0); m_mapMgr->GetStateManager().UpdateWorldState(OwnedFields[Id][Team], 1); // resource update event. :) if(m_capturedBases[Team]==1) { // first sEventMgr.AddEvent(TO_ARATHIBASIN(shared_from_this()),&ArathiBasin::EventUpdateResources, (uint32)Team, EVENT_AB_RESOURCES_UPDATE_TEAM_0+Team, ResourceUpdateIntervals[1], 0, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT); } else { // not first event_ModifyTime(EVENT_AB_RESOURCES_UPDATE_TEAM_0+Team, ResourceUpdateIntervals[m_capturedBases[Team]]); } }
void ArathiBasin::CaptureControlPoint(uint32 Id, uint32 Team) { if(m_basesOwnedBy[Id] != -1) { // there is a very slim chance of this happening, 2 teams events could clash.. // just in case... return; } // anti cheat, not really necessary because this is a server method but anyway if(m_basesAssaultedBy[Id] != (int32)Team) return; m_basesOwnedBy[Id] = Team; m_basesAssaultedBy[Id] = -1; m_basesLastOwnedBy[Id] = -1; // remove the other spirit guide (if it exists) // burlex: shouldn't' happen if(m_spiritGuides[Id] != NULL) { RemoveSpiritGuide(m_spiritGuides[Id]); m_spiritGuides[Id]->Despawn(0, 0); } // spawn the spirit guide for our faction m_spiritGuides[Id] = SpawnSpiritGuide(GraveyardLocations[Id][0], GraveyardLocations[Id][1], GraveyardLocations[Id][2], 0.0f, Team); AddSpiritGuide(m_spiritGuides[Id]); // send the chat message/sounds out PlaySoundToAll(Team ? SOUND_HORDE_CAPTURE : SOUND_ALLIANCE_CAPTURE); SendChatMessage(Team ? CHAT_MSG_BG_EVENT_HORDE : CHAT_MSG_BG_EVENT_ALLIANCE, 0, "The %s has taken the %s!", Team ? "Horde" : "Alliance", ControlPointNames[Id]); DefFlag[Id][0] = false; DefFlag[Id][1] = false; // update the overhead display on the clients (world states) m_capturedBases[Team]++; SetWorldState(Team ? WORLDSTATE_AB_HORDE_CAPTUREBASE : WORLDSTATE_AB_ALLIANCE_CAPTUREBASE, m_capturedBases[Team]); if(m_capturedBases[Team] >= 4) { m_mainLock.Acquire(); for(set<Player*>::iterator itr = m_players[Team].begin(); itr != m_players[Team].end(); ++itr) { if(Team) { if(m_capturedBases[Team] >= 4 && (*itr)->GetQuestLogForEntry(8121)) (*itr)->GetQuestLogForEntry(8121)->SendQuestComplete(); if(m_capturedBases[Team] == 5 && (*itr)->GetQuestLogForEntry(8122)) (*itr)->GetQuestLogForEntry(8122)->SendQuestComplete(); } else { if(m_capturedBases[Team] >= 4 && (*itr)->GetQuestLogForEntry(8114)) (*itr)->GetQuestLogForEntry(8114)->SendQuestComplete(); if(m_capturedBases[Team] == 5 && (*itr)->GetQuestLogForEntry(8115)) (*itr)->GetQuestLogForEntry(8115)->SendQuestComplete(); } } m_mainLock.Release(); } // respawn the control point with the correct aura SpawnControlPoint(Id, Team ? AB_SPAWN_TYPE_HORDE_CONTROLLED : AB_SPAWN_TYPE_ALLIANCE_CONTROLLED); // update the map SetWorldState(AssaultFields[Id][Team], 0); SetWorldState(OwnedFields[Id][Team], 1); // resource update event. :) if(m_capturedBases[Team] == 1) { // first sEventMgr.AddEvent(this, &ArathiBasin::EventUpdateResources, (uint32)Team, EVENT_AB_RESOURCES_UPDATE_TEAM_0 + Team, ResourceUpdateIntervals[1], 0, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT); } else { // not first event_ModifyTime(EVENT_AB_RESOURCES_UPDATE_TEAM_0 + Team, ResourceUpdateIntervals[m_capturedBases[Team]]); } }
void ArathiBasin::AssaultControlPoint(Player* pPlayer, uint32 Id) { #if defined(BG_ANTI_CHEAT) && !defined(_DEBUG) if(!m_started) { SendChatMessage(CHAT_MSG_BG_SYSTEM_NEUTRAL, pPlayer->GetGUID(), "%s has been removed from the game for cheating.", pPlayer->GetName()); pPlayer->SoftDisconnect(); return; } #endif bool isVirgin = false; uint32 Team = pPlayer->m_bgTeam; uint32 Owner; if(m_basesOwnedBy[Id]==-1 && m_basesAssaultedBy[Id]==-1) { isVirgin = true; // omgwtfbbq our flag is a virgin? m_mapMgr->GetStateManager().UpdateWorldState(NeutralFields[Id], 0); } if(m_basesOwnedBy[Id] != -1) { Owner = m_basesOwnedBy[Id]; // set it to uncontrolled for now m_basesOwnedBy[Id] = -1; // this control point just got taken over by someone! oh noes! if( m_spiritGuides[Id] != NULL ) { map<Creature*,set<uint32> >::iterator itr = m_resurrectMap.find(m_spiritGuides[Id]); if( itr != m_resurrectMap.end() ) { for( set<uint32>::iterator it2 = itr->second.begin(); it2 != itr->second.end(); it2++ ) { Player* r_plr = m_mapMgr->GetPlayer( *it2 ); if( r_plr != NULL && r_plr->isDead() ) { HookHandleRepop( r_plr ); QueueAtNearestSpiritGuide(r_plr, itr->first); } } } m_resurrectMap.erase( itr ); m_spiritGuides[Id]->Despawn( 0, 0 ); m_spiritGuides[Id] = NULLCREATURE; } // detract one from the teams controlled points m_capturedBases[Owner] -= 1; m_mapMgr->GetStateManager().UpdateWorldState(Owner ? WORLDSTATE_AB_HORDE_CAPTUREBASE : WORLDSTATE_AB_ALLIANCE_CAPTUREBASE, m_capturedBases[Owner]); // reset the world states m_mapMgr->GetStateManager().UpdateWorldState(OwnedFields[Id][Owner], 0); // modify the resource update time period if(m_capturedBases[Owner]==0) event_RemoveEvents(EVENT_AB_RESOURCES_UPDATE_TEAM_0+Owner); else event_ModifyTime(EVENT_AB_RESOURCES_UPDATE_TEAM_0 + Owner, ResourceUpdateIntervals[m_capturedBases[Owner]]); } // Contested Flag, not ours, and is not virgin if( !isVirgin && m_basesLastOwnedBy[Id] == int32(Team) && m_basesOwnedBy[Id] == -1 ) { m_mapMgr->GetStateManager().UpdateWorldState(AssaultFields[Id][Team ? 0 : 1], 0); event_RemoveEvents(EVENT_AB_CAPTURE_CP_1 + Id); SendChatMessage(Team ? CHAT_MSG_BG_SYSTEM_HORDE : CHAT_MSG_BG_SYSTEM_ALLIANCE, pPlayer->GetGUID(), "$N has defended the %s!", ControlPointNames[Id]); m_basesAssaultedBy[Id] = Team; CaptureControlPoint( Id, Team ); return; } // n***a stole my flag! if(m_basesAssaultedBy[Id] != -1) { Owner = m_basesAssaultedBy[Id]; // woah! vehicle hijack! m_basesAssaultedBy[Id] = Team; m_mapMgr->GetStateManager().UpdateWorldState(AssaultFields[Id][Owner], 0); // make sure the event does not trigger sEventMgr.RemoveEvents(this, EVENT_AB_CAPTURE_CP_1 + Id); // no need to remove the spawn, SpawnControlPoint will do this. } m_basesAssaultedBy[Id] = Team; // spawn the new control point gameobject SpawnControlPoint(Id, Team ? AB_SPAWN_TYPE_HORDE_ASSAULT : AB_SPAWN_TYPE_ALLIANCE_ASSAULT); // send out the chat message and sound SendChatMessage(Team ? CHAT_MSG_BG_SYSTEM_HORDE : CHAT_MSG_BG_SYSTEM_ALLIANCE, pPlayer->GetGUID(), "$N claims the %s! If left unchallenged, the %s will control it in 1 minute!", ControlPointNames[Id], Team ? "Horde" : "Alliance"); // guessed PlaySoundToAll(Team ? SOUND_ALLIANCE_CAPTURE : SOUND_HORDE_CAPTURE); // update the client's map with the new assaulting field m_mapMgr->GetStateManager().UpdateWorldState(AssaultFields[Id][Team], 1); // create the 60 second event. sEventMgr.AddEvent(TO_ARATHIBASIN(this), &ArathiBasin::CaptureControlPoint, Id, Team, EVENT_AB_CAPTURE_CP_1 + Id, 60000, 1, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT); // update players info pPlayer->m_bgScore.MiscData[BG_SCORE_AB_BASE_ASSAULTED]++; UpdatePvPData(); }
void IsleOfConquest::AssaultControlPoint(Player* pPlayer, uint32 Id) { if(!m_started) { SendChatMessage(CHAT_MSG_BG_EVENT_NEUTRAL, pPlayer->GetGUID(), "%s has been removed from the game for cheating.", pPlayer->GetName()); pPlayer->SoftDisconnect(); return; } bool isVirgin = false; uint32 Team = pPlayer->m_bgTeam; uint32 Owner; if(m_basesOwnedBy[Id]==-1 && m_basesAssaultedBy[Id]==-1) { isVirgin = true; // omgwtfbbq our flag is a virgin? SetWorldState(NeutralFields[Id], 0); } if(m_basesOwnedBy[Id] != -1) { Owner = m_basesOwnedBy[Id]; // set it to uncontrolled for now m_basesOwnedBy[Id] = -1; // this control point just got taken over by someone! oh noes! if( m_spiritGuides[Id] != NULL ) { map<Creature*,set<uint32> >::iterator itr = m_resurrectMap.find(m_spiritGuides[Id]); if( itr != m_resurrectMap.end() ) { for( set<uint32>::iterator it2 = itr->second.begin(); it2 != itr->second.end(); it2++ ) { Player* r_plr = m_mapMgr->GetPlayer( *it2 ); if( r_plr != NULL && r_plr->IsDead()) { HookHandleRepop( r_plr ); QueueAtNearestSpiritGuide(r_plr, itr->first); } } } m_resurrectMap.erase( itr ); if(m_spiritGuides[Id] && m_spiritGuides[Id]->IsInWorld()) { m_spiritGuides[Id]->Despawn( 0, 0 ); m_spiritGuides[Id] = NULL; } } // reset the world states SetWorldState(OwnedFields[Id][Owner], 0); // modify the resource update time period if(m_capturedBases[Owner]==0) event_RemoveEvents(EVENT_IOC_RESOURCES_UPDATE_TEAM_0+Owner); else event_ModifyTime(EVENT_IOC_RESOURCES_UPDATE_TEAM_0 + Owner, ResourceUpdateIntervals[m_capturedBases[Owner]]); } pPlayer->AddHonor(25); // Contested Flag, not ours, and is not virgin if( !isVirgin && m_basesLastOwnedBy[Id] == int32(Team) && m_basesOwnedBy[Id] == -1 ) { SetWorldState(AssaultFields[Id][Team ? 0 : 1], 0); event_RemoveEvents(EVENT_IOC_CAPTURE_CP_1 + Id); SendChatMessage(Team ? CHAT_MSG_BG_EVENT_HORDE : CHAT_MSG_BG_EVENT_ALLIANCE, pPlayer->GetGUID(), "$N has defended the %s!", ControlPointNames[Id]); m_basesAssaultedBy[Id] = Team; CaptureControlPoint( Id, Team ); pPlayer->m_bgScore.MiscData[BG_SCORE_IOC_BASE_DEFENDED]++; return; } // n***a stole my flag! if(m_basesAssaultedBy[Id] != -1) { Owner = m_basesAssaultedBy[Id]; m_basesAssaultedBy[Id] = Team; SetWorldState(AssaultFields[Id][Owner], 0); sEventMgr.RemoveEvents(this, EVENT_IOC_CAPTURE_CP_1 + Id); } m_basesAssaultedBy[Id] = Team; // spawn the new control point gameobject SpawnControlPoint(Id, Team ? IOC_SPAWN_TYPE_HORDE_ASSAULT : IOC_SPAWN_TYPE_ALLIANCE_ASSAULT); // send out the chat message and sound SendChatMessage(Team ? CHAT_MSG_BG_EVENT_HORDE : CHAT_MSG_BG_EVENT_ALLIANCE, pPlayer->GetGUID(), "$N claims the %s! If left unchallenged, the %s will control it in 1 minute!", ControlPointNames[Id], Team ? "Horde" : "Alliance"); // guessed PlaySoundToAll(Team ? SOUND_ALLIANCE_CAPTURE : SOUND_HORDE_CAPTURE); // update the client's map with the new assaulting field SetWorldState(AssaultFields[Id][Team], 1); // create the 60 second event. sEventMgr.AddEvent(this, &IsleOfConquest::CaptureControlPoint, Id, Team, EVENT_IOC_CAPTURE_CP_1 + Id, 60000, 1, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT); // update players info pPlayer->m_bgScore.MiscData[BG_SCORE_IOC_BASE_ASSAULTED]++; UpdatePvPData(); if(Id == 5) { if(m_salesman != NULL) m_salesman->Despawn(0,0); } }