public static Inventory.SubInventory ReadSubInventory(NodeEntry inventoryNode, uint nodeOffset, BinaryReader reader, List <INodeParser> parsers) { var subInventory = new Inventory.SubInventory(); subInventory.InventoryId = reader.ReadUInt64(); var count = reader.ReadUInt32(); var parser = parsers.FirstOrDefault(p => p.ParsableNodeName == Constants.NodeNames.ITEM_DATA); Debug.Assert(parser != null); for (var i = 0; i < count; ++i) { var nextItemHeader = ItemDataParser.ReadNextItemEntry(reader); var item = (ItemData)parser.Read(inventoryNode.Children[(int)nodeOffset + i], reader, parsers); if (!nextItemHeader.BelongsToItemData(item)) { throw new InvalidDataException($"Expected next item to be '{nextItemHeader}' but found '{item}'"); } subInventory.Items.Add(item); inventoryNode.Children[(int)nodeOffset + i].Value = item; item.Node = inventoryNode.Children[(int)nodeOffset + i]; } return(subInventory); }
public static void WriteSubInventory(NodeWriter writer, Inventory.SubInventory subInventory) { writer.Write(subInventory.InventoryId); writer.Write(subInventory.NumberOfItems); for (var i = 0; i < subInventory.NumberOfItems; ++i) { var nextItem = subInventory.Items[i]; ItemDataParser.WriteNextItemEntryFromItem(writer, nextItem); writer.Write(nextItem.Node); } }
public static void WriteSubInventory(NodeEntry inventoryNode, uint nodeOffset, BinaryWriter writer, Inventory.SubInventory subInventory, List <INodeParser> parsers) { writer.Write(subInventory.InventoryId); writer.Write(subInventory.NumberOfItems); var parser = parsers.Where(p => p.ParsableNodeName == Constants.NodeNames.ITEM_DATA).FirstOrDefault(); Debug.Assert(parser != null); for (var i = 0; i < subInventory.NumberOfItems; ++i) { ItemDataParser.WriteNextItemEntry(writer, subInventory.ItemHeaders[i]); writer.Write(parser.Write(inventoryNode.Children[(int)nodeOffset + i], parsers)); } }
public static Inventory.SubInventory ReadSubInventory(NodeEntry inventoryNode, uint nodeOffset, BinaryReader reader, List <INodeParser> parsers) { var subInventory = new Inventory.SubInventory(); subInventory.InventoryId = reader.ReadUInt64(); subInventory.NumberOfItems = reader.ReadUInt32(); subInventory.ItemHeaders = new ItemData.NextItemEntry[subInventory.NumberOfItems]; subInventory.Items = new ItemData[subInventory.NumberOfItems]; var parser = parsers.Where(p => p.ParsableNodeName == Constants.NodeNames.ITEM_DATA).FirstOrDefault(); Debug.Assert(parser != null); for (var i = 0; i < subInventory.NumberOfItems; ++i) { subInventory.ItemHeaders[i] = ItemDataParser.ReadNextItemEntry(reader); subInventory.Items[i] = (ItemData)parser.Read(inventoryNode.Children[(int)nodeOffset + i], reader, parsers); inventoryNode.Children[(int)nodeOffset + i].Value = subInventory.Items[i]; } return(subInventory); }