Skip to content

Commit

Permalink
[4.3.0] Parsing SMSG_DB_REPLY. Here it is Aokromes. <3
Browse files Browse the repository at this point in the history
  • Loading branch information
Therzok committed Jan 17, 2013
1 parent 626ff1e commit 462a338
Show file tree
Hide file tree
Showing 2 changed files with 170 additions and 1 deletion.
1 change: 1 addition & 0 deletions WowPacketParser/Enums/ItemModType.cs
Expand Up @@ -47,5 +47,6 @@ public enum ItemModType : sbyte
HealthRegeneration = 46,
SpellPenetration = 47,
BlockValue = 48,
Mastery = 49,
}
}
170 changes: 169 additions & 1 deletion WowPacketParser/Parsing/Parsers/ItemHandler.cs
Expand Up @@ -793,7 +793,175 @@ public static void HandleDBReply(Packet packet)
packet.AddSniffData(StoreNameType.Item, itemId, "DB_REPLY");
}

[Parser(Opcode.SMSG_DB_REPLY, ClientVersionBuild.V4_3_0_15005)]
[Parser(Opcode.SMSG_DB_REPLY, ClientVersionBuild.V4_3_0_15005, ClientVersionBuild.V4_3_4_15595)]
public static void HandleDBReply430(Packet packet)
{
var size = packet.ReadUInt32("Size");
if (size == 0)
return;

if (size == 32)
{
var item = new ItemTemplate();
var itemId2 = packet.ReadEntryWithName<UInt32>(StoreNameType.Item, "Entry");
item.Class = packet.ReadEnum<ItemClass>("Class", TypeCode.Int32);
item.SubClass = packet.ReadUInt32("Sub Class");
item.SoundOverrideSubclass = packet.ReadInt32("Sound Override Subclass");
item.Material = packet.ReadEnum<Material>("Material", TypeCode.Int32);
packet.ReadUInt32("Unk");
item.InventoryType = packet.ReadEnum<InventoryType>("Inventory Type", TypeCode.UInt32);
item.SheathType = packet.ReadEnum<SheathType>("Sheath Type", TypeCode.Int32);

Storage.ItemTemplates.Add((uint)itemId2, item, packet.TimeSpan);
}
else if (size == 36)
{
packet.ReadUInt32("Unk");
packet.ReadUInt32("Unk");
packet.ReadUInt32("Unk");
packet.ReadUInt32("Unk");
packet.ReadUInt32("Unk");
packet.ReadUInt32("Unk");
packet.ReadUInt32("Unk");
packet.ReadUInt32("Unk");
packet.ReadUInt32("Unk");
}
else
{
var itemId2 = packet.ReadEntryWithName<UInt32>(StoreNameType.Item, "Entry");
var item = Storage.ItemTemplates.ContainsKey((uint)itemId2) ? Storage.ItemTemplates[(uint)itemId2].Item1 : new ItemTemplate();

item.Quality = packet.ReadEnum<ItemQuality>("Quality", TypeCode.Int32);
item.Flags = packet.ReadEnum<ItemFlag>("Flags", TypeCode.Int32);
item.ExtraFlags = packet.ReadEnum<ItemFlagExtra>("Extra Flags", TypeCode.Int32);
item.Unk430_1 = packet.ReadSingle("Unk430_1");
item.Unk430_2 = packet.ReadSingle("Unk430_2");
item.BuyCount = packet.ReadUInt32("Buy count");
item.BuyPrice = packet.ReadUInt32("Buy Price");
item.SellPrice = packet.ReadUInt32("Sell Price");
item.InventoryType = packet.ReadEnum<InventoryType>("Inventory Type", TypeCode.Int32);
item.AllowedClasses = packet.ReadEnum<ClassMask>("Allowed Classes", TypeCode.Int32);
item.AllowedRaces = packet.ReadEnum<RaceMask>("Allowed Races", TypeCode.Int32);
item.ItemLevel = packet.ReadUInt32("Item Level");
item.RequiredLevel = packet.ReadUInt32("Required Level");
item.RequiredSkillId = packet.ReadUInt32("Required Skill ID");
item.RequiredSkillLevel = packet.ReadUInt32("Required Skill Level");
item.RequiredSpell = (uint)packet.ReadEntryWithName<Int32>(StoreNameType.Spell, "Required Spell");
item.RequiredHonorRank = packet.ReadUInt32("Required Honor Rank");
item.RequiredCityRank = packet.ReadUInt32("Required City Rank");
item.RequiredRepFaction = packet.ReadUInt32("Required Rep Faction");
item.RequiredRepValue = packet.ReadUInt32("Required Rep Value");
item.MaxCount = packet.ReadInt32("Max Count");
item.MaxStackSize = packet.ReadInt32("Max Stack Size");
item.ContainerSlots = packet.ReadUInt32("Container Slots");

item.StatTypes = new ItemModType[10];
for (var i = 0; i < 10; i++)
{
var statType = packet.ReadEnum<ItemModType>("Stat Type", TypeCode.Int32, i);
item.StatTypes[i] = statType == ItemModType.None ? ItemModType.Mana : statType; // TDB
}

item.StatValues = new int[10];
for (var i = 0; i < 10; i++)
item.StatValues[i] = packet.ReadInt32("Stat Value", i);

item.StatUnk1 = new int[10];
for (var i = 0; i < 10; i++)
item.StatUnk1[i] = packet.ReadInt32("Unk UInt32 1", i);

item.StatUnk2 = new int[10];
for (var i = 0; i < 10; i++)
item.StatUnk2[i] = packet.ReadInt32("Unk UInt32 2", i);

item.ScalingStatDistribution = packet.ReadInt32("Scaling Stat Distribution");
item.DamageType = packet.ReadEnum<DamageType>("Damage Type", TypeCode.Int32);
item.Delay = packet.ReadUInt32("Delay");
item.RangedMod = packet.ReadSingle("Ranged Mod");

item.TriggeredSpellIds = new int[5];
for (var i = 0; i < 5; i++)
item.TriggeredSpellIds[i] = packet.ReadEntryWithName<Int32>(StoreNameType.Spell, "Triggered Spell ID", i);

item.TriggeredSpellTypes = new ItemSpellTriggerType[5];
for (var i = 0; i < 5; i++)
item.TriggeredSpellTypes[i] = packet.ReadEnum<ItemSpellTriggerType>("Trigger Spell Type", TypeCode.Int32, i);

item.TriggeredSpellCharges = new int[5];
for (var i = 0; i < 5; i++)
item.TriggeredSpellCharges[i] = packet.ReadInt32("Triggered Spell Charges", i);

item.TriggeredSpellCooldowns = new int[5];
for (var i = 0; i < 5; i++)
item.TriggeredSpellCooldowns[i] = packet.ReadInt32("Triggered Spell Cooldown", i);

item.TriggeredSpellCategories = new uint[5];
for (var i = 0; i < 5; i++)
item.TriggeredSpellCategories[i] = packet.ReadUInt32("Triggered Spell Category", i);

item.TriggeredSpellCategoryCooldowns = new int[5];
for (var i = 0; i < 5; i++)
item.TriggeredSpellCategoryCooldowns[i] = packet.ReadInt32("Triggered Spell Category Cooldown", i);

item.Bonding = packet.ReadEnum<ItemBonding>("Bonding", TypeCode.Int32);

if (packet.ReadUInt16() > 0)
item.Name = packet.ReadCString("Name", 0);

for (var i = 1; i < 4; ++i)
if (packet.ReadUInt16() > 0)
packet.ReadCString("Name", i);

if (packet.ReadUInt16() > 0)
item.Description = packet.ReadCString("Description");

item.PageText = packet.ReadUInt32("Page Text");
item.Language = packet.ReadEnum<Language>("Language", TypeCode.Int32);
item.PageMaterial = packet.ReadEnum<PageMaterial>("Page Material", TypeCode.Int32);
item.StartQuestId = (uint)packet.ReadEntryWithName<Int32>(StoreNameType.Quest, "Start Quest");
item.LockId = packet.ReadUInt32("Lock ID");
item.Material = packet.ReadEnum<Material>("Material", TypeCode.Int32);
item.SheathType = packet.ReadEnum<SheathType>("Sheath Type", TypeCode.Int32);
item.RandomPropery = packet.ReadInt32("Random Property");
item.RandomSuffix = packet.ReadUInt32("Random Suffix");
item.ItemSet = packet.ReadUInt32("Item Set");
item.AreaId = (uint)packet.ReadEntryWithName<UInt32>(StoreNameType.Area, "Area");
// In this single (?) case, map 0 means no map
var map = packet.ReadInt32();
item.MapId = map;
packet.WriteLine("Map ID: " + (map != 0 ? StoreGetters.GetName(StoreNameType.Map, map) : map + " (No map)"));
item.BagFamily = packet.ReadEnum<BagFamilyMask>("Bag Family", TypeCode.Int32);
item.TotemCategory = packet.ReadEnum<TotemCategory>("Totem Category", TypeCode.Int32);

item.ItemSocketColors = new ItemSocketColor[3];
for (var i = 0; i < 3; i++)
item.ItemSocketColors[i] = packet.ReadEnum<ItemSocketColor>("Socket Color", TypeCode.Int32, i);

item.SocketContent = new uint[3];
for (var i = 0; i < 3; i++)
item.SocketContent[i] = packet.ReadUInt32("Socket Item", i);

item.SocketBonus = packet.ReadInt32("Socket Bonus");
item.GemProperties = packet.ReadInt32("Gem Properties");
item.ArmorDamageModifier = packet.ReadSingle("Armor Damage Modifier");
item.Duration = packet.ReadUInt32("Duration");
item.ItemLimitCategory = packet.ReadInt32("Limit Category");
item.HolidayId = packet.ReadEnum<Holiday>("Holiday", TypeCode.Int32);
item.StatScalingFactor = packet.ReadSingle("Stat Scaling Factor");
item.CurrencySubstitutionId = packet.ReadUInt32("Currency Substitution Id");
item.CurrencySubstitutionCount = packet.ReadUInt32("Currency Substitution Count");

Storage.ObjectNames.Add((uint)itemId2, new ObjectName { ObjectType = ObjectType.Item, Name = item.Name }, packet.TimeSpan);
}

var type = packet.ReadUInt32("Type");
packet.ReadTime("Hotfix date");
var itemId = (uint)packet.ReadEntryWithName<UInt32>(StoreNameType.Item, "Entry");

packet.AddSniffData(StoreNameType.Item, (int)itemId, "DB_REPLY");
}

[Parser(Opcode.SMSG_DB_REPLY, ClientVersionBuild.V4_3_4_15595)]
public static void HandleDBReply434(Packet packet)
{
var itemId = (uint)packet.ReadEntryWithName<UInt32>(StoreNameType.Item, "Entry");
Expand Down

0 comments on commit 462a338

Please sign in to comment.