From bdc66501d8078f52deeb32dcae2a0c01ae31bf7f Mon Sep 17 00:00:00 2001 From: hondacrx Date: Sat, 8 Jul 2017 23:29:09 -0400 Subject: [PATCH] Fixes error with null map when unloading transports --- Game/Entities/Transport.cs | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/Game/Entities/Transport.cs b/Game/Entities/Transport.cs index 17552a162..0862efd87 100644 --- a/Game/Entities/Transport.cs +++ b/Game/Entities/Transport.cs @@ -252,9 +252,14 @@ namespace Game.Entities 3. transport moves from active to inactive grid 4. the grid that transport is currently in unloads */ - - if (_staticPassengers.Empty() && GetMap().IsGridLoaded(GetPositionX(), GetPositionY())) // 2. + bool gridActive = GetMap().IsGridLoaded(GetPositionX(), GetPositionY()); + + if (_staticPassengers.Empty() && gridActive) // 2. 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) { - _passengers.Remove(passenger); + bool erased = _passengers.Remove(passenger); - if (passenger.IsTypeId(TypeId.Player)) - Global.ScriptMgr.OnRemovePassenger(this, passenger.ToPlayer()); + if (erased || _staticPassengers.Remove(passenger)) + { + 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) @@ -547,7 +559,6 @@ namespace Game.Entities while (!_staticPassengers.Empty()) { WorldObject obj = _staticPassengers.First(); - _staticPassengers.RemoveAt(0); obj.AddObjectToRemoveList(); // also removes from _staticPassengers } }