mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-02-04 16:17:26 +01:00
Core/Movement: converted SMSG_MOVE_SET_COLLISION_HEIGHT to packet class and handle reason bits to match sniff behaivior
This commit is contained in:
@@ -1823,7 +1823,7 @@ void Player::SetObjectScale(float scale)
|
||||
SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, scale * DEFAULT_WORLD_OBJECT_SIZE);
|
||||
SetFloatValue(UNIT_FIELD_COMBATREACH, scale * DEFAULT_COMBAT_REACH);
|
||||
if (IsInWorld())
|
||||
SendMovementSetCollisionHeight(GetCollisionHeight());
|
||||
SendMovementSetCollisionHeight(GetCollisionHeight(), UPDATE_COLLISION_HEIGHT_SCALE);
|
||||
}
|
||||
|
||||
bool Player::IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index, Unit* caster) const
|
||||
@@ -27852,12 +27852,14 @@ void Player::SendMovementSetCanTransitionBetweenSwimAndFly(bool apply)
|
||||
Movement::PacketSender(this, NULL_OPCODE, SMSG_MOVE_UNSET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY).Send();
|
||||
}
|
||||
|
||||
void Player::SendMovementSetCollisionHeight(float height)
|
||||
void Player::SendMovementSetCollisionHeight(float height, UpdateCollisionHeightReason reason)
|
||||
{
|
||||
static MovementStatusElements const heightElement = MSEExtraFloat;
|
||||
Movement::ExtraMovementStatusElement extra(&heightElement);
|
||||
extra.Data.floatData = height;
|
||||
Movement::PacketSender(this, NULL_OPCODE, SMSG_MOVE_SET_COLLISION_HEIGHT, NULL_OPCODE, &extra).Send();
|
||||
WorldPackets::Movement::MoveSetCollisionHeight packet;
|
||||
packet.Height = height;
|
||||
packet.MoverGUID = GetGUID();
|
||||
packet.SequenceIndex = m_movementCounter++;
|
||||
packet.Reason = reason;
|
||||
SendDirectMessage(packet.Write());
|
||||
}
|
||||
|
||||
std::string Player::GetMapAreaAndZoneString() const
|
||||
|
||||
@@ -83,6 +83,7 @@ enum InventoryType : uint8;
|
||||
enum ItemClass : uint8;
|
||||
enum LootError : uint8;
|
||||
enum LootType : uint8;
|
||||
enum UpdateCollisionHeightReason : uint8;
|
||||
|
||||
typedef std::deque<Mail*> PlayerMails;
|
||||
|
||||
@@ -2358,7 +2359,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
|
||||
These methods are only sent to the current unit.
|
||||
*/
|
||||
void SendMovementSetCanTransitionBetweenSwimAndFly(bool apply);
|
||||
void SendMovementSetCollisionHeight(float height);
|
||||
void SendMovementSetCollisionHeight(float height, UpdateCollisionHeightReason reason);
|
||||
|
||||
bool CanFly() const override { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_CAN_FLY); }
|
||||
|
||||
|
||||
@@ -8219,7 +8219,7 @@ void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry)
|
||||
if (charm->GetTypeId() == TYPEID_UNIT)
|
||||
charm->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
|
||||
|
||||
player->SendMovementSetCollisionHeight(player->GetCollisionHeight());
|
||||
player->SendMovementSetCollisionHeight(player->GetCollisionHeight(), UPDATE_COLLISION_HEIGHT_MOUNT);
|
||||
}
|
||||
|
||||
RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_MOUNT);
|
||||
@@ -8234,10 +8234,7 @@ void Unit::Dismount()
|
||||
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_MOUNT);
|
||||
|
||||
if (Player* thisPlayer = ToPlayer())
|
||||
{
|
||||
SendUpdateToSet();
|
||||
thisPlayer->SendMovementSetCollisionHeight(thisPlayer->GetCollisionHeight());
|
||||
}
|
||||
thisPlayer->SendMovementSetCollisionHeight(thisPlayer->GetCollisionHeight(), UPDATE_COLLISION_HEIGHT_MOUNT);
|
||||
|
||||
WorldPacket data(SMSG_DISMOUNT, 8);
|
||||
data << GetPackGUID();
|
||||
|
||||
@@ -4288,6 +4288,12 @@ enum ContentLevels : uint8
|
||||
MAX_CONTENT
|
||||
};
|
||||
|
||||
enum UpdateCollisionHeightReason : uint8
|
||||
{
|
||||
UPDATE_COLLISION_HEIGHT_MOUNT = 0,
|
||||
UPDATE_COLLISION_HEIGHT_SCALE = 1
|
||||
};
|
||||
|
||||
#define MAX_CREATURE_SPELL_DATA_SLOT 4
|
||||
|
||||
#endif
|
||||
|
||||
@@ -4654,31 +4654,6 @@ MovementStatusElements const MoveSetPitchRate[] =
|
||||
MSEEnd,
|
||||
};
|
||||
|
||||
MovementStatusElements const MoveSetCollisionHeight[] =
|
||||
{
|
||||
MSEZeroBit,
|
||||
MSEZeroBit,
|
||||
MSEHasGuidByte6,
|
||||
MSEHasGuidByte1,
|
||||
MSEHasGuidByte4,
|
||||
MSEHasGuidByte7,
|
||||
MSEHasGuidByte5,
|
||||
MSEHasGuidByte2,
|
||||
MSEHasGuidByte0,
|
||||
MSEHasGuidByte3,
|
||||
MSEGuidByte6,
|
||||
MSEGuidByte0,
|
||||
MSEGuidByte4,
|
||||
MSEGuidByte3,
|
||||
MSEGuidByte5,
|
||||
MSECounter,
|
||||
MSEGuidByte1,
|
||||
MSEGuidByte2,
|
||||
MSEGuidByte7,
|
||||
MSEExtraElement,
|
||||
MSEEnd,
|
||||
};
|
||||
|
||||
MovementStatusElements const SplineMoveSetWalkMode[] =
|
||||
{
|
||||
MSEHasGuidByte7,
|
||||
@@ -5774,8 +5749,6 @@ MovementStatusElements const* GetMovementStatusElementsSequence(uint32 opcode)
|
||||
return MovementSetCanFlyAck;
|
||||
case CMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY_ACK:
|
||||
return MovementSetCanTransitionBetweenSwimAndFlyAck;
|
||||
case SMSG_MOVE_SET_COLLISION_HEIGHT:
|
||||
return MoveSetCollisionHeight;
|
||||
case CMSG_MOVE_SET_COLLISION_HEIGHT_ACK:
|
||||
return MovementSetCollisionHeightAck;
|
||||
case SMSG_MOVE_UPDATE_COLLISION_HEIGHT:
|
||||
|
||||
@@ -64,3 +64,34 @@ WorldPacket const* WorldPackets::Movement::NewWorld::Write()
|
||||
_worldPacket << Pos.GetPositionY();
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Movement::MoveSetCollisionHeight::Write()
|
||||
{
|
||||
_worldPacket.WriteBits(Reason, 2);
|
||||
_worldPacket.WriteBit(MoverGUID[6]);
|
||||
_worldPacket.WriteBit(MoverGUID[1]);
|
||||
_worldPacket.WriteBit(MoverGUID[4]);
|
||||
_worldPacket.WriteBit(MoverGUID[7]);
|
||||
_worldPacket.WriteBit(MoverGUID[5]);
|
||||
_worldPacket.WriteBit(MoverGUID[2]);
|
||||
_worldPacket.WriteBit(MoverGUID[0]);
|
||||
_worldPacket.WriteBit(MoverGUID[3]);
|
||||
|
||||
_worldPacket.FlushBits();
|
||||
|
||||
_worldPacket.WriteByteSeq(MoverGUID[6]);
|
||||
_worldPacket.WriteByteSeq(MoverGUID[0]);
|
||||
_worldPacket.WriteByteSeq(MoverGUID[4]);
|
||||
_worldPacket.WriteByteSeq(MoverGUID[3]);
|
||||
_worldPacket.WriteByteSeq(MoverGUID[5]);
|
||||
|
||||
_worldPacket << uint32(SequenceIndex);
|
||||
|
||||
_worldPacket.WriteByteSeq(MoverGUID[1]);
|
||||
_worldPacket.WriteByteSeq(MoverGUID[2]);
|
||||
_worldPacket.WriteByteSeq(MoverGUID[7]);
|
||||
|
||||
_worldPacket << float(Height);
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
@@ -75,6 +75,19 @@ namespace WorldPackets
|
||||
int32 MapID = 0;
|
||||
Position Pos;
|
||||
};
|
||||
|
||||
class MoveSetCollisionHeight final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
MoveSetCollisionHeight() : ServerPacket(SMSG_MOVE_SET_COLLISION_HEIGHT, 15) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
ObjectGuid MoverGUID;
|
||||
uint32 SequenceIndex = 0;
|
||||
float Height = 1.0f;
|
||||
UpdateCollisionHeightReason Reason = UPDATE_COLLISION_HEIGHT_MOUNT;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user