Skip to content

Commit 5df06ad

Browse files
committed
Add 5.5.0 opcode handlers
SMSG_CALENDAR_SEND_CALENDAR SMSG_CALENDAR_SEND_EVENT SMSG_CALENDAR_COMMUNITY_INVITE SMSG_CALENDAR_INVITE_ADDED SMSG_CALENDAR_INVITE_REMOVED SMSG_CALENDAR_INVITE_STATUS SMSG_CALENDAR_MODERATOR_STATUS SMSG_CALENDAR_INVITE_ALERT SMSG_CALENDAR_INVITE_STATUS_ALERT SMSG_CALENDAR_INVITE_REMOVED_ALERT SMSG_CALENDAR_EVENT_REMOVED_ALERT SMSG_CALENDAR_EVENT_UPDATED_ALERT SMSG_CALENDAR_INVITE_NOTES SMSG_CALENDAR_INVITE_NOTES_ALERT SMSG_CALENDAR_RAID_LOCKOUT_ADDED SMSG_CALENDAR_RAID_LOCKOUT_REMOVED SMSG_CALENDAR_RAID_LOCKOUT_UPDATED SMSG_CALENDAR_SEND_NUM_PENDING SMSG_CALENDAR_COMMAND_RESULT SMSG_CALENDAR_CLEAR_PENDING_ACTION SMSG_AI_REACTION SMSG_EQUIPMENT_SET_ID SMSG_OFFER_PETITION_ERROR SMSG_PETITION_SHOW_LIST SMSG_PETITION_SHOW_SIGNATURES SMSG_SET_DUNGEON_DIFFICULTY SMSG_UPDATE_INSTANCE_OWNERSHIP SMSG_RESET_FAILED_NOTIFY SMSG_CROSSED_INEBRIATION_THRESHOLD SMSG_SELL_RESPONSE SMSG_BUY_SUCCEEDED SMSG_BUY_FAILED SMSG_SPECIAL_MOUNT_ANIM SMSG_WHO_IS SMSG_WEATHER SMSG_START_LIGHTNING_STORM SMSG_END_LIGHTNING_STORM SMSG_OVERRIDE_LIGHT SMSG_ENABLE_BARBER_SHOP SMSG_CONFIRM_BARBERS_CHOICE SMSG_BARBER_SHOP_RESULT SMSG_RECRUIT_A_FRIEND_FAILURE SMSG_TRIGGER_MOVIE SMSG_PET_ACTION_SOUND SMSG_PET_DISMISS_SOUND SMSG_PET_TAME_FAILURE SMSG_PET_NAME_INVALID SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION SMSG_DISMOUNT SMSG_ADD_RUNE_POWER SMSG_COOLDOWN_EVENT SMSG_CLEAR_COOLDOWN SMSG_TOTEM_CREATED SMSG_TOTEM_MOVED SMSG_SUMMON_CANCEL SMSG_SHOW_TAXI_NODES SMSG_GM_TICKET_SYSTEM_STATUS SMSG_GM_TICKET_CASE_STATUS SMSG_COMPLAINT_RESULT
1 parent 9996f7e commit 5df06ad

12 files changed

Lines changed: 716 additions & 1 deletion

File tree

WowPacketParser/Enums/Version/V5_5_0_61735/Opcodes.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1904,7 +1904,7 @@ public static BiDictionary<Opcode, int> Opcodes(Direction direction)
19041904
{ Opcode.SMSG_TITLE_EARNED, 0x3C0176 },
19051905
{ Opcode.SMSG_TITLE_LOST, 0x3C0177 },
19061906
{ Opcode.SMSG_TOTEM_CREATED, 0x3C0167 },
1907-
{ Opcode.SMSG_TOTEM_DURATION_CHANGED, 0x3C0168 },
1907+
{ Opcode.SMSG_TOTEM_DURATION_CHANGED, 0x3C0168 }, // NYI
19081908
{ Opcode.SMSG_TOTEM_MOVED, 0x3C0169 },
19091909
{ Opcode.SMSG_TRADE_STATUS, 0x3C0017 },
19101910
{ Opcode.SMSG_TRADE_UPDATED, 0x3C0016 },
Lines changed: 327 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,327 @@
1+
using System;
2+
using WowPacketParser.Enums;
3+
using WowPacketParser.Misc;
4+
using WowPacketParser.Parsing;
5+
6+
namespace WowPacketParserModule.V5_5_0_61735.Parsers
7+
{
8+
public static class CalendarHandler
9+
{
10+
public static void ReadCalendarSendCalendarInviteInfo(Packet packet, params object[] indexes)
11+
{
12+
packet.ReadInt64("EventID", indexes);
13+
packet.ReadInt64("InviteID", indexes);
14+
15+
packet.ReadByte("Status", indexes);
16+
packet.ReadByte("Moderator", indexes);
17+
packet.ReadByte("InviteType", indexes);
18+
19+
packet.ReadPackedGuid128("InviterGUID", indexes);
20+
21+
packet.ResetBitReader();
22+
packet.ReadBit("IgnoreFriendAndGuildRestriction");
23+
}
24+
25+
public static void ReadCalendarSendCalendarEventInfo(Packet packet, params object[] indexes)
26+
{
27+
packet.ReadInt64("EventID", indexes);
28+
packet.ReadByte("EventType", indexes);
29+
packet.ReadInt32("Date", indexes);
30+
packet.ReadUInt16E<CalendarFlag>("Flags");
31+
packet.ReadInt32("TextureID", indexes);
32+
packet.ReadUInt64("EventClubID");
33+
packet.ReadPackedGuid128("OwnerGUID", indexes);
34+
35+
packet.ResetBitReader();
36+
37+
var len = packet.ReadBits(8);
38+
packet.ReadWoWString("EventName", len, indexes);
39+
}
40+
41+
public static void ReadCalendarSendCalendarRaidLockoutInfo(Packet packet, params object[] indexes)
42+
{
43+
packet.ReadInt64("InstanceID", indexes);
44+
45+
packet.ReadInt32("MapID", indexes);
46+
packet.ReadUInt32("DifficultyID", indexes);
47+
packet.ReadInt32("ExpireTime", indexes);
48+
}
49+
50+
public static void ReadCalendarSendCalendarRaidResetInfo(Packet packet, params object[] indexes)
51+
{
52+
packet.ReadInt32<MapId>("MapID", indexes);
53+
packet.ReadUInt32("Unk340_1", indexes);
54+
packet.ReadInt32("IntervalSeconds", indexes);
55+
packet.ReadInt32("OffsetSeconds", indexes);
56+
packet.ReadInt32<DifficultyId>("Difficulty", indexes);
57+
}
58+
59+
public static void ReadCalendarEventInviteInfo(Packet packet, params object[] indexes)
60+
{
61+
packet.ReadPackedGuid128("Guid", indexes);
62+
packet.ReadInt64("InviteID", indexes);
63+
64+
packet.ReadByte("Level", indexes);
65+
packet.ReadByte("Status", indexes);
66+
packet.ReadByte("Moderator", indexes);
67+
packet.ReadByte("InviteType", indexes);
68+
69+
packet.ReadInt32("ResponseTime", indexes);
70+
71+
packet.ResetBitReader();
72+
73+
var lenNotes = packet.ReadBits(8);
74+
packet.ReadWoWString("Notes", lenNotes, indexes);
75+
}
76+
77+
[Parser(Opcode.SMSG_CALENDAR_SEND_CALENDAR)]
78+
public static void HandleCalendarSendCalendar(Packet packet)
79+
{
80+
packet.ReadPackedTime("ServerTime");
81+
82+
var invitesCount = packet.ReadUInt32("InvitesCount");
83+
var eventsCount = packet.ReadUInt32("EventsCount");
84+
var raidLockoutsCount = packet.ReadUInt32("RaidLockoutsCount");
85+
var raidResetsCount = packet.ReadUInt32("RaidResetsCount");
86+
87+
for (int i = 0; i < raidLockoutsCount; i++)
88+
ReadCalendarSendCalendarRaidLockoutInfo(packet, "RaidLockouts", i);
89+
90+
for (int i = 0; i < raidResetsCount; i++)
91+
ReadCalendarSendCalendarRaidResetInfo(packet, "RaidResets", i);
92+
93+
for (int i = 0; i < invitesCount; i++)
94+
ReadCalendarSendCalendarInviteInfo(packet, "Invites", i);
95+
96+
for (int i = 0; i < eventsCount; i++)
97+
ReadCalendarSendCalendarEventInfo(packet, "Events", i);
98+
}
99+
100+
[Parser(Opcode.SMSG_CALENDAR_SEND_EVENT)]
101+
public static void HandleCalendarSendEvent(Packet packet)
102+
{
103+
packet.ReadByte("EventType");
104+
packet.ReadPackedGuid128("OwnerGUID");
105+
packet.ReadUInt64("EventID");
106+
packet.ReadByte("GetEventType");
107+
packet.ReadInt32("TextureID");
108+
packet.ReadUInt16E<CalendarFlag>("Flags");
109+
packet.ReadPackedTime("Date");
110+
packet.ReadUInt32("LockDate");
111+
packet.ReadUInt64("EventClubID");
112+
113+
var inviteCount = packet.ReadInt32("InviteCount");
114+
115+
packet.ResetBitReader();
116+
117+
var lenEventName = packet.ReadBits(8);
118+
var lenDescription = packet.ReadBits(11);
119+
120+
packet.ResetBitReader();
121+
122+
for (int i = 0; i < inviteCount; i++)
123+
ReadCalendarEventInviteInfo(packet, "Invites", i);
124+
125+
packet.ReadWoWString("EventName", lenEventName);
126+
packet.ReadWoWString("Description", lenDescription);
127+
}
128+
129+
[Parser(Opcode.SMSG_CALENDAR_COMMUNITY_INVITE)]
130+
public static void HandleCalendarCommunityInvite(Packet packet)
131+
{
132+
var inviteInfoCount = packet.ReadUInt32();
133+
134+
for (int i = 0; i < inviteInfoCount; i++)
135+
{
136+
packet.ReadPackedGuid128("InviteGUID", i);
137+
packet.ReadByte("Level", i);
138+
}
139+
}
140+
141+
[Parser(Opcode.SMSG_CALENDAR_INVITE_ADDED)]
142+
public static void HandleCalendarInviteAdded(Packet packet)
143+
{
144+
packet.ReadPackedGuid128("InviteGUID");
145+
packet.ReadUInt64("EventID");
146+
packet.ReadUInt64("InviteID");
147+
packet.ReadByte("Level");
148+
packet.ReadByteE<CalendarEventStatus>("Status");
149+
packet.ReadByteE<CalendarEventType>("Type");
150+
packet.ReadPackedTime("ResponseTime");
151+
packet.ReadBit("ClearPending");
152+
}
153+
154+
[Parser(Opcode.SMSG_CALENDAR_INVITE_REMOVED)]
155+
public static void HandleCalendarInviteRemoved(Packet packet)
156+
{
157+
packet.ReadPackedGuid128("InviteGUID");
158+
packet.ReadUInt64("EventID");
159+
packet.ReadUInt32E<CalendarFlag>("Flags");
160+
packet.ReadBit("ClearPending");
161+
}
162+
163+
[Parser(Opcode.SMSG_CALENDAR_INVITE_STATUS)]
164+
public static void HandleCalendarInviteStatus(Packet packet)
165+
{
166+
packet.ReadPackedGuid128("InviteGUID");
167+
packet.ReadUInt64("EventID");
168+
packet.ReadPackedTime("Date");
169+
packet.ReadUInt32E<CalendarFlag>("Flags");
170+
packet.ReadByteE<CalendarEventStatus>("Status");
171+
packet.ReadPackedTime("ResponseTime");
172+
packet.ReadBit("ClearPending");
173+
}
174+
175+
[Parser(Opcode.SMSG_CALENDAR_MODERATOR_STATUS)]
176+
public static void HandleCalendarModeratorStatus(Packet packet)
177+
{
178+
packet.ReadPackedGuid128("InviteGUID");
179+
packet.ReadUInt64("EventID");
180+
packet.ReadByteE<CalendarModerationRank>("Status");
181+
packet.ReadBit("ClearPending");
182+
}
183+
184+
[Parser(Opcode.SMSG_CALENDAR_INVITE_ALERT)]
185+
public static void HandleCalendarEventInviteAlert(Packet packet)
186+
{
187+
packet.ReadUInt64("EventID");
188+
packet.ReadPackedTime("Date");
189+
packet.ReadUInt16E<CalendarFlag>("Flags");
190+
packet.ReadByteE<CalendarEventType>("EventType");
191+
packet.ReadInt32("TextureID");
192+
packet.ReadUInt64("EventClubID");
193+
packet.ReadUInt64("InviteID");
194+
packet.ReadByteE<CalendarEventStatus>("Status");
195+
packet.ReadByteE<CalendarModerationRank>("ModeratorStatus");
196+
197+
// TODO: check order
198+
packet.ReadPackedGuid128("OwnerGUID | InvitedByGUID");
199+
packet.ReadPackedGuid128("OwnerGUID | InvitedByGUID");
200+
201+
var eventNameLength = packet.ReadBits("EventNameLength", 8);
202+
packet.ReadBit("Unknown_1100");
203+
packet.ResetBitReader();
204+
205+
packet.ReadWoWString("EventName", eventNameLength);
206+
}
207+
208+
[Parser(Opcode.SMSG_CALENDAR_INVITE_STATUS_ALERT)]
209+
public static void HandleCalendarInviteStatusAlert(Packet packet)
210+
{
211+
packet.ReadInt64("EventID");
212+
packet.ReadPackedTime("Date");
213+
packet.ReadUInt32E<CalendarFlag>("Flags");
214+
packet.ReadByteE<CalendarEventStatus>("Status");
215+
}
216+
217+
[Parser(Opcode.SMSG_CALENDAR_INVITE_REMOVED_ALERT)]
218+
public static void HandleCalendarInviteRemovedAlert(Packet packet)
219+
{
220+
packet.ReadInt64("EventID");
221+
packet.ReadPackedTime("Date");
222+
packet.ReadUInt32E<CalendarFlag>("Flags");
223+
packet.ReadByteE<CalendarEventStatus>("Status");
224+
}
225+
226+
[Parser(Opcode.SMSG_CALENDAR_EVENT_REMOVED_ALERT)]
227+
public static void HandleCalendarEventRemovedAlert(Packet packet)
228+
{
229+
packet.ReadUInt64("EventID");
230+
packet.ReadPackedTime("Date");
231+
packet.ResetBitReader();
232+
packet.ReadBit("ClearPending");
233+
}
234+
235+
[Parser(Opcode.SMSG_CALENDAR_EVENT_UPDATED_ALERT)]
236+
public static void HandleCalendarEventUpdateAlert(Packet packet)
237+
{
238+
packet.ReadUInt64("EventClubID");
239+
packet.ReadUInt64("EventID");
240+
packet.ReadPackedTime("OriginalDate");
241+
packet.ReadPackedTime("Date");
242+
packet.ReadUInt32("LockDate");
243+
packet.ReadUInt16E<CalendarFlag>("Flags");
244+
245+
packet.ReadUInt32("TextureID");
246+
packet.ReadByte("EventType");
247+
248+
packet.ResetBitReader();
249+
var eventNameLen = packet.ReadBits(8);
250+
var descLen = packet.ReadBits(11);
251+
packet.ReadBit("ClearPending");
252+
253+
packet.ReadWoWString("EventName", eventNameLen);
254+
packet.ReadWoWString("Description", descLen);
255+
}
256+
257+
[Parser(Opcode.SMSG_CALENDAR_INVITE_NOTES)]
258+
public static void HandleCalendarInviteNotes(Packet packet)
259+
{
260+
packet.ReadPackedGuid128("InviteGUID");
261+
packet.ReadUInt64("EventID");
262+
packet.ReadBit("ClearPending");
263+
var notesLength = packet.ReadBits(8);
264+
packet.ResetBitReader();
265+
266+
packet.ReadWoWString("Notes", notesLength);
267+
}
268+
269+
[Parser(Opcode.SMSG_CALENDAR_INVITE_NOTES_ALERT)]
270+
public static void HandleCalendarInviteNotesAlert(Packet packet)
271+
{
272+
packet.ReadUInt64("EventID");
273+
274+
var notesLength = packet.ReadBits(8);
275+
packet.ResetBitReader();
276+
packet.ReadWoWString("Notes", notesLength);
277+
}
278+
279+
[Parser(Opcode.SMSG_CALENDAR_RAID_LOCKOUT_ADDED)]
280+
public static void HandleRaidLockoutAdded(Packet packet)
281+
{
282+
packet.ReadUInt64("InstanceID");
283+
packet.ReadUInt32("ServerTime");
284+
packet.ReadInt32("MapID");
285+
packet.ReadUInt32("DifficultyID");
286+
packet.ReadInt32("TimeRemaining");
287+
}
288+
289+
[Parser(Opcode.SMSG_CALENDAR_RAID_LOCKOUT_REMOVED)]
290+
public static void HandleRaidLockoutRemoved(Packet packet)
291+
{
292+
packet.ReadUInt64("InstanceID");
293+
packet.ReadInt32("MapID");
294+
packet.ReadUInt32("DifficultyID");
295+
}
296+
297+
[Parser(Opcode.SMSG_CALENDAR_RAID_LOCKOUT_UPDATED)]
298+
public static void HandleCalendarRaidLockoutUpdated(Packet packet)
299+
{
300+
packet.ReadUInt32("ServerTime");
301+
packet.ReadInt32("MapID");
302+
packet.ReadUInt32("DifficultyID");
303+
packet.ReadInt32("NewTimeRemaining");
304+
packet.ReadInt32("OldTimeRemaining");
305+
}
306+
307+
[Parser(Opcode.SMSG_CALENDAR_SEND_NUM_PENDING)]
308+
public static void HandleSendCalendarNumPending(Packet packet)
309+
{
310+
packet.ReadUInt32("NumPending");
311+
}
312+
313+
[Parser(Opcode.SMSG_CALENDAR_COMMAND_RESULT)]
314+
public static void HandleCalendarCommandResult(Packet packet)
315+
{
316+
packet.ReadByte("Command");
317+
packet.ReadByte("Result");
318+
var nameLen = packet.ReadBits(9);
319+
packet.ReadWoWString("Name", nameLen);
320+
}
321+
322+
[Parser(Opcode.SMSG_CALENDAR_CLEAR_PENDING_ACTION)]
323+
public static void HandleCalenderZero(Packet packet)
324+
{
325+
}
326+
}
327+
}

WowPacketParserModule.V5_5_0_61735/Parser/CombatHandler.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,14 @@ public static void HandleAttackSwingError(Packet packet)
105105
packet.ReadBitsE<AttackSwingErr>("Reason", 3);
106106
}
107107

108+
[Parser(Opcode.SMSG_AI_REACTION)]
109+
public static void HandleAIReaction(Packet packet)
110+
{
111+
PacketAIReaction aiReaction = packet.Holder.AiReaction = new();
112+
aiReaction.UnitGuid = packet.ReadPackedGuid128("UnitGUID").ToUniversalGuid();
113+
aiReaction.Reaction = (WowPacketParser.Proto.AIReaction)packet.ReadInt32E<WowPacketParser.Enums.AIReaction>("Reaction");
114+
}
115+
108116
[Parser(Opcode.SMSG_DUEL_OUT_OF_BOUNDS)]
109117
[Parser(Opcode.SMSG_DUEL_IN_BOUNDS)]
110118
[Parser(Opcode.SMSG_CANCEL_COMBAT)]
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using WowPacketParser.Enums;
2+
using WowPacketParser.Misc;
3+
using WowPacketParser.Parsing;
4+
5+
namespace WowPacketParserModule.V5_5_0_61735.Parsers
6+
{
7+
public static class EquipmentSetHandler
8+
{
9+
[Parser(Opcode.SMSG_EQUIPMENT_SET_ID)]
10+
public static void HandleEquipmentSetSaved(Packet packet)
11+
{
12+
packet.ReadInt32("Type");
13+
packet.ReadUInt32("SetID");
14+
packet.ReadUInt64("GUID");
15+
}
16+
}
17+
}

0 commit comments

Comments
 (0)