bool BattlefieldWG::Update(uint32 diff) { bool m_return = Battlefield::Update(diff); if (m_saveTimer <= diff) { sWorld->setWorldState(BATTLEFIELD_WG_WORLD_STATE_ACTIVE, m_BattlefieldActive); sWorld->setWorldState(BATTLEFIELD_WG_WORLD_STATE_DEFENDER, m_DefenderTeam); sWorld->setWorldState(ClockWorldState[0], m_Timer); m_saveTimer = 60 * IN_MILLISECONDS; } else m_saveTimer -= diff; for (GuidSet::const_iterator itr = m_PlayersIsSpellImu.begin(); itr != m_PlayersIsSpellImu.end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(*itr)) { if (player->HasAura(SPELL_SPIRITUAL_IMMUNITY)) { const WorldSafeLocsEntry *graveyard = GetClosestGraveYard(player); if (graveyard) { if (player->GetDistance2d(graveyard->x, graveyard->y) > 10.0f) { player->RemoveAurasDueToSpell(SPELL_SPIRITUAL_IMMUNITY); m_PlayersIsSpellImu.erase(player->GetGUID()); } } } } if (m_BattlefieldActive) { for (uint8 team = 0; team < 2; ++team) for (GuidSet::const_iterator itr = m_vehicles[team].begin(); itr != m_vehicles[team].end(); ++itr) if (Unit* unit = ObjectAccessor::FindUnit(*itr)) { if (unit->IsInWater() && !unit->HasAura(SPELL_WINTERGRASP_WATER)) unit->AddAura(SPELL_WINTERGRASP_WATER, unit); if (!unit->IsInWater() && unit->HasAura(SPELL_WINTERGRASP_WATER)) unit->RemoveAurasDueToSpell(SPELL_WINTERGRASP_WATER); } } for (uint8 team = 0; team < 2; ++team) for (GuidSet::const_iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(*itr)) for (BfCapturePointMap::iterator cp_itr = m_capturePoints.begin(); cp_itr != m_capturePoints.end(); ++cp_itr) { if ((*cp_itr).second->GetCapturePointGo()->GetExactDist2dSq(player) < 22500.0f) // 150*150 { player->AddAura((*cp_itr).second->GetTeamId() == TEAM_HORDE ? SPELL_HORDE_CONTROLS_FACTORY_PHASE_SHIFT : SPELL_ALLIANCE_CONTROLS_FACTORY_PHASE_SHIFT, player); player->RemoveAurasDueToSpell((*cp_itr).second->GetTeamId() == TEAM_ALLIANCE ? SPELL_HORDE_CONTROLS_FACTORY_PHASE_SHIFT : SPELL_ALLIANCE_CONTROLS_FACTORY_PHASE_SHIFT); break; } } return m_return; }
void BattlegroundIC::_NodeDeOccupied(uint8 node) { if(!m_BgCreatures[node] || !GetBGCreature(node)) return; std::vector<uint64> ghost_list = m_ReviveQueue[m_BgCreatures[node]]; if (!ghost_list.empty()) { WorldSafeLocsEntry const *ClosestGrave = NULL; for (std::vector<uint64>::const_iterator itr = ghost_list.begin(); itr != ghost_list.end(); ++itr) { Player* plr = sObjectMgr.GetPlayer(*itr); if (!plr) continue; if (!ClosestGrave) // cache ClosestGrave = GetClosestGraveYard(plr); if (ClosestGrave) plr->TeleportTo(GetMapId(), ClosestGrave->x, ClosestGrave->y, ClosestGrave->z, plr->GetOrientation()); } } //Remove spiritguide DelCreature(node); switch(node) { case BG_IC_NODE_WORKSHOP: DeSpawnNpcType(IC_TYPE_DEMOLISSER_H); DeSpawnNpcType(IC_TYPE_SIEGE_H); DeSpawnNpcType(IC_TYPE_DEMOLISSER_A); DeSpawnNpcType(IC_TYPE_SIEGE_A); break ; case BG_IC_NODE_DOCK: //pop de catapulte et lanceur de glaive DeSpawnNpcType(IC_TYPE_DOCKVEHICLE_A); DeSpawnNpcType(IC_TYPE_DOCKVEHICLE_H); break ; case BG_IC_NODE_HANGAR: for (int i = 0 ; i < MAX_BG_IC_OBJ; ++i) { if(BG_IC_OBJ[i].type == IC_TYPE_GUNSHIPTELEPORTER) DelObject(BG_IC_OBJ[i].id); } break ; } }
void BattlegroundIC::RealocatePlayers(ICNodePointType nodeType) { // Those who are waiting to resurrect at this node are taken to the closest own node's graveyard std::vector<uint64> ghost_list = m_ReviveQueue[BgCreatures[BG_IC_NPC_SPIRIT_GUIDE_1+nodeType-2]]; if (!ghost_list.empty()) { WorldSafeLocsEntry const* ClosestGrave = NULL; for (std::vector<uint64>::const_iterator itr = ghost_list.begin(); itr != ghost_list.end(); ++itr) { Player* player = ObjectAccessor::FindPlayer(*itr); if (!player) continue; if (!ClosestGrave) // cache ClosestGrave = GetClosestGraveYard(player); if (ClosestGrave) player->TeleportTo(GetMapId(), ClosestGrave->x, ClosestGrave->y, ClosestGrave->z, player->GetOrientation()); } } }
bool BattlefieldTB::Update(uint32 diff) { bool m_return = Battlefield::Update(diff); if (m_saveTimer <= diff) { sWorld->setWorldState(WS_TB_NEXT_BATTLE_TIMER_ENABLED, m_isActive); sWorld->setWorldState(WS_TB_HORDE_DEFENCE, m_DefenderTeam); sWorld->setWorldState(ClockBTWorldState[0], m_Timer); m_saveTimer = 60 * IN_MILLISECONDS; } else m_saveTimer -= diff; for (GuidSet::const_iterator itr = m_PlayersIsSpellImu.begin(); itr != m_PlayersIsSpellImu.end(); ++itr) { if (Player* plr = sObjectMgr->GetPlayerByLowGUID((*itr))) { if (plr->HasAura(SPELL_TB_SPIRITUAL_IMMUNITY)) { const WorldSafeLocsEntry* graveyard = GetClosestGraveYard(plr); if (graveyard) { if (plr->GetDistance2d(graveyard->x, graveyard->y) > 10.0f) { plr->RemoveAurasDueToSpell(SPELL_TB_SPIRITUAL_IMMUNITY); m_PlayersIsSpellImu.erase(plr->GetGUID()); } } } } } if (m_isActive) if (m_Data32[BATTLEFIELD_TB_DATA_CAPTURED] == 3) EndBattle(false); return m_return; }
bool BattlefieldTB::Update(uint32 diff) { bool m_return = Battlefield::Update(diff); if (m_saveTimer <= diff) { sWorld->setWorldState(5387, m_WarTime); if (IsWarTime()) { sWorld->setWorldState(5546, GetAttackerTeam()); sWorld->setWorldState(5547, GetAttackerTeam()); } else sWorld->setWorldState(5384, m_DefenderTeam); sWorld->setWorldState(TBClockWorldState[0], m_Timer ); m_saveTimer = 60 * IN_MILLISECONDS; } else m_saveTimer -= diff; for (GuidSet::const_iterator itr = m_PlayersIsSpellImu.begin(); itr != m_PlayersIsSpellImu.end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer((*itr))) { if (player->HasAura(SPELL_SPIRITUAL_IMMUNITY_TB)) { const WorldSafeLocsEntry* graveyard = GetClosestGraveYard(player); if (graveyard) { if (player->GetDistance2d(graveyard->x, graveyard->y) > 6.0f) { player->RemoveAurasDueToSpell(SPELL_SPIRITUAL_IMMUNITY_TB); m_PlayersIsSpellImu.erase(player->GetGUID()); } } } } return m_return; }