Skip to content

Commit 9996f7e

Browse files
committed
Add 5.5.0 opcode handlers
SMSG_LOGOUT_CANCEL_ACK SMSG_TEXT_EMOTE SMSG_CORPSE_LOCATION SMSG_INSTANCE_RESET SMSG_INSTANCE_RESET_FAILED SMSG_UPDATE_LAST_INSTANCE SMSG_SET_TIME_ZONE_INFORMATION SMSG_LOGOUT_RESPONSE SMSG_LOGOUT_COMPLETE SMSG_LOSS_OF_CONTROL_AURA_UPDATE SMSG_ADD_LOSS_OF_CONTROL
1 parent b05c806 commit 9996f7e

8 files changed

Lines changed: 182 additions & 11 deletions

File tree

WowPacketParser/Enums/Version/V5_5_0_61735/Opcodes.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -884,7 +884,7 @@ public static BiDictionary<Opcode, int> Opcodes(Direction direction)
884884
{ Opcode.SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE, 0x3C0224 },
885885
{ Opcode.SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE, 0x3C0223 },
886886
{ Opcode.SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE, 0x3C02B5 },
887-
{ Opcode.SMSG_BATTLE_PET_CAGE_DATE_ERROR, 0x3C0117 },
887+
{ Opcode.SMSG_BATTLE_PET_CAGE_DATE_ERROR, 0x3C0117 }, // NYI
888888
{ Opcode.SMSG_BATTLE_PET_DELETED, 0x3C008A },
889889
{ Opcode.SMSG_BATTLE_PET_ERROR, 0x3C00D4 },
890890
{ Opcode.SMSG_BATTLE_PET_JOURNAL, 0x3C0089 },
@@ -962,7 +962,7 @@ public static BiDictionary<Opcode, int> Opcodes(Direction direction)
962962
{ Opcode.SMSG_CANCEL_SPELL_VISUAL, 0x520033 },
963963
{ Opcode.SMSG_CANCEL_SPELL_VISUAL_KIT, 0x520037 },
964964
{ Opcode.SMSG_CAPTURE_POINT_REMOVED, 0x420008 },
965-
{ Opcode.SMSG_CAS_REFRESH_REMOTE_DATA, 0x3C0115 },
965+
{ Opcode.SMSG_CAS_REFRESH_REMOTE_DATA, 0x3C0115 }, // NYI
966966
{ Opcode.SMSG_CAST_FAILED, 0x520046 },
967967
{ Opcode.SMSG_CAUTIONARY_CHANNEL_MESSAGE, 0x410009 }, // NYI
968968
{ Opcode.SMSG_CAUTIONARY_CHAT_MESSAGE, 0x410008 }, // NYI
@@ -1074,7 +1074,7 @@ public static BiDictionary<Opcode, int> Opcodes(Direction direction)
10741074
{ Opcode.SMSG_DAMAGE_CALC_LOG, 0x520051 },
10751075
{ Opcode.SMSG_DB_REPLY, 0x400000 },
10761076
{ Opcode.SMSG_DEATH_RELEASE_LOC, 0x3C0172 },
1077-
{ Opcode.SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE, 0x3C00F3 },
1077+
{ Opcode.SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE, 0x3C00F3 }, // NYI
10781078
{ Opcode.SMSG_DEFENSE_MESSAGE, 0x41000C },
10791079
{ Opcode.SMSG_DELETE_CHAR, 0x3C01A1 },
10801080
{ Opcode.SMSG_DELETE_EXPIRED_MISSIONS_RESULT, 0x460022 },
@@ -1114,7 +1114,7 @@ public static BiDictionary<Opcode, int> Opcodes(Direction direction)
11141114
{ Opcode.SMSG_EQUIPMENT_SET_ID, 0x3C0151 },
11151115
{ Opcode.SMSG_EXPECTED_SPAM_RECORDS, 0x410005 }, // NYI
11161116
{ Opcode.SMSG_EXPLORATION_EXPERIENCE, 0x3C01FE },
1117-
{ Opcode.SMSG_EXPORT_ACCOUNT_PROFILE, 0x3C00F0 },
1117+
{ Opcode.SMSG_EXPORT_ACCOUNT_PROFILE, 0x3C00F0 }, // NYI
11181118
{ Opcode.SMSG_EXTERNAL_TRANSACTION_ID_GENERATED, 0x3C0300 },
11191119
{ Opcode.SMSG_FACTION_BONUS_INFO, 0x3C01C4 },
11201120
{ Opcode.SMSG_FAILED_PLAYER_CONDITION, 0x4F0002 },
@@ -1146,7 +1146,7 @@ public static BiDictionary<Opcode, int> Opcodes(Direction direction)
11461146
{ Opcode.SMSG_GAME_OBJECT_RESET_STATE, 0x3C01BD },
11471147
{ Opcode.SMSG_GAME_OBJECT_SET_STATE_LOCAL, 0x3C02A3 },
11481148
{ Opcode.SMSG_GAME_OBJECT_UI_LINK, 0x3C01BA },
1149-
{ Opcode.SMSG_GAME_SPEED_SET, 0x3C0120 },
1149+
{ Opcode.SMSG_GAME_SPEED_SET, 0x3C0120 }, // NYI
11501150
{ Opcode.SMSG_GAME_TIME_SET, 0x3C01AC },
11511151
{ Opcode.SMSG_GAME_TIME_UPDATE, 0x3C01AB },
11521152
{ Opcode.SMSG_GARRISON_ACTIVATE_MISSION_BONUS_ABILITY, 0x460024 },
@@ -1355,7 +1355,7 @@ public static BiDictionary<Opcode, int> Opcodes(Direction direction)
13551355
{ Opcode.SMSG_ITEM_PURCHASE_REFUND_RESULT, 0x3C0033 },
13561356
{ Opcode.SMSG_ITEM_PUSH_RESULT, 0x3C00BF },
13571357
{ Opcode.SMSG_ITEM_TIME_UPDATE, 0x3C01F3 },
1358-
{ Opcode.SMSG_KICK_REASON, 0x3C0128 },
1358+
{ Opcode.SMSG_KICK_REASON, 0x3C0128 }, // NYI
13591359
{ Opcode.SMSG_LATENCY_REPORT_PING, 0x3C030B },
13601360
{ Opcode.SMSG_LEARN_PVP_TALENT_FAILED, 0x3C006E },
13611361
{ Opcode.SMSG_LEARN_TALENT_FAILED, 0x3C006D },
@@ -1587,7 +1587,7 @@ public static BiDictionary<Opcode, int> Opcodes(Direction direction)
15871587
{ Opcode.SMSG_PET_ACTION_FEEDBACK, 0x3C01E8 },
15881588
{ Opcode.SMSG_PET_ACTION_SOUND, 0x3C013F },
15891589
{ Opcode.SMSG_PET_BATTLE_CHAT_RESTRICTED, 0x3C009C },
1590-
{ Opcode.SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE, 0x3C0113 },
1590+
{ Opcode.SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE, 0x3C0113 }, // NYI
15911591
{ Opcode.SMSG_PET_BATTLE_FINAL_ROUND, 0x3C009A },
15921592
{ Opcode.SMSG_PET_BATTLE_FINALIZE_LOCATION, 0x3C0095 },
15931593
{ Opcode.SMSG_PET_BATTLE_FINISHED, 0x3C009B },
@@ -1604,7 +1604,7 @@ public static BiDictionary<Opcode, int> Opcodes(Direction direction)
16041604
{ Opcode.SMSG_PET_CAST_FAILED, 0x520047 },
16051605
{ Opcode.SMSG_PET_CLEAR_SPELLS, 0x520013 },
16061606
{ Opcode.SMSG_PET_DISMISS_SOUND, 0x3C0140 },
1607-
{ Opcode.SMSG_PET_GOD_MODE, 0x3C011A },
1607+
{ Opcode.SMSG_PET_GOD_MODE, 0x3C011A }, // NYI
16081608
{ Opcode.SMSG_PET_GUIDS, 0x3C01A3 },
16091609
{ Opcode.SMSG_PET_LEARNED_SPELLS, 0x52003E },
16101610
{ Opcode.SMSG_PET_MODE, 0x3C001F },
@@ -1741,7 +1741,7 @@ public static BiDictionary<Opcode, int> Opcodes(Direction direction)
17411741
{ Opcode.SMSG_RECRUIT_A_FRIEND_FAILURE, 0x3C0160 },
17421742
{ Opcode.SMSG_REFER_A_FRIEND_EXPIRED, 0x3C01C2 },
17431743
{ Opcode.SMSG_REFORGE_RESULT, 0x3C0015 },
1744-
{ Opcode.SMSG_REFRESH_COMPONENT, 0x3C00ED },
1744+
{ Opcode.SMSG_REFRESH_COMPONENT, 0x3C00ED }, // NYI
17451745
{ Opcode.SMSG_REFRESH_SPELL_HISTORY, 0x52001B },
17461746
{ Opcode.SMSG_REGIONWIDE_CHARACTER_MAIL_DATA, 0x3C001A }, // NYI
17471747
{ Opcode.SMSG_REGIONWIDE_CHARACTER_RESTRICTIONS_DATA, 0x3C0019 }, // NYI
@@ -1801,7 +1801,7 @@ public static BiDictionary<Opcode, int> Opcodes(Direction direction)
18011801
{ Opcode.SMSG_SEND_SPELL_HISTORY, 0x52001A },
18021802
{ Opcode.SMSG_SEND_UNLEARN_SPELLS, 0x52001D },
18031803
{ Opcode.SMSG_SERVER_FIRST_ACHIEVEMENTS, 0x3C00EA }, // NYI
1804-
{ Opcode.SMSG_SERVER_TIME, 0x3C0121 },
1804+
{ Opcode.SMSG_SERVER_TIME, 0x3C0121 }, // NYI
18051805
{ Opcode.SMSG_SERVER_TIME_OFFSET, 0x3C01B4 },
18061806
{ Opcode.SMSG_SET_AI_ANIM_KIT, 0x3C01CF },
18071807
{ Opcode.SMSG_SET_ANIM_TIER, 0x3C01D3 },

WowPacketParserModule.V5_5_0_61735/Parser/AccountDataHandler.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,10 @@ public static void HandleCacheInfo(Packet packet)
2727

2828
packet.ReadWoWString("Signature", signatureLen);
2929
}
30+
31+
[Parser(Opcode.SMSG_LOGOUT_CANCEL_ACK)]
32+
public static void HandleAccountNull(Packet packet)
33+
{
34+
}
3035
}
3136
}

WowPacketParserModule.V5_5_0_61735/Parser/ChatHandler.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,5 +131,15 @@ public static void HandlePrintNotification(Packet packet)
131131

132132
packet.ReadWoWString("NotifyText", notifyTextLen);
133133
}
134+
135+
[Parser(Opcode.SMSG_TEXT_EMOTE)]
136+
public static void HandleTextEmoteServer(Packet packet)
137+
{
138+
packet.ReadPackedGuid128("SourceGUID");
139+
packet.ReadPackedGuid128("SourceAccountGUID");
140+
packet.ReadInt32E<EmoteTextType>("EmoteID");
141+
packet.ReadInt32("SoundIndex");
142+
packet.ReadPackedGuid128("TargetGUID");
143+
}
134144
}
135145
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using WowPacketParser.Enums;
2+
using WowPacketParser.Misc;
3+
using WowPacketParser.Parsing;
4+
using WowPacketParser.Proto;
5+
using WowPacketParser.Store;
6+
using WowPacketParser.Store.Objects;
7+
8+
namespace WowPacketParserModule.V5_5_0_61735.Parsers
9+
{
10+
public static class CorpseHandler
11+
{
12+
[Parser(Opcode.SMSG_CORPSE_LOCATION)]
13+
public static void HandleCorpseLocation(Packet packet)
14+
{
15+
packet.ReadBit("Valid");
16+
packet.ReadPackedGuid128("Player");
17+
packet.ReadInt32("ActualMapID");
18+
packet.ReadInt32("MapID");
19+
packet.ReadPackedGuid128("Transport");
20+
packet.ReadVector3("Position");
21+
}
22+
}
23+
}

WowPacketParserModule.V5_5_0_61735/Parser/InstanceHandler.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,5 +96,24 @@ public static void HandleInstanceInfo(Packet packet)
9696
packet.ReadBit("Extended", i);
9797
}
9898
}
99+
100+
[Parser(Opcode.SMSG_INSTANCE_RESET)]
101+
public static void HandleInstanceReset(Packet packet)
102+
{
103+
packet.ReadInt32<MapId>("MapID");
104+
}
105+
106+
[Parser(Opcode.SMSG_INSTANCE_RESET_FAILED)]
107+
public static void HandleInstanceResetFailed(Packet packet)
108+
{
109+
packet.ReadInt32<MapId>("MapID");
110+
packet.ReadBits("ResetFailedReason", 2);
111+
}
112+
113+
[Parser(Opcode.SMSG_UPDATE_LAST_INSTANCE)]
114+
public static void HandleUpdateLastInstance(Packet packet)
115+
{
116+
packet.ReadInt32<MapId>("MapID");
117+
}
99118
}
100119
}

WowPacketParserModule.V5_5_0_61735/Parser/SessionHandler.cs

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Text;
1+
using Google.Protobuf.WellKnownTypes;
2+
using System.Text;
23
using WowPacketParser.Enums;
34
using WowPacketParser.Misc;
45
using WowPacketParser.Parsing;
@@ -26,6 +27,25 @@ public static void ReadVirtualRealmInfo(Packet packet, params object[] indexes)
2627
ReadVirtualRealmNameInfo(packet, indexes, "RealmNameInfo");
2728
}
2829

30+
public static void ReadGameModeData(Packet packet, params object[] indexes)
31+
{
32+
packet.ReadUInt32("Unknown_1107_0", indexes);
33+
packet.ReadPackedGuid128("Guid", indexes);
34+
packet.ReadByte("GameMode", indexes);
35+
packet.ReadInt32("MapID", indexes);
36+
packet.ReadByte("Unknown_1107_1", indexes);
37+
packet.ReadByte("Unknown_1107_2", indexes);
38+
packet.ReadByte("Unknown_1107_3", indexes);
39+
var customizationsCount = packet.ReadUInt32("CustomizationsCount", indexes);
40+
var unkCount = packet.ReadUInt32("Unknown_1107_4_Count", indexes);
41+
42+
for (var i = 0; i < customizationsCount; i++)
43+
CharacterHandler.ReadChrCustomizationChoice(packet, indexes, "Customizations", i);
44+
45+
for (var i = 0; i < unkCount; i++)
46+
CharacterHandler.ReadChrCustomizationChoice(packet, indexes, "Unknown_1107_4", i);
47+
}
48+
2949
[Parser(Opcode.SMSG_REALM_QUERY_RESPONSE)]
3050
public static void HandleRealmQueryResponse(Packet packet)
3151
{
@@ -80,6 +100,42 @@ public static void HandleResumeTokenPacket(Packet packet)
80100
packet.ReadBits("Reason", 2);
81101
}
82102

103+
[Parser(Opcode.SMSG_SET_TIME_ZONE_INFORMATION)]
104+
public static void HandleSetTimeZoneInformation(Packet packet)
105+
{
106+
var gameTimeTZLength = packet.ReadBits(7);
107+
var serverTimeTZLength = packet.ReadBits(7);
108+
var serverRegionalTimeTZLength = packet.ReadBits(7);
109+
110+
packet.ReadWoWString("GameTimeTZ", gameTimeTZLength);
111+
packet.ReadWoWString("ServerTimeTZ", serverTimeTZLength);
112+
packet.ReadWoWString("ServerRegionalTimeTZ", serverRegionalTimeTZLength);
113+
}
114+
115+
[Parser(Opcode.SMSG_LOGOUT_RESPONSE)]
116+
public static void HandlePlayerLogoutResponse(Packet packet)
117+
{
118+
packet.ReadInt32("Reason");
119+
packet.ReadBit("Instant");
120+
// From TC:
121+
// Reason 1: IsInCombat
122+
// Reason 2: InDuel or frozen by GM
123+
// Reason 3: Jumping or Falling
124+
}
125+
126+
[Parser(Opcode.SMSG_LOGOUT_COMPLETE)]
127+
public static void HandleLogoutComplete(Packet packet)
128+
{
129+
var switchGameMode = packet.ReadBit("SwitchGameMode");
130+
if (switchGameMode)
131+
{
132+
packet.ResetBitReader();
133+
packet.ReadBit("IsFastLogin");
134+
ReadGameModeData(packet, "CurrentGameMode");
135+
ReadGameModeData(packet, "NewGameMode");
136+
}
137+
}
138+
83139
[Parser(Opcode.SMSG_WAIT_QUEUE_FINISH)]
84140
public static void HandleSessionZero(Packet packet)
85141
{

WowPacketParserModule.V5_5_0_61735/Parser/SpellHandler.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,5 +202,35 @@ public static void HandleRespecWipeConfirm(Packet packet)
202202
packet.ReadUInt32("Cost");
203203
packet.ReadPackedGuid128("RespecMaster");
204204
}
205+
206+
[Parser(Opcode.SMSG_LOSS_OF_CONTROL_AURA_UPDATE)]
207+
public static void HandleLossOfControlAuraUpdate(Packet packet)
208+
{
209+
packet.ReadPackedGuid128("AffectedGUID");
210+
var count = packet.ReadInt32();
211+
for (int i = 0; i < count; i++)
212+
{
213+
packet.ReadUInt32("Duration", i);
214+
packet.ReadUInt16("AuraSlot", i);
215+
packet.ReadByte("EffectIndex", i);
216+
packet.ReadByteE<LossOfControlType>("LocType", i);
217+
packet.ReadByteE<SpellMechanic>("Mechanic", i);
218+
}
219+
}
220+
221+
[Parser(Opcode.SMSG_ADD_LOSS_OF_CONTROL)]
222+
public static void HandleAddLossOfControl(Packet packet)
223+
{
224+
packet.ReadPackedGuid128("Victim");
225+
packet.ReadInt32<SpellId>("SpellID");
226+
packet.ReadPackedGuid128("Caster");
227+
228+
packet.ReadUInt32("Duration");
229+
packet.ReadUInt32("DurationRemaining");
230+
packet.ReadUInt32E<SpellSchoolMask>("LockoutSchoolMask");
231+
232+
packet.ReadByteE<SpellMechanic>("Mechanic");
233+
packet.ReadByte("Type");
234+
}
205235
}
206236
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using WowPacketParser.Enums;
2+
using WowPacketParser.Misc;
3+
using WowPacketParser.Parsing;
4+
using CoreParsers = WowPacketParser.Parsing.Parsers;
5+
6+
namespace WowPacketParserModule.V5_5_0_61735.Parsers
7+
{
8+
public static class TaxiHandler
9+
{
10+
[Parser(Opcode.SMSG_TAXI_NODE_STATUS)]
11+
public static void HandleTaxiStatus(Packet packet)
12+
{
13+
packet.ReadPackedGuid128("Unit");
14+
packet.ReadBits("Status", 2);
15+
}
16+
17+
[Parser(Opcode.SMSG_ACTIVATE_TAXI_REPLY)]
18+
public static void HandleActivateTaxiReply(Packet packet)
19+
{
20+
packet.ReadBitsE<TaxiError>("Result", 4);
21+
}
22+
23+
[Parser(Opcode.SMSG_NEW_TAXI_PATH)]
24+
public static void HandleTaxiNull(Packet packet)
25+
{
26+
}
27+
}
28+
}

0 commit comments

Comments
 (0)