mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 22:37:03 +00:00
[8103] More wide use IsInWorld checks and delayed at teleport operations.
* IsInWorld used to prevent return unexpected not in world objects. * Delayed operations need to process its in world state. Signed-off-by: VladimirMangos <vladimir@getmangos.com>
This commit is contained in:
parent
9f41772828
commit
9f938a9ed4
17 changed files with 220 additions and 40 deletions
|
|
@ -254,6 +254,10 @@ template<class T>
|
|||
void
|
||||
ObjectGridUnloader::Visit(GridRefManager<T> &m)
|
||||
{
|
||||
// remove all cross-reference before deleting
|
||||
for(GridRefManager<T>::iterator iter=m.begin(); iter != m.end(); ++iter)
|
||||
iter->getSource()->CleanupsBeforeDelete();
|
||||
|
||||
while(!m.isEmpty())
|
||||
{
|
||||
T *obj = m.getFirst()->getSource();
|
||||
|
|
@ -267,25 +271,6 @@ ObjectGridUnloader::Visit(GridRefManager<T> &m)
|
|||
}
|
||||
}
|
||||
|
||||
template<>
|
||||
void
|
||||
ObjectGridUnloader::Visit(CreatureMapType &m)
|
||||
{
|
||||
// remove all cross-reference before deleting
|
||||
for(CreatureMapType::iterator iter=m.begin(); iter != m.end(); ++iter)
|
||||
iter->getSource()->CleanupsBeforeDelete();
|
||||
|
||||
while(!m.isEmpty())
|
||||
{
|
||||
Creature *obj = m.getFirst()->getSource();
|
||||
// if option set then object already saved at this moment
|
||||
if(!sWorld.getConfig(CONFIG_SAVE_RESPAWN_TIME_IMMEDIATLY))
|
||||
obj->SaveRespawnTime();
|
||||
///- object will get delinked from the manager when deleted
|
||||
delete obj;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ObjectGridStoper::Stop(GridType &grid)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue