diff options
Diffstat (limited to 'src/server/game/Maps/Map.cpp')
-rw-r--r-- | src/server/game/Maps/Map.cpp | 502 |
1 files changed, 251 insertions, 251 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 367c6deb60..0623ed9f97 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -67,8 +67,8 @@ Map::~Map() if (!m_scriptSchedule.empty()) sScriptMgr->DecreaseScheduledScriptCount(m_scriptSchedule.size()); - //MMAP::MMapFactory::createOrGetMMapManager()->unloadMap(GetId()); - MMAP::MMapFactory::createOrGetMMapManager()->unloadMapInstance(GetId(), i_InstanceId); + //MMAP::MMapFactory::createOrGetMMapManager()->unloadMap(GetId()); + MMAP::MMapFactory::createOrGetMMapManager()->unloadMapInstance(GetId(), i_InstanceId); } bool Map::ExistMap(uint32 mapid, int gx, int gy) @@ -237,15 +237,15 @@ void Map::InitVisibilityDistance() //init visibility for continents m_VisibleDistance = World::GetMaxVisibleDistanceOnContinents(); - switch (GetId()) - { - case 609: // Scarlet Enclave (DK starting zone) - m_VisibleDistance = 125.0f; - break; - case 25: // Scott Test (box map) - m_VisibleDistance = 200.0f; - break; - } + switch (GetId()) + { + case 609: // Scarlet Enclave (DK starting zone) + m_VisibleDistance = 125.0f; + break; + case 25: // Scott Test (box map) + m_VisibleDistance = 200.0f; + break; + } } // Template specialization of utility methods @@ -393,8 +393,8 @@ void Map::DeleteFromWorld(Player* player) void Map::EnsureGridCreated(const GridCoord &p) { - if (getNGrid(p.x_coord, p.y_coord)) // pussywizard - return; + if (getNGrid(p.x_coord, p.y_coord)) // pussywizard + return; TRINITY_GUARD(ACE_Thread_Mutex, GridLock); EnsureGridCreated_i(p); } @@ -405,9 +405,9 @@ void Map::EnsureGridCreated_i(const GridCoord &p) { if (!getNGrid(p.x_coord, p.y_coord)) { - // pussywizard: moved setNGrid to the end of the function + // pussywizard: moved setNGrid to the end of the function NGridType* ngt = new NGridType(p.x_coord*MAX_NUMBER_OF_GRIDS + p.y_coord, p.x_coord, p.y_coord); - + // build a linkage between this map and NGridType buildNGridLinkage(ngt); // pussywizard: getNGrid(x, y) changed to: ngt @@ -420,8 +420,8 @@ void Map::EnsureGridCreated_i(const GridCoord &p) LoadMapAndVMap(gx, gy); } - // pussywizard: moved here - setNGrid(ngt, p.x_coord, p.y_coord); + // pussywizard: moved here + setNGrid(ngt, p.x_coord, p.y_coord); } } @@ -478,7 +478,7 @@ bool Map::AddPlayerToMap(Player* player) SendInitTransports(player); SendInitSelf(player); - SendZoneDynamicInfo(player); + SendZoneDynamicInfo(player); player->m_clientGUIDs.clear(); player->UpdateObjectVisibility(false); @@ -538,10 +538,10 @@ bool Map::AddToMap(T* obj, bool checkTransport) //obj->SetMap(this); obj->AddToWorld(); - if (checkTransport) - if (!(obj->GetTypeId() == TYPEID_GAMEOBJECT && obj->ToGameObject()->IsTransport())) // dont add transport to transport ;d - if (Transport* transport = GetTransportForPos(obj->GetPhaseMask(), obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ(), obj)) - transport->AddPassenger(obj, true); + if (checkTransport) + if (!(obj->GetTypeId() == TYPEID_GAMEOBJECT && obj->ToGameObject()->IsTransport())) // dont add transport to transport ;d + if (Transport* transport = GetTransportForPos(obj->GetPhaseMask(), obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ(), obj)) + transport->AddPassenger(obj, true); InitializeObject(obj); @@ -552,11 +552,11 @@ bool Map::AddToMap(T* obj, bool checkTransport) //also, trigger needs to cast spell, if not update, cannot see visual obj->UpdateObjectVisibility(true); - // Xinef: little hack for vehicles, accessories have to be added after visibility update so they wont fall off the vehicle, moved from Creature::AIM_Initialize - // Initialize vehicle, this is done only for summoned npcs, DB creatures are handled by grid loaders + // Xinef: little hack for vehicles, accessories have to be added after visibility update so they wont fall off the vehicle, moved from Creature::AIM_Initialize + // Initialize vehicle, this is done only for summoned npcs, DB creatures are handled by grid loaders if (obj->GetTypeId() == TYPEID_UNIT) - if (Vehicle* vehicle = obj->ToCreature()->GetVehicleKit()) - vehicle->Reset(); + if (Vehicle* vehicle = obj->ToCreature()->GetVehicleKit()) + vehicle->Reset(); return true; } @@ -615,8 +615,8 @@ void Map::VisitNearbyCellsOf(WorldObject* obj, TypeContainerVisitor<Trinity::Obj if (!obj->IsPositionValid()) return; - if (obj->GetGridActivationRange() <= 0.0f) // pussywizard: gameobjects for example are on active lists, but range is equal to 0 (they just prevent grid unloading) - return; + if (obj->GetGridActivationRange() <= 0.0f) // pussywizard: gameobjects for example are on active lists, but range is equal to 0 (they just prevent grid unloading) + return; // Update mobs/objects in ALL visible cells around object! CellArea area = Cell::CalculateCellArea(obj->GetPositionX(), obj->GetPositionY(), obj->GetGridActivationRange()); @@ -644,8 +644,8 @@ void Map::VisitNearbyCellsOf(WorldObject* obj, TypeContainerVisitor<Trinity::Obj void Map::Update(const uint32 t_diff, const uint32 s_diff, bool thread) { - uint32 mapId = GetId(); // pussywizard: for crashlogs - sLog->outDebug(LOG_FILTER_POOLSYS, "%u", mapId); // pussywizard: for crashlogs + uint32 mapId = GetId(); // pussywizard: for crashlogs + sLog->outDebug(LOG_FILTER_POOLSYS, "%u", mapId); // pussywizard: for crashlogs if (t_diff) _dynamicTree.update(t_diff); @@ -662,22 +662,22 @@ void Map::Update(const uint32 t_diff, const uint32 s_diff, bool thread) } } - if (!t_diff) - { - for (m_mapRefIter = m_mapRefManager.begin(); m_mapRefIter != m_mapRefManager.end(); ++m_mapRefIter) - { - Player* player = m_mapRefIter->GetSource(); + if (!t_diff) + { + for (m_mapRefIter = m_mapRefManager.begin(); m_mapRefIter != m_mapRefManager.end(); ++m_mapRefIter) + { + Player* player = m_mapRefIter->GetSource(); - if (!player || !player->IsInWorld()) - continue; + if (!player || !player->IsInWorld()) + continue; - // update players at tick - player->Update(s_diff); - } + // update players at tick + player->Update(s_diff); + } - HandleDelayedVisibility(); - return; - } + HandleDelayedVisibility(); + return; + } /// update active cells around players and active objects resetMarkedCells(); @@ -759,22 +759,22 @@ void Map::Update(const uint32 t_diff, const uint32 s_diff, bool thread) MoveAllGameObjectsInMoveList(); MoveAllDynamicObjectsInMoveList(); - HandleDelayedVisibility(); + HandleDelayedVisibility(); sScriptMgr->OnMapUpdate(this, t_diff); BuildAndSendUpdateForObjects(); // pussywizard - sLog->outDebug(LOG_FILTER_POOLSYS, "%u", mapId); // pussywizard: for crashlogs + sLog->outDebug(LOG_FILTER_POOLSYS, "%u", mapId); // pussywizard: for crashlogs } void Map::HandleDelayedVisibility() { - if (i_objectsForDelayedVisibility.empty()) - return; - for (UNORDERED_SET<Unit*>::iterator itr = i_objectsForDelayedVisibility.begin(); itr != i_objectsForDelayedVisibility.end(); ++itr) - (*itr)->ExecuteDelayedUnitRelocationEvent(); - i_objectsForDelayedVisibility.clear(); + if (i_objectsForDelayedVisibility.empty()) + return; + for (UNORDERED_SET<Unit*>::iterator itr = i_objectsForDelayedVisibility.begin(); itr != i_objectsForDelayedVisibility.end(); ++itr) + (*itr)->ExecuteDelayedUnitRelocationEvent(); + i_objectsForDelayedVisibility.clear(); } struct ResetNotifier @@ -1020,13 +1020,13 @@ void Map::MoveAllCreaturesInMoveList() if (!c->IsInWorld()) continue; - Cell const& old_cell = c->GetCurrentCell(); - Cell new_cell(c->GetPositionX(), c->GetPositionY()); + Cell const& old_cell = c->GetCurrentCell(); + Cell new_cell(c->GetPositionX(), c->GetPositionY()); - c->RemoveFromGrid(); - if (old_cell.DiffGrid(new_cell)) - EnsureGridLoaded(new_cell); - AddToGrid(c, new_cell); + c->RemoveFromGrid(); + if (old_cell.DiffGrid(new_cell)) + EnsureGridLoaded(new_cell); + AddToGrid(c, new_cell); } _creaturesToMove.clear(); } @@ -1049,13 +1049,13 @@ void Map::MoveAllGameObjectsInMoveList() if (!go->IsInWorld()) continue; - Cell const& old_cell = go->GetCurrentCell(); - Cell new_cell(go->GetPositionX(), go->GetPositionY()); + Cell const& old_cell = go->GetCurrentCell(); + Cell new_cell(go->GetPositionX(), go->GetPositionY()); - go->RemoveFromGrid(); - if (old_cell.DiffGrid(new_cell)) - EnsureGridLoaded(new_cell); - AddToGrid(go, new_cell); + go->RemoveFromGrid(); + if (old_cell.DiffGrid(new_cell)) + EnsureGridLoaded(new_cell); + AddToGrid(go, new_cell); } _gameObjectsToMove.clear(); } @@ -1078,20 +1078,20 @@ void Map::MoveAllGameObjectsInMoveList() if (!dynObj->IsInWorld()) continue; - Cell const& old_cell = dynObj->GetCurrentCell(); - Cell new_cell(dynObj->GetPositionX(), dynObj->GetPositionY()); + Cell const& old_cell = dynObj->GetCurrentCell(); + Cell new_cell(dynObj->GetPositionX(), dynObj->GetPositionY()); - dynObj->RemoveFromGrid(); - if (old_cell.DiffGrid(new_cell)) - EnsureGridLoaded(new_cell); - AddToGrid(dynObj, new_cell); + dynObj->RemoveFromGrid(); + if (old_cell.DiffGrid(new_cell)) + EnsureGridLoaded(new_cell); + AddToGrid(dynObj, new_cell); } _dynamicObjectsToMove.clear(); } bool Map::UnloadGrid(NGridType& ngrid) { - // pussywizard: UnloadGrid only done when whole map is unloaded, no need to worry about moving npcs between grids, etc. + // pussywizard: UnloadGrid only done when whole map is unloaded, no need to worry about moving npcs between grids, etc. const uint32 x = ngrid.getX(); const uint32 y = ngrid.getY(); @@ -1166,9 +1166,9 @@ void Map::UnloadAll() UnloadGrid(grid); // deletes the grid and removes it from the GridRefManager } - // pussywizard: crashfix, some npc can be left on transport (not a default passenger) - if (!AllTransportsEmpty()) - AllTransportsRemovePassengers(); + // pussywizard: crashfix, some npc can be left on transport (not a default passenger) + if (!AllTransportsEmpty()) + AllTransportsRemovePassengers(); for (TransportsContainer::iterator itr = _transports.begin(); itr != _transports.end();) { @@ -1772,27 +1772,27 @@ Transport* Map::GetTransportForPos(uint32 phase, float x, float y, float z, Worl { G3D::Vector3 v(x, y, z + 2.0f); G3D::Ray r(v, G3D::Vector3(0, 0, -1)); - for (TransportsContainer::const_iterator itr = _transports.begin(); itr != _transports.end(); ++itr) - if ((*itr)->IsInWorld() && (*itr)->GetExactDistSq(x, y, z) < 75.0f*75.0f && (*itr)->m_model) - { - float dist = 30.0f; - bool hit = (*itr)->m_model->intersectRay(r, dist, false, phase); - if (hit) - return *itr; - } - - if (worldobject) - if (GameObject* staticTrans = worldobject->FindNearestGameObjectOfType(GAMEOBJECT_TYPE_TRANSPORT, 75.0f)) - if (staticTrans->m_model) - { - float dist = 10.0f; - bool hit = staticTrans->m_model->intersectRay(r, dist, false, phase); - if (hit) - if (GetHeight(phase, x, y, z, true, 30.0f) < (v.z - dist + 1.0f)) - return staticTrans->ToTransport(); - } - - return NULL; + for (TransportsContainer::const_iterator itr = _transports.begin(); itr != _transports.end(); ++itr) + if ((*itr)->IsInWorld() && (*itr)->GetExactDistSq(x, y, z) < 75.0f*75.0f && (*itr)->m_model) + { + float dist = 30.0f; + bool hit = (*itr)->m_model->intersectRay(r, dist, false, phase); + if (hit) + return *itr; + } + + if (worldobject) + if (GameObject* staticTrans = worldobject->FindNearestGameObjectOfType(GAMEOBJECT_TYPE_TRANSPORT, 75.0f)) + if (staticTrans->m_model) + { + float dist = 10.0f; + bool hit = staticTrans->m_model->intersectRay(r, dist, false, phase); + if (hit) + if (GetHeight(phase, x, y, z, true, 30.0f) < (v.z - dist + 1.0f)) + return staticTrans->ToTransport(); + } + + return NULL; } float Map::GetHeight(float x, float y, float z, bool checkVMap /*= true*/, float maxSearchDist /*= DEFAULT_HEIGHT_SEARCH*/) const @@ -2120,16 +2120,16 @@ void Map::SendInitSelf(Player* player) // attach to player data current transport data if (Transport* transport = player->GetTransport()) - transport->BuildCreateUpdateBlockForPlayer(&data, player); + transport->BuildCreateUpdateBlockForPlayer(&data, player); // build data for self presence in world at own client (one time for map) player->BuildCreateUpdateBlockForPlayer(&data, player); // build other passengers at transport also (they always visible and marked as visible and will not send at visibility update at add to map if (Transport* transport = player->GetTransport()) - for (Transport::PassengerSet::const_iterator itr = transport->GetPassengers().begin(); itr != transport->GetPassengers().end(); ++itr) - if (player != (*itr) && player->HaveAtClient(*itr)) - (*itr)->BuildCreateUpdateBlockForPlayer(&data, player); + for (Transport::PassengerSet::const_iterator itr = transport->GetPassengers().begin(); itr != transport->GetPassengers().end(); ++itr) + if (player != (*itr) && player->HaveAtClient(*itr)) + (*itr)->BuildCreateUpdateBlockForPlayer(&data, player); WorldPacket packet; data.BuildPacket(&packet); @@ -2157,17 +2157,17 @@ void Map::SendRemoveTransports(Player* player) if (*itr != player->GetTransport()) (*itr)->BuildOutOfRangeUpdateBlock(&transData); - // pussywizard: remove static transports from client - for (Player::ClientGUIDs::const_iterator it = player->m_clientGUIDs.begin();it != player->m_clientGUIDs.end(); ) - { - if (IS_TRANSPORT_GUID(*it)) - { - transData.AddOutOfRangeGUID(*it); - it = player->m_clientGUIDs.erase(it); - } - else - ++it; - } + // pussywizard: remove static transports from client + for (Player::ClientGUIDs::const_iterator it = player->m_clientGUIDs.begin();it != player->m_clientGUIDs.end(); ) + { + if (IS_TRANSPORT_GUID(*it)) + { + transData.AddOutOfRangeGUID(*it); + it = player->m_clientGUIDs.erase(it); + } + else + ++it; + } WorldPacket packet; transData.BuildPacket(&packet); @@ -2381,11 +2381,11 @@ InstanceMap::InstanceMap(uint32 id, uint32 InstanceId, uint8 SpawnMode, Map* _pa // this make sure it gets unloaded if for some reason no player joins m_unloadTimer = std::max(sWorld->getIntConfig(CONFIG_INSTANCE_UNLOAD_DELAY), (uint32)MIN_UNLOAD_DELAY); - // pussywizard: - if (IsRaid()) - if (time_t resetTime = sInstanceSaveMgr->GetResetTimeFor(id, Difficulty(SpawnMode))) - if (time_t extendedResetTime = sInstanceSaveMgr->GetExtendedResetTimeFor(id, Difficulty(SpawnMode))) - _instanceResetPeriod = extendedResetTime - resetTime; + // pussywizard: + if (IsRaid()) + if (time_t resetTime = sInstanceSaveMgr->GetResetTimeFor(id, Difficulty(SpawnMode))) + if (time_t extendedResetTime = sInstanceSaveMgr->GetExtendedResetTimeFor(id, Difficulty(SpawnMode))) + _instanceResetPeriod = extendedResetTime - resetTime; } InstanceMap::~InstanceMap() @@ -2400,31 +2400,31 @@ void InstanceMap::InitVisibilityDistance() //init visibility distance for instances m_VisibleDistance = World::GetMaxVisibleDistanceInInstances(); - // pussywizard: this CAN NOT exceed MAX_VISIBILITY_DISTANCE - switch (GetId()) - { - case 429: // Dire Maul - m_VisibleDistance = 175.0f; - break; - case 649: // Trial of the Crusader - case 650: // Trial of the Champion - case 595: // Culling of Startholme - case 658: // Pit of Saron - m_VisibleDistance = 150.0f; - break; - case 550: // The Eye - case 578: // The Nexus: The Oculus - m_VisibleDistance = 175.0f; - break; - case 615: // Obsidian Sanctum - case 616: // Eye of Eternity - case 603: // Ulduar - case 668: // Halls of Reflection - case 631: // Icecrown Citadel - case 724: // Ruby Sanctum - m_VisibleDistance = 200.0f; - break; - } + // pussywizard: this CAN NOT exceed MAX_VISIBILITY_DISTANCE + switch (GetId()) + { + case 429: // Dire Maul + m_VisibleDistance = 175.0f; + break; + case 649: // Trial of the Crusader + case 650: // Trial of the Champion + case 595: // Culling of Startholme + case 658: // Pit of Saron + m_VisibleDistance = 150.0f; + break; + case 550: // The Eye + case 578: // The Nexus: The Oculus + m_VisibleDistance = 175.0f; + break; + case 615: // Obsidian Sanctum + case 616: // Eye of Eternity + case 603: // Ulduar + case 668: // Halls of Reflection + case 631: // Icecrown Citadel + case 724: // Ruby Sanctum + m_VisibleDistance = 200.0f; + break; + } } /* @@ -2445,7 +2445,7 @@ bool InstanceMap::CanEnter(Player* player, bool loginCheck) // cannot enter if the instance is full (player cap), GMs don't count uint32 maxPlayers = GetMaxPlayers(); - if (GetPlayersCountExceptGMs() >= (loginCheck ? maxPlayers+1 : maxPlayers)) + if (GetPlayersCountExceptGMs() >= (loginCheck ? maxPlayers+1 : maxPlayers)) { ;//sLog->outDetail("MAP: Instance '%u' of map '%s' cannot have more than '%u' players. Player '%s' rejected", GetInstanceId(), GetMapName(), maxPlayers, player->GetName().c_str()); player->SendTransferAborted(GetId(), TRANSFER_ABORT_MAX_PLAYERS); @@ -2460,14 +2460,14 @@ bool InstanceMap::CanEnter(Player* player, bool loginCheck) return false; } - // xinef: dont allow LFG Group to enter other instance that is selected - if (Group* group = player->GetGroup()) - if (group->isLFGGroup()) - if (!sLFGMgr->inLfgDungeonMap(group->GetGUID(), GetId(), GetDifficulty())) - { - player->SendTransferAborted(GetId(), TRANSFER_ABORT_MAP_NOT_ALLOWED); - return false; - } + // xinef: dont allow LFG Group to enter other instance that is selected + if (Group* group = player->GetGroup()) + if (group->isLFGGroup()) + if (!sLFGMgr->inLfgDungeonMap(group->GetGUID(), GetId(), GetDifficulty())) + { + player->SendTransferAborted(GetId(), TRANSFER_ABORT_MAP_NOT_ALLOWED); + return false; + } // cannot enter if instance is in use by another party/soloer that have a permanent save in the same instance id PlayerList const &playerList = GetPlayers(); @@ -2475,8 +2475,8 @@ bool InstanceMap::CanEnter(Player* player, bool loginCheck) for (PlayerList::const_iterator i = playerList.begin(); i != playerList.end(); ++i) if (Player* iPlayer = i->GetSource()) { - if (iPlayer == player) // login case, player already added to map - continue; + if (iPlayer == player) // login case, player already added to map + continue; if (iPlayer->IsGameMaster()) // bypass GMs continue; if (!player->GetGroup()) // player has not group and there is someone inside, deny entry @@ -2501,8 +2501,8 @@ bool InstanceMap::CanEnter(Player* player, bool loginCheck) */ bool InstanceMap::AddPlayerToMap(Player* player) { - if (m_resetAfterUnload) // this instance has been reset, it's not meant to be used anymore - return false; + if (m_resetAfterUnload) // this instance has been reset, it's not meant to be used anymore + return false; if (IsDungeon()) { @@ -2517,42 +2517,42 @@ bool InstanceMap::AddPlayerToMap(Player* player) } // check for existing instance binds - InstancePlayerBind* playerBind = sInstanceSaveMgr->PlayerGetBoundInstance(player->GetGUIDLow(), GetId(), Difficulty(GetSpawnMode())); + InstancePlayerBind* playerBind = sInstanceSaveMgr->PlayerGetBoundInstance(player->GetGUIDLow(), GetId(), Difficulty(GetSpawnMode())); if (playerBind && playerBind->perm) - { - if (playerBind->save != mapSave) - { - sLog->outError("InstanceMap::Add: player %s(%d) is permanently bound to instance %d, %d, %d, %d but he is being put into instance %d, %d, %d, %d", player->GetName().c_str(), player->GetGUIDLow(), playerBind->save->GetMapId(), playerBind->save->GetInstanceId(), playerBind->save->GetDifficulty(), playerBind->save->CanReset(), mapSave->GetMapId(), mapSave->GetInstanceId(), mapSave->GetDifficulty(), mapSave->CanReset()); + { + if (playerBind->save != mapSave) + { + sLog->outError("InstanceMap::Add: player %s(%d) is permanently bound to instance %d, %d, %d, %d but he is being put into instance %d, %d, %d, %d", player->GetName().c_str(), player->GetGUIDLow(), playerBind->save->GetMapId(), playerBind->save->GetInstanceId(), playerBind->save->GetDifficulty(), playerBind->save->CanReset(), mapSave->GetMapId(), mapSave->GetInstanceId(), mapSave->GetDifficulty(), mapSave->CanReset()); return false; - } - } - else - { + } + } + else + { playerBind = sInstanceSaveMgr->PlayerBindToInstance(player->GetGUIDLow(), mapSave, false, player); - // pussywizard: bind lider also if not yet bound - if (Group* g = player->GetGroup()) - if (g->GetLeaderGUID() != player->GetGUID()) - if (!sInstanceSaveMgr->PlayerGetBoundInstance(GUID_LOPART(g->GetLeaderGUID()), mapSave->GetMapId(), mapSave->GetDifficulty())) - { - sInstanceSaveMgr->PlayerCreateBoundInstancesMaps(GUID_LOPART(g->GetLeaderGUID())); - sInstanceSaveMgr->PlayerBindToInstance(GUID_LOPART(g->GetLeaderGUID()), mapSave, false, ObjectAccessor::FindPlayerInOrOutOfWorld(g->GetLeaderGUID())); - } - } + // pussywizard: bind lider also if not yet bound + if (Group* g = player->GetGroup()) + if (g->GetLeaderGUID() != player->GetGUID()) + if (!sInstanceSaveMgr->PlayerGetBoundInstance(GUID_LOPART(g->GetLeaderGUID()), mapSave->GetMapId(), mapSave->GetDifficulty())) + { + sInstanceSaveMgr->PlayerCreateBoundInstancesMaps(GUID_LOPART(g->GetLeaderGUID())); + sInstanceSaveMgr->PlayerBindToInstance(GUID_LOPART(g->GetLeaderGUID()), mapSave, false, ObjectAccessor::FindPlayerInOrOutOfWorld(g->GetLeaderGUID())); + } + } // increase current instances (hourly limit) - // xinef: specific instances are still limited + // xinef: specific instances are still limited if (!group || !group->isLFGGroup() || !group->IsLfgRandomInstance()) player->AddInstanceEnterTime(GetInstanceId(), time(NULL)); - if (!playerBind->perm && !mapSave->CanReset() && (!group || !group->isLFGGroup() || !group->IsLfgRandomInstance())) + if (!playerBind->perm && !mapSave->CanReset() && (!group || !group->isLFGGroup() || !group->IsLfgRandomInstance())) { WorldPacket data(SMSG_INSTANCE_LOCK_WARNING_QUERY, 9); data << uint32(60000); data << uint32(instance_script ? instance_script->GetCompletedEncounterMask() : 0); data << uint8(0); player->GetSession()->SendPacket(&data); - player->SetPendingBind(mapSave->GetInstanceId(), 60000); - } + player->SetPendingBind(mapSave->GetInstanceId(), 60000); + } } // initialize unload state @@ -2623,28 +2623,28 @@ void InstanceMap::CreateInstanceScript(bool load, std::string data, uint32 compl */ bool InstanceMap::Reset(uint8 method, std::list<uint32>* globalResetSkipList) { - if (method == INSTANCE_RESET_GLOBAL) - { + if (method == INSTANCE_RESET_GLOBAL) + { // pussywizard: teleport out immediately for (MapRefManager::iterator itr = m_mapRefManager.begin(); itr != m_mapRefManager.end(); ++itr) - { - // teleport players that are no longer bound (can be still bound if extended id) - if (!globalResetSkipList || std::find(globalResetSkipList->begin(), globalResetSkipList->end(), itr->GetSource()->GetGUIDLow()) == globalResetSkipList->end()) - itr->GetSource()->RepopAtGraveyard(); - } - - // reset map only if noone is bound - if (!globalResetSkipList || globalResetSkipList->empty()) - { - // pussywizard: setting both m_unloadWhenEmpty and m_unloadTimer intended, in case RepopAtGraveyard failed - if (HavePlayers()) - m_unloadWhenEmpty = true; - m_unloadTimer = MIN_UNLOAD_DELAY; - m_resetAfterUnload = true; - } - - return m_mapRefManager.isEmpty(); - } + { + // teleport players that are no longer bound (can be still bound if extended id) + if (!globalResetSkipList || std::find(globalResetSkipList->begin(), globalResetSkipList->end(), itr->GetSource()->GetGUIDLow()) == globalResetSkipList->end()) + itr->GetSource()->RepopAtGraveyard(); + } + + // reset map only if noone is bound + if (!globalResetSkipList || globalResetSkipList->empty()) + { + // pussywizard: setting both m_unloadWhenEmpty and m_unloadTimer intended, in case RepopAtGraveyard failed + if (HavePlayers()) + m_unloadWhenEmpty = true; + m_unloadTimer = MIN_UNLOAD_DELAY; + m_resetAfterUnload = true; + } + + return m_mapRefManager.isEmpty(); + } if (HavePlayers()) { @@ -2675,13 +2675,13 @@ void InstanceMap::PermBindAllPlayers() return; } - Player* player; - Group* group; + Player* player; + Group* group; // group members outside the instance group don't get bound for (MapRefManager::iterator itr = m_mapRefManager.begin(); itr != m_mapRefManager.end(); ++itr) { player = itr->GetSource(); - group = player->GetGroup(); + group = player->GetGroup(); // players inside an instance cannot be bound to other instances // some players may already be permanently bound, in this case nothing happens InstancePlayerBind* bind = sInstanceSaveMgr->PlayerGetBoundInstance(player->GetGUIDLow(), save->GetMapId(), save->GetDifficulty()); @@ -2690,12 +2690,12 @@ void InstanceMap::PermBindAllPlayers() WorldPacket data(SMSG_INSTANCE_SAVE_CREATED, 4); data << uint32(0); player->GetSession()->SendPacket(&data); - sInstanceSaveMgr->PlayerBindToInstance(player->GetGUIDLow(), save, true, player); + sInstanceSaveMgr->PlayerBindToInstance(player->GetGUIDLow(), save, true, player); } - // Xinef: Difficulty change prevention - if (group) - group->SetDifficultyChangePrevention(DIFFICULTY_PREVENTION_CHANGE_BOSS_KILLED); + // Xinef: Difficulty change prevention + if (group) + group->SetDifficultyChangePrevention(DIFFICULTY_PREVENTION_CHANGE_BOSS_KILLED); } } @@ -2783,21 +2783,21 @@ bool BattlegroundMap::CanEnter(Player* player, bool loginCheck) bool BattlegroundMap::AddPlayerToMap(Player* player) { player->m_InstanceValid = true; - if (IsBattleArena()) - player->CastSpell(player, 100102, true); + if (IsBattleArena()) + player->CastSpell(player, 100102, true); return Map::AddPlayerToMap(player); } void BattlegroundMap::RemovePlayerFromMap(Player* player, bool remove) { - if (Battleground* bg = GetBG()) - { - bg->RemovePlayerAtLeave(player); - if (IsBattleArena()) - bg->RemoveSpectator(player); - } - if (IsBattleArena()) - player->RemoveAura(100102); + if (Battleground* bg = GetBG()) + { + bg->RemovePlayerAtLeave(player); + if (IsBattleArena()) + bg->RemoveSpectator(player); + } + if (IsBattleArena()) + player->RemoveAura(100102); Map::RemovePlayerFromMap(player, remove); } @@ -2869,9 +2869,9 @@ void Map::SaveCreatureRespawnTime(uint32 dbGuid, time_t& respawnTime) return; } - time_t now = time(NULL); - if (GetInstanceResetPeriod() > 0 && respawnTime-now+5 >= GetInstanceResetPeriod()) - respawnTime = now+YEAR; + time_t now = time(NULL); + if (GetInstanceResetPeriod() > 0 && respawnTime-now+5 >= GetInstanceResetPeriod()) + respawnTime = now+YEAR; _creatureRespawnTimes[dbGuid] = respawnTime; @@ -2903,9 +2903,9 @@ void Map::SaveGORespawnTime(uint32 dbGuid, time_t& respawnTime) return; } - time_t now = time(NULL); - if (GetInstanceResetPeriod() > 0 && respawnTime-now+5 >= GetInstanceResetPeriod()) - respawnTime = now+YEAR; + time_t now = time(NULL); + if (GetInstanceResetPeriod() > 0 && respawnTime-now+5 >= GetInstanceResetPeriod()) + respawnTime = now+YEAR; _goRespawnTimes[dbGuid] = respawnTime; @@ -2984,7 +2984,7 @@ void Map::DeleteRespawnTimesInDB(uint16 mapId, uint32 instanceId) void Map::UpdateEncounterState(EncounterCreditType type, uint32 creditEntry, Unit* source) { - Difficulty difficulty_fixed = (GetId() == 631 || GetId() == 724 ? Difficulty(GetDifficulty()%2) : GetDifficulty()); + Difficulty difficulty_fixed = (GetId() == 631 || GetId() == 724 ? Difficulty(GetDifficulty()%2) : GetDifficulty()); DungeonEncounterList const* encounters = sObjectMgr->GetDungeonEncounterList(GetId(), difficulty_fixed); if (!encounters) return; @@ -2996,9 +2996,9 @@ void Map::UpdateEncounterState(EncounterCreditType type, uint32 creditEntry, Uni DungeonEncounter const* encounter = *itr; if (encounter->creditType == type && encounter->creditEntry == creditEntry) { - if (source) - if (InstanceScript* instanceScript = source->GetInstanceScript()) - instanceScript->SetCompletedEncountersMask((1 << encounter->dbcEntry->encounterIndex)|instanceScript->GetCompletedEncounterMask(), true); + if (source) + if (InstanceScript* instanceScript = source->GetInstanceScript()) + instanceScript->SetCompletedEncountersMask((1 << encounter->dbcEntry->encounterIndex)|instanceScript->GetCompletedEncounterMask(), true); if (encounter->lastEncounterDungeon) { @@ -3008,19 +3008,19 @@ void Map::UpdateEncounterState(EncounterCreditType type, uint32 creditEntry, Uni } } - // pussywizard: - LogEncounterFinished(type, creditEntry); + // pussywizard: + LogEncounterFinished(type, creditEntry); - if (dungeonId) + if (dungeonId) { - Map::PlayerList const& players = GetPlayers(); + Map::PlayerList const& players = GetPlayers(); for (Map::PlayerList::const_iterator i = players.begin(); i != players.end(); ++i) { - if (Player* player = i->GetSource()) + if (Player* player = i->GetSource()) if (Group* grp = player->GetGroup()) if (grp->isLFGGroup()) { - sLFGMgr->FinishDungeon(grp->GetGUID(), dungeonId, this); + sLFGMgr->FinishDungeon(grp->GetGUID(), dungeonId, this); return; } } @@ -3029,30 +3029,30 @@ void Map::UpdateEncounterState(EncounterCreditType type, uint32 creditEntry, Uni void Map::LogEncounterFinished(EncounterCreditType type, uint32 creditEntry) { - if (!IsRaid() || !GetEntry() || GetEntry()->Expansion() < 2) // only for wotlk raids, because logs take up tons of mysql memory - return; - InstanceMap* map = ToInstanceMap(); - if (!map) - return; - std::string playersInfo; - char buffer[16384], buffer2[255]; - Map::PlayerList const& pl = map->GetPlayers(); - for (Map::PlayerList::const_iterator itr = pl.begin(); itr != pl.end(); ++itr) - if (Player* p = itr->GetSource()) - { - std::string auraStr; - const Unit::AuraApplicationMap& a = p->GetAppliedAuras(); - for (Unit::AuraApplicationMap::const_iterator itr = a.begin(); itr != a.end(); ++itr) - { - snprintf(buffer2, 255, "%u(%u) ", itr->first, itr->second->GetEffectMask()); - auraStr += buffer2; - } - - snprintf(buffer, 16384, "%s (guid: %u, acc: %u, ip: %s, guild: %u), xyz: (%.1f, %.1f, %.1f), auras: %s\n", p->GetName().c_str(), p->GetGUIDLow(), p->GetSession()->GetAccountId(), p->GetSession()->GetRemoteAddress().c_str(), p->GetGuildId(), p->GetPositionX(), p->GetPositionY(), p->GetPositionZ(), auraStr.c_str()); - playersInfo += buffer; - } - CleanStringForMysqlQuery(playersInfo); - CharacterDatabase.PExecute("INSERT INTO log_encounter VALUES(NOW(), %u, %u, %u, %u, '%s')", GetId(), (uint32)GetDifficulty(), type, creditEntry, playersInfo.c_str()); + if (!IsRaid() || !GetEntry() || GetEntry()->Expansion() < 2) // only for wotlk raids, because logs take up tons of mysql memory + return; + InstanceMap* map = ToInstanceMap(); + if (!map) + return; + std::string playersInfo; + char buffer[16384], buffer2[255]; + Map::PlayerList const& pl = map->GetPlayers(); + for (Map::PlayerList::const_iterator itr = pl.begin(); itr != pl.end(); ++itr) + if (Player* p = itr->GetSource()) + { + std::string auraStr; + const Unit::AuraApplicationMap& a = p->GetAppliedAuras(); + for (Unit::AuraApplicationMap::const_iterator itr = a.begin(); itr != a.end(); ++itr) + { + snprintf(buffer2, 255, "%u(%u) ", itr->first, itr->second->GetEffectMask()); + auraStr += buffer2; + } + + snprintf(buffer, 16384, "%s (guid: %u, acc: %u, ip: %s, guild: %u), xyz: (%.1f, %.1f, %.1f), auras: %s\n", p->GetName().c_str(), p->GetGUIDLow(), p->GetSession()->GetAccountId(), p->GetSession()->GetRemoteAddress().c_str(), p->GetGuildId(), p->GetPositionX(), p->GetPositionY(), p->GetPositionZ(), auraStr.c_str()); + playersInfo += buffer; + } + CleanStringForMysqlQuery(playersInfo); + CharacterDatabase.PExecute("INSERT INTO log_encounter VALUES(NOW(), %u, %u, %u, %u, '%s')", GetId(), (uint32)GetDifficulty(), type, creditEntry, playersInfo.c_str()); } bool Map::AllTransportsEmpty() const @@ -3068,7 +3068,7 @@ void Map::AllTransportsRemovePassengers() { for (TransportsContainer::const_iterator itr = _transports.begin(); itr != _transports.end(); ++itr) while (!(*itr)->GetPassengers().empty()) - (*itr)->RemovePassenger(*((*itr)->GetPassengers().begin()), true); + (*itr)->RemovePassenger(*((*itr)->GetPassengers().begin()), true); } time_t Map::GetLinkedRespawnTime(uint64 guid) const |