Core/Movement: Refresh collision height on shapeshifting
Port From (https://github.com/TrinityCore/TrinityCore/commit/49992508a46eb8cd73205a896ae8d84bd991bc39)
This commit is contained in:
@@ -4815,7 +4815,7 @@ namespace Game.Entities
|
|||||||
SendPacket(new OnCancelExpectedRideVehicleAura());
|
SendPacket(new OnCancelExpectedRideVehicleAura());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendMovementSetCollisionHeight(float height)
|
public void SendMovementSetCollisionHeight(float height, UpdateCollisionHeightReason reason)
|
||||||
{
|
{
|
||||||
MoveSetCollisionHeight setCollisionHeight = new MoveSetCollisionHeight();
|
MoveSetCollisionHeight setCollisionHeight = new MoveSetCollisionHeight();
|
||||||
setCollisionHeight.MoverGUID = GetGUID();
|
setCollisionHeight.MoverGUID = GetGUID();
|
||||||
@@ -4824,7 +4824,7 @@ namespace Game.Entities
|
|||||||
setCollisionHeight.Scale = GetObjectScale();
|
setCollisionHeight.Scale = GetObjectScale();
|
||||||
setCollisionHeight.MountDisplayID = GetMountDisplayId();
|
setCollisionHeight.MountDisplayID = GetMountDisplayId();
|
||||||
setCollisionHeight.ScaleDuration = m_unitData.ScaleDuration;
|
setCollisionHeight.ScaleDuration = m_unitData.ScaleDuration;
|
||||||
setCollisionHeight.Reason = UpdateCollisionHeightReason.Mount;
|
setCollisionHeight.Reason = reason;
|
||||||
SendPacket(setCollisionHeight);
|
SendPacket(setCollisionHeight);
|
||||||
|
|
||||||
MoveUpdateCollisionHeight updateCollisionHeight = new MoveUpdateCollisionHeight();
|
MoveUpdateCollisionHeight updateCollisionHeight = new MoveUpdateCollisionHeight();
|
||||||
@@ -6382,7 +6382,7 @@ namespace Game.Entities
|
|||||||
SetBoundingRadius(scale * SharedConst.DefaultPlayerBoundingRadius);
|
SetBoundingRadius(scale * SharedConst.DefaultPlayerBoundingRadius);
|
||||||
SetCombatReach(scale * SharedConst.DefaultPlayerCombatReach);
|
SetCombatReach(scale * SharedConst.DefaultPlayerCombatReach);
|
||||||
if (IsInWorld)
|
if (IsInWorld)
|
||||||
SendMovementSetCollisionHeight(scale * GetCollisionHeight(IsMounted()));
|
SendMovementSetCollisionHeight(scale * GetCollisionHeight(IsMounted()), UpdateCollisionHeightReason.Scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
public uint GetXP() { return m_activePlayerData.XP; }
|
public uint GetXP() { return m_activePlayerData.XP; }
|
||||||
|
|||||||
@@ -1318,7 +1318,7 @@ namespace Game.Entities
|
|||||||
if (charm.GetTypeId() == TypeId.Unit)
|
if (charm.GetTypeId() == TypeId.Unit)
|
||||||
charm.AddUnitFlag(UnitFlags.Stunned);
|
charm.AddUnitFlag(UnitFlags.Stunned);
|
||||||
|
|
||||||
player.SendMovementSetCollisionHeight(player.GetCollisionHeight(true));
|
player.SendMovementSetCollisionHeight(player.GetCollisionHeight(true), UpdateCollisionHeightReason.Mount);
|
||||||
}
|
}
|
||||||
|
|
||||||
RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags.Mount);
|
RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags.Mount);
|
||||||
@@ -1334,7 +1334,7 @@ namespace Game.Entities
|
|||||||
|
|
||||||
Player thisPlayer = ToPlayer();
|
Player thisPlayer = ToPlayer();
|
||||||
if (thisPlayer != null)
|
if (thisPlayer != null)
|
||||||
thisPlayer.SendMovementSetCollisionHeight(thisPlayer.GetCollisionHeight(false));
|
thisPlayer.SendMovementSetCollisionHeight(thisPlayer.GetCollisionHeight(false), UpdateCollisionHeightReason.Mount);
|
||||||
|
|
||||||
// dismount as a vehicle
|
// dismount as a vehicle
|
||||||
if (IsTypeId(TypeId.Player) && GetVehicleKit() != null)
|
if (IsTypeId(TypeId.Player) && GetVehicleKit() != null)
|
||||||
|
|||||||
@@ -924,7 +924,7 @@ namespace Game.Networking.Packets
|
|||||||
public float Scale = 1.0f;
|
public float Scale = 1.0f;
|
||||||
public ObjectGuid MoverGUID;
|
public ObjectGuid MoverGUID;
|
||||||
public uint MountDisplayID;
|
public uint MountDisplayID;
|
||||||
public UpdateCollisionHeightReason Reason = UpdateCollisionHeightReason.Mount;
|
public UpdateCollisionHeightReason Reason;
|
||||||
public uint SequenceIndex;
|
public uint SequenceIndex;
|
||||||
public int ScaleDuration;
|
public int ScaleDuration;
|
||||||
public float Height = 1.0f;
|
public float Height = 1.0f;
|
||||||
@@ -959,7 +959,7 @@ namespace Game.Networking.Packets
|
|||||||
}
|
}
|
||||||
|
|
||||||
public MovementAck Data;
|
public MovementAck Data;
|
||||||
public UpdateCollisionHeightReason Reason = UpdateCollisionHeightReason.Mount;
|
public UpdateCollisionHeightReason Reason;
|
||||||
public uint MountDisplayID;
|
public uint MountDisplayID;
|
||||||
public float Height = 1.0f;
|
public float Height = 1.0f;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1406,8 +1406,12 @@ namespace Game.Spells
|
|||||||
HandleShapeshiftBoosts(target, apply);
|
HandleShapeshiftBoosts(target, apply);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (target.IsTypeId(TypeId.Player))
|
Player playerTarget = target.ToPlayer();
|
||||||
target.ToPlayer().InitDataForForm();
|
if (playerTarget != null)
|
||||||
|
{
|
||||||
|
playerTarget.SendMovementSetCollisionHeight(playerTarget.GetCollisionHeight(false), UpdateCollisionHeightReason.Force);
|
||||||
|
playerTarget.InitDataForForm();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
target.UpdateDisplayPower();
|
target.UpdateDisplayPower();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user