aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-02-11 22:59:28 +0100
committerShauren <shauren.trinity@gmail.com>2021-02-11 22:59:28 +0100
commit49992508a46eb8cd73205a896ae8d84bd991bc39 (patch)
treefaf75f44ade11292ab93a93c03ef22893bfe4dac /src
parent409ca262b3684fd8b3a47f65ceabf3ce73b2cc81 (diff)
Core/Movement: Refresh collision height on shapeshifting
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp6
-rw-r--r--src/server/game/Entities/Player/Player.h7
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp4
-rw-r--r--src/server/game/Server/Packets/MovementPackets.h14
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp8
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();