Skip to content

Commit b917772

Browse files
committed
Fixed parsing crafting order updatefields in 12.0+
1 parent b2a8310 commit b917772

10 files changed

Lines changed: 327 additions & 66 deletions

File tree

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace WowPacketParser.Store.Objects.UpdateFields
2+
{
3+
public interface ICraftingReagentBase
4+
{
5+
}
6+
}

WowPacketParserModule.V12_0_0_65390/Parsers/UpdateFieldsHandler1200.cs

Lines changed: 86 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3517,19 +3517,61 @@ public static ITraitConfig ReadUpdateTraitConfig(Packet packet, params object[]
35173517
return data;
35183518
}
35193519

3520+
public static ICraftingReagentBase ReadCreateCraftingReagentBase(Packet packet, params object[] indexes)
3521+
{
3522+
var data = new CraftingReagentBase();
3523+
packet.ResetBitReader();
3524+
var hasItemID = false;
3525+
var hasCurrencyID = false;
3526+
hasItemID = packet.ReadBit("HasItemID", indexes);
3527+
hasCurrencyID = packet.ReadBit("HasCurrencyID", indexes);
3528+
packet.ResetBitReader();
3529+
if (hasItemID)
3530+
{
3531+
data.ItemID = packet.ReadInt32("ItemID", indexes);
3532+
}
3533+
if (hasCurrencyID)
3534+
{
3535+
data.CurrencyID = packet.ReadInt32("CurrencyID", indexes);
3536+
}
3537+
return data;
3538+
}
3539+
3540+
public static ICraftingReagentBase ReadUpdateCraftingReagentBase(Packet packet, params object[] indexes)
3541+
{
3542+
var data = new CraftingReagentBase();
3543+
packet.ResetBitReader();
3544+
var hasItemID = false;
3545+
var hasCurrencyID = false;
3546+
hasItemID = packet.ReadBit("HasItemID", indexes);
3547+
hasCurrencyID = packet.ReadBit("HasCurrencyID", indexes);
3548+
packet.ResetBitReader();
3549+
if (hasItemID)
3550+
{
3551+
data.ItemID = packet.ReadInt32("ItemID", indexes);
3552+
}
3553+
if (hasCurrencyID)
3554+
{
3555+
data.CurrencyID = packet.ReadInt32("CurrencyID", indexes);
3556+
}
3557+
return data;
3558+
}
3559+
35203560
public static ICraftingOrderItem ReadCreateCraftingOrderItem(Packet packet, params object[] indexes)
35213561
{
35223562
var data = new CraftingOrderItem();
35233563
packet.ResetBitReader();
35243564
var hasDataSlotIndex = false;
35253565
data.OrderItemID = packet.ReadUInt64("OrderItemID", indexes);
3566+
data.OrderItemType = packet.ReadInt32("OrderItemType", indexes);
35263567
data.ItemGUID = packet.ReadPackedGuid128("ItemGUID", indexes);
35273568
data.OwnerGUID = packet.ReadPackedGuid128("OwnerGUID", indexes);
3528-
data.ItemID = packet.ReadInt32("ItemID", indexes);
35293569
data.Quantity = packet.ReadUInt32("Quantity", indexes);
35303570
data.ReagentQuality = packet.ReadInt32("ReagentQuality", indexes);
3531-
hasDataSlotIndex = packet.ReadBit("HasDataSlotIndex", indexes);
3571+
data.Flags = packet.ReadUInt32("Flags", indexes);
3572+
data.Reagent = ReadCreateCraftingReagentBase(packet, indexes, "Reagent");
35323573
packet.ResetBitReader();
3574+
hasDataSlotIndex = packet.ReadBit("HasDataSlotIndex", indexes);
35333575
if (hasDataSlotIndex)
35343576
{
35353577
data.DataSlotIndex = packet.ReadByte("DataSlotIndex", indexes);
@@ -3542,42 +3584,65 @@ public static ICraftingOrderItem ReadUpdateCraftingOrderItem(Packet packet, para
35423584
var data = new CraftingOrderItem();
35433585
packet.ResetBitReader();
35443586
var rawChangesMask = new int[1];
3545-
rawChangesMask[0] = (int)packet.ReadBits(7);
3587+
rawChangesMask[0] = (int)packet.ReadBits(12);
35463588
var changesMask = new BitArray(rawChangesMask);
35473589

35483590
var hasDataSlotIndex = false;
35493591
packet.ResetBitReader();
35503592
if (changesMask[0])
35513593
{
3552-
data.OrderItemID = packet.ReadUInt64("OrderItemID", indexes);
3553-
}
3554-
if (changesMask[1])
3555-
{
3556-
data.ItemGUID = packet.ReadPackedGuid128("ItemGUID", indexes);
3594+
if (changesMask[1])
3595+
{
3596+
data.OrderItemID = packet.ReadUInt64("OrderItemID", indexes);
3597+
}
3598+
if (changesMask[2])
3599+
{
3600+
data.OrderItemType = packet.ReadInt32("OrderItemType", indexes);
3601+
}
3602+
if (changesMask[3])
3603+
{
3604+
data.ItemGUID = packet.ReadPackedGuid128("ItemGUID", indexes);
3605+
}
35573606
}
3558-
if (changesMask[2])
3607+
if (changesMask[4])
35593608
{
3560-
data.OwnerGUID = packet.ReadPackedGuid128("OwnerGUID", indexes);
3609+
if (changesMask[5])
3610+
{
3611+
data.OwnerGUID = packet.ReadPackedGuid128("OwnerGUID", indexes);
3612+
}
3613+
if (changesMask[7])
3614+
{
3615+
data.Quantity = packet.ReadUInt32("Quantity", indexes);
3616+
}
35613617
}
3562-
if (changesMask[3])
3618+
if (changesMask[8])
35633619
{
3564-
data.ItemID = packet.ReadInt32("ItemID", indexes);
3620+
if (changesMask[9])
3621+
{
3622+
data.ReagentQuality = packet.ReadInt32("ReagentQuality", indexes);
3623+
}
3624+
if (changesMask[11])
3625+
{
3626+
data.Flags = packet.ReadUInt32("Flags", indexes);
3627+
}
35653628
}
35663629
if (changesMask[4])
35673630
{
3568-
data.Quantity = packet.ReadUInt32("Quantity", indexes);
3569-
}
3570-
if (changesMask[5])
3571-
{
3572-
data.ReagentQuality = packet.ReadInt32("ReagentQuality", indexes);
3631+
if (changesMask[6])
3632+
{
3633+
data.Reagent = ReadUpdateCraftingReagentBase(packet, indexes, "Reagent");
3634+
}
35733635
}
3574-
hasDataSlotIndex = packet.ReadBit("HasDataSlotIndex", indexes);
35753636
packet.ResetBitReader();
3576-
if (changesMask[6])
3637+
if (changesMask[8])
35773638
{
3578-
if (hasDataSlotIndex)
3639+
hasDataSlotIndex = packet.ReadBit("HasDataSlotIndex", indexes);
3640+
if (changesMask[10])
35793641
{
3580-
data.DataSlotIndex = packet.ReadByte("DataSlotIndex", indexes);
3642+
if (hasDataSlotIndex)
3643+
{
3644+
data.DataSlotIndex = packet.ReadByte("DataSlotIndex", indexes);
3645+
}
35813646
}
35823647
}
35833648
return data;

WowPacketParserModule.V12_0_0_65390/Parsers/UpdateFieldsHandler1201.cs

Lines changed: 86 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3527,19 +3527,61 @@ public static ITraitConfig ReadUpdateTraitConfig(Packet packet, params object[]
35273527
return data;
35283528
}
35293529

3530+
public static ICraftingReagentBase ReadCreateCraftingReagentBase(Packet packet, params object[] indexes)
3531+
{
3532+
var data = new CraftingReagentBase();
3533+
packet.ResetBitReader();
3534+
var hasItemID = false;
3535+
var hasCurrencyID = false;
3536+
hasItemID = packet.ReadBit("HasItemID", indexes);
3537+
hasCurrencyID = packet.ReadBit("HasCurrencyID", indexes);
3538+
packet.ResetBitReader();
3539+
if (hasItemID)
3540+
{
3541+
data.ItemID = packet.ReadInt32("ItemID", indexes);
3542+
}
3543+
if (hasCurrencyID)
3544+
{
3545+
data.CurrencyID = packet.ReadInt32("CurrencyID", indexes);
3546+
}
3547+
return data;
3548+
}
3549+
3550+
public static ICraftingReagentBase ReadUpdateCraftingReagentBase(Packet packet, params object[] indexes)
3551+
{
3552+
var data = new CraftingReagentBase();
3553+
packet.ResetBitReader();
3554+
var hasItemID = false;
3555+
var hasCurrencyID = false;
3556+
hasItemID = packet.ReadBit("HasItemID", indexes);
3557+
hasCurrencyID = packet.ReadBit("HasCurrencyID", indexes);
3558+
packet.ResetBitReader();
3559+
if (hasItemID)
3560+
{
3561+
data.ItemID = packet.ReadInt32("ItemID", indexes);
3562+
}
3563+
if (hasCurrencyID)
3564+
{
3565+
data.CurrencyID = packet.ReadInt32("CurrencyID", indexes);
3566+
}
3567+
return data;
3568+
}
3569+
35303570
public static ICraftingOrderItem ReadCreateCraftingOrderItem(Packet packet, params object[] indexes)
35313571
{
35323572
var data = new CraftingOrderItem();
35333573
packet.ResetBitReader();
35343574
var hasDataSlotIndex = false;
35353575
data.OrderItemID = packet.ReadUInt64("OrderItemID", indexes);
3576+
data.OrderItemType = packet.ReadInt32("OrderItemType", indexes);
35363577
data.ItemGUID = packet.ReadPackedGuid128("ItemGUID", indexes);
35373578
data.OwnerGUID = packet.ReadPackedGuid128("OwnerGUID", indexes);
3538-
data.ItemID = packet.ReadInt32("ItemID", indexes);
35393579
data.Quantity = packet.ReadUInt32("Quantity", indexes);
35403580
data.ReagentQuality = packet.ReadInt32("ReagentQuality", indexes);
3541-
hasDataSlotIndex = packet.ReadBit("HasDataSlotIndex", indexes);
3581+
data.Flags = packet.ReadUInt32("Flags", indexes);
3582+
data.Reagent = ReadCreateCraftingReagentBase(packet, indexes, "Reagent");
35423583
packet.ResetBitReader();
3584+
hasDataSlotIndex = packet.ReadBit("HasDataSlotIndex", indexes);
35433585
if (hasDataSlotIndex)
35443586
{
35453587
data.DataSlotIndex = packet.ReadByte("DataSlotIndex", indexes);
@@ -3552,42 +3594,65 @@ public static ICraftingOrderItem ReadUpdateCraftingOrderItem(Packet packet, para
35523594
var data = new CraftingOrderItem();
35533595
packet.ResetBitReader();
35543596
var rawChangesMask = new int[1];
3555-
rawChangesMask[0] = (int)packet.ReadBits(7);
3597+
rawChangesMask[0] = (int)packet.ReadBits(12);
35563598
var changesMask = new BitArray(rawChangesMask);
35573599

35583600
var hasDataSlotIndex = false;
35593601
packet.ResetBitReader();
35603602
if (changesMask[0])
35613603
{
3562-
data.OrderItemID = packet.ReadUInt64("OrderItemID", indexes);
3563-
}
3564-
if (changesMask[1])
3565-
{
3566-
data.ItemGUID = packet.ReadPackedGuid128("ItemGUID", indexes);
3604+
if (changesMask[1])
3605+
{
3606+
data.OrderItemID = packet.ReadUInt64("OrderItemID", indexes);
3607+
}
3608+
if (changesMask[2])
3609+
{
3610+
data.OrderItemType = packet.ReadInt32("OrderItemType", indexes);
3611+
}
3612+
if (changesMask[3])
3613+
{
3614+
data.ItemGUID = packet.ReadPackedGuid128("ItemGUID", indexes);
3615+
}
35673616
}
3568-
if (changesMask[2])
3617+
if (changesMask[4])
35693618
{
3570-
data.OwnerGUID = packet.ReadPackedGuid128("OwnerGUID", indexes);
3619+
if (changesMask[5])
3620+
{
3621+
data.OwnerGUID = packet.ReadPackedGuid128("OwnerGUID", indexes);
3622+
}
3623+
if (changesMask[7])
3624+
{
3625+
data.Quantity = packet.ReadUInt32("Quantity", indexes);
3626+
}
35713627
}
3572-
if (changesMask[3])
3628+
if (changesMask[8])
35733629
{
3574-
data.ItemID = packet.ReadInt32("ItemID", indexes);
3630+
if (changesMask[9])
3631+
{
3632+
data.ReagentQuality = packet.ReadInt32("ReagentQuality", indexes);
3633+
}
3634+
if (changesMask[11])
3635+
{
3636+
data.Flags = packet.ReadUInt32("Flags", indexes);
3637+
}
35753638
}
35763639
if (changesMask[4])
35773640
{
3578-
data.Quantity = packet.ReadUInt32("Quantity", indexes);
3579-
}
3580-
if (changesMask[5])
3581-
{
3582-
data.ReagentQuality = packet.ReadInt32("ReagentQuality", indexes);
3641+
if (changesMask[6])
3642+
{
3643+
data.Reagent = ReadUpdateCraftingReagentBase(packet, indexes, "Reagent");
3644+
}
35833645
}
3584-
hasDataSlotIndex = packet.ReadBit("HasDataSlotIndex", indexes);
35853646
packet.ResetBitReader();
3586-
if (changesMask[6])
3647+
if (changesMask[8])
35873648
{
3588-
if (hasDataSlotIndex)
3649+
hasDataSlotIndex = packet.ReadBit("HasDataSlotIndex", indexes);
3650+
if (changesMask[10])
35893651
{
3590-
data.DataSlotIndex = packet.ReadByte("DataSlotIndex", indexes);
3652+
if (hasDataSlotIndex)
3653+
{
3654+
data.DataSlotIndex = packet.ReadByte("DataSlotIndex", indexes);
3655+
}
35913656
}
35923657
}
35933658
return data;

0 commit comments

Comments
 (0)