public override void ExploreSubItem(StreamWriter outputStream, ref ByteStream buffer) { buffer.SkipBytes(8); byte Area = buffer.ReadByte(); UInt16 MainSlot = buffer.ReadUInt16(); Int16 SubSlot = buffer.ReadInt16(); buffer.SkipBytes(54); string Name = buffer.ReadString(true); if (SubSlot >= 0) outputStream.Write(" "); string AreaName = "Unknown"; switch (Area) { case 0: AreaName = "Personal Inventory"; break; case 1: AreaName = "Bank"; break; case 2: AreaName = "Shared Bank"; break; case 6: AreaName = "Personal Tribute"; break; case 7: AreaName = "Guild Tribute"; break; case 8: AreaName = "Merchant"; break; } outputStream.WriteLine("Area: {0} {1} Main Slot {2,2} Sub Slot {3,3} Name {4}", Area, AreaName.PadRight(20), MainSlot, SubSlot, Name); buffer.ReadString(true); // Lore buffer.ReadString(true); // IDFile //Buffer.SkipBytes(236); // Item Body Struct UInt32 ID = buffer.ReadUInt32(); byte Weight = buffer.ReadByte(); byte NoRent = buffer.ReadByte(); byte NoDrop = buffer.ReadByte(); byte Attune = buffer.ReadByte(); byte Size = buffer.ReadByte(); outputStream.WriteLine(" ID: {0} Weight: {1} NoRent: {2} NoDrop: {3} Attune {4} Size {5}", ID, Weight, NoRent, NoDrop, Attune, Size); UInt32 Slots = buffer.ReadUInt32(); UInt32 Price = buffer.ReadUInt32(); UInt32 Icon = buffer.ReadUInt32(); buffer.SkipBytes(2); UInt32 BenefitFlags = buffer.ReadUInt32(); byte Tradeskills = buffer.ReadByte(); outputStream.WriteLine(" Slots: {0} Price: {1} Icon: {2} BenefitFlags {3} Tradeskills: {4}", Slots, Price, Icon, BenefitFlags, Tradeskills); byte CR = buffer.ReadByte(); byte DR = buffer.ReadByte(); byte PR = buffer.ReadByte(); byte MR = buffer.ReadByte(); byte FR = buffer.ReadByte(); byte SVC = buffer.ReadByte(); outputStream.WriteLine(" CR: {0} DR: {1} PR: {2} MR: {3} FR: {4} SVC: {5}", CR, DR, PR, MR, FR, SVC); byte AStr = buffer.ReadByte(); byte ASta = buffer.ReadByte(); byte AAgi = buffer.ReadByte(); byte ADex = buffer.ReadByte(); byte ACha = buffer.ReadByte(); byte AInt = buffer.ReadByte(); byte AWis = buffer.ReadByte(); outputStream.WriteLine(" AStr: {0} ASta: {1} AAgi: {2} ADex: {3} ACha: {4} AInt: {5} AWis: {6}", AStr, ASta, AAgi, ADex, ACha, AInt, AWis); Int32 HP = buffer.ReadInt32(); Int32 Mana = buffer.ReadInt32(); UInt32 Endurance = buffer.ReadUInt32(); Int32 AC = buffer.ReadInt32(); Int32 Regen = buffer.ReadInt32(); Int32 ManaRegen = buffer.ReadInt32(); Int32 EndRegen = buffer.ReadInt32(); UInt32 Classes = buffer.ReadUInt32(); UInt32 Races = buffer.ReadUInt32(); UInt32 Deity = buffer.ReadUInt32(); Int32 SkillModValue = buffer.ReadInt32(); buffer.SkipBytes(4); UInt32 SkillModType = buffer.ReadUInt32(); UInt32 BaneDamageRace = buffer.ReadUInt32(); UInt32 BaneDamageBody = buffer.ReadUInt32(); UInt32 BaneDamageRaceAmount = buffer.ReadUInt32(); Int32 BaneDamageAmount = buffer.ReadInt32(); byte Magic = buffer.ReadByte(); Int32 CastTime = buffer.ReadInt32(); UInt32 ReqLevel = buffer.ReadUInt32(); UInt32 RecLevel = buffer.ReadUInt32(); UInt32 ReqSkill = buffer.ReadUInt32(); UInt32 BardType = buffer.ReadUInt32(); Int32 BardValue = buffer.ReadInt32(); byte Light = buffer.ReadByte(); byte Delay = buffer.ReadByte(); byte ElemDamageAmount = buffer.ReadByte(); byte ElemDamageType = buffer.ReadByte(); byte Range = buffer.ReadByte(); UInt32 Damage = buffer.ReadUInt32(); UInt32 Color = buffer.ReadUInt32(); byte ItemType = buffer.ReadByte(); UInt32 Material = buffer.ReadUInt32(); buffer.SkipBytes(4); UInt32 EliteMaterial = buffer.ReadUInt32(); float SellRate = buffer.ReadSingle(); Int32 CombatEffects = buffer.ReadInt32(); Int32 Shielding = buffer.ReadInt32(); Int32 StunResist = buffer.ReadInt32(); Int32 StrikeThrough = buffer.ReadInt32(); Int32 ExtraDamageSkill = buffer.ReadInt32(); Int32 ExtraDamageAmount = buffer.ReadInt32(); Int32 SpellShield = buffer.ReadInt32(); Int32 Avoidance = buffer.ReadInt32(); Int32 Accuracy = buffer.ReadInt32(); UInt32 CharmFileID = buffer.ReadUInt32(); UInt32 FactionMod1 = buffer.ReadUInt32(); Int32 FactionAmount1 = buffer.ReadInt32(); UInt32 FactionMod2 = buffer.ReadUInt32(); Int32 FactionAmount2 = buffer.ReadInt32(); UInt32 FactionMod3 = buffer.ReadUInt32(); Int32 FactionAmount3 = buffer.ReadInt32(); UInt32 FactionMod4 = buffer.ReadUInt32(); Int32 FactionAmount4 = buffer.ReadInt32(); buffer.ReadString(true); // Charm File buffer.SkipBytes(64); // Item Secondary Body Struct buffer.ReadString(true); // Filename buffer.SkipBytes(76); // Item Tertiary Body Struct buffer.SkipBytes(30); // Click Effect Struct buffer.ReadString(true); // Clickname buffer.SkipBytes(4); // clickunk7 buffer.SkipBytes(30); // Proc Effect Struct buffer.ReadString(true); // Proc Name buffer.SkipBytes(4); // unknown5 buffer.SkipBytes(30); // Worn Effect Struct buffer.ReadString(true); // Worn Name buffer.SkipBytes(4); // unknown6 buffer.SkipBytes(30); // Worn Effect Struct buffer.ReadString(true); // Worn Name buffer.SkipBytes(4); // unknown6 buffer.SkipBytes(30); // Worn Effect Struct buffer.ReadString(true); // Worn Name buffer.SkipBytes(4); // unknown6 buffer.SkipBytes(30); // Worn Effect Struct buffer.ReadString(true); // Worn Name buffer.SkipBytes(4); // unknown6 buffer.SkipBytes(103); // Item Quaternary Body Struct - 4 (we want to read the SubLength field at the end) UInt32 SubLengths = buffer.ReadUInt32(); for (int i = 0; i < SubLengths; ++i) { buffer.SkipBytes(4); ExploreSubItem(outputStream, ref buffer); } }