Skip to content

Commit e8739fe

Browse files
committed
Add multiple 4.4.0 CMSG handler
CMSG_BATTLE_PET_REQUEST_JOURNAL_LOCK CMSG_BATTLE_PET_SET_BATTLE_SLOT CMSG_BATTLE_PET_SET_FLAGS CMSG_BATTLE_PET_UPDATE_NOTIFY CMSG_BEGIN_TRADE CMSG_BLACK_MARKET_OPEN CMSG_BUG_REPORT CMSG_BUSY_TRADE CMSG_BUY_BACK_ITEM CMSG_BUY_BANK_SLOT CMSG_BUY_ITEM CMSG_CALENDAR_ADD_EVENT CMSG_CALENDAR_COMMUNITY_INVITE CMSG_CALENDAR_COMPLAIN CMSG_CALENDAR_COPY_EVENT CMSG_CALENDAR_EVENT_SIGN_UP CMSG_CALENDAR_GET CMSG_CALENDAR_GET_EVENT CMSG_CALENDAR_INVITE CMSG_CALENDAR_MODERATOR_STATUS CMSG_CALENDAR_REMOVE_EVENT CMSG_CALENDAR_REMOVE_INVITE CMSG_CALENDAR_RSVP CMSG_CALENDAR_STATUS CMSG_CALENDAR_UPDATE_EVENT CMSG_CANCEL_AURA CMSG_CANCEL_AUTO_REPEAT_SPELL CMSG_CANCEL_CHANNELLING CMSG_CANCEL_GROWTH_AURA CMSG_CANCEL_MOUNT_AURA CMSG_CANCEL_QUEUED_SPELL CMSG_CANCEL_TEMP_ENCHANTMENT CMSG_CANCEL_TRADE CMSG_CAN_DUEL CMSG_CHANGE_REALM_TICKET CMSG_CHANGE_SUB_GROUP CMSG_CHARACTER_RENAME_REQUEST CMSG_CHAR_CUSTOMIZE CMSG_CHAR_RACE_OR_FACTION_CHANGE CMSG_CHAT_ADDON_MESSAGE CMSG_CHAT_ADDON_MESSAGE_TARGETED
1 parent f6b6a26 commit e8739fe

14 files changed

Lines changed: 383 additions & 9 deletions

File tree

WowPacketParser/Enums/Version/V4_4_0_54481/Opcodes.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public static BiDictionary<Opcode, int> Opcodes(Direction direction)
9797
{ Opcode.CMSG_BATTLE_PET_SET_BATTLE_SLOT, 0x362A },
9898
{ Opcode.CMSG_BATTLE_PET_SET_FLAGS, 0x362D },
9999
{ Opcode.CMSG_BATTLE_PET_SUMMON, 0x3626 },
100-
{ Opcode.CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY, 0x31E2 },
100+
{ Opcode.CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY, 0x31E2 }, // NYI
101101
{ Opcode.CMSG_BATTLE_PET_UPDATE_NOTIFY, 0x31E1 },
102102
{ Opcode.CMSG_BEGIN_TRADE, 0x3158 },
103103
{ Opcode.CMSG_BINDER_ACTIVATE, 0x34B2 },
@@ -107,7 +107,7 @@ public static BiDictionary<Opcode, int> Opcodes(Direction direction)
107107
{ Opcode.CMSG_BUY_BACK_ITEM, 0x34A4 },
108108
{ Opcode.CMSG_BUY_BANK_SLOT, 0x34B4 },
109109
{ Opcode.CMSG_BUY_ITEM, 0x34A3 },
110-
{ Opcode.CMSG_BUY_STABLE_SLOT, 0x316C },
110+
{ Opcode.CMSG_BUY_STABLE_SLOT, 0x316C }, // NYI
111111
{ Opcode.CMSG_CALENDAR_ADD_EVENT, 0x367B },
112112
{ Opcode.CMSG_CALENDAR_COMMUNITY_INVITE, 0x366F },
113113
{ Opcode.CMSG_CALENDAR_COMPLAIN, 0x3677 },
@@ -133,15 +133,15 @@ public static BiDictionary<Opcode, int> Opcodes(Direction direction)
133133
{ Opcode.CMSG_CANCEL_TEMP_ENCHANTMENT, 0x34F2 },
134134
{ Opcode.CMSG_CANCEL_TRADE, 0x315D },
135135
{ Opcode.CMSG_CAN_DUEL, 0x3660 },
136-
{ Opcode.CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE, 0x370B },
136+
{ Opcode.CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE, 0x370B }, // NYI
137137
{ Opcode.CMSG_CAST_SPELL, 0x329E },
138138
{ Opcode.CMSG_CHANGE_REALM_TICKET, 0x36FD },
139139
{ Opcode.CMSG_CHANGE_SUB_GROUP, 0x364B },
140-
{ Opcode.CMSG_CHARACTER_CHECK_UPGRADE, 0x36CA },
140+
{ Opcode.CMSG_CHARACTER_CHECK_UPGRADE, 0x36CA }, // NYI
141141
{ Opcode.CMSG_CHARACTER_RENAME_REQUEST, 0x36C5 },
142-
{ Opcode.CMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_REQUEST, 0x36C8 },
143-
{ Opcode.CMSG_CHARACTER_UPGRADE_START, 0x36C9 },
144-
{ Opcode.CMSG_CHAR_CREATE_FINALIZE_REINCARNATION, 0x375B },
142+
{ Opcode.CMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_REQUEST, 0x36C8 }, // NYI
143+
{ Opcode.CMSG_CHARACTER_UPGRADE_START, 0x36C9 }, // NYI
144+
{ Opcode.CMSG_CHAR_CREATE_FINALIZE_REINCARNATION, 0x375B }, // NYI
145145
{ Opcode.CMSG_CHAR_CUSTOMIZE, 0x3688 },
146146
{ Opcode.CMSG_CHAR_DELETE, 0x3699 },
147147
{ Opcode.CMSG_CHAR_RACE_OR_FACTION_CHANGE, 0x368E },

WowPacketParserModule.V4_4_0_54481/Parsers/BattlePetHandler.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,31 @@ public static void HandleBattlePetClearFanfare(Packet packet)
144144
packet.ReadPackedGuid128("BattlePetGUID");
145145
}
146146

147+
[Parser(Opcode.CMSG_BATTLE_PET_SET_BATTLE_SLOT)]
148+
public static void HandleBattlePetSetBattleSlot(Packet packet)
149+
{
150+
packet.ReadPackedGuid128("BattlePetGUID");
151+
packet.ReadByte("SlotIndex");
152+
}
153+
154+
[Parser(Opcode.CMSG_BATTLE_PET_SET_FLAGS)]
155+
public static void HandleBattlePetSetFlags(Packet packet)
156+
{
157+
packet.ReadPackedGuid128("BattlePetGUID");
158+
packet.ReadUInt16("Flags");
159+
packet.ReadBits("ControlType", 2);
160+
}
161+
162+
[Parser(Opcode.CMSG_BATTLE_PET_UPDATE_NOTIFY)]
163+
public static void HandleBattlePetUpdateNotify(Packet packet)
164+
{
165+
packet.ReadPackedGuid128("BattlePetGUID");
166+
}
167+
147168
[Parser(Opcode.SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED)]
148169
[Parser(Opcode.SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED)]
149170
[Parser(Opcode.CMSG_BATTLE_PET_REQUEST_JOURNAL)]
171+
[Parser(Opcode.CMSG_BATTLE_PET_REQUEST_JOURNAL_LOCK)]
150172
public static void HandleBattlePetZero(Packet packet)
151173
{
152174
}

WowPacketParserModule.V4_4_0_54481/Parsers/BlackMarketHandler.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,5 +47,11 @@ public static void HandleBlackMarketRequestItemsResult(Packet packet)
4747
for (var i = 0; i < count; ++i)
4848
ReadBlackMarketItem(packet, "Items", i);
4949
}
50+
51+
[Parser(Opcode.CMSG_BLACK_MARKET_OPEN)]
52+
public static void HandleBlackMarketOpen(Packet packet)
53+
{
54+
packet.ReadPackedGuid128("NpcGUID");
55+
}
5056
}
5157
}

WowPacketParserModule.V4_4_0_54481/Parsers/CalenderHandler.cs

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,66 @@ public static void ReadCalendarEventInviteInfo(Packet packet, params object[] in
7676
packet.ReadWoWString("Notes", lenNotes, indexes);
7777
}
7878

79+
public static void ReadCalendarAddEventInviteInfo(Packet packet, params object[] index)
80+
{
81+
packet.ReadPackedGuid128("Guid", index);
82+
packet.ReadByteE<CalendarEventStatus>("Status", index);
83+
packet.ReadByteE<CalendarModerationRank>("Moderator", index);
84+
85+
var unused_801_1 = packet.ReadBit();
86+
var unused_801_2 = packet.ReadBit();
87+
var unused_801_3 = packet.ReadBit();
88+
89+
if (unused_801_1)
90+
packet.ReadPackedGuid128("Unused_801_1");
91+
92+
if (unused_801_2)
93+
packet.ReadUInt64("Unused_801_2");
94+
95+
if (unused_801_3)
96+
packet.ReadUInt64("Unused_801_3");
97+
98+
}
99+
100+
public static void ReadCalendarEventInfo(Packet packet, params object[] index)
101+
{
102+
packet.ReadUInt64("ClubID", index);
103+
packet.ReadByteE<CalendarEventType>("EventType", index);
104+
packet.ReadInt32("TextureID", index);
105+
packet.ReadTime("Time", index);
106+
packet.ReadInt32E<CalendarFlag>("Flags", index);
107+
108+
var inviteInfoCount = packet.ReadInt32();
109+
110+
packet.ResetBitReader();
111+
var TitleLen = packet.ReadBits(8);
112+
var DescriptionLen = packet.ReadBits(11);
113+
114+
for (int i = 0; i < inviteInfoCount; i++)
115+
ReadCalendarAddEventInviteInfo(packet, index, i);
116+
117+
packet.ReadWoWString("Title", TitleLen, index);
118+
packet.ReadWoWString("Description", DescriptionLen, index);
119+
}
120+
121+
public static void ReadCalendarUpdateEventInfo(Packet packet, params object[] index)
122+
{
123+
packet.ReadUInt64("ClubID", index);
124+
packet.ReadUInt64("EventID", index);
125+
packet.ReadUInt64("ModeratorID", index);
126+
packet.ReadByteE<CalendarEventType>("EventType", index);
127+
packet.ReadInt32("TextureID", index);
128+
packet.ReadTime("Time", index);
129+
packet.ReadInt32E<CalendarFlag>("Flags", index);
130+
131+
packet.ResetBitReader();
132+
var TitleLen = packet.ReadBits(8);
133+
var DescriptionLen = packet.ReadBits(11);
134+
135+
packet.ReadWoWString("Title", TitleLen, index);
136+
packet.ReadWoWString("Description", DescriptionLen, index);
137+
}
138+
79139
[Parser(Opcode.SMSG_CALENDAR_COMMAND_RESULT)]
80140
public static void HandleCalendarCommandResult(Packet packet)
81141
{
@@ -319,8 +379,116 @@ public static void HandleSendCalendarNumPending(Packet packet)
319379
packet.ReadUInt32("NumPending");
320380
}
321381

382+
[Parser(Opcode.CMSG_CALENDAR_ADD_EVENT)]
383+
public static void HandleCalendarAddEvent(Packet packet)
384+
{
385+
ReadCalendarEventInfo(packet);
386+
packet.ReadInt32("MaxSize");
387+
}
388+
389+
[Parser(Opcode.CMSG_CALENDAR_COMMUNITY_INVITE)]
390+
public static void HandleUserClientCalendarCommunityInvite(Packet packet)
391+
{
392+
packet.ReadUInt64("ClubID");
393+
packet.ReadByte("MinLevel");
394+
packet.ReadByte("MaxLevel");
395+
packet.ReadByte("MaxRankOrder");
396+
}
397+
398+
[Parser(Opcode.CMSG_CALENDAR_COMPLAIN)]
399+
public static void HandleCalenderComplain(Packet packet)
400+
{
401+
packet.ReadPackedGuid128("InvitedByGUID");
402+
packet.ReadUInt64("EventID");
403+
packet.ReadUInt64("InviteID");
404+
}
405+
406+
[Parser(Opcode.CMSG_CALENDAR_COPY_EVENT)]
407+
public static void HandleCalenderCopyEvent(Packet packet)
408+
{
409+
packet.ReadUInt64("EventID");
410+
packet.ReadUInt64("ModeratorID");
411+
packet.ReadUInt64("EventClubID");
412+
packet.ReadPackedTime("Date");
413+
}
414+
415+
[Parser(Opcode.CMSG_CALENDAR_EVENT_SIGN_UP)]
416+
public static void HandleCalendarEventSignup(Packet packet)
417+
{
418+
packet.ReadInt64("EventID");
419+
packet.ReadInt64("ClubID");
420+
packet.ResetBitReader();
421+
packet.ReadBit("Tentative");
422+
}
423+
424+
[Parser(Opcode.CMSG_CALENDAR_GET_EVENT)]
425+
public static void HandleGetCalendarEvent(Packet packet)
426+
{
427+
packet.ReadUInt64("EventID");
428+
}
429+
430+
[Parser(Opcode.CMSG_CALENDAR_INVITE)]
431+
public static void HandleCalendarInvite(Packet packet)
432+
{
433+
packet.ReadUInt64("EventID");
434+
packet.ReadUInt64("ModeratorID");
435+
packet.ReadUInt64("ClubID");
436+
437+
var nameLen = packet.ReadBits(9);
438+
packet.ReadBit("Creating");
439+
packet.ReadBit("IsSignUp");
440+
packet.ResetBitReader();
441+
442+
packet.ReadWoWString("Name", nameLen);
443+
}
444+
445+
[Parser(Opcode.CMSG_CALENDAR_MODERATOR_STATUS)]
446+
[Parser(Opcode.CMSG_CALENDAR_STATUS)]
447+
public static void HandleUserClientCalendarModeratorStatus(Packet packet)
448+
{
449+
packet.ReadPackedGuid128("Guid");
450+
packet.ReadUInt64("EventID");
451+
packet.ReadUInt64("InviteID");
452+
packet.ReadUInt64("ModeratorID");
453+
packet.ReadByteE<CalendarEventStatus>("Status");
454+
}
455+
456+
[Parser(Opcode.CMSG_CALENDAR_REMOVE_EVENT)]
457+
public static void HandleRemoveCalendarEvent(Packet packet)
458+
{
459+
packet.ReadUInt64("EventID");
460+
packet.ReadUInt64("ModeratorID");
461+
packet.ReadUInt64("ClubID");
462+
packet.ReadInt32E<CalendarFlag>("Flags");
463+
}
464+
465+
[Parser(Opcode.CMSG_CALENDAR_REMOVE_INVITE)]
466+
public static void HandleCalendarRemoveInvite(Packet packet)
467+
{
468+
packet.ReadPackedGuid128("Guid");
469+
packet.ReadUInt64("InviteID");
470+
packet.ReadUInt64("ModeratorID");
471+
packet.ReadUInt64("EventID");
472+
}
473+
474+
[Parser(Opcode.CMSG_CALENDAR_RSVP)]
475+
public static void HandleCalendarRSVP(Packet packet)
476+
{
477+
packet.ReadUInt64("EventID");
478+
packet.ReadUInt64("InviteID");
479+
packet.ReadByte("Status");
480+
}
481+
482+
[Parser(Opcode.CMSG_CALENDAR_UPDATE_EVENT)]
483+
public static void HandleUpdateCalendarEvent(Packet packet)
484+
{
485+
ReadCalendarUpdateEventInfo(packet);
486+
packet.ReadUInt32("MaxSize");
487+
}
488+
322489
[Parser(Opcode.SMSG_CALENDAR_CLEAR_PENDING_ACTION)]
323490
[Parser(Opcode.CMSG_CALENDAR_GET_NUM_PENDING)]
491+
[Parser(Opcode.CMSG_CALENDAR_GET)]
324492
public static void HandleCalenderZero(Packet packet)
325493
{
326494
}

WowPacketParserModule.V4_4_0_54481/Parsers/CharacterHandler.cs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -540,5 +540,50 @@ public static void HandleAlterAppearance(Packet packet)
540540
for (var i = 0; i < customizationsCount; i++)
541541
ReadChrCustomizationChoice(packet, "Customizations", i);
542542
}
543+
544+
[Parser(Opcode.CMSG_CHARACTER_RENAME_REQUEST)]
545+
public static void HandleClientCharRename(Packet packet)
546+
{
547+
packet.ReadPackedGuid128("Guid");
548+
549+
packet.ResetBitReader();
550+
551+
var newNameLen = packet.ReadBits(6);
552+
packet.ReadWoWString("NewName", newNameLen);
553+
}
554+
555+
[Parser(Opcode.CMSG_CHAR_CUSTOMIZE)]
556+
public static void HandleClientCharCustomize(Packet packet)
557+
{
558+
packet.ReadPackedGuid128("CharGUID");
559+
560+
packet.ReadByte("SexID");
561+
var customizationCount = packet.ReadUInt32("CustomizationCount");
562+
563+
for (var j = 0u; j < customizationCount; ++j)
564+
ReadChrCustomizationChoice(packet, "Customizations", j);
565+
566+
packet.ResetBitReader();
567+
var nameLen = packet.ReadBits(6);
568+
packet.ReadWoWString("CharName", nameLen);
569+
}
570+
571+
[Parser(Opcode.CMSG_CHAR_RACE_OR_FACTION_CHANGE)]
572+
public static void HandleCharRaceOrFactionChange(Packet packet)
573+
{
574+
packet.ReadBit("FactionChange");
575+
576+
var nameLen = packet.ReadBits(6);
577+
578+
packet.ReadPackedGuid128("Guid");
579+
packet.ReadByte("SexID");
580+
packet.ReadByteE<Race>("RaceID");
581+
packet.ReadByteE<Race>("InitialRaceID");
582+
var customizationsCount = packet.ReadUInt32("CustomizationsCount");
583+
packet.ReadWoWString("Name", nameLen);
584+
585+
for (var i = 0; i < customizationsCount; i++)
586+
ReadChrCustomizationChoice(packet, "Customizations", i);
587+
}
543588
}
544589
}

WowPacketParserModule.V4_4_0_54481/Parsers/ChatHandler.cs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,18 @@ namespace WowPacketParserModule.V4_4_0_54481.Parsers
99
{
1010
public static class ChatHandler
1111
{
12+
public static void ReadChatAddonMessageParams(Packet packet, params object[] indexes)
13+
{
14+
packet.ResetBitReader();
15+
var prefixLen = packet.ReadBits(5);
16+
var textLen = packet.ReadBits(8);
17+
packet.ReadBit("IsLogged", indexes);
18+
19+
packet.ReadInt32("Type", indexes);
20+
packet.ReadWoWString("Prefix", prefixLen, indexes);
21+
packet.ReadWoWString("Text", textLen, indexes);
22+
}
23+
1224
[Parser(Opcode.SMSG_CHAT)]
1325
public static void HandleServerChatMessage(Packet packet)
1426
{
@@ -175,5 +187,30 @@ public static void HandleUpdateAadcStatusResponse(Packet packet)
175187
packet.ReadBit("Success");
176188
packet.ReadBit("ChatDisabled");
177189
}
190+
191+
[Parser(Opcode.CMSG_CHAT_ADDON_MESSAGE)]
192+
public static void HandleAddonMessage(Packet packet)
193+
{
194+
ReadChatAddonMessageParams(packet);
195+
}
196+
197+
[Parser(Opcode.CMSG_CHAT_ADDON_MESSAGE_TARGETED)]
198+
public static void HandleChatAddonMessageTargeted(Packet packet)
199+
{
200+
ReadChatAddonMessageParams(packet, "Params");
201+
202+
packet.ReadPackedGuid128("ChannelGUID");
203+
packet.ReadPackedGuid128("PlayerGUID");
204+
packet.ReadUInt32("PlayerVirtualRealmAddress");
205+
206+
var playerNameLen = packet.ReadBits(6);
207+
var channelNameLen = packet.ReadBits(6);
208+
209+
if (playerNameLen > 1)
210+
packet.ReadDynamicString("PlayerName", playerNameLen);
211+
212+
if (channelNameLen > 1)
213+
packet.ReadDynamicString("ChannelName", channelNameLen);
214+
}
178215
}
179216
}

WowPacketParserModule.V4_4_0_54481/Parsers/CombatHandler.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,13 @@ public static void HandleAttackSwing(Packet packet)
154154
packet.ReadPackedGuid128("Victim");
155155
}
156156

157+
[Parser(Opcode.CMSG_CAN_DUEL)]
158+
public static void HandleCanDuel(Packet packet)
159+
{
160+
packet.ReadPackedGuid128("TargetGUID");
161+
packet.ReadBit("ToTheDeath");
162+
}
163+
157164
[Parser(Opcode.SMSG_CANCEL_COMBAT)]
158165
[Parser(Opcode.SMSG_DUEL_IN_BOUNDS)]
159166
[Parser(Opcode.SMSG_DUEL_OUT_OF_BOUNDS)]

WowPacketParserModule.V4_4_0_54481/Parsers/GroupHandler.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,17 @@ public static void HandleSendRaidTargetUpdateSingle(Packet packet)
320320
packet.ReadPackedGuid128("ChangedBy");
321321
}
322322

323+
[Parser(Opcode.CMSG_CHANGE_SUB_GROUP)]
324+
public static void HandleChangeSubGroup(Packet packet)
325+
{
326+
packet.ReadPackedGuid128("Target");
327+
packet.ReadByte("NewSubGroup");
328+
329+
var hasPartyIndex = packet.ReadBit();
330+
if (hasPartyIndex)
331+
packet.ReadByte("PartyIndex");
332+
}
333+
323334
[Parser(Opcode.CMSG_REQUEST_RAID_INFO)]
324335
[Parser(Opcode.SMSG_GROUP_DESTROYED)]
325336
[Parser(Opcode.SMSG_GROUP_UNINVITE)]

0 commit comments

Comments
 (0)