diff options
author | Shauren <shauren.trinity@gmail.com> | 2021-02-11 22:59:28 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-02-11 22:59:28 +0100 |
commit | 49992508a46eb8cd73205a896ae8d84bd991bc39 (patch) | |
tree | faf75f44ade11292ab93a93c03ef22893bfe4dac /src | |
parent | 409ca262b3684fd8b3a47f65ceabf3ce73b2cc81 (diff) |
Core/Movement: Refresh collision height on shapeshifting
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 7 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Server/Packets/MovementPackets.h | 14 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 8 |
5 files changed, 24 insertions, 15 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 1494f8615f3..1072a8f1cb4 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -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; diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 8e8e5a7a13c..3d874556160 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -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); } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 47141ab0282..6f70103f31e 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -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()) diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h index ae8c7a07c6c..c2d2fdade6c 100644 --- a/src/server/game/Server/Packets/MovementPackets.h +++ b/src/server/game/Server/Packets/MovementPackets.h @@ -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 diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 9d00bc6009c..377a9135ba0 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -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(); |