Fixes error with null map when unloading transports
This commit is contained in:
@@ -252,9 +252,14 @@ namespace Game.Entities
|
|||||||
3. transport moves from active to inactive grid
|
3. transport moves from active to inactive grid
|
||||||
4. the grid that transport is currently in unloads
|
4. the grid that transport is currently in unloads
|
||||||
*/
|
*/
|
||||||
|
bool gridActive = GetMap().IsGridLoaded(GetPositionX(), GetPositionY());
|
||||||
|
|
||||||
if (_staticPassengers.Empty() && GetMap().IsGridLoaded(GetPositionX(), GetPositionY())) // 2.
|
if (_staticPassengers.Empty() && gridActive) // 2.
|
||||||
LoadStaticPassengers();
|
LoadStaticPassengers();
|
||||||
|
else if (!_staticPassengers.Empty() && !gridActive)
|
||||||
|
// 4. - if transports stopped on grid edge, some passengers can remain in active grids
|
||||||
|
// unload all static passengers otherwise passengers won't load correctly when the grid that transport is currently in becomes active
|
||||||
|
UnloadStaticPassengers();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -284,10 +289,17 @@ namespace Game.Entities
|
|||||||
|
|
||||||
public void RemovePassenger(WorldObject passenger)
|
public void RemovePassenger(WorldObject passenger)
|
||||||
{
|
{
|
||||||
_passengers.Remove(passenger);
|
bool erased = _passengers.Remove(passenger);
|
||||||
|
|
||||||
if (passenger.IsTypeId(TypeId.Player))
|
if (erased || _staticPassengers.Remove(passenger))
|
||||||
Global.ScriptMgr.OnRemovePassenger(this, passenger.ToPlayer());
|
{
|
||||||
|
passenger.SetTransport(null);
|
||||||
|
passenger.m_movementInfo.transport.Reset();
|
||||||
|
Log.outDebug(LogFilter.Transport, "Object {0} removed from transport {1}.", passenger.GetName(), GetName());
|
||||||
|
|
||||||
|
if (passenger.IsTypeId(TypeId.Player))
|
||||||
|
Global.ScriptMgr.OnRemovePassenger(this, passenger.ToPlayer());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature CreateNPCPassenger(ulong guid, CreatureData data)
|
public Creature CreateNPCPassenger(ulong guid, CreatureData data)
|
||||||
@@ -547,7 +559,6 @@ namespace Game.Entities
|
|||||||
while (!_staticPassengers.Empty())
|
while (!_staticPassengers.Empty())
|
||||||
{
|
{
|
||||||
WorldObject obj = _staticPassengers.First();
|
WorldObject obj = _staticPassengers.First();
|
||||||
_staticPassengers.RemoveAt(0);
|
|
||||||
obj.AddObjectToRemoveList(); // also removes from _staticPassengers
|
obj.AddObjectToRemoveList(); // also removes from _staticPassengers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user