From 2de29ff861bc6a5b636c18d10a1e7b886935444e Mon Sep 17 00:00:00 2001 From: ratkosrb Date: Wed, 25 May 2022 12:58:56 +0300 Subject: [PATCH] Manually set collision height when mounting. --- .../Client/PacketHandlers/UpdateHandler.cs | 11 +++++++++ .../World/Server/Packets/MovementPackets.cs | 24 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/HermesProxy/World/Client/PacketHandlers/UpdateHandler.cs b/HermesProxy/World/Client/PacketHandlers/UpdateHandler.cs index 1616e3ac..455fb695 100644 --- a/HermesProxy/World/Client/PacketHandlers/UpdateHandler.cs +++ b/HermesProxy/World/Client/PacketHandlers/UpdateHandler.cs @@ -1597,6 +1597,17 @@ public void StoreObjectUpdate(WowGuid128 guid, ObjectType objectType, BitArray u if (UNIT_FIELD_MOUNTDISPLAYID >= 0 && updateMaskArray[UNIT_FIELD_MOUNTDISPLAYID]) { updateData.UnitData.MountDisplayID = updates[UNIT_FIELD_MOUNTDISPLAYID].Int32Value; + + if (!isCreate && guid == GetSession().GameState.CurrentPlayerGuid && + LegacyVersion.RemovedInVersion(ClientVersionBuild.V3_0_2_9056)) + { + MoveSetCollisionHeight height = new(); + height.MoverGUID = guid; + height.Height = updateData.UnitData.MountDisplayID != 0 ? 3.081099f : 2.438083f; + height.MountDisplayID = (uint)updateData.UnitData.MountDisplayID; + height.Reason = 1; // Mount + SendPacketToClient(height); + } } int UNIT_FIELD_MINDAMAGE = LegacyVersion.GetUpdateField(UnitField.UNIT_FIELD_MINDAMAGE); if (UNIT_FIELD_MINDAMAGE >= 0 && updateMaskArray[UNIT_FIELD_MINDAMAGE]) diff --git a/HermesProxy/World/Server/Packets/MovementPackets.cs b/HermesProxy/World/Server/Packets/MovementPackets.cs index e06c0649..69ced884 100644 --- a/HermesProxy/World/Server/Packets/MovementPackets.cs +++ b/HermesProxy/World/Server/Packets/MovementPackets.cs @@ -415,6 +415,30 @@ public override void Read() public MovementAck Ack; } + class MoveSetCollisionHeight : ServerPacket + { + public MoveSetCollisionHeight() : base(Opcode.SMSG_MOVE_SET_COLLISION_HEIGHT) { } + + public override void Write() + { + _worldPacket.WritePackedGuid128(MoverGUID); + _worldPacket.WriteUInt32(SequenceIndex); + _worldPacket.WriteFloat(Height); + _worldPacket.WriteFloat(Scale); + _worldPacket.WriteUInt8(Reason); + _worldPacket.WriteUInt32(MountDisplayID); + _worldPacket.WriteInt32(ScaleDuration); + } + + public WowGuid128 MoverGUID; + public uint SequenceIndex = 1; + public float Height = 1.0f; + public float Scale = 1.0f; + public byte Reason; + public uint MountDisplayID; + public int ScaleDuration = 2000; + } + class MoveKnockBack : ServerPacket { public MoveKnockBack() : base(Opcode.SMSG_MOVE_KNOCK_BACK, ConnectionType.Instance) { }