Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions WowPacketParser/Enums/Version/V5_4_7_17898/Opcodes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@ public static BiDictionary<Opcode, int> Opcodes(Direction direction)
{Opcode.CMSG_LOGOUT_CANCEL, 0x11D4},
{Opcode.CMSG_LOGOUT_REQUEST, 0x0476},
{Opcode.CMSG_LOG_DISCONNECT, 0x1A13},
{Opcode.CMSG_LOG_STREAMING_ERROR, 0x1A12},
{Opcode.CMSG_LOOT_UNIT, 0x1E52},
{Opcode.CMSG_SET_LOOT_METHOD, 0x1C10},
{Opcode.CMSG_LOOT_MONEY, 0x15A0},
Expand Down Expand Up @@ -406,6 +407,7 @@ public static BiDictionary<Opcode, int> Opcodes(Direction direction)
{Opcode.SMSG_PLAY_SPELL_VISUAL_KIT, 0x0500},
{Opcode.SMSG_PONG, 0x15B1},
{Opcode.SMSG_POWER_UPDATE, 0x1441},
{Opcode.SMSG_PVP_CREDIT, 0x13BB},
{Opcode.SMSG_PVP_LOG_DATA, 0x076A},
{Opcode.SMSG_PVP_SEASON, 0x00E1},
{Opcode.SMSG_QUERY_TIME_RESPONSE, 0x0E2A},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ public static void HandleMonsterMove(Packet packet)

var splineCount = (int)packet.ReadBits(20);
var bit98 = packet.ReadBit();
var splineType = (int)packet.ReadBits(3);
var splineType = (int)packet.ReadBits("Facing", 3);

if (splineType == 3)
packet.StartBitStream(factingTargetGUID, 0, 7, 3, 4, 5, 6, 1, 2);
Expand Down
20 changes: 20 additions & 0 deletions WowPacketParserModule.V5_4_7_17898/Parsers/CombatHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -263,5 +263,25 @@ public static void HandleCanelCombat(Packet packet)
{
packet.ReadBits("bits10", 2);
}

[Parser(Opcode.SMSG_PVP_CREDIT)]
public static void HandlePvPCredit(Packet packet)
{
var guid = new byte[8];
packet.StartBitStream(guid, 7, 0, 1, 3, 5, 4, 2, 6);

packet.ReadXORByte(guid, 1);
packet.ReadXORByte(guid, 0);
packet.ReadInt32("Rank");
packet.ReadXORByte(guid, 3);
packet.ReadInt32("Honor");
packet.ReadXORByte(guid, 5);
packet.ReadXORByte(guid, 7);
packet.ReadXORByte(guid, 6);
packet.ReadXORByte(guid, 4);
packet.ReadXORByte(guid, 2);

packet.WriteGuid("Target", guid);
}
}
}
139 changes: 72 additions & 67 deletions WowPacketParserModule.V5_4_7_17898/Parsers/MiscellaneousHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -369,113 +369,118 @@ public static void Handletest(Packet packet)
}

[Parser(Opcode.SMSG_VIGNETTE_UPDATE)]
public static void HandleSetVignette(Packet packet)
public static void HandleVignetteUpdate(Packet packet)
{
packet.ReadBit("ForceUpdate");
var updatedCount = packet.ReadBits(24);

packet.ReadBit("bit20");
var bits10 = packet.ReadBits(24);
var updatedGuids = new byte[updatedCount][];

var guid1 = new byte[bits10][];

for (var i = 0; i < bits10; ++i)
for (var i = 0; i < updatedCount; ++i)
{
guid1[i] = new byte[8];
packet.StartBitStream(guid1[i], 0, 4, 3, 6, 5, 2, 7, 1);
updatedGuids[i] = new byte[8];
packet.StartBitStream(updatedGuids[i], 0, 4, 3, 6, 5, 2, 7, 1);
}

var bits34 = packet.ReadBits(20);
var addedDataCount = packet.ReadBits(20);

var guid2 = new byte[bits34][];
var addedDatas = new byte[addedDataCount][];

for (var i = 0; i < bits34; ++i)
for (var i = 0; i < addedDataCount; ++i)
{
guid2[i] = new byte[8];
packet.StartBitStream(guid2[i], 6, 3, 7, 1, 5, 4, 0, 2);
addedDatas[i] = new byte[8];
packet.StartBitStream(addedDatas[i], 6, 3, 7, 1, 5, 4, 0, 2);
}

var bits44 = packet.ReadBits(24);
var removedCount = packet.ReadBits(24);

var guid3 = new byte[bits44][];
var removedGuids = new byte[removedCount][];

for (var i = 0; i < bits44; ++i)
for (var i = 0; i < removedCount; ++i)
{
guid3[i] = new byte[8];
packet.StartBitStream(guid3[i], 0, 6, 7, 1, 4, 3, 2, 5);
removedGuids[i] = new byte[8];
packet.StartBitStream(removedGuids[i], 0, 6, 7, 1, 4, 3, 2, 5);
}

var bits24 = packet.ReadBits(24);
var addedIDsCount = packet.ReadBits(24);

var guid4 = new byte[bits24][];
var addedIDs = new byte[addedIDsCount][];

for (var i = 0; i < bits24; ++i)
for (var i = 0; i < addedIDsCount; ++i)
{
guid4[i] = new byte[8];
packet.StartBitStream(guid4[i], 4, 5, 2, 3, 1, 6, 7, 0);
addedIDs[i] = new byte[8];
packet.StartBitStream(addedIDs[i], 4, 5, 2, 3, 1, 6, 7, 0);
}

var bits54 = packet.ReadBits(20);
var updatedDataCount = packet.ReadBits(20);

var guid5 = new byte[bits54][];
var updatedDataIDs = new byte[updatedDataCount][];

for (var i = 0; i < bits54; ++i)
for (var i = 0; i < updatedDataCount; ++i)
{
guid5[i] = new byte[8];
packet.StartBitStream(guid5[i], 6, 1, 7, 3, 5, 2, 0, 4);
updatedDataIDs[i] = new byte[8];
packet.StartBitStream(updatedDataIDs[i], 6, 1, 7, 3, 5, 2, 0, 4);
}

for (var i = 0; i < bits54; ++i)
for (var i = 0; i < updatedDataCount; ++i)
{
packet.ReadXORByte(guid5[i], 5);
packet.ReadXORByte(guid5[i], 0);
packet.ReadXORByte(guid5[i], 7);
packet.ReadSingle("1");
packet.ReadSingle("2");
packet.ReadXORByte(guid5[i], 1);
packet.ReadXORByte(guid5[i], 3);
packet.ReadXORByte(guid5[i], 4);
packet.ReadInt32("Vignette Id");
packet.ReadXORByte(guid5[i], 6);
packet.ReadXORByte(guid5[i], 7);
packet.ReadSingle("3");

packet.WriteGuid("Guid5", guid5[i]);
packet.ReadXORByte(updatedDataIDs[i], 5);
packet.ReadXORByte(updatedDataIDs[i], 0);
packet.ReadXORByte(updatedDataIDs[i], 7);
packet.ReadSingle("PositionX");
packet.ReadSingle("PositionY");
packet.ReadXORByte(updatedDataIDs[i], 1);
packet.ReadXORByte(updatedDataIDs[i], 3);
packet.ReadXORByte(updatedDataIDs[i], 4);
packet.ReadInt32("Vignette ID");
packet.ReadXORByte(updatedDataIDs[i], 6);
packet.ReadXORByte(updatedDataIDs[i], 2);
packet.ReadSingle("PositionZ");

packet.WriteGuid("UpdatedDataObjGuid", updatedDataIDs[i], i);
}

for (var i = 0; i < bits34; ++i)
for (var i = 0; i < addedDataCount; ++i)
{
packet.ReadXORByte(guid2[i], 0);
packet.ReadXORByte(guid2[i], 5);
packet.ReadXORByte(guid2[i], 6);
packet.ReadXORByte(guid2[i], 2);
packet.ReadInt32("Vignette Id");
packet.ReadXORByte(guid2[i], 4);
packet.ReadXORByte(guid2[i], 7);
packet.ReadSingle("1");
packet.ReadSingle("2");
packet.ReadXORByte(guid2[i], 3);
packet.ReadSingle("3");
packet.ReadXORByte(guid2[i], 1);

packet.WriteGuid("Guid2", guid2[i]);
packet.ReadXORByte(addedDatas[i], 0);
packet.ReadXORByte(addedDatas[i], 5);
packet.ReadXORByte(addedDatas[i], 6);
packet.ReadXORByte(addedDatas[i], 2);
int v =packet.ReadInt32("Vignette Id");
packet.ReadXORByte(addedDatas[i], 4);
packet.ReadXORByte(addedDatas[i], 7);
packet.ReadSingle("PositionZ");
packet.ReadSingle("PositionY");
packet.ReadXORByte(addedDatas[i], 3);
packet.ReadSingle("PositionX");
packet.ReadXORByte(addedDatas[i], 1);

packet.WriteGuid("AddedDataObjGuid", addedDatas[i], i);
}

for (var i = 0; i < bits24; ++i)
for (var i = 0; i < removedCount; ++i)
{
packet.ParseBitStream(guid4[i], 5, 2, 1, 0, 7, 4, 3, 6);
packet.WriteGuid("Guid4", guid4[i]);
packet.ParseBitStream(removedGuids[i], 5, 2, 1, 0, 7, 4, 3, 6);
packet.WriteGuid("RemovedGuid", removedGuids[i], i);
}

for (var i = 0; i < bits10; ++i)
for (var i = 0; i < addedIDsCount; ++i)
{
packet.ParseBitStream(guid1[i], 5, 1, 2, 0, 6, 7, 4, 3);
packet.WriteGuid("Guid1", guid1[i]);
packet.ParseBitStream(addedIDs[i], 5, 1, 2, 0, 6, 7, 4, 3);
packet.WriteGuid("AddedGuid", addedIDs[i], i);
}

for (var i = 0; i < bits44; ++i)
for (var i = 0; i < updatedCount; ++i)
{
packet.ParseBitStream(guid3[i], 3, 6, 4, 2, 1, 7, 5, 0);
packet.WriteGuid("Guid3", guid3[i]);
packet.ParseBitStream(updatedGuids[i], 3, 6, 4, 2, 1, 7, 5, 0);
packet.WriteGuid("UpdatedGuid", updatedGuids[i], i);
}
}

[Parser(Opcode.CMSG_LOG_STREAMING_ERROR)]
public static void HandleLogStreamingError(Packet packet)
{
packet.ReadWoWString("Error", packet.ReadBits(9));
}
}
}
74 changes: 40 additions & 34 deletions WowPacketParserModule.V5_4_7_17898/Parsers/MovementHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ public static void HandleMonsterMove(Packet packet)
var dest = new Vector3();

var ownerGUID = new byte[8];
var guid2 = new byte[8];
var transportGuid = new byte[8];
var factingTargetGUID = new byte[8];

dest.Y = packet.ReadSingle();
Expand All @@ -110,49 +110,52 @@ public static void HandleMonsterMove(Packet packet)
packet.AddValue("Destination", dest);

ownerGUID[3] = packet.ReadBit();
var bit40 = !packet.ReadBit();
bool hasFlags = !packet.ReadBit();
ownerGUID[6] = packet.ReadBit();
var bit45 = !packet.ReadBit();
var bit6D = !packet.ReadBit();
var splineType = packet.ReadBits(3);
var bit78 = !packet.ReadBit();
bool hasAnimTier = !packet.ReadBit();
var hasVehicleExitVoluntary = !packet.ReadBit();
var splineType = packet.ReadBits("Face", 3);
var hasVehicleSeat = !packet.ReadBit();
ownerGUID[2] = packet.ReadBit();
ownerGUID[7] = packet.ReadBit();
ownerGUID[5] = packet.ReadBit();

if (splineType == 3)
packet.StartBitStream(factingTargetGUID, 6, 7, 0, 5, 2, 3, 4, 1);

var bit58 = !packet.ReadBit();
bool hasSpecialTime = !packet.ReadBit();
ownerGUID[4] = packet.ReadBit();
var waypointCount = packet.ReadBits(22);
var bit4C = !packet.ReadBit();
bool hasElapsed = !packet.ReadBit();
packet.ReadBit(); // fake bit
ownerGUID[0] = packet.ReadBit();
guid2[3] = packet.ReadBit();
guid2[6] = packet.ReadBit();
guid2[5] = packet.ReadBit();
guid2[0] = packet.ReadBit();
guid2[1] = packet.ReadBit();
guid2[2] = packet.ReadBit();
guid2[4] = packet.ReadBit();
guid2[7] = packet.ReadBit();
var bit6C = !packet.ReadBit();
var bit54 = !packet.ReadBit();

transportGuid[3] = packet.ReadBit();
transportGuid[6] = packet.ReadBit();
transportGuid[5] = packet.ReadBit();
transportGuid[0] = packet.ReadBit();
transportGuid[1] = packet.ReadBit();
transportGuid[2] = packet.ReadBit();
transportGuid[4] = packet.ReadBit();
transportGuid[7] = packet.ReadBit();

bool hasMode = !packet.ReadBit();
var hasJumpGravity = !packet.ReadBit();
var bit48 = !packet.ReadBit();
var splineCount = (int)packet.ReadBits(20);
ownerGUID[1] = packet.ReadBit();
var bitB0 = packet.ReadBit();
var hasSplineFilter = packet.ReadBit();

var bits8C = 0u;
if (bitB0)
if (hasSplineFilter)
{
bits8C = packet.ReadBits(22);
packet.ReadBits("SplineFilterFlags", 2);
}

var bit38 = packet.ReadBit();
var bit50 = !packet.ReadBit();
packet.ReadBit("CrzTeleport");
var hasMoveTime = !packet.ReadBit();

if (splineType == 3)
{
packet.ParseBitStream(factingTargetGUID, 5, 3, 6, 1, 4, 2, 0, 7);
Expand All @@ -162,10 +165,10 @@ public static void HandleMonsterMove(Packet packet)

packet.ReadXORByte(ownerGUID, 3);

packet.ParseBitStream(guid2, 7, 3, 2, 0, 6, 4, 5, 1);
packet.ParseBitStream(transportGuid, 7, 3, 2, 0, 6, 4, 5, 1);


if (bitB0)
if (hasSplineFilter)
{
packet.ReadSingle("SplineFilterBaseSpeed");

Expand All @@ -180,21 +183,24 @@ public static void HandleMonsterMove(Packet packet)
packet.ReadInt16("FilterAddedToStart");
}

if (bit6D)
if (hasVehicleExitVoluntary)
packet.ReadByte("VehicleExitVoluntary");

if (splineType == 4)
monsterMove.LookOrientation = packet.ReadSingle("Facing Angle");

if (bit40)
if (hasFlags)
packet.ReadInt32("Flags");

packet.ReadXORByte(ownerGUID, 7);
if (bit78)

if (hasVehicleSeat)
packet.ReadByte("VehicleSeat");
if (bit4C)

if (hasElapsed)
packet.ReadInt32("Elapsed");
if (bit45)

if (hasAnimTier)
packet.ReadByte("AnimTier");

var waypoints = new Vector3[waypointCount];
Expand Down Expand Up @@ -234,23 +240,23 @@ public static void HandleMonsterMove(Packet packet)

packet.ReadXORByte(ownerGUID, 6);

if (bit50)
if (hasMoveTime)
packet.ReadInt32("MoveTime");

if (splineType == 2)
{
monsterMove.LookPosition = packet.ReadVector3("Facing Spot");
}

if (bit54)
if (hasJumpGravity)
packet.ReadSingle("JumpGravity");

if (bit6C)
if (hasMode)
packet.ReadByte("Mode");

packet.ReadXORByte(ownerGUID, 0);

if (bit58)
if (hasSpecialTime)
packet.ReadInt32("SpecialTime");

packet.ReadXORByte(ownerGUID, 4);
Expand All @@ -273,7 +279,7 @@ public static void HandleMonsterMove(Packet packet)
}

monsterMove.Mover = packet.WriteGuid("Owner GUID", ownerGUID);
packet.WriteGuid("Transport GUID", guid2);
packet.WriteGuid("Transport GUID", transportGuid);
monsterMove.Position = pos;
}

Expand Down
Loading