mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-19 14:39:43 -04:00
Core/Movement: Refresh collision height on shapeshifting
This commit is contained in:
@@ -1657,7 +1657,7 @@ void Player::SetObjectScale(float scale)
|
||||
SetBoundingRadius(scale * DEFAULT_PLAYER_BOUNDING_RADIUS);
|
||||
SetCombatReach(scale * DEFAULT_PLAYER_COMBAT_REACH);
|
||||
if (IsInWorld())
|
||||
SendMovementSetCollisionHeight(scale * GetCollisionHeight(IsMounted()));
|
||||
SendMovementSetCollisionHeight(scale * GetCollisionHeight(IsMounted()), WorldPackets::Movement::UpdateCollisionHeightReason::Scale);
|
||||
}
|
||||
|
||||
bool Player::IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index, Unit* caster) const
|
||||
@@ -28194,7 +28194,7 @@ void Player::DeleteGarrison()
|
||||
}
|
||||
}
|
||||
|
||||
void Player::SendMovementSetCollisionHeight(float height)
|
||||
void Player::SendMovementSetCollisionHeight(float height, WorldPackets::Movement::UpdateCollisionHeightReason reason)
|
||||
{
|
||||
WorldPackets::Movement::MoveSetCollisionHeight setCollisionHeight;
|
||||
setCollisionHeight.MoverGUID = GetGUID();
|
||||
@@ -28203,7 +28203,7 @@ void Player::SendMovementSetCollisionHeight(float height)
|
||||
setCollisionHeight.Scale = GetObjectScale();
|
||||
setCollisionHeight.MountDisplayID = GetMountDisplayId();
|
||||
setCollisionHeight.ScaleDuration = m_unitData->ScaleDuration;
|
||||
setCollisionHeight.Reason = WorldPackets::Movement::UPDATE_COLLISION_HEIGHT_MOUNT;
|
||||
setCollisionHeight.Reason = reason;
|
||||
SendDirectMessage(setCollisionHeight.Write());
|
||||
|
||||
WorldPackets::Movement::MoveUpdateCollisionHeight updateCollisionHeight;
|
||||
|
||||
@@ -104,6 +104,11 @@ namespace WorldPackets
|
||||
{
|
||||
struct CharacterCreateInfo;
|
||||
}
|
||||
|
||||
namespace Movement
|
||||
{
|
||||
enum class UpdateCollisionHeightReason : uint8;
|
||||
}
|
||||
}
|
||||
|
||||
typedef std::deque<Mail*> PlayerMails;
|
||||
@@ -2387,7 +2392,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
|
||||
|
||||
void ValidateMovementInfo(MovementInfo* mi);
|
||||
|
||||
void SendMovementSetCollisionHeight(float height);
|
||||
void SendMovementSetCollisionHeight(float height, WorldPackets::Movement::UpdateCollisionHeightReason reason);
|
||||
|
||||
bool CanFly() const override { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_CAN_FLY); }
|
||||
|
||||
|
||||
@@ -7848,7 +7848,7 @@ void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry)
|
||||
if (charm->GetTypeId() == TYPEID_UNIT)
|
||||
charm->AddUnitFlag(UNIT_FLAG_STUNNED);
|
||||
|
||||
player->SendMovementSetCollisionHeight(player->GetCollisionHeight(true));
|
||||
player->SendMovementSetCollisionHeight(player->GetCollisionHeight(true), WorldPackets::Movement::UpdateCollisionHeightReason::Mount);
|
||||
}
|
||||
|
||||
RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_MOUNT);
|
||||
@@ -7863,7 +7863,7 @@ void Unit::Dismount()
|
||||
RemoveUnitFlag(UNIT_FLAG_MOUNT);
|
||||
|
||||
if (Player* thisPlayer = ToPlayer())
|
||||
thisPlayer->SendMovementSetCollisionHeight(thisPlayer->GetCollisionHeight(false));
|
||||
thisPlayer->SendMovementSetCollisionHeight(thisPlayer->GetCollisionHeight(false), WorldPackets::Movement::UpdateCollisionHeightReason::Mount);
|
||||
|
||||
// dismount as a vehicle
|
||||
if (GetTypeId() == TYPEID_PLAYER && GetVehicleKit())
|
||||
|
||||
@@ -487,11 +487,11 @@ namespace WorldPackets
|
||||
Optional<MoveKnockBackSpeeds> Speeds;
|
||||
};
|
||||
|
||||
enum UpdateCollisionHeightReason : uint8
|
||||
enum class UpdateCollisionHeightReason : uint8
|
||||
{
|
||||
UPDATE_COLLISION_HEIGHT_SCALE = 0,
|
||||
UPDATE_COLLISION_HEIGHT_MOUNT = 1,
|
||||
UPDATE_COLLISION_HEIGHT_FORCE = 2
|
||||
Scale = 0,
|
||||
Mount = 1,
|
||||
Force = 2
|
||||
};
|
||||
|
||||
class MoveSetCollisionHeight final : public ServerPacket
|
||||
@@ -504,7 +504,7 @@ namespace WorldPackets
|
||||
float Scale = 1.0f;
|
||||
ObjectGuid MoverGUID;
|
||||
uint32 MountDisplayID = 0;
|
||||
UpdateCollisionHeightReason Reason = UPDATE_COLLISION_HEIGHT_MOUNT;
|
||||
UpdateCollisionHeightReason Reason = UpdateCollisionHeightReason::Scale;
|
||||
uint32 SequenceIndex = 0;
|
||||
int32 ScaleDuration = 0;
|
||||
float Height = 1.0f;
|
||||
@@ -530,7 +530,7 @@ namespace WorldPackets
|
||||
void Read() override;
|
||||
|
||||
MovementAck Data;
|
||||
UpdateCollisionHeightReason Reason = UPDATE_COLLISION_HEIGHT_MOUNT;
|
||||
UpdateCollisionHeightReason Reason = UpdateCollisionHeightReason::Scale;
|
||||
uint32 MountDisplayID = 0;
|
||||
float Height = 1.0f;
|
||||
};
|
||||
@@ -638,7 +638,7 @@ namespace WorldPackets
|
||||
{
|
||||
float Height = 0.0f;
|
||||
float Scale = 0.0f;
|
||||
UpdateCollisionHeightReason Reason = UPDATE_COLLISION_HEIGHT_MOUNT;
|
||||
UpdateCollisionHeightReason Reason = UpdateCollisionHeightReason::Scale;
|
||||
};
|
||||
|
||||
struct KnockBackInfo
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include "LootMgr.h"
|
||||
#include "MiscPackets.h"
|
||||
#include "MotionMaster.h"
|
||||
#include "MovementPackets.h"
|
||||
#include "ObjectAccessor.h"
|
||||
#include "ObjectMgr.h"
|
||||
#include "Opcodes.h"
|
||||
@@ -1821,8 +1822,11 @@ void AuraEffect::HandleAuraModShapeshift(AuraApplication const* aurApp, uint8 mo
|
||||
HandleShapeshiftBoosts(target, false);
|
||||
}
|
||||
|
||||
if (target->GetTypeId() == TYPEID_PLAYER)
|
||||
target->ToPlayer()->InitDataForForm();
|
||||
if (Player* playerTarget = target->ToPlayer())
|
||||
{
|
||||
playerTarget->SendMovementSetCollisionHeight(playerTarget->GetCollisionHeight(false), WorldPackets::Movement::UpdateCollisionHeightReason::Force);
|
||||
playerTarget->InitDataForForm();
|
||||
}
|
||||
else
|
||||
target->UpdateDisplayPower();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user