Core/Vehicles: fix crash

Port From (https://github.com/TrinityCore/TrinityCore/commit/489b111a8a08dd3b2e14cc926f5c0b5c2ae17f1d)
This commit is contained in:
hondacrx
2021-08-09 09:20:47 -04:00
parent b039353f1a
commit 2196616dc0
+17 -4
View File
@@ -562,7 +562,13 @@ namespace Game.Entities
{
Cypher.Assert(Passenger.IsInWorld);
Cypher.Assert(Target != null && Target.GetBase().IsInWorld);
Cypher.Assert(Target.GetBase().HasAuraTypeWithCaster(AuraType.ControlVehicle, Passenger.GetGUID()));
var vehicleAuras = Target.GetBase().GetAuraEffectsByType(AuraType.ControlVehicle);
var aurEffect = vehicleAuras.Find(aurEff => aurEff.GetCasterGUID() == Passenger.GetGUID());
Cypher.Assert(aurEffect != null);
var aurApp = aurEffect.GetBase().GetApplicationOfTarget(Target.GetBase().GetGUID());
Cypher.Assert(aurApp != null && !aurApp.HasRemoveMode());
Target.RemovePendingEventsForSeat(Seat.Key);
Target.RemovePendingEventsForPassenger(Passenger);
@@ -622,9 +628,16 @@ namespace Game.Entities
Passenger.m_movementInfo.transport.seat = Seat.Key;
Passenger.m_movementInfo.transport.guid = Target.GetBase().GetGUID();
if (Target.GetBase().IsTypeId(TypeId.Unit) && Passenger.IsTypeId(TypeId.Player) &&
Seat.Value.SeatInfo.HasFlag(VehicleSeatFlags.CanControl))
Cypher.Assert(Target.GetBase().SetCharmedBy(Passenger, CharmType.Vehicle)); // SMSG_CLIENT_CONTROL
if (Target.GetBase().IsTypeId(TypeId.Unit) && Passenger.IsTypeId(TypeId.Player) && Seat.Value.SeatInfo.HasFlag(VehicleSeatFlags.CanControl))
{
// handles SMSG_CLIENT_CONTROL
if (!Target.GetBase().SetCharmedBy(Passenger, CharmType.Vehicle, aurApp))
{
// charming failed, probably aura was removed by relocation/scripts/whatever
Abort(0);
return true;
}
}
Passenger.SendClearTarget(); // SMSG_BREAK_TARGET
Passenger.SetControlled(true, UnitState.Root); // SMSG_FORCE_ROOT - In some cases we send SMSG_SPLINE_MOVE_ROOT here (for creatures)