mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-02-05 16:39:08 +01:00
*Merge.
--HG-- branch : trunk
This commit is contained in:
@@ -187,7 +187,7 @@ Map::Map(uint32 id, time_t expiry, uint32 InstanceId, uint8 SpawnMode)
|
||||
: i_mapEntry (sMapStore.LookupEntry(id)), i_spawnMode(SpawnMode),
|
||||
i_id(id), i_InstanceId(InstanceId), m_unloadTimer(0), i_gridExpiry(expiry),
|
||||
m_activeNonPlayersIter(m_activeNonPlayers.end())
|
||||
, i_lock(false)
|
||||
, i_lock(true)
|
||||
{
|
||||
for(unsigned int idx=0; idx < MAX_NUMBER_OF_GRIDS; ++idx)
|
||||
{
|
||||
@@ -353,12 +353,14 @@ void Map::AddNotifier(T*)
|
||||
template<>
|
||||
void Map::AddNotifier(Player* obj)
|
||||
{
|
||||
obj->m_IsInNotifyList = false;
|
||||
AddUnitToNotify(obj);
|
||||
}
|
||||
|
||||
template<>
|
||||
void Map::AddNotifier(Creature* obj)
|
||||
{
|
||||
obj->m_IsInNotifyList = false;
|
||||
AddUnitToNotify(obj);
|
||||
}
|
||||
|
||||
@@ -460,8 +462,6 @@ bool Map::Add(Player *player)
|
||||
SendInitSelf(player);
|
||||
SendInitTransports(player);
|
||||
|
||||
player->m_IsInNotifyList = false;
|
||||
player->m_Notified = false;
|
||||
player->m_clientGUIDs.clear();
|
||||
AddNotifier(player);
|
||||
|
||||
@@ -501,7 +501,7 @@ Map::Add(T *obj)
|
||||
|
||||
//something, such as vehicle, needs to be update immediately
|
||||
//if(obj->GetTypeId() != TYPEID_UNIT)
|
||||
UpdateObjectVisibility(obj,cell,p);
|
||||
UpdateObjectVisibility(obj,cell,p);
|
||||
|
||||
AddNotifier(obj);
|
||||
}
|
||||
@@ -603,20 +603,25 @@ bool Map::loaded(const GridPair &p) const
|
||||
|
||||
void Map::RelocationNotify()
|
||||
{
|
||||
//creatures may be added to the list during update
|
||||
i_lock = true;
|
||||
//Move backlog to notify list
|
||||
for(std::vector<uint64>::iterator iter = i_unitsToNotifyBacklog.begin(); iter != i_unitsToNotifyBacklog.end(); ++iter)
|
||||
{
|
||||
if(Unit *unit = ObjectAccessor::GetObjectInWorld(*iter, (Unit*)NULL))
|
||||
{
|
||||
i_unitsToNotify.push_back(unit);
|
||||
}
|
||||
}
|
||||
i_unitsToNotifyBacklog.clear();
|
||||
|
||||
//Notify
|
||||
for(std::vector<uint64>::iterator iter = i_unitsToNotify.begin(); iter != i_unitsToNotify.end(); ++iter)
|
||||
for(std::vector<Unit*>::iterator iter = i_unitsToNotify.begin(); iter != i_unitsToNotify.end(); ++iter)
|
||||
{
|
||||
Unit *unit = ObjectAccessor::GetObjectInWorld(*iter, (Unit*)NULL);
|
||||
if(!unit || !unit->IsInWorld() || unit->GetMapId() != GetId())
|
||||
{
|
||||
*iter = 0;
|
||||
Unit *unit = *iter;
|
||||
if(unit->m_Notified || !unit->IsInWorld() || unit->GetMapId() != GetId())
|
||||
continue;
|
||||
}
|
||||
|
||||
unit->m_Notified = true;
|
||||
unit->m_IsInNotifyList = false;
|
||||
|
||||
if(unit->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
@@ -630,23 +635,30 @@ void Map::RelocationNotify()
|
||||
VisitAll(unit->GetPositionX(), unit->GetPositionY(), World::GetMaxVisibleDistance(), notifier);
|
||||
}
|
||||
}
|
||||
|
||||
//Clear list
|
||||
for(std::vector<uint64>::iterator iter = i_unitsToNotify.begin(); iter != i_unitsToNotify.end(); ++iter)
|
||||
for(std::vector<Unit*>::iterator iter = i_unitsToNotify.begin(); iter != i_unitsToNotify.end(); ++iter)
|
||||
{
|
||||
if(Unit *unit = ObjectAccessor::GetObjectInWorld(*iter, (Unit*)NULL))
|
||||
{
|
||||
unit->m_IsInNotifyList = false;
|
||||
unit->m_Notified = false;
|
||||
}
|
||||
(*iter)->m_Notified = false;
|
||||
}
|
||||
i_unitsToNotify.clear();
|
||||
}
|
||||
|
||||
i_lock = false;
|
||||
void Map::AddUnitToNotify(Unit* u)
|
||||
{
|
||||
if(u->m_IsInNotifyList)
|
||||
return;
|
||||
|
||||
u->m_IsInNotifyList = true;
|
||||
|
||||
if(i_lock)
|
||||
i_unitsToNotifyBacklog.push_back(u->GetGUID());
|
||||
else
|
||||
i_unitsToNotify.push_back(u);
|
||||
}
|
||||
|
||||
void Map::Update(const uint32 &t_diff)
|
||||
{
|
||||
i_lock = false;
|
||||
|
||||
resetMarkedCells();
|
||||
|
||||
Trinity::ObjectUpdater updater(t_diff);
|
||||
@@ -755,6 +767,8 @@ void Map::Update(const uint32 &t_diff)
|
||||
}
|
||||
}
|
||||
|
||||
i_lock = true;
|
||||
|
||||
RelocationNotify();
|
||||
|
||||
// Don't unload grids if it's battleground, since we may have manually added GOs,creatures, those doesn't load from DB at grid re-load !
|
||||
@@ -2606,12 +2620,3 @@ void BattleGroundMap::UnloadAll()
|
||||
|
||||
/*--------------------------TRINITY-------------------------*/
|
||||
|
||||
void Map::AddUnitToNotify(Unit* u)
|
||||
{
|
||||
if(!i_lock && !u->m_IsInNotifyList)
|
||||
{
|
||||
i_unitsToNotify.push_back(u->GetGUID());
|
||||
u->m_IsInNotifyList = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user