public static Equipment Read(BinaryReader reader) { var result = new Equipment { SortIndex = reader.ReadUInt32(), Type = (EquipmentType)reader.ReadUInt32() }; if (result.Type == EquipmentType.None) { reader.BaseStream.Seek(15 * 4, SeekOrigin.Current); return(null); } uint value; value = reader.ReadUInt32(); switch (result.Type) { case EquipmentType.Armor: result.ArmorPieceType = (ArmorPieceType)value; break; case EquipmentType.Weapon: result.WeaponType = (WeaponType)value; break; case EquipmentType.Charm: result.CharmId = value; break; case EquipmentType.Kinsect: result.KinsectId = value; break; } result.ClassId = reader.ReadUInt32(); result.UpgradeLevel = reader.ReadUInt32(); result.UpgradePoints = reader.ReadUInt32(); result.DecorationSlots = new[] { (Decoration)reader.ReadUInt32(), (Decoration)reader.ReadUInt32(), (Decoration)reader.ReadUInt32() }; if (result.Type == EquipmentType.Kinsect) { result.KinsectType = (KinsectType)reader.ReadUInt32(); reader.BaseStream.Seek(2 * 4, SeekOrigin.Current); // skip BowgunMod2 and BowgunMod3 } else if (result.Type == EquipmentType.Weapon && (result.WeaponType == WeaponType.LightBowgun || result.WeaponType == WeaponType.HeavyBowgun)) { result.BowgunMods = new[] { (BowGunMod)reader.ReadUInt32(), (BowGunMod)reader.ReadUInt32(), (BowGunMod)reader.ReadUInt32(), }; } else { reader.BaseStream.Seek(3 * 4, SeekOrigin.Current); } result.Augmentations = new[] { (AugmentationType)reader.ReadUInt32(), (AugmentationType)reader.ReadUInt32(), (AugmentationType)reader.ReadUInt32(), }; // skip 2 Unknown reader.BaseStream.Seek(2 * 4, SeekOrigin.Current); return(result); }