Core/Misc: Various crash fixes

Port From (https://github.com/TrinityCore/TrinityCore/commit/4f65dc5e20cc3af5b3595809707c632faa6e5900)
This commit is contained in:
hondacrx
2019-08-17 11:23:32 -04:00
parent a44224564c
commit 2d2a72ce3e
13 changed files with 65 additions and 37 deletions
+13 -12
View File
@@ -441,7 +441,7 @@ namespace Game.AI
if (vehicle != null)
foreach (var seat in vehicle.Seats)
{
Player player = Global.ObjAccessor.FindPlayer(seat.Value.Passenger.Guid);
Player player = Global.ObjAccessor.GetPlayer(obj, seat.Value.Passenger.Guid);
if (player != null)
player.AreaExploredOrEventHappens(e.Action.quest.questId);
}
@@ -540,7 +540,7 @@ namespace Game.AI
}
case SmartActions.InvokerCast:
{
Unit tempLastInvoker = GetLastInvoker();
Unit tempLastInvoker = GetLastInvoker(unit);
if (tempLastInvoker == null)
break;
@@ -795,7 +795,7 @@ namespace Game.AI
{
foreach (var seat in vehicle.Seats)
{
Player player = Global.ObjAccessor.FindPlayer(seat.Value.Passenger.Guid);
Player player = Global.ObjAccessor.GetPlayer(unit, seat.Value.Passenger.Guid);
if (player != null)
player.GroupEventHappens(e.Action.quest.questId, GetBaseObject());
}
@@ -935,7 +935,7 @@ namespace Game.AI
{
foreach (var seat in vehicle.Seats)
{
Player player = Global.ObjAccessor.FindPlayer(seat.Value.Passenger.Guid);
Player player = Global.ObjAccessor.GetPlayer(obj, seat.Value.Passenger.Guid);
if (player != null)
player.KilledMonsterCredit(e.Action.killedMonster.creature);
}
@@ -3919,16 +3919,17 @@ namespace Game.AI
}
}
Unit GetLastInvoker()
Unit GetLastInvoker(Unit invoker = null)
{
WorldObject lookupRoot = me;
if (!lookupRoot)
lookupRoot = go;
// Look for invoker only on map of base object... Prevents multithreaded crashes
WorldObject baseObject = GetBaseObject();
if (baseObject != null)
return Global.ObjAccessor.GetUnit(baseObject, mLastInvoker);
// used for area triggers invoker cast
else if (invoker != null)
return Global.ObjAccessor.GetUnit(invoker, mLastInvoker);
if (lookupRoot)
return Global.ObjAccessor.GetUnit(lookupRoot, mLastInvoker);
return Global.ObjAccessor.FindPlayer(mLastInvoker);
return null;
}
public void SetPathId(uint id) { mPathId = id; }