From f500da24412b4294cdb1d6148177a59f502cd487 Mon Sep 17 00:00:00 2001 From: funjoker Date: Fri, 6 Sep 2024 01:29:53 +0200 Subject: [PATCH] Add multiple 4.4.0 CMSG handler CMSG_MAIL_RETURN_TO_SENDER CMSG_MAIL_TAKE_ITEM CMSG_MAIL_TAKE_MONEY CMSG_MASTER_LOOT_ITEM CMSG_MERGE_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM CMSG_MERGE_GUILD_BANK_ITEM_WITH_ITEM CMSG_MERGE_ITEM_WITH_GUILD_BANK_ITEM CMSG_MINIMAP_PING CMSG_MISSILE_TRAJECTORY_COLLISION CMSG_MOUNT_SET_FAVORITE CMSG_MOUNT_SPECIAL_ANIM CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK CMSG_MOVE_CHANGE_VEHICLE_SEATS CMSG_MOVE_COLLISION_DISABLE_ACK CMSG_MOVE_COLLISION_ENABLE_ACK CMSG_MOVE_ENABLE_SWIM_TO_FLY_TRANS_ACK CMSG_MOVE_FEATHER_FALL_ACK CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK CMSG_MOVE_FORCE_ROOT_ACK CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK CMSG_MOVE_FORCE_RUN_SPEED_CHANGE_ACK CMSG_MOVE_FORCE_SWIM_BACK_SPEED_CHANGE_ACK CMSG_MOVE_FORCE_SWIM_SPEED_CHANGE_ACK CMSG_MOVE_FORCE_TURN_RATE_CHANGE_ACK CMSG_MOVE_FORCE_UNROOT_ACK CMSG_MOVE_FORCE_WALK_SPEED_CHANGE_ACK CMSG_MOVE_GRAVITY_DISABLE_ACK CMSG_MOVE_GRAVITY_ENABLE_ACK CMSG_MOVE_GUILD_BANK_ITEM CMSG_MOVE_HOVER_ACK CMSG_MOVE_INERTIA_DISABLE_ACK CMSG_MOVE_INERTIA_ENABLE_ACK CMSG_MOVE_KNOCK_BACK_ACK CMSG_MOVE_REMOVE_MOVEMENT_FORCE_ACK CMSG_MOVE_SET_CAN_FLY_ACK CMSG_MOVE_SET_CAN_TURN_WHILE_FALLING_ACK CMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES_ACK CMSG_MOVE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE_ACK CMSG_MOVE_SET_VEHICLE_REC_ID_ACK CMSG_MOVE_SPLINE_DONE CMSG_MOVE_UPDATE_FALL_SPEED CMSG_MOVE_WATER_WALK_ACK CMSG_NEXT_CINEMATIC_CAMERA CMSG_OBJECT_UPDATE_FAILED CMSG_OBJECT_UPDATE_RESCUED --- .../Enums/Version/V4_4_0_54481/Opcodes.cs | 44 ++++---- .../Parsers/CharacterHandler.cs | 7 ++ .../Parsers/GroupHandler.cs | 10 ++ .../Parsers/GuildHandler.cs | 37 +++++++ .../Parsers/LootHandler.cs | 13 +++ .../Parsers/MailHandler.cs | 23 ++++ .../Parsers/MiscellaneousHandler.cs | 13 ++- .../Parsers/MovementHandler.cs | 104 +++++++++++++++++- .../Parsers/SpellHandler.cs | 9 ++ .../Parsers/UpdateHandler.cs | 7 ++ 10 files changed, 243 insertions(+), 24 deletions(-) diff --git a/WowPacketParser/Enums/Version/V4_4_0_54481/Opcodes.cs b/WowPacketParser/Enums/Version/V4_4_0_54481/Opcodes.cs index 2a2c4af14d..196ba9be29 100644 --- a/WowPacketParser/Enums/Version/V4_4_0_54481/Opcodes.cs +++ b/WowPacketParser/Enums/Version/V4_4_0_54481/Opcodes.cs @@ -366,18 +366,18 @@ public static BiDictionary Opcodes(Direction direction) { Opcode.CMSG_MAIL_RETURN_TO_SENDER, 0x3654 }, { Opcode.CMSG_MAIL_TAKE_ITEM, 0x353A }, { Opcode.CMSG_MAIL_TAKE_MONEY, 0x3539 }, - { Opcode.CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT, 0x322A }, + { Opcode.CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT, 0x322A }, // NYI { Opcode.CMSG_MASTER_LOOT_ITEM, 0x3214 }, { Opcode.CMSG_MERGE_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM, 0x34C0 }, { Opcode.CMSG_MERGE_GUILD_BANK_ITEM_WITH_ITEM, 0x34BD }, { Opcode.CMSG_MERGE_ITEM_WITH_GUILD_BANK_ITEM, 0x34BB }, - { Opcode.CMSG_MINIMAP_PING, 0x364a }, + { Opcode.CMSG_MINIMAP_PING, 0x364A }, { Opcode.CMSG_MISSILE_TRAJECTORY_COLLISION, 0x318F }, - { Opcode.CMSG_MOUNT_CLEAR_FANFARE, 0x3127 }, + { Opcode.CMSG_MOUNT_CLEAR_FANFARE, 0x3127 }, // NYI { Opcode.CMSG_MOUNT_SET_FAVORITE, 0x362F }, { Opcode.CMSG_MOUNT_SPECIAL_ANIM, 0x3282 }, - { Opcode.CMSG_MOVE_ADD_IMPULSE_ACK, 0x3A50 }, - { Opcode.CMSG_MOVE_APPLY_INERTIA_ACK, 0x3A4E }, + { Opcode.CMSG_MOVE_ADD_IMPULSE_ACK, 0x3A50 }, // NYI + { Opcode.CMSG_MOVE_APPLY_INERTIA_ACK, 0x3A4E }, // NYI { Opcode.CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK, 0x3A15 }, { Opcode.CMSG_MOVE_CHANGE_TRANSPORT, 0x3A2F }, { Opcode.CMSG_MOVE_CHANGE_VEHICLE_SEATS, 0x3A34 }, @@ -411,25 +411,25 @@ public static BiDictionary Opcodes(Direction direction) { Opcode.CMSG_MOVE_INIT_ACTIVE_MOVER_COMPLETE, 0x3A46 }, { Opcode.CMSG_MOVE_JUMP, 0x39EA }, { Opcode.CMSG_MOVE_KNOCK_BACK_ACK, 0x3A12 }, - { Opcode.CMSG_MOVE_REMOVE_INERTIA_ACK, 0x3A4F }, + { Opcode.CMSG_MOVE_REMOVE_INERTIA_ACK, 0x3A4F }, // NYI { Opcode.CMSG_MOVE_REMOVE_MOVEMENT_FORCES, 0x3A17 }, { Opcode.CMSG_MOVE_REMOVE_MOVEMENT_FORCE_ACK, 0x3A16 }, - { Opcode.CMSG_MOVE_SEAMLESS_TRANSFER_COMPLETE, 0x3A44 }, - { Opcode.CMSG_MOVE_SET_ADV_FLY, 0x3A52 }, - { Opcode.CMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED_ACK, 0x3A58 }, - { Opcode.CMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION_ACK, 0x3A53 }, - { Opcode.CMSG_MOVE_SET_ADV_FLYING_BANKING_RATE_ACK, 0x3A59 }, - { Opcode.CMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD_ACK, 0x3A56 }, - { Opcode.CMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT_ACK, 0x3A57 }, - { Opcode.CMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT_ACK, 0x3A60 }, - { Opcode.CMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT_ACK, 0x3A55 }, - { Opcode.CMSG_MOVE_SET_ADV_FLYING_MAX_VEL_ACK, 0x3A54 }, - { Opcode.CMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION_ACK, 0x3A5E }, - { Opcode.CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN_ACK, 0x3A5A }, - { Opcode.CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP_ACK, 0x3A5B }, - { Opcode.CMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION_ACK, 0x3A5D }, - { Opcode.CMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD_ACK, 0x3A5C }, - { Opcode.CMSG_MOVE_SET_CAN_ADV_FLY_ACK, 0x3A51 }, + { Opcode.CMSG_MOVE_SEAMLESS_TRANSFER_COMPLETE, 0x3A44 }, // NYI + { Opcode.CMSG_MOVE_SET_ADV_FLY, 0x3A52 }, // NYI + { Opcode.CMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED_ACK, 0x3A58 }, // NYI + { Opcode.CMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION_ACK, 0x3A53 }, // NYI + { Opcode.CMSG_MOVE_SET_ADV_FLYING_BANKING_RATE_ACK, 0x3A59 }, // NYI + { Opcode.CMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD_ACK, 0x3A56 }, // NYI + { Opcode.CMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT_ACK, 0x3A57 }, // NYI + { Opcode.CMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT_ACK, 0x3A60 }, // NYI + { Opcode.CMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT_ACK, 0x3A55 }, // NYI + { Opcode.CMSG_MOVE_SET_ADV_FLYING_MAX_VEL_ACK, 0x3A54 }, // NYI + { Opcode.CMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION_ACK, 0x3A5E }, // NYI + { Opcode.CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN_ACK, 0x3A5A }, // NYI + { Opcode.CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP_ACK, 0x3A5B }, // NYI + { Opcode.CMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION_ACK, 0x3A5D }, // NYI + { Opcode.CMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD_ACK, 0x3A5C }, // NYI + { Opcode.CMSG_MOVE_SET_CAN_ADV_FLY_ACK, 0x3A51 }, // NYI { Opcode.CMSG_MOVE_SET_CAN_FLY_ACK, 0x3A27 }, { Opcode.CMSG_MOVE_SET_CAN_TURN_WHILE_FALLING_ACK, 0x3A25 }, { Opcode.CMSG_MOVE_SET_COLLISION_HEIGHT_ACK, 0x3A3B }, diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/CharacterHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/CharacterHandler.cs index f52f705ab7..4951bb4c36 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/CharacterHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/CharacterHandler.cs @@ -622,6 +622,13 @@ public static void HandleInspect(Packet packet) packet.ReadPackedGuid128("Target"); } + [Parser(Opcode.CMSG_MOUNT_SET_FAVORITE)] + public static void HandleMountSetFavorite(Packet packet) + { + packet.ReadInt32("MountSpellID"); + packet.ReadBit("IsFavorite"); + } + [Parser(Opcode.CMSG_CONFIRM_BARBERS_CHOICE)] [Parser(Opcode.CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT)] public static void HandleCharNull(Packet packet) diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/GroupHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/GroupHandler.cs index c2249417a9..e437beb697 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/GroupHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/GroupHandler.cs @@ -354,6 +354,16 @@ public static void HandleDoReadyCheck(Packet packet) packet.ReadByte("PartyIndex"); } + [Parser(Opcode.CMSG_MINIMAP_PING)] + public static void HandleClientMinimapPing(Packet packet) + { + var hasPartyIndex = packet.ReadBit("HasPartyIndex"); + packet.ReadVector2("Position"); + + if (hasPartyIndex) + packet.ReadByte("PartyIndex"); + } + [Parser(Opcode.CMSG_REQUEST_RAID_INFO)] [Parser(Opcode.SMSG_GROUP_DESTROYED)] [Parser(Opcode.SMSG_GROUP_UNINVITE)] diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/GuildHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/GuildHandler.cs index bce64c0f13..5883979148 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/GuildHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/GuildHandler.cs @@ -924,6 +924,43 @@ public static void HandleGuildUpdateInfoText(Packet packet) packet.ReadWoWString("InfoText", nameLength); } + [Parser(Opcode.CMSG_MERGE_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM)] + public static void HandleMergeGuildBankItemWithGuildBankItem(Packet packet) + { + packet.ReadPackedGuid128("Banker"); + packet.ReadByte("BankTab"); + packet.ReadByte("BankSlot"); + packet.ReadByte("BankTab1"); + packet.ReadByte("BankSlot1"); + packet.ReadUInt32("StackCount"); + } + + [Parser(Opcode.CMSG_MERGE_GUILD_BANK_ITEM_WITH_ITEM)] + [Parser(Opcode.CMSG_MERGE_ITEM_WITH_GUILD_BANK_ITEM)] + public static void HandleMergeGuildBankItemWithItem(Packet packet) + { + packet.ReadPackedGuid128("Banker"); + packet.ReadByte("BankTab"); + packet.ReadByte("BankSlot"); + packet.ReadByte("ContainerItemSlot"); + packet.ReadUInt32("StackCount"); + + var hasContainerSlot = packet.ReadBit("HasContainerSlot"); + + if (hasContainerSlot) + packet.ReadByte("ContainerSlot"); + } + + [Parser(Opcode.CMSG_MOVE_GUILD_BANK_ITEM)] + public static void HandleMoveGuildBankItem(Packet packet) + { + packet.ReadPackedGuid128("Banker"); + packet.ReadByte("BankTab"); + packet.ReadByte("BankSlot"); + packet.ReadByte("BankTab1"); + packet.ReadByte("BankSlot1"); + } + [Parser(Opcode.CMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY_QUERY)] [Parser(Opcode.SMSG_GUILD_EVENT_BANK_CONTENTS_CHANGED)] [Parser(Opcode.SMSG_GUILD_EVENT_DISBANDED)] diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/LootHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/LootHandler.cs index 65fb78e534..0290f3e0ff 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/LootHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/LootHandler.cs @@ -221,6 +221,19 @@ public static void HandleLoot(Packet packet) packet.ReadPackedGuid128("Unit"); } + [Parser(Opcode.CMSG_MASTER_LOOT_ITEM)] + public static void HandleMasterLootItem(Packet packet) + { + var count = packet.ReadUInt32("Count"); + packet.ReadPackedGuid128("Target"); + + for (var i = 0; i < count; ++i) + { + packet.ReadPackedGuid128("Object", i); + packet.ReadByte("LootListID", i); + } + } + [Parser(Opcode.SMSG_AE_LOOT_TARGET_ACK)] [Parser(Opcode.SMSG_LOOT_RELEASE_ALL)] public static void HandleLootZero(Packet packet) diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/MailHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/MailHandler.cs index b5be5901ee..31dd11f05a 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/MailHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/MailHandler.cs @@ -143,6 +143,29 @@ public static void HandleMailMarkAsRead(Packet packet) packet.ReadUInt64("MailID"); } + [Parser(Opcode.CMSG_MAIL_RETURN_TO_SENDER)] + public static void HandleMailReturnToSender(Packet packet) + { + packet.ReadUInt64("MailID"); + packet.ReadPackedGuid128("SenderGUID"); + } + + [Parser(Opcode.CMSG_MAIL_TAKE_ITEM)] + public static void HandleMailTakeItem(Packet packet) + { + packet.ReadPackedGuid128("Mailbox"); + packet.ReadUInt64("MailID"); + packet.ReadUInt64("AttachID"); + } + + [Parser(Opcode.CMSG_MAIL_TAKE_MONEY)] + public static void HandleMailTakeMoney(Packet packet) + { + packet.ReadPackedGuid128("Mailbox"); + packet.ReadUInt64("MailID"); + packet.ReadUInt64("Money"); + } + [Parser(Opcode.CMSG_QUERY_NEXT_MAIL_TIME)] public static void HandleNullMail(Packet packet) { diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/MiscellaneousHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/MiscellaneousHandler.cs index 38a75f012d..55b00ab6b4 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/MiscellaneousHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/MiscellaneousHandler.cs @@ -881,7 +881,17 @@ public static void HandleEjectPassenger(Packet packet) [Parser(Opcode.CMSG_FAR_SIGHT)] public static void HandleFarSight(Packet packet) { - packet.ReadBool("Apply"); + packet.ReadBit("Apply"); + } + + [Parser(Opcode.CMSG_MOUNT_SPECIAL_ANIM)] + public static void HandleMountSpecialAnim(Packet packet) + { + var count = packet.ReadUInt32(); + packet.ReadInt32("SequenceVariation"); + + for (var i = 0; i < count; ++i) + packet.ReadInt32("SpellVisualKitID", i); } [Parser(Opcode.SMSG_RESUME_COMMS)] @@ -896,6 +906,7 @@ public static void HandleFarSight(Packet packet) [Parser(Opcode.CMSG_COMPLETE_CINEMATIC)] [Parser(Opcode.CMSG_COMPLETE_MOVIE)] [Parser(Opcode.CMSG_ENABLE_NAGLE)] + [Parser(Opcode.CMSG_NEXT_CINEMATIC_CAMERA)] public static void HandleZeroLengthPackets(Packet packet) { } diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/MovementHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/MovementHandler.cs index 9bbff25736..424c915591 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/MovementHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/MovementHandler.cs @@ -371,6 +371,13 @@ public static void ReadMoveStateChange(Packet packet, params object[] idx) packet.ReadUInt32("MovementInertiaLifetimeMs", idx); } + public static MovementInfo ReadMovementAck(Packet packet, params object[] idx) + { + var stats = ReadMovementStats(packet, idx); + packet.ReadInt32("AckIndex", idx); + return stats; + } + [Parser(Opcode.SMSG_ADJUST_SPLINE_DURATION)] public static void HandleAdjustSplineDuration(Packet packet) { @@ -541,6 +548,7 @@ public static void HandleFlightSplineSync(Packet packet) [Parser(Opcode.CMSG_MOVE_STOP_SWIM)] [Parser(Opcode.CMSG_MOVE_STOP_TURN)] [Parser(Opcode.CMSG_MOVE_DOUBLE_JUMP)] + [Parser(Opcode.CMSG_MOVE_UPDATE_FALL_SPEED)] public static void HandleClientPlayerMove(Packet packet) { var stats = ReadMovementStats(packet); @@ -593,7 +601,7 @@ public static void HandleSetCollisionHeight(Packet packet) [Parser(Opcode.CMSG_MOVE_SET_COLLISION_HEIGHT_ACK)] public static void HandleMoveSetCollisionHeightAck(Packet packet) { - V6_0_2_19033.Parsers.MovementHandler.ReadMovementAck(packet, "MovementAck"); + ReadMovementAck(packet, "MovementAck"); packet.ReadSingle("Height"); packet.ReadInt32("MountDisplayID"); packet.ReadByte("Reason"); @@ -877,6 +885,100 @@ public static void HandleTransferPending(Packet packet) packet.ReadUInt32("TransferSpellID"); } + [Parser(Opcode.CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK)] + public static void HandleMoveApplyMovementForceAck(Packet packet) + { + var stats = ReadMovementAck(packet); + packet.Holder.ClientMove = new() { Mover = stats.MoverGuid, Position = stats.PositionAsVector4 }; + ReadMovementForce(packet, "MovementForce"); + } + + [Parser(Opcode.CMSG_MOVE_CHANGE_VEHICLE_SEATS)] + public static void HandleMoveChangeVehicleSeats(Packet packet) + { + ReadMovementStats(packet); + packet.ReadPackedGuid128("DstVehicle"); + packet.ReadByte("DstSeatIndex"); + } + + [Parser(Opcode.CMSG_MOVE_COLLISION_DISABLE_ACK)] + [Parser(Opcode.CMSG_MOVE_COLLISION_ENABLE_ACK)] + [Parser(Opcode.CMSG_MOVE_ENABLE_DOUBLE_JUMP_ACK)] + [Parser(Opcode.CMSG_MOVE_ENABLE_SWIM_TO_FLY_TRANS_ACK)] + [Parser(Opcode.CMSG_MOVE_FEATHER_FALL_ACK)] + [Parser(Opcode.CMSG_MOVE_FORCE_ROOT_ACK)] + [Parser(Opcode.CMSG_MOVE_FORCE_UNROOT_ACK)] + [Parser(Opcode.CMSG_MOVE_GRAVITY_DISABLE_ACK)] + [Parser(Opcode.CMSG_MOVE_GRAVITY_ENABLE_ACK)] + [Parser(Opcode.CMSG_MOVE_HOVER_ACK)] + [Parser(Opcode.CMSG_MOVE_INERTIA_DISABLE_ACK)] + [Parser(Opcode.CMSG_MOVE_INERTIA_ENABLE_ACK)] + [Parser(Opcode.CMSG_MOVE_SET_CAN_FLY_ACK)] + [Parser(Opcode.CMSG_MOVE_SET_CAN_TURN_WHILE_FALLING_ACK)] + [Parser(Opcode.CMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES_ACK)] + [Parser(Opcode.CMSG_MOVE_WATER_WALK_ACK)] + public static void HandleMoveAck(Packet packet) + { + var stats = ReadMovementAck(packet); + packet.Holder.ClientMove = new() { Mover = stats.MoverGuid, Position = stats.PositionAsVector4 }; + } + + [Parser(Opcode.CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK)] + [Parser(Opcode.CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK)] + [Parser(Opcode.CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK)] + [Parser(Opcode.CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK)] + [Parser(Opcode.CMSG_MOVE_FORCE_RUN_SPEED_CHANGE_ACK)] + [Parser(Opcode.CMSG_MOVE_FORCE_SWIM_BACK_SPEED_CHANGE_ACK)] + [Parser(Opcode.CMSG_MOVE_FORCE_SWIM_SPEED_CHANGE_ACK)] + [Parser(Opcode.CMSG_MOVE_FORCE_TURN_RATE_CHANGE_ACK)] + [Parser(Opcode.CMSG_MOVE_FORCE_WALK_SPEED_CHANGE_ACK)] + [Parser(Opcode.CMSG_MOVE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE_ACK)] + public static void HandleMoveSpeedAck(Packet packet) + { + var stats = ReadMovementAck(packet); + packet.Holder.ClientMove = new() { Mover = stats.MoverGuid, Position = stats.PositionAsVector4 }; + packet.ReadSingle("Speed"); + } + + [Parser(Opcode.CMSG_MOVE_KNOCK_BACK_ACK)] + public static void HandleMoveKnockBackAck(Packet packet) + { + var stats = ReadMovementAck(packet, "MovementAck"); + packet.Holder.ClientMove = new() { Mover = stats.MoverGuid, Position = stats.PositionAsVector4 }; + + packet.ResetBitReader(); + + var hasSpeeds = packet.ReadBit("HasSpeeds"); + if (hasSpeeds) + { + packet.ReadSingle("HorzSpeed"); + packet.ReadSingle("VertSpeed"); + } + } + + [Parser(Opcode.CMSG_MOVE_REMOVE_MOVEMENT_FORCE_ACK)] + public static void HandleMoveRemoveMovementForceAck(Packet packet) + { + var stats = ReadMovementAck(packet); + packet.Holder.ClientMove = new() { Mover = stats.MoverGuid, Position = stats.PositionAsVector4 }; + packet.ReadPackedGuid128("TriggerGUID"); + } + + [Parser(Opcode.CMSG_MOVE_SET_VEHICLE_REC_ID_ACK)] + public static void HandleMoveSetVehicleRecIdAck(Packet packet) + { + var stats = ReadMovementAck(packet); + packet.Holder.ClientMove = new() { Mover = stats.MoverGuid, Position = stats.PositionAsVector4 }; + packet.ReadInt32("VehicleRecID"); + } + + [Parser(Opcode.CMSG_MOVE_SPLINE_DONE)] + public static void HandleMoveSplineDone(Packet packet) + { + ReadMovementStats(packet); + packet.ReadInt32("SplineID"); + } + [Parser(Opcode.SMSG_ABORT_NEW_WORLD)] public static void HandleAbortNewWorld(Packet packet) { diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/SpellHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/SpellHandler.cs index 589dcf3726..1f831a5d1a 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/SpellHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/SpellHandler.cs @@ -1114,6 +1114,15 @@ public static void HandleLearnPreviewTalents(Packet packet) } } + [Parser(Opcode.CMSG_MISSILE_TRAJECTORY_COLLISION)] + public static void HandleMissileTrajectoryCollision(Packet packet) + { + packet.ReadPackedGuid128("CasterGUID"); + packet.ReadInt32("SpellID"); + packet.ReadPackedGuid128("CastID"); + packet.ReadVector3("CollisionPos"); + } + [Parser(Opcode.SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA)] [Parser(Opcode.CMSG_CANCEL_AUTO_REPEAT_SPELL)] [Parser(Opcode.CMSG_CANCEL_GROWTH_AURA)] diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/UpdateHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/UpdateHandler.cs index fb9879747b..adcf8d808d 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/UpdateHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/UpdateHandler.cs @@ -829,5 +829,12 @@ public static void HandleDestroyArenaUnit(Packet packet) { packet.ReadPackedGuid128("Guid"); } + + [Parser(Opcode.CMSG_OBJECT_UPDATE_FAILED)] + [Parser(Opcode.CMSG_OBJECT_UPDATE_RESCUED)] + public static void HandleObjectUpdateOrRescued(Packet packet) + { + packet.ReadPackedGuid128("ObjectGUID"); + } } }