Beispiel #1
0
        internal static bool WriteInventory(Item[] inv, BinaryWriter writer, bool writeStack = false, bool writeFavorite = false)
        {
            ushort count = 0;

            byte[] data;
            using (MemoryStream stream = new MemoryStream())
            {
                using (BinaryWriter invWriter = new BinaryWriter(stream))
                {
                    for (int k = 0; k < inv.Length; k++)
                    {
                        if (ItemLoader.NeedsModSaving(inv[k]))
                        {
                            invWriter.Write((ushort)k);
                            ItemIO.WriteItem(inv[k], invWriter, writeStack, writeFavorite);
                            count++;
                        }
                    }
                }
                data = stream.ToArray();
            }
            if (count > 0)
            {
                writer.Write(count);
                writer.Write(data);
                return(true);
            }
            return(false);
        }
Beispiel #2
0
        //in Terraria.GameContent.Tile_Entities.TEItemFrame.WriteExtraData
        //  if item is a mod item write 0 as the ID
        internal static bool WriteContainers(BinaryWriter writer)
        {
            byte[]                 flags      = new byte[1];
            byte                   numFlags   = 0;
            ISet <int>             headSlots  = new HashSet <int>();
            ISet <int>             bodySlots  = new HashSet <int>();
            ISet <int>             legSlots   = new HashSet <int>();
            IDictionary <int, int> itemFrames = new Dictionary <int, int>();

            for (int i = 0; i < Main.maxTilesX; i++)
            {
                for (int j = 0; j < Main.maxTilesY; j++)
                {
                    Tile tile = Main.tile[i, j];
                    if (tile.active() && (tile.type == TileID.Mannequin || tile.type == TileID.Womannequin))
                    {
                        int slot     = tile.frameX / 100;
                        int position = tile.frameY / 18;
                        if (HasModArmor(slot, position))
                        {
                            if (position == 0)
                            {
                                headSlots.Add(slot);
                            }
                            else if (position == 1)
                            {
                                bodySlots.Add(slot);
                            }
                            else if (position == 2)
                            {
                                legSlots.Add(slot);
                            }
                            flags[0] |= 1;
                            numFlags  = 1;
                        }
                    }
                }
            }
            int tileEntity = 0;

            foreach (KeyValuePair <int, TileEntity> entity in TileEntity.ByID)
            {
                TEItemFrame itemFrame = entity.Value as TEItemFrame;
                if (itemFrame != null && ItemLoader.NeedsModSaving(itemFrame.item))
                {
                    itemFrames.Add(itemFrame.ID, tileEntity);
                    flags[0] |= 2;
                    numFlags  = 1;
                }
                tileEntity++;
            }
            if (numFlags == 0)
            {
                return(false);
            }
            writer.Write(numFlags);
            writer.Write(flags, 0, numFlags);
            if ((flags[0] & 1) == 1)
            {
                writer.Write((ushort)headSlots.Count);
                foreach (int slot in headSlots)
                {
                    writer.Write((ushort)slot);
                    ModItem item = ItemLoader.GetItem(EquipLoader.slotToId[EquipType.Head][slot]);
                    writer.Write(item.mod.Name);
                    writer.Write(Main.itemName[item.item.type]);
                }
                writer.Write((ushort)bodySlots.Count);
                foreach (int slot in bodySlots)
                {
                    writer.Write((ushort)slot);
                    ModItem item = ItemLoader.GetItem(EquipLoader.slotToId[EquipType.Body][slot]);
                    writer.Write(item.mod.Name);
                    writer.Write(Main.itemName[item.item.type]);
                }
                writer.Write((ushort)legSlots.Count);
                foreach (int slot in legSlots)
                {
                    writer.Write((ushort)slot);
                    ModItem item = ItemLoader.GetItem(EquipLoader.slotToId[EquipType.Legs][slot]);
                    writer.Write(item.mod.Name);
                    writer.Write(Main.itemName[item.item.type]);
                }
                WriteContainerData(writer);
            }
            if ((flags[0] & 2) == 2)
            {
                writer.Write(itemFrames.Count);
                foreach (int oldID in itemFrames.Keys)
                {
                    TEItemFrame itemFrame = TileEntity.ByID[oldID] as TEItemFrame;
                    writer.Write(itemFrames[oldID]);
                    ItemIO.WriteItem(itemFrame.item, writer, true);
                }
            }
            return(true);
        }