diff --git a/WowPacketParser/Enums/Version/V4_4_0_54481/Opcodes.cs b/WowPacketParser/Enums/Version/V4_4_0_54481/Opcodes.cs index 4819778db5..f70f4cf7be 100644 --- a/WowPacketParser/Enums/Version/V4_4_0_54481/Opcodes.cs +++ b/WowPacketParser/Enums/Version/V4_4_0_54481/Opcodes.cs @@ -598,24 +598,24 @@ public static BiDictionary Opcodes(Direction direction) { Opcode.CMSG_SET_ACTION_BUTTON, 0x3560 }, { Opcode.CMSG_SET_ACTIVE_MOVER, 0x3A3C }, { Opcode.CMSG_SET_ADVANCED_COMBAT_LOGGING, 0x32B6 }, - { Opcode.CMSG_SET_AMMO, 0x3561 }, + { Opcode.CMSG_SET_AMMO, 0x3561 }, // NYI { Opcode.CMSG_SET_ASSISTANT_LEADER, 0x364E }, { Opcode.CMSG_SET_CONTACT_NOTES, 0x36D6 }, - { Opcode.CMSG_SET_CURRENCY_FLAGS, 0x316E }, - { Opcode.CMSG_SET_DIFFICULTY_ID, 0x3224 }, + { Opcode.CMSG_SET_CURRENCY_FLAGS, 0x316E }, // NYI + { Opcode.CMSG_SET_DIFFICULTY_ID, 0x3224 }, // NYI { Opcode.CMSG_SET_DUNGEON_DIFFICULTY, 0x3680 }, { Opcode.CMSG_SET_EVERYONE_IS_ASSISTANT, 0x3619 }, { Opcode.CMSG_SET_FACTION_AT_WAR, 0x34DE }, { Opcode.CMSG_SET_FACTION_INACTIVE, 0x34E0 }, { Opcode.CMSG_SET_FACTION_NOT_AT_WAR, 0x34DF }, - { Opcode.CMSG_SET_GAME_EVENT_DEBUG_VIEW_STATE, 0x31BB }, - { Opcode.CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT, 0x32CB }, + { Opcode.CMSG_SET_GAME_EVENT_DEBUG_VIEW_STATE, 0x31BB }, // NYI + { Opcode.CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT, 0x32CB }, // NYI { Opcode.CMSG_SET_LOOT_METHOD, 0x3647 }, { Opcode.CMSG_SET_PARTY_ASSIGNMENT, 0x3650 }, { Opcode.CMSG_SET_PARTY_LEADER, 0x3649 }, { Opcode.CMSG_SET_PET_SLOT, 0x316D }, { Opcode.CMSG_SET_PLAYER_DECLINED_NAMES, 0x3685 }, - { Opcode.CMSG_SET_PREFERRED_CEMETERY, 0x317C }, + { Opcode.CMSG_SET_PREFERRED_CEMETERY, 0x317C }, // NYI { Opcode.CMSG_SET_PRIMARY_TALENT_TREE, 0x3559 }, { Opcode.CMSG_SET_PVP, 0x32AE }, { Opcode.CMSG_SET_RAID_DIFFICULTY, 0x36DF }, @@ -627,31 +627,31 @@ public static BiDictionary Opcodes(Direction direction) { Opcode.CMSG_SET_TRADE_GOLD, 0x3160 }, { Opcode.CMSG_SET_TRADE_ITEM, 0x315E }, { Opcode.CMSG_SET_WATCHED_FACTION, 0x34E1 }, - { Opcode.CMSG_SHOWING_CLOAK, 0x356C }, - { Opcode.CMSG_SHOWING_HELM, 0x356B }, - { Opcode.CMSG_SHOW_TRADE_SKILL, 0x36C6 }, + { Opcode.CMSG_SHOWING_CLOAK, 0x356C }, // NYI + { Opcode.CMSG_SHOWING_HELM, 0x356B }, // NYI + { Opcode.CMSG_SHOW_TRADE_SKILL, 0x36C6 }, // NYI { Opcode.CMSG_SIGN_PETITION, 0x3535 }, - { Opcode.CMSG_SILENCE_PARTY_TALKER, 0x3651 }, + { Opcode.CMSG_SILENCE_PARTY_TALKER, 0x3651 }, // NYI { Opcode.CMSG_SOCIAL_CONTRACT_REQUEST, 0x3748 }, { Opcode.CMSG_SOCKET_GEMS, 0x34EB }, - { Opcode.CMSG_SPAWN_TRACKING_UPDATE, 0x3294 }, + { Opcode.CMSG_SPAWN_TRACKING_UPDATE, 0x3294 }, // NYI { Opcode.CMSG_SPELL_CLICK, 0x3495 }, { Opcode.CMSG_SPIRIT_HEALER_ACTIVATE, 0x34AF }, { Opcode.CMSG_SPLIT_GUILD_BANK_ITEM, 0x34C1 }, { Opcode.CMSG_SPLIT_GUILD_BANK_ITEM_TO_INVENTORY, 0x34BE }, { Opcode.CMSG_SPLIT_ITEM, 0x399C }, { Opcode.CMSG_SPLIT_ITEM_TO_GUILD_BANK, 0x34BC }, - { Opcode.CMSG_STABLE_PET, 0x3169 }, - { Opcode.CMSG_STABLE_SWAP_PET, 0x316B }, + { Opcode.CMSG_STABLE_PET, 0x3169 }, // NYI + { Opcode.CMSG_STABLE_SWAP_PET, 0x316B }, // NYI { Opcode.CMSG_STAND_STATE_CHANGE, 0x318E }, - { Opcode.CMSG_START_SPECTATOR_WAR_GAME, 0x35DF }, - { Opcode.CMSG_START_WAR_GAME, 0x35DE }, + { Opcode.CMSG_START_SPECTATOR_WAR_GAME, 0x35DF }, // NYI + { Opcode.CMSG_START_WAR_GAME, 0x35DE }, // NYI { Opcode.CMSG_STORE_GUILD_BANK_ITEM, 0x34B7 }, { Opcode.CMSG_SUBMIT_USER_FEEDBACK, 0x368F }, { Opcode.CMSG_SUMMON_RESPONSE, 0x3668 }, - { Opcode.CMSG_SUPPORT_TICKET_SUBMIT_BUG, 0x3644 }, + { Opcode.CMSG_SUPPORT_TICKET_SUBMIT_BUG, 0x3644 }, // NYI { Opcode.CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT, 0x3643 }, - { Opcode.CMSG_SUPPORT_TICKET_SUBMIT_SUGGESTION, 0x3645 }, + { Opcode.CMSG_SUPPORT_TICKET_SUBMIT_SUGGESTION, 0x3645 }, // NYI { Opcode.CMSG_SUSPEND_COMMS_ACK, 0x3778 }, { Opcode.CMSG_SUSPEND_TOKEN_RESPONSE, 0x377E }, { Opcode.CMSG_SWAP_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM, 0x34B9 }, @@ -664,17 +664,17 @@ public static BiDictionary Opcodes(Direction direction) { Opcode.CMSG_TAXI_NODE_STATUS_QUERY, 0x34A8 }, { Opcode.CMSG_TAXI_QUERY_AVAILABLE_NODES, 0x34AA }, { Opcode.CMSG_TAXI_REQUEST_EARLY_LANDING, 0x34AC }, - { Opcode.CMSG_TIME_ADJUSTMENT_RESPONSE, 0x3A40 }, + { Opcode.CMSG_TIME_ADJUSTMENT_RESPONSE, 0x3A40 }, // NYI { Opcode.CMSG_TIME_SYNC_RESPONSE, 0x3A3D }, - { Opcode.CMSG_TIME_SYNC_RESPONSE_DROPPED, 0x3A3F }, - { Opcode.CMSG_TIME_SYNC_RESPONSE_FAILED, 0x3A3E }, - { Opcode.CMSG_TOGGLE_DIFFICULTY, 0x3655 }, + { Opcode.CMSG_TIME_SYNC_RESPONSE_DROPPED, 0x3A3F }, // NYI + { Opcode.CMSG_TIME_SYNC_RESPONSE_FAILED, 0x3A3E }, // NYI + { Opcode.CMSG_TOGGLE_DIFFICULTY, 0x3655 }, // NYI { Opcode.CMSG_TOGGLE_PVP, 0x32AD }, { Opcode.CMSG_TOTEM_DESTROYED, 0x34F8 }, { Opcode.CMSG_TOY_CLEAR_FANFARE, 0x3128 }, { Opcode.CMSG_TRAINER_BUY_SPELL, 0x34AE }, { Opcode.CMSG_TRAINER_LIST, 0x34AD }, - { Opcode.CMSG_TRAITS_COMMIT_CONFIG, 0x3304 }, + { Opcode.CMSG_TRAITS_COMMIT_CONFIG, 0x3304 }, // NYI { Opcode.CMSG_TRANSMOGRIFY_ITEMS, 0x319A }, { Opcode.CMSG_TURN_IN_PETITION, 0x3537 }, { Opcode.CMSG_TUTORIAL, 0x36E0 }, @@ -682,16 +682,16 @@ public static BiDictionary Opcodes(Direction direction) { Opcode.CMSG_UNDELETE_CHARACTER, 0x36E2 }, { Opcode.CMSG_UNLEARN_SKILL, 0x34E5 }, { Opcode.CMSG_UNLOCK_VOID_STORAGE, 0x31A4 }, - { Opcode.CMSG_UNSTABLE_PET, 0x316A }, + { Opcode.CMSG_UNSTABLE_PET, 0x316A }, // NYI { Opcode.CMSG_UPDATE_AADC_STATUS, 0x373D }, { Opcode.CMSG_UPDATE_ACCOUNT_DATA, 0x3691 }, - { Opcode.CMSG_UPDATE_AREA_TRIGGER_VISUAL, 0x32A0 }, - { Opcode.CMSG_UPDATE_CLIENT_SETTINGS, 0x3662 }, + { Opcode.CMSG_UPDATE_AREA_TRIGGER_VISUAL, 0x32A0 }, // NYI + { Opcode.CMSG_UPDATE_CLIENT_SETTINGS, 0x3662 }, // NYI { Opcode.CMSG_UPDATE_MISSILE_TRAJECTORY, 0x3A43 }, { Opcode.CMSG_UPDATE_RAID_TARGET, 0x364F }, - { Opcode.CMSG_UPDATE_SPELL_VISUAL, 0x329F }, + { Opcode.CMSG_UPDATE_SPELL_VISUAL, 0x329F }, // NYI { Opcode.CMSG_UPDATE_VAS_PURCHASE_STATES, 0x36F7 }, - { Opcode.CMSG_USED_FOLLOW, 0x318B }, + { Opcode.CMSG_USED_FOLLOW, 0x318B }, // NYI { Opcode.CMSG_USE_CRITTER_ITEM, 0x3243 }, { Opcode.CMSG_USE_EQUIPMENT_SET, 0x3995 }, { Opcode.CMSG_USE_ITEM, 0x329A }, @@ -699,9 +699,9 @@ public static BiDictionary Opcodes(Direction direction) { Opcode.CMSG_VAS_CHECK_TRANSFER_OK, 0x370F }, { Opcode.CMSG_VAS_GET_QUEUE_MINUTES, 0x370E }, { Opcode.CMSG_VAS_GET_SERVICE_STATUS, 0x370D }, - { Opcode.CMSG_VOICE_CHANNEL_STT_TOKEN_REQUEST, 0x3713 }, - { Opcode.CMSG_VOICE_CHAT_JOIN_CHANNEL, 0x3714 }, - { Opcode.CMSG_VOICE_CHAT_LOGIN, 0x3712 }, + { Opcode.CMSG_VOICE_CHANNEL_STT_TOKEN_REQUEST, 0x3713 }, // NYI + { Opcode.CMSG_VOICE_CHAT_JOIN_CHANNEL, 0x3714 }, // NYI + { Opcode.CMSG_VOICE_CHAT_LOGIN, 0x3712 }, // NYI { Opcode.CMSG_VOID_STORAGE_TRANSFER, 0x31A6 }, { Opcode.CMSG_WARDEN3_DATA, 0x35EC }, { Opcode.CMSG_WHO, 0x367F }, diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/AccountDataHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/AccountDataHandler.cs index 90822448b3..70e89019e9 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/AccountDataHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/AccountDataHandler.cs @@ -97,6 +97,22 @@ public static void HandleServerUpdateAccountData(Packet packet) packet.AddValue("Account Data", data); } + [Parser(Opcode.CMSG_UPDATE_ACCOUNT_DATA)] + public static void HandleClientUpdateAccountData(Packet packet) + { + packet.ReadTime64("Time"); + + var decompCount = packet.ReadInt32(); + packet.ReadPackedGuid128("Guid"); + packet.ReadInt32E("DataType"); + var compCount = packet.ReadInt32(); + + var pkt = packet.Inflate(compCount, decompCount, false); + var data = pkt.ReadWoWString(decompCount); + + packet.AddValue("CompressedData", data); + } + [Parser(Opcode.SMSG_LOGOUT_CANCEL_ACK)] public static void HandleAccountNull(Packet packet) { diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/CharacterHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/CharacterHandler.cs index 56fa7aa110..c856c086c9 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/CharacterHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/CharacterHandler.cs @@ -641,6 +641,38 @@ public static void HandleReorderCharacters(Packet packet) } } + [Parser(Opcode.CMSG_SET_PLAYER_DECLINED_NAMES)] + public static void HandleSetPlayerDeclinedNames(Packet packet) + { + packet.ReadPackedGuid128("Player"); + + var count = new int[5]; + for (var i = 0; i < 5; ++i) + count[i] = (int)packet.ReadBits(7); + + for (var i = 0; i < 5; ++i) + packet.ReadWoWString("DeclinedName", count[i], i); + } + + [Parser(Opcode.CMSG_SET_PVP)] + public static void HandleSetPVP(Packet packet) + { + packet.ReadBit("EnablePVP"); + } + + [Parser(Opcode.CMSG_SET_TITLE)] + public static void HandleSetTitle(Packet packet) + { + packet.ReadInt32("TitleID"); + } + + [Parser(Opcode.CMSG_UNDELETE_CHARACTER)] + public static void HandleUndeleteCharacter(Packet packet) + { + packet.ReadInt32("ClientToken"); + packet.ReadPackedGuid128("CharacterGuid"); + } + [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/ChatHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/ChatHandler.cs index 43b6f6ae2b..51241c6f88 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/ChatHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/ChatHandler.cs @@ -267,11 +267,17 @@ public static void HandleSendTextEmote(Packet packet) packet.ReadInt32("SoundIndex"); var count = packet.ReadUInt32("SpellVisualKitCount"); packet.ReadInt32("SequenceVariation"); - + for (var i = 0; i < count; ++i) packet.ReadInt32("SpellVisualKitID", i); } + [Parser(Opcode.CMSG_UPDATE_AADC_STATUS)] + public static void HandleUpdateAADCStatus(Packet packet) + { + packet.ReadBit("ChatDisabled"); + } + [Parser(Opcode.CMSG_EMOTE)] public static void HandleChatNull(Packet packet) { diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/CombatHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/CombatHandler.cs index c3d51d1a74..79f7fcc276 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/CombatHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/CombatHandler.cs @@ -161,10 +161,18 @@ public static void HandleCanDuel(Packet packet) packet.ReadBit("ToTheDeath"); } + [Parser(Opcode.CMSG_SET_SHEATHED)] + public static void HandleSetSheathed(Packet packet) + { + packet.ReadInt32E("CurrentSheathState"); + packet.ReadBit("Animate"); + } + [Parser(Opcode.SMSG_CANCEL_COMBAT)] [Parser(Opcode.SMSG_DUEL_IN_BOUNDS)] [Parser(Opcode.SMSG_DUEL_OUT_OF_BOUNDS)] [Parser(Opcode.CMSG_ATTACK_STOP)] + [Parser(Opcode.CMSG_TOGGLE_PVP)] public static void HandleCombatNull(Packet packet) { } diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/CombatLogHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/CombatLogHandler.cs index 18bcf8aaec..97f1cc2a1a 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/CombatLogHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/CombatLogHandler.cs @@ -477,5 +477,11 @@ public static void HandleSpellOrDamageImmune(Packet packet) packet.ReadBit("IsPeriodic"); } + + [Parser(Opcode.CMSG_SET_ADVANCED_COMBAT_LOGGING)] + public static void HandleSetAdvancedCombatLogging(Packet packet) + { + packet.ReadBit("Enable"); + } } } diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/ContactHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/ContactHandler.cs index 39fc7e531a..f4d0996426 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/ContactHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/ContactHandler.cs @@ -105,5 +105,13 @@ public static void HandleSendContactList(Packet packet) { packet.ReadUInt32("Flags"); } + + [Parser(Opcode.CMSG_SET_CONTACT_NOTES)] + public static void HandleSetContactNotes(Packet packet) + { + ReadQualifiedGUID(packet, "QualifiedGUID"); + var notesLength = packet.ReadBits(10); + packet.ReadWoWString("Notes", notesLength); + } } } diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/EquipmentSetHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/EquipmentSetHandler.cs index c52e115d1b..b42bca837e 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/EquipmentSetHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/EquipmentSetHandler.cs @@ -104,5 +104,19 @@ public static void HandleEquipmentSetSave(Packet packet) packet.ReadWoWString("SetName", setNameLen); packet.ReadWoWString("SetIcon", setIconLen); } + + [Parser(Opcode.CMSG_USE_EQUIPMENT_SET)] + public static void HandleUseEquipmentSet(Packet packet) + { + ItemHandler.ReadInvUpdate(packet, "InvUpdate"); + for (int i = 0; i < NumSlots; i++) + { + packet.ReadPackedGuid128("Item"); + packet.ReadByte("ContainerSlot"); + packet.ReadByte("Slot"); + } + + packet.ReadUInt64("GUID"); + } } } diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/GroupHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/GroupHandler.cs index afd0c17ff6..6752f1bc5a 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/GroupHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/GroupHandler.cs @@ -439,6 +439,91 @@ public static void HandleRequestPartyMemberStats(Packet packet) packet.ReadByte("PartyIndex"); } + [Parser(Opcode.CMSG_SET_ASSISTANT_LEADER)] + public static void HandleSetAssistantLeader(Packet packet) + { + var hasPartyIndex = packet.ReadBit("HasPartyIndex"); + packet.ReadBit("Apply"); + packet.ReadPackedGuid128("Target"); + + if (hasPartyIndex) + packet.ReadByte("PartyIndex"); + } + + [Parser(Opcode.CMSG_SET_EVERYONE_IS_ASSISTANT)] + public static void HandleSetEveryoneIsAssistant(Packet packet) + { + var hasPartyIndex = packet.ReadBit("HasPartyIndex"); + packet.ReadBit("EveryoneIsAssistant"); + + if (hasPartyIndex) + packet.ReadByte("PartyIndex"); + } + + [Parser(Opcode.CMSG_SET_LOOT_METHOD)] + public static void HandleLootMethod(Packet packet) + { + var hasPartyIndex = packet.ReadBit("HasPartyIndex"); + packet.ReadByteE("Method"); + packet.ReadPackedGuid128("Master"); + packet.ReadInt32E("Threshold"); + + if (hasPartyIndex) + packet.ReadByte("PartyIndex"); + } + + [Parser(Opcode.CMSG_SET_PARTY_ASSIGNMENT)] + public static void HandleSetPartyAssigment(Packet packet) + { + var hasPartyIndex = packet.ReadBit("HasPartyIndex"); + packet.ReadBit("Set"); + packet.ReadByte("Assignment"); + packet.ReadPackedGuid128("Target"); + + if (hasPartyIndex) + packet.ReadByte("PartyIndex"); + } + + [Parser(Opcode.CMSG_SET_PARTY_LEADER)] + public static void HandleSetPartyLeader(Packet packet) + { + var hasPartyIndex = packet.ReadBit("HasPartyIndex"); + packet.ReadPackedGuid128("Target"); + if (hasPartyIndex) + packet.ReadByte("PartyIndex"); + } + + [Parser(Opcode.CMSG_SET_ROLE)] + public static void HandleSetRole(Packet packet) + { + var hasPartyIndex = packet.ReadBit("HasPartyIndex"); + packet.ReadPackedGuid128("ChangedUnit"); + packet.ReadByte("Role"); + if (hasPartyIndex) + packet.ReadByte("PartyIndex"); + } + + [Parser(Opcode.CMSG_SWAP_SUB_GROUPS)] + public static void HandleSwapSubGroups(Packet packet) + { + var hasPartyIndex = packet.ReadBit("HasPartyIndex"); + packet.ReadPackedGuid128("FirstTarget"); + packet.ReadPackedGuid128("SecondTarget"); ; + if (hasPartyIndex) + packet.ReadByte("PartyIndex"); + } + + [Parser(Opcode.CMSG_UPDATE_RAID_TARGET)] + public static void HandleUpdateRaidTarget(Packet packet) + { + var hasPartyIndex = packet.ReadBit("HasPartyIndex"); + packet.ReadPackedGuid128("Target"); + packet.ReadByte("Symbol"); + + 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 ccd624f444..5a82f150c2 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/GuildHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/GuildHandler.cs @@ -1028,6 +1028,83 @@ public static void HandleSaveGuildEmblem(Packet packet) packet.ReadInt32("Bg"); } + [Parser(Opcode.CMSG_SIGN_PETITION)] + public static void HandleSignPetition(Packet packet) + { + packet.ReadPackedGuid128("PetitionGUID"); + packet.ReadByte("Choice"); + } + + [Parser(Opcode.CMSG_SPLIT_GUILD_BANK_ITEM)] + public static void HandleSplitGuildBankItem(Packet packet) + { + packet.ReadPackedGuid128("Banker"); + packet.ReadByte("BankTab"); + packet.ReadByte("BankSlot"); + packet.ReadByte("BankTab1"); + packet.ReadByte("BankSlot1"); + packet.ReadUInt32("StackCount"); + } + + [Parser(Opcode.CMSG_SPLIT_GUILD_BANK_ITEM_TO_INVENTORY)] + [Parser(Opcode.CMSG_SPLIT_ITEM_TO_GUILD_BANK)] + public static void HandleSplitGuildBankItemToInventory(Packet packet) + { + packet.ReadPackedGuid128("Banker"); + packet.ReadByte("BankTab"); + packet.ReadByte("BankSlot"); + packet.ReadByte("ContainerItemSlot"); + packet.ReadUInt32("StackCount"); + + if (packet.ReadBit()) + packet.ReadByte("ContainerSlot"); + } + + [Parser(Opcode.CMSG_STORE_GUILD_BANK_ITEM)] + public static void HandleStoreGuildBankItem(Packet packet) + { + packet.ReadPackedGuid128("Banker"); + packet.ReadByte("BankTab"); + packet.ReadByte("BankSlot"); + packet.ReadByte("ContainerItemSlot"); + + if (packet.ReadBit()) + packet.ReadByte("ContainerSlot"); + } + + [Parser(Opcode.CMSG_SWAP_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM)] + public static void HandleSwapGuildBankItemWithGuildBankItem(Packet packet) + { + packet.ReadPackedGuid128("Banker"); + packet.ReadByte("BankTab"); + packet.ReadByte("BankSlot"); + packet.ReadByte("BankTab1"); + packet.ReadByte("BankSlot1"); + } + + [Parser(Opcode.CMSG_SWAP_ITEM_WITH_GUILD_BANK_ITEM)] + public static void HandleSwapItemWithGuildBankItem(Packet packet) + { + packet.ReadPackedGuid128("Banker"); + packet.ReadByte("BankTab"); + packet.ReadByte("BankSlot"); + packet.ReadByte("ContainerItemSlot"); + + if (packet.ReadBit()) + packet.ReadByte("ContainerSlot"); + } + + [Parser(Opcode.CMSG_TURN_IN_PETITION)] + public static void HandleTurnInPetition(Packet packet) + { + packet.ReadPackedGuid128("PetitionGUID"); + packet.ReadInt32("BgColorRGB"); + packet.ReadInt32("IconStyle"); + packet.ReadInt32("IconColorRGB"); + packet.ReadInt32("BorderStyle"); + packet.ReadInt32("BorderColorRGB"); + } + [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/InstanceHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/InstanceHandler.cs index 59b25e5f7b..6a6cbcc625 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/InstanceHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/InstanceHandler.cs @@ -165,6 +165,7 @@ public static void HandlePendingRaidLock(Packet packet) } [Parser(Opcode.SMSG_RAID_DIFFICULTY_SET)] + [Parser(Opcode.CMSG_SET_RAID_DIFFICULTY)] public static void HandleSetRaidDifficulty(Packet packet) { packet.ReadInt32("DifficultyID"); @@ -185,6 +186,7 @@ public static void HandleRaidInstanceMessage(Packet packet) } [Parser(Opcode.SMSG_SET_DUNGEON_DIFFICULTY)] + [Parser(Opcode.CMSG_SET_DUNGEON_DIFFICULTY)] public static void HandleSetDungeonDifficulty(Packet packet) { packet.ReadInt32("DifficultyID"); diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/ItemHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/ItemHandler.cs index 6d1e405386..ba45485542 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/ItemHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/ItemHandler.cs @@ -443,6 +443,69 @@ public static void HandleSellItem(Packet packet) packet.ReadUInt32("Amount"); } + [Parser(Opcode.CMSG_SOCKET_GEMS)] + public static void HandleSocketGems(Packet packet) + { + packet.ReadPackedGuid128("GUID"); + for (var i = 0; i < 3; ++i) + packet.ReadPackedGuid128("Gem GUID", i); + } + + [Parser(Opcode.CMSG_SPLIT_ITEM)] + public static void HandleSplitItem(Packet packet) + { + ReadInvUpdate(packet); + + packet.ReadByte("FromPackSlot"); + packet.ReadByte("FromSlot"); + packet.ReadByte("ToPackSlot"); + packet.ReadByte("ToSlot"); + packet.ReadInt32("Quantity"); + } + + [Parser(Opcode.CMSG_SWAP_INV_ITEM)] + public static void HandleSwapInvItem(Packet packet) + { + ReadInvUpdate(packet); + + packet.ReadByte("Slot2"); + packet.ReadByte("Slot1"); + } + + [Parser(Opcode.CMSG_SWAP_ITEM)] + public static void HandleSwapItem(Packet packet) + { + ReadInvUpdate(packet); + + packet.ReadByte("ContainerSlotB"); + packet.ReadByte("ContainerSlotA"); + packet.ReadByte("SlotB"); + packet.ReadByte("SlotA"); + } + + [Parser(Opcode.CMSG_USE_CRITTER_ITEM)] + public static void HandleUseCritterItem(Packet packet) + { + packet.ReadPackedGuid128("ItemGUID"); + } + + [Parser(Opcode.CMSG_USE_ITEM)] + public static void HandleUseItem(Packet packet) + { + var useItem = packet.Holder.ClientUseItem = new(); + useItem.PackSlot = packet.ReadByte("PackSlot"); + useItem.ItemSlot = packet.ReadByte("Slot"); + useItem.CastItem = packet.ReadPackedGuid128("CastItem"); + + useItem.SpellId = SpellHandler.ReadSpellCastRequest(packet, "Cast"); + } + + [Parser(Opcode.CMSG_WRAP_ITEM)] + public static void HandleWrapItem(Packet packet) + { + ReadInvUpdate(packet, "InvUpdate"); + } + [Parser(Opcode.SMSG_BAG_CLEANUP_FINISHED)] [Parser(Opcode.SMSG_INVENTORY_FULL_OVERFLOW)] public static void HandleItemZero(Packet packet) diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/MiscellaneousHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/MiscellaneousHandler.cs index b7470e450f..eef683193e 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/MiscellaneousHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/MiscellaneousHandler.cs @@ -938,6 +938,74 @@ public static void HandleRideVehicleInteract(Packet packet) packet.ReadPackedGuid128("Vehicle"); } + [Parser(Opcode.CMSG_TUTORIAL)] + public static void HandleTutorial(Packet packet) + { + var action = packet.ReadBitsE("TutorialAction", 2); + + if (action == TutorialAction.Update) + packet.ReadInt32E("TutorialBit"); + } + + [Parser(Opcode.CMSG_WHO)] + public static void HandleWhoRequest(Packet packet) + { + var areaCount = packet.ReadBits(4); + packet.ReadBit("IsFromAddon"); + + packet.ReadInt32("MinLevel"); + packet.ReadInt32("MaxLevel"); + packet.ReadInt64("RaceFilter"); + packet.ReadInt32("ClassFilter"); + + packet.ResetBitReader(); + + var nameLen = packet.ReadBits(6); + var virtualRealmNameLen = packet.ReadBits(9); + var guildLen = packet.ReadBits(7); + var guildVirtualRealmNameLen = packet.ReadBits(9); + var wordCount = packet.ReadBits(3); + + packet.ReadBit("ShowEnemies"); + packet.ReadBit("ShowArenaPlayers"); + packet.ReadBit("ExactName"); + var hasServerInfo = packet.ReadBit("HasServerInfo"); + packet.ResetBitReader(); + + for (var i = 0; i < wordCount; ++i) + { + var bits0 = packet.ReadBits(7); + packet.ReadWoWString("Word", bits0, i); + packet.ResetBitReader(); + } + + packet.ReadWoWString("Name", nameLen); + packet.ReadWoWString("VirtualRealmName", virtualRealmNameLen); + packet.ReadWoWString("Guild", guildLen); + packet.ReadWoWString("GuildVirtualRealmName", guildVirtualRealmNameLen); + + // WhoRequestServerInfo + if (hasServerInfo) + { + packet.ReadInt32("FactionGroup"); + packet.ReadInt32("Locale"); + packet.ReadInt32("RequesterVirtualRealmAddress"); + } + + packet.ReadUInt32("RequestID"); + packet.ReadByteE("Origin"); + + for (var i = 0; i < areaCount; ++i) + packet.ReadUInt32("Area", i); + } + + [Parser(Opcode.CMSG_WHO_IS)] + public static void HandleWhoIsRequest(Packet packet) + { + var len = packet.ReadBits(6); + packet.ReadWoWString("CharName", len); + } + [Parser(Opcode.SMSG_RESUME_COMMS)] [Parser(Opcode.CMSG_SOCIAL_CONTRACT_REQUEST)] [Parser(Opcode.CMSG_SERVER_TIME_OFFSET_REQUEST)] diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/MovementHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/MovementHandler.cs index 424c915591..d5e41a9bae 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/MovementHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/MovementHandler.cs @@ -979,7 +979,21 @@ public static void HandleMoveSplineDone(Packet packet) packet.ReadInt32("SplineID"); } + [Parser(Opcode.CMSG_SET_ACTIVE_MOVER)] + public static void HandleSetActiveMover(Packet packet) + { + packet.ReadPackedGuid128("ActiveMover"); + } + + [Parser(Opcode.CMSG_SUMMON_RESPONSE)] + public static void HandleSummonResponse(Packet packet) + { + packet.ReadPackedGuid128("SummonerGUID"); + packet.ReadBit("Accept"); + } + [Parser(Opcode.SMSG_ABORT_NEW_WORLD)] + [Parser(Opcode.CMSG_WORLD_PORT_RESPONSE)] public static void HandleAbortNewWorld(Packet packet) { } diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/NpcHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/NpcHandler.cs index 888731b838..c242b77d78 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/NpcHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/NpcHandler.cs @@ -425,5 +425,39 @@ public static void HandleBuyBankSlot(Packet packet) { packet.ReadPackedGuid128("Banker"); } + + [Parser(Opcode.CMSG_SPELL_CLICK)] + public static void HandleSpellClick(Packet packet) + { + WowGuid guid = packet.ReadPackedGuid128("SpellClickUnitGUID"); + packet.Holder.SpellClick = new() { Target = guid }; + packet.ReadBit("TryAutoDismount"); + + if (guid.GetObjectType() == ObjectType.Unit) + Storage.NpcSpellClicks.Add(guid, packet.TimeSpan); + } + + [Parser(Opcode.CMSG_SPIRIT_HEALER_ACTIVATE)] + public static void HandleSpiritHealerActivate(Packet packet) + { + CoreParsers.NpcHandler.LastGossipOption.Reset(); + CoreParsers.NpcHandler.TempGossipOptionPOI.Reset(); + CoreParsers.NpcHandler.LastGossipOption.Guid = packet.ReadPackedGuid128("Healer"); + } + + [Parser(Opcode.CMSG_TABARD_VENDOR_ACTIVATE)] + public static void HandleTabardVendorActivate(Packet packet) + { + packet.ReadPackedGuid128("Vendor"); + packet.ReadInt32("Type"); + } + + [Parser(Opcode.CMSG_TRAINER_BUY_SPELL)] + public static void HandleTrainerBuySpell(Packet packet) + { + packet.ReadPackedGuid128("TrainerGUID"); + packet.ReadInt32("TrainerID"); + packet.ReadInt32("SpellID"); + } } } diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/PetHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/PetHandler.cs index a06e00ae75..0b9a39c4db 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/PetHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/PetHandler.cs @@ -298,6 +298,14 @@ public static void HandleRequestStabledPets(Packet packet) packet.ReadPackedGuid128("StableMaster"); } + [Parser(Opcode.CMSG_SET_PET_SLOT)] + public static void HandleSetPetSlot(Packet packet) + { + packet.ReadUInt32("PetNumber"); + packet.ReadByte("DestSlot"); + packet.ReadPackedGuid128("StableMaster"); + } + [Parser(Opcode.CMSG_REQUEST_PET_INFO)] public static void HandlePetNull(Packet packet) { diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/ReputationHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/ReputationHandler.cs index a8ff41804d..c21323087b 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/ReputationHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/ReputationHandler.cs @@ -67,6 +67,31 @@ public static void HandleSetFactionStanding(Packet packet) packet.ReadBit("ShowVisual"); } + [Parser(Opcode.CMSG_SET_FACTION_AT_WAR)] + public static void HandleSetFactionAtWar(Packet packet) + { + packet.ReadUInt16("FactionIndex"); + } + + [Parser(Opcode.CMSG_SET_FACTION_INACTIVE)] + public static void HandleSetFactionInactive(Packet packet) + { + packet.ReadInt32("Index"); + packet.ReadBool("State"); + } + + [Parser(Opcode.CMSG_SET_FACTION_NOT_AT_WAR)] + public static void HandleSetFactionNotAtWar(Packet packet) + { + packet.ReadUInt16("FactionIndex"); + } + + [Parser(Opcode.CMSG_SET_WATCHED_FACTION)] + public static void HandleSetWatchedFaction(Packet packet) + { + packet.ReadInt32("FactionIndex"); + } + [Parser(Opcode.CMSG_REQUEST_FORCED_REACTIONS)] public static void HandleReputationZero(Packet packet) { diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/SpellHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/SpellHandler.cs index 2f7794d610..abb716d928 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/SpellHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/SpellHandler.cs @@ -1136,6 +1136,37 @@ public static void HandleSelfRes(Packet packet) packet.ReadInt32("SpellID"); } + [Parser(Opcode.CMSG_TOTEM_DESTROYED)] + public static void HandleTotemDestroyed(Packet packet) + { + packet.ReadByte("Slot"); + packet.ReadPackedGuid128("TotemGUID"); + } + + [Parser(Opcode.CMSG_UNLEARN_SKILL)] + public static void HandleUnlearnSkill(Packet packet) + { + packet.ReadInt32("SkillLine"); + } + + [Parser(Opcode.CMSG_UPDATE_MISSILE_TRAJECTORY)] + public static void HandleUpdateMissileTrajectory(Packet packet) + { + packet.ReadPackedGuid128("Guid"); + packet.ReadPackedGuid128("CastID"); + packet.ReadUInt16("MoveMsgID"); + packet.ReadInt32("SpellID"); + packet.ReadSingle("Pitch"); + packet.ReadSingle("Speed"); + packet.ReadVector3("FirePos"); + packet.ReadVector3("ImpactPos"); + + packet.ResetBitReader(); + var hasStatus = packet.ReadBit("HasStatus"); + if (hasStatus) + Substructures.MovementHandler.ReadMovementStats(packet, "Status"); + } + [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/TaxiHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/TaxiHandler.cs index c9f706f2f4..8444594bdc 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/TaxiHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/TaxiHandler.cs @@ -58,7 +58,21 @@ public static void HandleEnableTaxiNode(Packet packet) packet.ReadPackedGuid128("Unit"); } + [Parser(Opcode.CMSG_SET_TAXI_BENCHMARK_MODE)] + public static void HandleSetTaxiBenchmarkMode(Packet packet) + { + packet.ReadBool("Activate"); + } + + [Parser(Opcode.CMSG_TAXI_NODE_STATUS_QUERY)] + [Parser(Opcode.CMSG_TAXI_QUERY_AVAILABLE_NODES)] + public static void HandleTaxinodeStatusQuery(Packet packet) + { + packet.ReadPackedGuid128("UnitGUID"); + } + [Parser(Opcode.SMSG_NEW_TAXI_PATH)] + [Parser(Opcode.CMSG_TAXI_REQUEST_EARLY_LANDING)] public static void HandleTaxiNull(Packet packet) { } diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/TicketHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/TicketHandler.cs index 5762fc11d8..7aa1a63b62 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/TicketHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/TicketHandler.cs @@ -1,4 +1,5 @@ -using WowPacketParser.Enums; +using System; +using WowPacketParser.Enums; using WowPacketParser.Misc; using WowPacketParser.Parsing; @@ -24,6 +25,165 @@ public static void ReadComplaintChat(Packet packet, params object[] indexes) packet.ReadWoWString("MessageLog", len); } + public static void ReadSupportTicketHeader(Packet packet, params object[] indexes) + { + packet.ReadInt32("MapID", indexes); + packet.ReadVector3("Position", indexes); + packet.ReadSingle("Facing", indexes); + packet.ReadInt32("Program", indexes); + } + + public static void ReadSupportTicketChatLine(Packet packet, params object[] idx) + { + packet.ReadTime64("Timestamp", idx); + + var textLength = packet.ReadBits("TextLength", 12, idx); + packet.ResetBitReader(); + packet.ReadWoWString("Text", textLength, idx); + } + + public static void ReadSupportTicketChatLog(Packet packet, params object[] idx) + { + var linesCount = packet.ReadUInt32("LinesCount", idx); + var hasReportLineIndex = packet.ReadBit("HasReportLineIndex", idx); + packet.ResetBitReader(); + + for (int i = 0; i < linesCount; ++i) + ReadSupportTicketChatLine(packet, idx, "Lines", i); + + if (hasReportLineIndex) + packet.ReadUInt32("ReportLineIndex", idx); + } + + public static void ReadSupportTicketHorusChatLine(Packet packet, params object[] idx) + { + packet.ReadTime64("Timestamp", idx); + packet.ReadPackedGuid128("AuthorGuid", idx); + + var hasClubID = packet.ReadBit(); + var hasChannelGUID = packet.ReadBit(); + var hasRealmAddress = packet.ReadBit(); + var hasSlashCmd = packet.ReadBit(); + var textLen = packet.ReadBits(12); + + if (hasClubID) + packet.ReadUInt64("ClubID", idx); + if (hasChannelGUID) + packet.ReadPackedGuid128("ChannelGUID", idx); + if (hasRealmAddress) + { + packet.ReadUInt32("VirtualRealmAddress", idx); + packet.ReadUInt16("field_4", idx); + packet.ReadByte("field_6", idx); + } + if (hasSlashCmd) + packet.ReadInt32("SlashCmd", idx); + + packet.ReadWoWString("Text", textLen, idx); + } + + public static void ReadSupportTicketHorusChatLog(Packet packet, params object[] idx) + { + var linesCount = packet.ReadUInt32("LinesCount", idx); + packet.ResetBitReader(); + + for (int i = 0; i < linesCount; ++i) + ReadSupportTicketHorusChatLine(packet, idx, "Lines", i); + } + + public static void ReadCliSupportTicketMailInfo(Packet packet, params object[] idx) + { + packet.ReadInt64("MailID", idx); + + var bodyLength = packet.ReadBits("MailBodyLength", 13, idx); + var subjectLength = packet.ReadBits("MailSubjectLength", 9, idx); + + packet.ResetBitReader(); + + packet.ReadWoWString("MailBody", bodyLength, idx); + packet.ReadWoWString("MailSubject", subjectLength, idx); + } + + public static void ReadCliSupportTicketCalendarEventInfo(Packet packet, params object[] idx) + { + packet.ReadUInt64("EventID", idx); + packet.ReadUInt64("InviteID", idx); + + var eventTitleLength = packet.ReadBits("EventTitleLength", 8, idx); + + packet.ResetBitReader(); + + packet.ReadWoWString("EventTitle", eventTitleLength, idx); + } + + public static void ReadCliSupportTicketPetInfo(Packet packet, params object[] idx) + { + packet.ReadPackedGuid128("PetGUID", idx); + + var petNameLength = packet.ReadBits("PetNameLength", 8, idx); + + packet.ResetBitReader(); + + packet.ReadWoWString("PetName", petNameLength, idx); + } + + public static void ReadCliSupportTicketGuildInfo(Packet packet, params object[] idx) + { + var guildNameLength = packet.ReadBits("GuildNameLength", 7, idx); + packet.ResetBitReader(); + + packet.ReadPackedGuid128("GuildGUID", idx); + packet.ReadWoWString("GuildName", guildNameLength, idx); + } + + public static void ReadCliSupportTicketLFGListSearchResult(Packet packet, params object[] idx) + { + LfgHandler.ReadCliRideTicket(packet, "RideTicket", idx); + packet.ReadUInt32("GroupFinderActivityID", idx); + packet.ReadByte("Unknown1007", idx); + + packet.ReadPackedGuid128("LastTitleAuthorGuid", idx); + packet.ReadPackedGuid128("LastDescriptionAuthorGuid", idx); + packet.ReadPackedGuid128("LastVoiceChatAuthorGuid", idx); + packet.ReadPackedGuid128("ListingCreatorGuid", idx); + packet.ReadPackedGuid128("Unknown735", idx); + + var titleLength = packet.ReadBits(10); + var descriptionLength = packet.ReadBits(11); + var voiceChatLength = packet.ReadBits(8); + + packet.ResetBitReader(); + + packet.ReadWoWString("Title", titleLength, idx); + packet.ReadWoWString("Description", descriptionLength, idx); + packet.ReadWoWString("VoiceChat", voiceChatLength, idx); + } + + public static void ReadCliSupportTicketLFGListApplicant(Packet packet, params object[] idx) + { + LfgHandler.ReadCliRideTicket(packet, "RideTicket", idx); + + var length = packet.ReadBits(9); + packet.ResetBitReader(); + packet.ReadWoWString("Comment", length, idx); + } + + public static void ReadClubFinderResult(Packet packet, params object[] indexes) + { + packet.ReadUInt64("ClubFinderPostingID", indexes); + packet.ReadUInt64("ClubID ", indexes); + packet.ReadPackedGuid128("ClubFinderGUID", indexes); + var nameLen = packet.ReadBits(12); + packet.ReadWoWString("ClubName", nameLen, indexes); + } + + public static void ReadUnused910(Packet packet, params object[] indexes) + { + var len = packet.ReadBits(7); + packet.ReadPackedGuid128("field_104", indexes); + packet.ReadWoWString("field_0", len, indexes); + } + [Parser(Opcode.SMSG_GM_TICKET_CASE_STATUS)] public static void HandleGMTicketCaseStatus(Packet packet) { @@ -87,6 +247,76 @@ public static void HandleGMTicketAcknowledgeSurvey(Packet packet) packet.ReadInt32("CaseID"); } + [Parser(Opcode.CMSG_SUBMIT_USER_FEEDBACK)] + public static void HandleSubmitUserFeedback(Packet packet) + { + ReadSupportTicketHeader(packet, "Header"); + + var noteLen = packet.ReadBits(24); + packet.ReadBit("IsSuggestion"); + packet.ReadDynamicString("Note", noteLen); + } + + [Parser(Opcode.CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT)] + public static void HandleSubmitComplaints(Packet packet) + { + ReadSupportTicketHeader(packet, "Header"); + + packet.ReadPackedGuid128("TargetCharacterGUID"); + packet.ReadInt32("ReportType"); + packet.ReadInt32("MajorCategory"); + packet.ReadInt32("MinorCategoryFlags"); + + ReadSupportTicketChatLog(packet, "ChatLog"); + + var noteLength = packet.ReadBits("NoteLength", 10); + var hasMailInfo = packet.ReadBit("HasMailInfo"); + var hasCalendarInfo = packet.ReadBit("HasCalendarInfo"); + var hasPetInfo = packet.ReadBit("HasPetInfo"); + var hasGuildInfo = packet.ReadBit("HasGuildInfo"); + var hasLFGListSearchResult = packet.ReadBit("HasLFGListSearchResult"); + var hasLFGListApplicant = packet.ReadBit("HasLFGListApplicant"); + var hasClubMessage = packet.ReadBit("HasClubMessage"); + var hasClubFinderResult = packet.ReadBit("HasClubFinderResult"); + bool hasUnk910 = packet.ReadBit(); + + packet.ResetBitReader(); + + if (hasClubMessage) + { + packet.ReadBit("IsUsingPlayerVoice"); + packet.ResetBitReader(); + } + + ReadSupportTicketHorusChatLog(packet, "HorusChatLog"); + + packet.ReadWoWString("Note", noteLength); + + if (hasMailInfo) + ReadCliSupportTicketMailInfo(packet, "MailInfo"); + + if (hasCalendarInfo) + ReadCliSupportTicketCalendarEventInfo(packet, "CalendarInfo"); + + if (hasPetInfo) + ReadCliSupportTicketPetInfo(packet, "PetInfo"); + + if (hasGuildInfo) + ReadCliSupportTicketGuildInfo(packet, "GuidInfo"); + + if (hasLFGListSearchResult) + ReadCliSupportTicketLFGListSearchResult(packet, "LFGListSearchResult"); + + if (hasLFGListApplicant) + ReadCliSupportTicketLFGListApplicant(packet, "LFGListApplicant"); + + if (hasClubFinderResult) + ReadClubFinderResult(packet, "ClubFinderResult"); + + if (hasUnk910) + ReadUnused910(packet, "Unused910"); + } + [Parser(Opcode.CMSG_GM_TICKET_GET_TICKET)] [Parser(Opcode.CMSG_GM_TICKET_GET_CASE_STATUS)] [Parser(Opcode.CMSG_GM_TICKET_GET_SYSTEM_STATUS)] diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/TradeHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/TradeHandler.cs index e0b3c5458a..7f4595dadf 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/TradeHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/TradeHandler.cs @@ -114,10 +114,25 @@ public static void HandleInitiateTrade(Packet packet) packet.ReadPackedGuid128("GUID"); } + [Parser(Opcode.CMSG_SET_TRADE_GOLD)] + public static void HandleTradeGold(Packet packet) + { + packet.ReadUInt64("Coinage"); + } + + [Parser(Opcode.CMSG_SET_TRADE_ITEM)] + public static void HandleTradeItem(Packet packet) + { + packet.ReadByte("TradeSlot"); + packet.ReadByte("PackSlot"); + packet.ReadByte("ItemSlotInPack"); + } + [Parser(Opcode.CMSG_BEGIN_TRADE)] [Parser(Opcode.CMSG_BUSY_TRADE)] [Parser(Opcode.CMSG_CANCEL_TRADE)] [Parser(Opcode.CMSG_IGNORE_TRADE)] + [Parser(Opcode.CMSG_UNACCEPT_TRADE)] public static void HandleTradeNull(Packet packet) { } diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/TransmogrificationHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/TransmogrificationHandler.cs new file mode 100644 index 0000000000..a317c41b5e --- /dev/null +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/TransmogrificationHandler.cs @@ -0,0 +1,30 @@ +using WowPacketParser.Enums; +using WowPacketParser.Misc; +using WowPacketParser.Parsing; + +namespace WowPacketParserModule.V4_4_0_54481.Parsers +{ + public static class TransmogrificationHandler + { + public static void ReadTransmogrifyItem(Packet packet, params object[] index) + { + packet.ReadInt32("ItemModifiedAppearanceID"); + packet.ReadUInt32("Slot"); + packet.ReadInt32("SpellItemEnchantmentId"); + packet.ReadInt32("SecondaryItemModifiedAppearanceID"); + } + + [Parser(Opcode.CMSG_TRANSMOGRIFY_ITEMS)] + public static void HandleTransmogrifyItems(Packet packet) + { + var itemCount = packet.ReadInt32("ItemsCount"); + packet.ReadPackedGuid128("Npc"); + + for (int i = 0; i < itemCount; i++) + ReadTransmogrifyItem(packet, i); + + packet.ResetBitReader(); + packet.ReadBit("CurrentSpecOnly"); + } + } +} diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/VoidStorageHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/VoidStorageHandler.cs index 1719cd1d5b..50144c7750 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/VoidStorageHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/VoidStorageHandler.cs @@ -59,6 +59,34 @@ public static void HandleVoidStorageQuery(Packet packet) packet.ReadPackedGuid128("Guid"); } + [Parser(Opcode.CMSG_SWAP_VOID_ITEM)] + public static void HandleVoidSwapItem(Packet packet) + { + packet.ReadPackedGuid128("Npc"); + packet.ReadPackedGuid128("VoidItem"); + packet.ReadInt32("DstSlot"); + } + + [Parser(Opcode.CMSG_UNLOCK_VOID_STORAGE)] + public static void HandleVoidStorageUnlock(Packet packet) + { + packet.ReadPackedGuid128("Npc"); + } + + [Parser(Opcode.CMSG_VOID_STORAGE_TRANSFER)] + public static void HandleVoidStorageTransfer(Packet packet) + { + packet.ReadPackedGuid128("Npc"); + var int48 = packet.ReadInt32("DepositsCount"); + var int32 = packet.ReadInt32("WithdrawalsCount"); + + for (int i = 0; i < int48; i++) + packet.ReadPackedGuid128("Deposits", i); + + for (int i = 0; i < int32; i++) + packet.ReadPackedGuid128("Withdrawals", i); + } + [Parser(Opcode.SMSG_VOID_STORAGE_FAILED)] public static void HandleVoidStorageZero(Packet packet) {