void EyeOfTheStorm::OnStart() { for(uint32 i = 0; i < 2; i++) { for(set<Player* >::iterator itr = m_players[i].begin(); itr != m_players[i].end(); itr++) { (*itr)->RemoveAura(BG_PREPARATION); } } uint32 i; /* start the events */ sEventMgr.AddEvent(TO_EYEOFTHESTORM(this), &EyeOfTheStorm::GeneratePoints, EVENT_EOTS_GIVE_POINTS, 1600, 0, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT); sEventMgr.AddEvent(TO_EYEOFTHESTORM(this), &EyeOfTheStorm::UpdateCPs, EVENT_EOTS_CHECK_CAPTURE_POINT_STATUS, 5000, 0, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT); /* spirit guides */ AddSpiritGuide(SpawnSpiritGuide( EOTSStartLocations[0][0], EOTSStartLocations[0][1], EOTSStartLocations[0][2], 0, 0 )); AddSpiritGuide(SpawnSpiritGuide( EOTSStartLocations[1][0], EOTSStartLocations[1][1], EOTSStartLocations[1][2], 0, 1 )); /* remove the bubbles */ for( i = 0; i < 2; i++ ) { m_bubbles[i]->RemoveFromWorld(false); m_bubbles[i]->Destruct(); m_bubbles[i] = NULLGOB; } m_started = true; PlaySoundToAll(SOUND_BATTLEGROUND_BEGIN); }
void EyeOfTheStorm::OnStart() { for(uint32 i = 0; i < 2; ++i) { for(set<Player*>::iterator itr = m_players[i].begin(); itr != m_players[i].end(); ++itr) { (*itr)->RemoveAura(BG_PREPARATION); } } uint32 i; /* start the events */ sEventMgr.AddEvent(this, &EyeOfTheStorm::GeneratePoints, EVENT_EOTS_GIVE_POINTS, 2000, 0, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT); sEventMgr.AddEvent(this, &EyeOfTheStorm::UpdateCPs, EVENT_EOTS_CHECK_CAPTURE_POINT_STATUS, 5000, 0, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT); /* spirit guides */ AddSpiritGuide(SpawnSpiritGuide( EOTSStartLocations[0][0], EOTSStartLocations[0][1], EOTSStartLocations[0][2], 0, 0 )); AddSpiritGuide(SpawnSpiritGuide( EOTSStartLocations[1][0], EOTSStartLocations[1][1], EOTSStartLocations[1][2], 0, 1 )); /* remove the bubbles */ for( i = 0; i < 2; ++i ) { m_bubbles[i]->RemoveFromWorld(false); delete m_bubbles[i]; m_bubbles[i] = NULL; } m_started = true; }
void ArathiBasin::OnCreate() { // Alliance Gate GameObject* gate = SpawnGameObject(180255, 529, 1284.597290f, 1281.166626f, -15.977916f, 0.76f, 32, 114, 1.5799990f); gate->SetByte(GAMEOBJECT_BYTES_1, 3, 100); gate->PushToWorld(m_mapMgr); m_gates.push_back(gate); // horde gate gate = SpawnGameObject(180256, 529, 708.0902710f, 708.4479370f, -17.3898964f, 3.92f, 32, 114, 1.5699990f); gate->SetByte(GAMEOBJECT_BYTES_1, 3, 100); gate->PushToWorld(m_mapMgr); m_gates.push_back(gate); // spawn (default) control points SpawnControlPoint(AB_CONTROL_POINT_STABLE, AB_SPAWN_TYPE_NEUTRAL); SpawnControlPoint(AB_CONTROL_POINT_BLACKSMITH, AB_SPAWN_TYPE_NEUTRAL); SpawnControlPoint(AB_CONTROL_POINT_LUMBERMILL, AB_SPAWN_TYPE_NEUTRAL); SpawnControlPoint(AB_CONTROL_POINT_MINE, AB_SPAWN_TYPE_NEUTRAL); SpawnControlPoint(AB_CONTROL_POINT_FARM, AB_SPAWN_TYPE_NEUTRAL); // spawn buffs SpawnBuff(AB_BUFF_STABLES); SpawnBuff(AB_BUFF_BLACKSMITH); SpawnBuff(AB_BUFF_LUMBERMILL); SpawnBuff(AB_BUFF_MINE); SpawnBuff(AB_BUFF_FARM); // spawn the h/a base spirit guides AddSpiritGuide(SpawnSpiritGuide(NoBaseGYLocations[0][0], NoBaseGYLocations[0][1], NoBaseGYLocations[0][2], 0.0f, 0)); AddSpiritGuide(SpawnSpiritGuide(NoBaseGYLocations[1][0], NoBaseGYLocations[1][1], NoBaseGYLocations[1][2], 0.0f, 1)); // Let's set this from the config SetWorldState( WORLDSTATE_AB_MAX_SCORE, RESOURCES_WINVAL ); }
void WarsongGulch::OnCreate() { /* add the buffs to the world */ for(int i = 0; i < 6; ++i) { if(!m_buffs[i]->IsInWorld()) m_buffs[i]->PushToWorld(m_mapMgr); } // Alliance Gates GameObject *gate = SpawnGameObject(179921, 489, 1471.554688f, 1458.778076f, 362.633240f, 0, 33, 114, 2.33271f); gate->PushToWorld(m_mapMgr); m_gates.push_back(gate); gate = SpawnGameObject(179919, 489, 1492.477783f, 1457.912354f, 342.968933f, 0, 33, 114, 2.68149f); gate->PushToWorld(m_mapMgr); m_gates.push_back(gate); gate = SpawnGameObject(179918, 489, 1503.335327f, 1493.465820f, 352.188843f, 0, 33, 114, 2.26f); gate->PushToWorld(m_mapMgr); m_gates.push_back(gate); // Horde Gates gate = SpawnGameObject(179916, 489, 949.1663208f, 1423.7717285f, 345.6241455f, -0.5756807f, 32, 114, 0.900901f); gate->SetFloatValue(GAMEOBJECT_ROTATION,-0.0167336f); gate->SetFloatValue(GAMEOBJECT_ROTATION_01,-0.004956f); gate->SetFloatValue(GAMEOBJECT_ROTATION_02,-0.283972f); gate->SetFloatValue(GAMEOBJECT_ROTATION_03,0.9586736f); gate->PushToWorld(m_mapMgr); m_gates.push_back(gate); gate = SpawnGameObject(179917, 489, 953.0507202f, 1459.8424072f, 340.6525573f, -1.9966197f, 32, 114, 0.854700f); gate->SetFloatValue(GAMEOBJECT_ROTATION,-0.1971825f); gate->SetFloatValue(GAMEOBJECT_ROTATION_01,0.1575096f); gate->SetFloatValue(GAMEOBJECT_ROTATION_02,-0.8239487f); gate->SetFloatValue(GAMEOBJECT_ROTATION_03,0.5073640f); gate->PushToWorld(m_mapMgr); m_gates.push_back(gate); /* set world states */ SetWorldState(0x8D8, 0); SetWorldState(0x8D7, 0); SetWorldState(0x8D6, 0); SetWorldState(0x8D5, 0); SetWorldState(0x8D4, 0); SetWorldState(0x8D3, 0); SetWorldState(0x60B, 0); SetWorldState(0x60A, 0); SetWorldState(0x609, 0); SetWorldState(WSG_ALLIANCE_FLAG_CAPTURED, 1); SetWorldState(WSG_HORDE_FLAG_CAPTURED, 1); SetWorldState(WSG_MAX_SCORE, 3); SetWorldState(WSG_CURRENT_ALLIANCE_SCORE, 0); SetWorldState(WSG_CURRENT_HORDE_SCORE, 0); /* spawn spirit guides */ AddSpiritGuide(SpawnSpiritGuide(1423.218872f, 1554.663574f, 342.833801f, 3.124139f, 0)); AddSpiritGuide(SpawnSpiritGuide(1032.644775f, 1388.316040f, 340.559937f, 0.043200f, 1)); }
void WarsongGulch::OnCreate() { /* add the buffs to the world */ for(int i = 0; i < 6; ++i) { if(!m_buffs[i]->IsInWorld()) m_buffs[i]->PushToWorld(m_mapMgr); } // Alliance Gates GameObject* gate = SpawnGameObject(179921, 489, 1471.554688f, 1458.778076f, 362.633240f, 0, 33, 114, 2.33271f); gate->SetByte(GAMEOBJECT_BYTES_1, 3, 100); gate->PushToWorld(m_mapMgr); m_gates.push_back(gate); gate = SpawnGameObject(179919, 489, 1492.477783f, 1457.912354f, 342.968933f, 0, 33, 114, 2.68149f); gate->SetByte(GAMEOBJECT_BYTES_1, 3, 100); gate->PushToWorld(m_mapMgr); m_gates.push_back(gate); gate = SpawnGameObject(179918, 489, 1503.335327f, 1493.465820f, 352.188843f, 0, 33, 114, 2.26f); gate->SetByte(GAMEOBJECT_BYTES_1, 3, 100); gate->PushToWorld(m_mapMgr); m_gates.push_back(gate); // Horde Gates gate = SpawnGameObject(179916, 489, 949.1663208f, 1423.7717285f, 345.6241455f, -0.5756807f, 32, 114, 0.900901f); gate->SetParentRotation(0, -0.0167336f); gate->SetParentRotation(1, -0.004956f); gate->SetParentRotation(2, -0.283972f); gate->SetParentRotation(3, 0.9586736f); gate->SetByte(GAMEOBJECT_BYTES_1, 3, 100); gate->PushToWorld(m_mapMgr); m_gates.push_back(gate); gate = SpawnGameObject(179917, 489, 953.0507202f, 1459.8424072f, 340.6525573f, -1.9966197f, 32, 114, 0.854700f); gate->SetParentRotation(0, -0.1971825f); gate->SetParentRotation(1, 0.1575096f); gate->SetParentRotation(2, -0.8239487f); gate->SetParentRotation(3, 0.5073640f); gate->SetByte(GAMEOBJECT_BYTES_1, 3, 100); gate->PushToWorld(m_mapMgr); m_gates.push_back(gate); // Should be set from config SetWorldState( WORLDSTATE_WSG_MAX_SCORE, 3 ); /* spawn spirit guides */ AddSpiritGuide(SpawnSpiritGuide(1423.218872f, 1554.663574f, 342.833801f, 3.124139f, 0)); AddSpiritGuide(SpawnSpiritGuide(1032.644775f, 1388.316040f, 340.559937f, 0.043200f, 1)); }
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 EyeOfTheStorm::OnStart() { uint32 i; /* start the events */ sEventMgr.AddEvent(this, &EyeOfTheStorm::GeneratePoints, EVENT_EOTS_GIVE_POINTS, 2000, 0, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT); sEventMgr.AddEvent(this, &EyeOfTheStorm::UpdateCPs, EVENT_EOTS_CHECK_CAPTURE_POINT_STATUS, 5000, 0, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT); /* spirit guides */ AddSpiritGuide(SpawnSpiritGuide( EOTSStartLocations[0][0], EOTSStartLocations[0][1], EOTSStartLocations[0][2], 0, 0 )); AddSpiritGuide(SpawnSpiritGuide( EOTSStartLocations[1][0], EOTSStartLocations[1][1], EOTSStartLocations[1][2], 0, 1 )); /* remove the bubbles */ for( i = 0; i < 2; ++i ) { m_bubbles[i]->RemoveFromWorld(false); delete m_bubbles[i]; m_bubbles[i] = NULL; } m_started = true; PlaySoundToAll(SOUND_BATTLEGROUND_BEGIN); }
void StrandOfTheAncient::SpawnGraveyard( SOTAGraveyards gyid, uint32 team ){ if( gyid >= NUM_SOTA_GRAVEYARDS ) return; SOTAGraveyard &gy = graveyard[ gyid ]; gy.faction = team; if( gy.spiritguide != NULL ) gy.spiritguide->Despawn( 0, 0 ); gy.spiritguide = SpawnSpiritGuide( GraveyardLocations[ gyid ], team ); AddSpiritGuide( gy.spiritguide ); }
void IsleOfConquest::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_EVENT_HORDE : CHAT_MSG_BG_EVENT_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]++; // respawn the control point with the correct aura SpawnControlPoint(Id, Team ? IOC_SPAWN_TYPE_HORDE_CONTROLLED : IOC_SPAWN_TYPE_ALLIANCE_CONTROLLED); // update the map SetWorldState(AssaultFields[Id][Team], 0); SetWorldState(OwnedFields[Id][Team], 1); AddHonorToTeam(5, Team); ApplyCaptureBonus(Id, Team); if(Id == 5) Updateworkshop(Team); }
void IsleOfConquest::SpawnGraveyard( uint32 id, uint32 team ){ if( id >= IOC_NUM_GRAVEYARDS ) return; IOCGraveyard &gy = graveyards[ id ]; if( gy.owner == team ) return; gy.owner = team; if( gy.spiritguide != NULL ){ RemoveSpiritGuide( gy.spiritguide ); gy.spiritguide->Despawn( 0, 0 ); } gy.spiritguide = SpawnSpiritGuide( SpiritGuideLocations[ id ], team ); AddSpiritGuide( gy.spiritguide ); }
void ArathiBasin::OnCreate() { // Alliance Gate GameObject *gate = SpawnGameObject(180255, 529, 1284.597290f, 1281.166626f, -15.977916f, 0.706859f, 32, 114, 1.5799990f); gate->SetFloatValue(GAMEOBJECT_ROTATION, 0.0129570f); gate->SetFloatValue(GAMEOBJECT_ROTATION_01, -0.0602880f); gate->SetFloatValue(GAMEOBJECT_ROTATION_02, 0.3449600f); gate->SetFloatValue(GAMEOBJECT_ROTATION_03, 0.9365900f); gate->PushToWorld(m_mapMgr); m_gates.push_back(gate); // horde gate gate = SpawnGameObject(180256, 529, 708.0902710f, 708.4479370f, -17.3898964f, -2.3910990f, 32, 114, 1.5699990f); gate->SetFloatValue(GAMEOBJECT_ROTATION, 0.0502910f); gate->SetFloatValue(GAMEOBJECT_ROTATION_01, 0.0151270f); gate->SetFloatValue(GAMEOBJECT_ROTATION_02, 0.9292169f); gate->SetFloatValue(GAMEOBJECT_ROTATION_03, -0.3657840f); gate->PushToWorld(m_mapMgr); m_gates.push_back(gate); // spawn (default) control points SpawnControlPoint(AB_CONTROL_POINT_STABLE, AB_SPAWN_TYPE_NEUTRAL); SpawnControlPoint(AB_CONTROL_POINT_BLACKSMITH, AB_SPAWN_TYPE_NEUTRAL); SpawnControlPoint(AB_CONTROL_POINT_LUMBERMILL, AB_SPAWN_TYPE_NEUTRAL); SpawnControlPoint(AB_CONTROL_POINT_MINE, AB_SPAWN_TYPE_NEUTRAL); SpawnControlPoint(AB_CONTROL_POINT_FARM, AB_SPAWN_TYPE_NEUTRAL); // spawn buffs SpawnBuff(AB_BUFF_STABLES); SpawnBuff(AB_BUFF_BLACKSMITH); SpawnBuff(AB_BUFF_LUMBERMILL); SpawnBuff(AB_BUFF_MINE); SpawnBuff(AB_BUFF_FARM); // spawn the h/a base spirit guides AddSpiritGuide(SpawnSpiritGuide(NoBaseGYLocations[0][0], NoBaseGYLocations[0][1], NoBaseGYLocations[0][2], 0.0f, 0)); AddSpiritGuide(SpawnSpiritGuide(NoBaseGYLocations[1][0], NoBaseGYLocations[1][1], NoBaseGYLocations[1][2], 0.0f, 1)); // urrrgh worldstates SetWorldState(0x8D8, 0x00); SetWorldState(0x8D7, 0x00); SetWorldState(0x8D6, 0x00); SetWorldState(0x8D5, 0x00); SetWorldState(0x8D4, 0x00); SetWorldState(0x8D3, 0x00); // AB world state's // unknowns, need more research SetWorldState(0x7A3, 1800); // unknown SetWorldState(0x745, 0x02); // unknown // Icon stuff for on the map SetWorldState(AB_SHOW_BACKSMITH_ICON, 0x01); SetWorldState(AB_SHOW_FARM_ICON, 0x01); SetWorldState(AB_SHOW_LUMBERMILL_ICON, 0x01); SetWorldState(AB_SHOW_GOLDMINE_ICON, 0x01); SetWorldState(AB_SHOW_STABLE_ICON, 0x01); // LumberMill SetWorldState(AB_CAPTURING_LUMBERMILL_HORDE, 0x00); SetWorldState(AB_CAPTURING_LUMBERMILL_ALLIANCE, 0x00); SetWorldState(AB_CAPTURED_LUMBERMILL_HORDE, 0x00); SetWorldState(AB_CAPTURED_LUMBERMILL_ALLIANCE, 0x00); // GoldMine SetWorldState(AB_CAPTURING_GOLDMINE_HORDE, 0x00); SetWorldState(AB_CAPTURING_GOLDMINE_ALLIANCE, 0x00); SetWorldState(AB_CAPTURED_GOLDMINE_HORDE, 0x00); SetWorldState(AB_CAPTURED_GOLDMINE_ALLIANCE, 0x00); // BlackSmith SetWorldState(AB_CAPTURING_BLACKSMITH_HORDE, 0x00); SetWorldState(AB_CAPTURING_BLACKSMITH_ALLIANCE, 0x00); SetWorldState(AB_CAPTURED_BLACKSMITH_HORDE, 0x00); SetWorldState(AB_CAPTURED_BLACKSMITH_ALLIANCE, 0x00); SetWorldState(AB_MAX_SCORE, RESOURCES_WINVAL); SetWorldState(AB_ALLIANCE_CAPTUREBASE, 0x00); SetWorldState(AB_HORDE_CAPTUREBASE, 0x00); SetWorldState(AB_HORDE_RESOURCES, 0x00); SetWorldState(AB_ALLIANCE_RESOURCES, 0x00); // Farm SetWorldState(AB_CAPTURING_FARM_ALLIANCE, 0x00); SetWorldState(AB_CAPTURING_FARM_HORDE, 0x00); SetWorldState(AB_CAPTURED_FARM_HORDE, 0x00); SetWorldState(AB_CAPTURED_FARM_ALLIANCE, 0x00); // Stables SetWorldState(AB_CAPTURING_STABLES_HORDE, 0x00); SetWorldState(AB_CAPTURING_STABLES_ALLIANCE, 0x00); SetWorldState(AB_CAPTURED_STABLES_HORDE, 0x00); SetWorldState(AB_CAPTURED_STABLES_ALLIANCE, 0x00); }
void EyeOfTheStorm::UpdateCPs() { uint32 plrcounts[2] = { 0, 0 }; // details: // loop through inrange players, for new ones, send the enable CP worldstate. // the value of the map is a timestamp of the last update, to avoid cpu time wasted // doing lookups of objects that have already been updated unordered_set<Player* >::iterator itr; unordered_set<Player* >::iterator itrend; map<uint32,uint32>::iterator it2, it3; uint32 timeptr = (uint32)UNIXTIME; bool in_range; bool is_valid; Player* plr; uint32 i; for(i = 0; i < EOTS_TOWER_COUNT; i++) { itr = m_CPStatusGO[i]->GetInRangePlayerSetBegin(); itrend = m_CPStatusGO[i]->GetInRangePlayerSetEnd(); plrcounts[0] = plrcounts[1] = 0; for(; itr != itrend; itr++) { if( !(*itr)->IsPvPFlagged() || (*itr)->InStealth() || (*itr)->m_invisible || (*itr)->SchoolImmunityList[0] || (*itr)->m_bgFlagIneligible ) is_valid = false; else is_valid = true; in_range = ((*itr)->isAlive() && m_CPStatusGO[i]->GetDistanceSq((*itr)) <= EOTS_CAPTURE_DISTANCE) ? true : false; it2 = m_CPStored[i].find((*itr)->GetLowGUID()); if( it2 == m_CPStored[i].end() ) { // new player :) if( in_range ) { (*itr)->SendWorldStateUpdate(WORLDSTATE_EOTS_PVP_CAPTURE_BAR_DISPLAY, 1); (*itr)->SendWorldStateUpdate(WORLDSTATE_EOTS_PVP_CAPTURE_BAR_VALUE, m_CPStatus[i]); m_CPStored[i].insert(make_pair((*itr)->GetLowGUID(), timeptr)); if( is_valid ) plrcounts[(*itr)->GetTeam()]++; } } else { // oldie if( !in_range ) { (*itr)->SendWorldStateUpdate(WORLDSTATE_EOTS_PVP_CAPTURE_BAR_DISPLAY, 0); m_CPStored[i].erase(it2); } else { (*itr)->SendWorldStateUpdate(WORLDSTATE_EOTS_PVP_CAPTURE_BAR_VALUE, m_CPStatus[i]); it2->second = timeptr; if( is_valid ) plrcounts[(*itr)->GetTeam()]++; } } } // handle stuff for the last tick // change the flag depending on cp status if( m_CPStatus[i] < 50 ) { if( ( m_CPBanner[i] && m_CPBanner[i]->GetEntry() != EOTS_BANNER_HORDE ) || ( m_CPBanner2[i] && m_CPBanner2[i]->GetEntry() != EOTS_BANNER_HORDE ) || ( m_CPBanner3[i] && m_CPBanner3[i]->GetEntry() != EOTS_BANNER_HORDE ) ) { RespawnCPFlag(i, EOTS_BANNER_HORDE); if( m_spiritGuides[i] != NULL ) { RepopPlayersOfTeam( 0, m_spiritGuides[i] ); m_spiritGuides[i]->Despawn( 0, 0 ); RemoveSpiritGuide( m_spiritGuides[i] ); m_spiritGuides[i] = NULLCREATURE; } m_spiritGuides[i] = SpawnSpiritGuide( EOTSGraveyardLocations[i][0], EOTSGraveyardLocations[i][1], EOTSGraveyardLocations[i][2], 0, 1 ); AddSpiritGuide( m_spiritGuides[i] ); SendChatMessage(CHAT_MSG_BG_SYSTEM_HORDE, 0, "The Horde have captured the %s.", EOTSCPNames[i]); // set some world states m_mapMgr->GetStateManager().UpdateWorldState(EOTSNeturalDisplayFields[i], 0); m_mapMgr->GetStateManager().UpdateWorldState(EOTSHordeDisplayFields[i], 1); m_mapMgr->GetStateManager().UpdateWorldState(EOTSAllianceDisplayFields[i], 0); m_towerCount[1]++; m_mapMgr->GetStateManager().UpdateWorldState( WORLDSTATE_EOTS_HORDE_BASES, m_towerCount[1] ); } } else if( m_CPStatus[i] > 50 ) { if( ( m_CPBanner[i] && m_CPBanner[i]->GetEntry() != EOTS_BANNER_ALLIANCE ) || ( m_CPBanner2[i] && m_CPBanner2[i]->GetEntry() != EOTS_BANNER_ALLIANCE ) || ( m_CPBanner3[i] && m_CPBanner3[i]->GetEntry() != EOTS_BANNER_ALLIANCE ) ) { RespawnCPFlag(i, EOTS_BANNER_ALLIANCE); if( m_spiritGuides[i] != NULL ) { RepopPlayersOfTeam( 1, m_spiritGuides[i] ); m_spiritGuides[i]->Despawn( 0, 0 ); RemoveSpiritGuide( m_spiritGuides[i] ); m_spiritGuides[i] = NULLCREATURE; } m_spiritGuides[i] = SpawnSpiritGuide( EOTSGraveyardLocations[i][0], EOTSGraveyardLocations[i][1], EOTSGraveyardLocations[i][2], 0, 0 ); AddSpiritGuide( m_spiritGuides[i] ); SendChatMessage(CHAT_MSG_BG_SYSTEM_ALLIANCE, 0, "The Alliance have captured the %s.", EOTSCPNames[i]); // set some world states m_mapMgr->GetStateManager().UpdateWorldState(EOTSNeturalDisplayFields[i], 0); m_mapMgr->GetStateManager().UpdateWorldState(EOTSHordeDisplayFields[i], 0); m_mapMgr->GetStateManager().UpdateWorldState(EOTSAllianceDisplayFields[i], 1); m_towerCount[0]++; m_mapMgr->GetStateManager().UpdateWorldState( WORLDSTATE_EOTS_ALLIANCE_BASES, m_towerCount[0] ); } } else { if( ( m_CPBanner[i] && m_CPBanner[i]->GetEntry() != EOTS_BANNER_NEUTRAL ) || ( m_CPBanner2[i] && m_CPBanner2[i]->GetEntry() != EOTS_BANNER_NEUTRAL ) || ( m_CPBanner3[i] && m_CPBanner3[i]->GetEntry() != EOTS_BANNER_NEUTRAL ) ) { // has to be below or equal to 50, or above/equal if( ( m_CPBanner[i]->GetEntry() == EOTS_BANNER_ALLIANCE && m_CPStatus[i] <= 50 ) || ( m_CPBanner[i]->GetEntry() == EOTS_BANNER_HORDE && m_CPStatus[i] >= 50 ) || ( m_CPBanner2[i]->GetEntry() == EOTS_BANNER_ALLIANCE && m_CPStatus[i] <= 50 ) || ( m_CPBanner2[i]->GetEntry() == EOTS_BANNER_HORDE && m_CPStatus[i] >= 50 ) || ( m_CPBanner3[i]->GetEntry() == EOTS_BANNER_ALLIANCE && m_CPStatus[i] <= 50 ) || ( m_CPBanner3[i]->GetEntry() == EOTS_BANNER_HORDE && m_CPStatus[i] >= 50 ) ) { if( m_CPBanner[i] && m_CPBanner[i]->GetEntry() == EOTS_BANNER_ALLIANCE ) { SendChatMessage(CHAT_MSG_BG_SYSTEM_NEUTRAL, 0, "The Alliance have lost control of the %s.", EOTSCPNames[i]); m_towerCount[0]--; if( m_towerCount[0] < 0 ) m_towerCount[0] = 0; m_mapMgr->GetStateManager().UpdateWorldState( WORLDSTATE_EOTS_ALLIANCE_BASES, m_towerCount[0] ); } else { SendChatMessage(CHAT_MSG_BG_SYSTEM_NEUTRAL, 0, "The Horde have lost control of the %s.", EOTSCPNames[i]); m_towerCount[1]--; if( m_towerCount[1] < 0 ) m_towerCount[1] = 0; m_mapMgr->GetStateManager().UpdateWorldState( WORLDSTATE_EOTS_HORDE_BASES, m_towerCount[1] ); } RespawnCPFlag(i, EOTS_BANNER_NEUTRAL); if( m_spiritGuides[i] != NULL ) { RepopPlayersOfTeam( -1, m_spiritGuides[i] ); m_spiritGuides[i]->Despawn( 0, 0 ); RemoveSpiritGuide( m_spiritGuides[i] ); m_spiritGuides[i] = NULLCREATURE; } // set some world states m_mapMgr->GetStateManager().UpdateWorldState(EOTSNeturalDisplayFields[i], 1); m_mapMgr->GetStateManager().UpdateWorldState(EOTSHordeDisplayFields[i], 0); m_mapMgr->GetStateManager().UpdateWorldState(EOTSAllianceDisplayFields[i], 0); } } } // send any out of range players the disable flag for(it2 = m_CPStored[i].begin(); it2 != m_CPStored[i].end(); ) { it3 = it2; ++it2; if( it3->second != timeptr ) { plr = m_mapMgr->GetPlayer(it3->first); // they WILL be out of range at this point. this is guaranteed. means they left the set rly quickly. if( plr != NULL ) plr->SendWorldStateUpdate(WORLDSTATE_EOTS_PVP_CAPTURE_BAR_DISPLAY, 0); m_CPStored[i].erase(it3); } } // work out current status for next tick int32 delta; if( plrcounts[0] > plrcounts[1] ) { delta = plrcounts[0] - plrcounts[1]; // cap it at 25 so the banner always gets removed. if( delta > 25 ) delta = 25; m_CPStatus[i] += delta; if( m_CPStatus[i] < 0 ) m_CPStatus[i] = 0; } else if( plrcounts[1] > plrcounts[0] ) { delta = plrcounts[1] - plrcounts[0]; // cap it at 25 so the banner always gets removed. if( delta > 25 ) delta = 25; m_CPStatus[i] -= delta; if( m_CPStatus[i] > 100 ) m_CPStatus[i] = 100; } } }
void ArathiBasin::OnCreate() { // Alliance Gate GameObjectPointer gate = SpawnGameObject(180255, 1284.597290f, 1281.166626f, -15.977916f, 0.76f, 32, 114, 1.5799990f); gate->SetByte(GAMEOBJECT_BYTES_1,GAMEOBJECT_BYTES_ANIMPROGRESS, 100); gate->PushToWorld(m_mapMgr); m_gates.push_back(gate); // horde gate gate = SpawnGameObject(180256, 708.0902710f, 708.4479370f, -17.3898964f, 3.92f, 32, 114, 1.5699990f); gate->SetByte(GAMEOBJECT_BYTES_1,GAMEOBJECT_BYTES_ANIMPROGRESS, 100); gate->PushToWorld(m_mapMgr); m_gates.push_back(gate); // spawn (default) control points SpawnControlPoint(AB_CONTROL_POINT_STABLE, AB_SPAWN_TYPE_NEUTRAL); SpawnControlPoint(AB_CONTROL_POINT_BLACKSMITH, AB_SPAWN_TYPE_NEUTRAL); SpawnControlPoint(AB_CONTROL_POINT_LUMBERMILL, AB_SPAWN_TYPE_NEUTRAL); SpawnControlPoint(AB_CONTROL_POINT_MINE, AB_SPAWN_TYPE_NEUTRAL); SpawnControlPoint(AB_CONTROL_POINT_FARM, AB_SPAWN_TYPE_NEUTRAL); // spawn buffs SpawnBuff(AB_BUFF_STABLES); SpawnBuff(AB_BUFF_BLACKSMITH); SpawnBuff(AB_BUFF_LUMBERMILL); SpawnBuff(AB_BUFF_MINE); SpawnBuff(AB_BUFF_FARM); // spawn the h/a base spirit guides AddSpiritGuide(SpawnSpiritGuide(NoBaseGYLocations[0][0],NoBaseGYLocations[0][1],NoBaseGYLocations[0][2], 0.0f, 0)); AddSpiritGuide(SpawnSpiritGuide(NoBaseGYLocations[1][0],NoBaseGYLocations[1][1],NoBaseGYLocations[1][2], 0.0f, 1)); // w00t WorldStateManager &sm = m_mapMgr->GetStateManager(); // urrrgh worldstates sm.CreateWorldState(0x8D8, 0x00); sm.CreateWorldState(0x8D7, 0x00); sm.CreateWorldState(0x8D6, 0x00); sm.CreateWorldState(0x8D5, 0x00); sm.CreateWorldState(0x8D4, 0x00); sm.CreateWorldState(0x8D3, 0x00); // AB world state's // unknowns, need more research sm.CreateWorldState(0x7A3, 1800); // unknown sm.CreateWorldState(0x745, 0x02); // unknown // Icon stuff for on the map sm.CreateWorldState(WORLDSTATE_AB_SHOW_BACKSMITH_ICON, 0x01); sm.CreateWorldState(WORLDSTATE_AB_SHOW_FARM_ICON, 0x01); sm.CreateWorldState(WORLDSTATE_AB_SHOW_LUMBERMILL_ICON, 0x01); sm.CreateWorldState(WORLDSTATE_AB_SHOW_GOLDMINE_ICON, 0x01); sm.CreateWorldState(WORLDSTATE_AB_SHOW_STABLE_ICON, 0x01); // LumberMill sm.CreateWorldState(WORLDSTATE_AB_CAPTURING_LUMBERMILL_HORDE, 0x00); sm.CreateWorldState(WORLDSTATE_AB_CAPTURING_LUMBERMILL_ALLIANCE, 0x00); sm.CreateWorldState(WORLDSTATE_AB_CAPTURED_LUMBERMILL_HORDE, 0x00); sm.CreateWorldState(WORLDSTATE_AB_CAPTURED_LUMBERMILL_ALLIANCE, 0x00); // GoldMine sm.CreateWorldState(WORLDSTATE_AB_CAPTURING_GOLDMINE_HORDE, 0x00); sm.CreateWorldState(WORLDSTATE_AB_CAPTURING_GOLDMINE_ALLIANCE, 0x00); sm.CreateWorldState(WORLDSTATE_AB_CAPTURED_GOLDMINE_HORDE, 0x00); sm.CreateWorldState(WORLDSTATE_AB_CAPTURED_GOLDMINE_ALLIANCE, 0x00); // BlackSmith sm.CreateWorldState(WORLDSTATE_AB_CAPTURING_BLACKSMITH_HORDE, 0x00); sm.CreateWorldState(WORLDSTATE_AB_CAPTURING_BLACKSMITH_ALLIANCE, 0x00); sm.CreateWorldState(WORLDSTATE_AB_CAPTURED_BLACKSMITH_HORDE, 0x00); sm.CreateWorldState(WORLDSTATE_AB_CAPTURED_BLACKSMITH_ALLIANCE, 0x00); sm.CreateWorldState(WORLDSTATE_AB_MAX_SCORE, RESOURCES_WINVAL); sm.CreateWorldState(WORLDSTATE_AB_ALLIANCE_CAPTUREBASE, 0x00); sm.CreateWorldState(WORLDSTATE_AB_HORDE_CAPTUREBASE, 0x00); sm.CreateWorldState(WORLDSTATE_AB_HORDE_RESOURCES, 0x00); sm.CreateWorldState(WORLDSTATE_AB_ALLIANCE_RESOURCES, 0x00); // Farm sm.CreateWorldState(WORLDSTATE_AB_CAPTURING_FARM_ALLIANCE, 0x00); sm.CreateWorldState(WORLDSTATE_AB_CAPTURING_FARM_HORDE, 0x00); sm.CreateWorldState(WORLDSTATE_AB_CAPTURED_FARM_HORDE, 0x00); sm.CreateWorldState(WORLDSTATE_AB_CAPTURED_FARM_ALLIANCE, 0x00); // Stables sm.CreateWorldState(WORLDSTATE_AB_CAPTURING_STABLES_HORDE, 0x00); sm.CreateWorldState(WORLDSTATE_AB_CAPTURING_STABLES_ALLIANCE, 0x00); sm.CreateWorldState(WORLDSTATE_AB_CAPTURED_STABLES_HORDE, 0x00); sm.CreateWorldState(WORLDSTATE_AB_CAPTURED_STABLES_ALLIANCE, 0x00); }
void IsleOfConquest::OnCreate() { // generals/leaders! SpawnCreature(34924, 214.77f, -830.73f, 60.81f, 0.07f); // High Commander Halford Wyrmbane (ALLIANCE) SpawnCreature(34922, 1296.57f, -765.78f, 69.98f, 6.22f); // Overlord Agmar (HORDE) // Spawn const spiritguides AddSpiritGuide(SpawnSpiritGuide(NoBaseGYLocations[0][0], NoBaseGYLocations[0][1], NoBaseGYLocations[0][2], NoBaseGYLocations[0][3], 0)); AddSpiritGuide(SpawnSpiritGuide(NoBaseGYLocations[1][0], NoBaseGYLocations[1][1], NoBaseGYLocations[1][2], NoBaseGYLocations[1][3], 1)); // Spawn Teleporters for(uint32 i = 0; i < 6; i++) // Alliance { m_teleporters[i] = SpawnGameObject(IOC_TRANSPORTER, iocTransporterLocation[i][0], iocTransporterLocation[i][1], iocTransporterLocation[i][2], iocTransporterLocation[i][3], 0, 1, 1.0f); m_teleporters[i]->PushToWorld(m_mapMgr); m_teleeffect[i] = SpawnGameObject(TELEPORTER_EFFECT_A, iocTransporterLocation[i][0], iocTransporterLocation[i][1], iocTransporterLocation[i][2], iocTransporterLocation[i][3], 0, 1, 1.0f); m_teleeffect[i]->PushToWorld(m_mapMgr); } for(uint32 i = 6; i < 12; i++) // Horde { m_teleporters[i] = SpawnGameObject(IOC_TRANSPORTER, iocTransporterLocation[i][0], iocTransporterLocation[i][1], iocTransporterLocation[i][2], iocTransporterLocation[i][3], 0, 2, 1.0f); m_teleporters[i]->PushToWorld(m_mapMgr); m_teleeffect[i] = SpawnGameObject(TELEPORTER_EFFECT_H, iocTransporterLocation[i][0], iocTransporterLocation[i][1], iocTransporterLocation[i][2], iocTransporterLocation[i][3], 0, 1, 1.0f); m_teleeffect[i]->PushToWorld(m_mapMgr); } // Spawn Gates for(uint32 x = 0; x < 3; x++) { m_desgates[x] = SpawnGameObject(gatesIds[x], iocGatesLocation[x][0], iocGatesLocation[x][1], iocGatesLocation[x][2], iocGatesLocation[x][3], 0, 1, 1.0f); m_desgates[x]->PushToWorld(m_mapMgr); m_desgates[x]->bannerslot = x; m_ogates[x] = SpawnGameObject(IOC_DYNAMIC_DOOR_A, iocGatesLocation[x][0], iocGatesLocation[x][1], iocGatesLocation[x][2], iocGatesLocation[x][3], 0, 1, 1.0f); m_ogates[x]->SetUInt32Value(GAMEOBJECT_FLAGS, 32); m_ogates[x]->SetUInt32Value(GAMEOBJECT_DYNAMIC, 4294901760); m_ogates[x]->SetUInt32Value(GAMEOBJECT_FACTION, 1); m_ogates[x]->SetUInt32Value(GAMEOBJECT_BYTES_1, 4278190081); m_ogates[x]->PushToWorld(m_mapMgr); } for(uint32 x = 3; x < 6; x++) { m_desgates[x] = SpawnGameObject(gatesIds[x], iocGatesLocation[x][0], iocGatesLocation[x][1], iocGatesLocation[x][2], iocGatesLocation[x][3], 0, 2, 1.0f); m_desgates[x]->PushToWorld(m_mapMgr); m_desgates[x]->bannerslot = x; m_ogates[x] = SpawnGameObject(IOC_DYNAMIC_DOOR_H, iocGatesLocation[x][0], iocGatesLocation[x][1], iocGatesLocation[x][2], iocGatesLocation[x][3], 0, 2, 1.0f); m_ogates[x]->SetUInt32Value(GAMEOBJECT_FLAGS, 32); m_ogates[x]->SetUInt32Value(GAMEOBJECT_DYNAMIC, 4294901760); m_ogates[x]->SetUInt32Value(GAMEOBJECT_FACTION, 5); m_ogates[x]->SetUInt32Value(GAMEOBJECT_BYTES_1, 4278190081); m_ogates[x]->PushToWorld(m_mapMgr); } // Flagpole for(uint32 i = 0; i < IOC_NUM_CONTROL_POINTS; i++) { m_flagpole[i] = SpawnGameObject(IOC_FLAGPOLE, ControlPointCoordinates[i][0], ControlPointCoordinates[i][1], ControlPointCoordinates[i][2], ControlPointCoordinates[i][3], 0, 35, 1.0f); m_flagpole[i]->PushToWorld(m_mapMgr); } SpawnControlPoint(IOC_CONTROL_POINT_OILDERRICK, IOC_SPAWN_TYPE_NEUTRAL); SpawnControlPoint(IOC_CONTROL_POINT_COBALTMINE, IOC_SPAWN_TYPE_NEUTRAL); SpawnControlPoint(IOC_CONTROL_POINT_DOCKS, IOC_SPAWN_TYPE_NEUTRAL); SpawnControlPoint(IOC_CONTROL_POINT_AIRSHIPHANGAR, IOC_SPAWN_TYPE_NEUTRAL); SpawnControlPoint(IOC_CONTROL_POINT_SIEGEWORKSHOP, IOC_SPAWN_TYPE_NEUTRAL); SpawnControlPoint(IOC_CONTROL_POINT_ALLIANCE_KEEP, IOC_SPAWN_TYPE_ALLIANCE_CONTROLLED); SpawnControlPoint(IOC_CONTROL_POINT_HORDE_KEEP, IOC_SPAWN_TYPE_HORDE_CONTROLLED); }
void EyeOfTheStorm::UpdateCPs() { uint32 i; set<Player*>::iterator itr, itrend; Player * plr; GameObject * go; int32 delta; uint32 playercounts[2]; uint32 towers[2] = {0,0}; EOTSCaptureDisplayList::iterator eitr, eitr2, eitrend; EOTSCaptureDisplayList * disp; for(i = 0; i < EOTS_TOWER_COUNT; ++i) { /* loop players inrange, add any that arent in the set to the set */ playercounts[0] = playercounts[1] = 0; go = m_CPStatusGO[i]; disp = &m_CPDisplay[i]; itr = go->GetInRangePlayerSetBegin(); itrend = go->GetInRangePlayerSetEnd(); for( ; itr != itrend; ++itr ) { plr = *itr; if( (plr->GetDistance2dSq( go ) <= EOTS_CAPTURE_DISTANCE) && plr->isAlive() && !plr->IsStealth() ) { playercounts[plr->GetTeam()]++; if( disp->find( plr ) == disp->end() ) { disp->insert( plr ); plr->SendWorldStateUpdate(EOTS_WORLDSTATE_DISPLAYON, 1); } } } /* score diff calculation */ //printf("EOTS: Playercounts = %u %u\n", playercounts[0], playercounts[1]); if(playercounts[0] != playercounts[1]) { if(playercounts[0] > playercounts[1]) delta = playercounts[0]; else if(playercounts[1] > playercounts[0]) delta = -(int32)playercounts[1]; delta *= EOTS_CAPTURE_RATE; m_CPStatus[i] += delta; if( m_CPStatus[i] > 100 ) m_CPStatus[i] = 100; else if( m_CPStatus[i] < 0 ) m_CPStatus[i] = 0; // change the flag depending on cp status if( m_CPStatus[i] == 0 ) { if( m_CPBanner[i]->GetEntry() != EOTS_BANNER_HORDE ) { SetWorldState( TowerWorldStates[i][0], 0); SetWorldState( TowerWorldStates[i][1], 1); RespawnCPFlag(i, EOTS_BANNER_HORDE); if( m_spiritGuides[i] != NULL ) { RepopPlayersOfTeam( 0, m_spiritGuides[i] ); m_spiritGuides[i]->Despawn( 0, 0 ); RemoveSpiritGuide( m_spiritGuides[i] ); m_spiritGuides[i] = NULL; } m_spiritGuides[i] = SpawnSpiritGuide( EOTSGraveyardLocations[i][0], EOTSGraveyardLocations[i][1], EOTSGraveyardLocations[i][2], 0, 1 ); AddSpiritGuide( m_spiritGuides[i] ); } } else if( m_CPStatus[i] == 100 ) { if( m_CPBanner[i]->GetEntry() != EOTS_BANNER_ALLIANCE ) { SetWorldState( TowerWorldStates[i][1], 0); SetWorldState( TowerWorldStates[i][0], 1); RespawnCPFlag(i, EOTS_BANNER_ALLIANCE); if( m_spiritGuides[i] != NULL ) { RepopPlayersOfTeam( 1, m_spiritGuides[i] ); m_spiritGuides[i]->Despawn( 0, 0 ); RemoveSpiritGuide( m_spiritGuides[i] ); m_spiritGuides[i] = NULL; } m_spiritGuides[i] = SpawnSpiritGuide( EOTSGraveyardLocations[i][0], EOTSGraveyardLocations[i][1], EOTSGraveyardLocations[i][2], 0, 0 ); AddSpiritGuide( m_spiritGuides[i] ); } } else { if( m_CPBanner[i]->GetEntry() != EOTS_BANNER_NEUTRAL ) { for( uint32 j = 0; j < 2; ++j ) SetWorldState( TowerWorldStates[i][j], 0); RespawnCPFlag(i, EOTS_BANNER_NEUTRAL); if( m_spiritGuides[i] != NULL ) { RepopPlayersOfTeam( -1, m_spiritGuides[i] ); m_spiritGuides[i]->Despawn( 0, 0 ); RemoveSpiritGuide( m_spiritGuides[i] ); m_spiritGuides[i] = NULL; } } } } /* update the players with the new value */ eitr = disp->begin(); eitrend = disp->end(); for( ; eitr != eitrend; ) { plr = *eitr; eitr2 = eitr; ++eitr; if( plr->GetDistance2dSq( go ) > EOTS_CAPTURE_DISTANCE ) { disp->erase( eitr2 ); plr->SendWorldStateUpdate(EOTS_WORLDSTATE_DISPLAYON, 0); // hide the cp bar } else plr->SendWorldStateUpdate(EOTS_WORLDSTATE_DISPLAYVALUE, m_CPStatus[i]); } } for(i = 0; i < EOTS_TOWER_COUNT; ++i) { if( m_CPStatus[i] == 100 ) towers[0]++; else if( m_CPStatus[i] == 0 ) towers[1]++; } SetWorldState( EOTS_WORLDSTATE_ALLIANCE_BASES, towers[0] ); SetWorldState( EOTS_WORLDSTATE_HORDE_BASES, towers[1] ); }
void EyeOfTheStorm::UpdateCPs() { uint32 i; set< Object* >::iterator itr, itrend; Player* plr; GameObject* go; int32 delta = 0; uint32 playercounts[2]; uint32 towers[2] = {0, 0}; EOTSCaptureDisplayList::iterator eitr, eitr2, eitrend; EOTSCaptureDisplayList* disp; for(i = 0; i < EOTS_TOWER_COUNT; ++i) { /* loop players in range, add any that aren't in the set to the set */ playercounts[0] = playercounts[1] = 0; go = m_CPStatusGO[i]; disp = &m_CPDisplay[i]; itr = go->GetInRangePlayerSetBegin(); itrend = go->GetInRangePlayerSetEnd(); for(; itr != itrend; ++itr) { plr = TO< Player* >(*itr); if(plr->isAlive() && !(plr->IsStealth()) && !(plr->m_invisible) && !(plr->SchoolImmunityList[0]) && plr->GetDistance2dSq(go) <= EOTS_CAPTURE_DISTANCE) { playercounts[plr->GetTeam()]++; if(disp->find(plr) == disp->end()) { disp->insert(plr); plr->SendWorldStateUpdate(WORLDSTATE_EOTS_DISPLAYON, 1); } } } /* score diff calculation */ //printf("EOTS: Playercounts = %u %u\n", playercounts[0], playercounts[1]); if(playercounts[0] != playercounts[1]) { if(playercounts[0] > playercounts[1]) delta = playercounts[0]; else if(playercounts[1] > playercounts[0]) delta = -(int32)playercounts[1]; delta *= EOTS_CAPTURE_RATE; m_CPStatus[i] += delta; if(m_CPStatus[i] > 100) m_CPStatus[i] = 100; else if(m_CPStatus[i] < 0) m_CPStatus[i] = 0; // change the flag depending on cp status if(m_CPStatus[i] <= 30) { if(m_CPBanner[i] && m_CPBanner[i]->GetEntry() != EOTS_BANNER_HORDE) { RespawnCPFlag(i, EOTS_BANNER_HORDE); if(m_spiritGuides[i] != NULL) { RepopPlayersOfTeam(0, m_spiritGuides[i]); m_spiritGuides[i]->Despawn(0, 0); RemoveSpiritGuide(m_spiritGuides[i]); m_spiritGuides[i] = NULL; } m_spiritGuides[i] = SpawnSpiritGuide(EOTSGraveyardLocations[i][0], EOTSGraveyardLocations[i][1], EOTSGraveyardLocations[i][2], 0, 1); AddSpiritGuide(m_spiritGuides[i]); SetWorldState(m_iconsStates[i][0], 0); SetWorldState(m_iconsStates[i][1], 0); SetWorldState(m_iconsStates[i][2], 1); SendChatMessage(CHAT_MSG_BG_EVENT_HORDE, 0, "The Horde has taken the %s !", EOTSControlPointNames[i]); PlaySoundToAll(SOUND_HORDE_CAPTURE); } } else if(m_CPStatus[i] >= 70) { if(m_CPBanner[i] && m_CPBanner[i]->GetEntry() != EOTS_BANNER_ALLIANCE) { RespawnCPFlag(i, EOTS_BANNER_ALLIANCE); if(m_spiritGuides[i] != NULL) { RepopPlayersOfTeam(1, m_spiritGuides[i]); m_spiritGuides[i]->Despawn(0, 0); RemoveSpiritGuide(m_spiritGuides[i]); m_spiritGuides[i] = NULL; } m_spiritGuides[i] = SpawnSpiritGuide(EOTSGraveyardLocations[i][0], EOTSGraveyardLocations[i][1], EOTSGraveyardLocations[i][2], 0, 0); AddSpiritGuide(m_spiritGuides[i]); SetWorldState(m_iconsStates[i][0], 0); SetWorldState(m_iconsStates[i][1], 1); SetWorldState(m_iconsStates[i][2], 0); SendChatMessage(CHAT_MSG_BG_EVENT_ALLIANCE, 0, "The Alliance has taken the %s", EOTSControlPointNames[i]); PlaySoundToAll(SOUND_ALLIANCE_CAPTURE); } } else { if(m_CPBanner[i]->GetEntry() != EOTS_BANNER_NEUTRAL) { if(m_CPBanner[i]->GetEntry() == EOTS_BANNER_ALLIANCE) { SendChatMessage(CHAT_MSG_BG_EVENT_NEUTRAL, 0, "The Alliance has lost the control of the %s.", EOTSControlPointNames[i]); } else if(m_CPBanner[i]->GetEntry() == EOTS_BANNER_HORDE) { SendChatMessage(CHAT_MSG_BG_EVENT_NEUTRAL, 0, "The Horde has lost the control of the %s.", EOTSControlPointNames[i]); } RespawnCPFlag(i, EOTS_BANNER_NEUTRAL); if(m_spiritGuides[i] != NULL) { RepopPlayersOfTeam(-1, m_spiritGuides[i]); m_spiritGuides[i]->Despawn(0, 0); RemoveSpiritGuide(m_spiritGuides[i]); m_spiritGuides[i] = NULL; } SetWorldState(m_iconsStates[i][0], 1); SetWorldState(m_iconsStates[i][1], 0); SetWorldState(m_iconsStates[i][2], 0); } } } /* update the players with the new value */ eitr = disp->begin(); eitrend = disp->end(); for(; eitr != eitrend;) { plr = *eitr; eitr2 = eitr; ++eitr; if(plr->GetDistance2dSq(go) > EOTS_CAPTURE_DISTANCE) { disp->erase(eitr2); plr->SendWorldStateUpdate(WORLDSTATE_EOTS_DISPLAYON, 0); // hide the cp bar } else plr->SendWorldStateUpdate(WORLDSTATE_EOTS_DISPLAYVALUE, m_CPStatus[i]); } } for(i = 0; i < EOTS_TOWER_COUNT; ++i) { if(m_CPBanner[i] && m_CPBanner[i]->GetEntry() == EOTS_BANNER_ALLIANCE) towers[0]++; else if(m_CPBanner[i] && m_CPBanner[i]->GetEntry() == EOTS_BANNER_HORDE) towers[1]++; } SetWorldState(WORLDSTATE_EOTS_ALLIANCE_BASES, towers[0]); SetWorldState(WORLDSTATE_EOTS_HORDE_BASES, towers[1]); }
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]]); } }
Creature* CBattleground::SpawnSpiritGuide( LocationVector &v, uint32 faction ){ return SpawnSpiritGuide( v.x, v.y, v.z, v.o, faction ); }