Core/Vehicle: prevent creature vehicles from following their old movement generator when a player enters them in some cases.
Port From (https://github.com/TrinityCore/TrinityCore/commit/24c07367f109aa19a51defdf77c50d389ed90845)
This commit is contained in:
@@ -918,6 +918,21 @@ namespace Game.Entities
|
||||
vehicle.GetBase().RemoveAura(aurApp);
|
||||
return;
|
||||
}
|
||||
|
||||
if (vehicle.GetBase().IsCreature())
|
||||
{
|
||||
// If a player entered a vehicle that is part of a formation, remove it from said formation and replace current movement generator with MoveIdle (no movement)
|
||||
CreatureGroup creatureGroup = vehicle.GetBase().ToCreature().GetFormation();
|
||||
if (creatureGroup != null)
|
||||
{
|
||||
creatureGroup.RemoveMember(vehicle.GetBase().ToCreature());
|
||||
vehicle.GetBase().GetMotionMaster().MoveIdle();
|
||||
}
|
||||
|
||||
// If the vehicle has the random movement generator active, replace it with MoveIdle (no movement) so it won't override player control
|
||||
if (vehicle.GetBase().GetMotionMaster().GetCurrentMovementGeneratorType() == MovementGeneratorType.Random)
|
||||
vehicle.GetBase().GetMotionMaster().MoveIdle();
|
||||
}
|
||||
}
|
||||
|
||||
Cypher.Assert(!m_vehicle);
|
||||
@@ -1025,8 +1040,14 @@ namespace Game.Entities
|
||||
GetMotionMaster().LaunchMoveSpline(init, EventId.VehicleExit, MovementGeneratorPriority.Highest);
|
||||
|
||||
if (player != null)
|
||||
{
|
||||
player.ResummonPetTemporaryUnSummonedIfAny();
|
||||
|
||||
// When a player exits a creature vehicle, restore its default motion generator (if any)
|
||||
if (vehicle.GetBase().IsCreature())
|
||||
vehicle.GetBase().GetMotionMaster().InitializeDefault();
|
||||
}
|
||||
|
||||
if (vehicle.GetBase().HasUnitTypeMask(UnitTypeMask.Minion) && vehicle.GetBase().IsTypeId(TypeId.Unit))
|
||||
if (((Minion)vehicle.GetBase()).GetOwner() == this)
|
||||
vehicle.GetBase().ToCreature().DespawnOrUnsummon(vehicle.GetDespawnDelay());
|
||||
|
||||
Reference in New Issue
Block a user