コード例 #1
0
        public override void Save()
        {
            if (items == null)
            {
                return;
            }
#if AONOKISEKI
            ItemQuartz[]    quartz = new ItemQuartz[120];
            MasterQuartz[]  master = new MasterQuartz[22];
            QuartzLevel[][] mqattr = new QuartzLevel[22][];
            for (int i = 0; i < mqattr.Length; i++)
            {
                mqattr[i] = items[(ushort)(i + 220)].Levels;
            }
#else
            ItemQuartz[] quartz = new ItemQuartz[200];
#endif
            for (int i = 0; i < quartz.Length; i++)
            {
                quartz[i] = new ItemQuartz {
                    ID = (ushort)i
                }
            }
            ;
            SortedList <ushort, Item>[] Item = new SortedList <ushort, Item> [18];
            for (int i = 0; i < Item.Length; i++)
            {
                Item[i] = new SortedList <ushort, Item>();
            }
            foreach (Item item in items.Values)
            {
                Item[item.Field.ID / 100][item.Field.ID] = item;
            }
            for (ushort i = 0; i < quartz.Length; i++)
            {
                try
                {
                    quartz[i] = items[(ushort)(i + 100)].quartz;
                }
                catch (KeyNotFoundException)
                {
                }
            }
#if AONOKISEKI
            for (ushort i = 0; i < master.Length; i++)
            {
                try{
                    master[i] = items[(ushort)(i + 220)].master;
                }
                catch (KeyNotFoundException)
                {
                }
            }
#endif
            using (var stream = WriteFile("t_quartz._dt"))
                using (var writer = new BinaryWriter(stream))
                {
#if AONOKISEKI
                    writer.Write((ushort)0);
#endif
                    foreach (var q in quartz)
                    {
                        WriteStruct(stream, q);
                    }
#if AONOKISEKI
                    long pos = stream.Position;
                    stream.Position = 0;
                    writer.Write((ushort)pos);
                    stream.Position = pos;
                    foreach (var q in master)
                    {
                        WriteStruct(stream, q);
                    }
#endif
                }
            //Item[9][999] = new Item { Field = new ItemField { ID = 999 } };
            //Item[17][9999] = new Item { Field = new ItemField { ID = 9999 } };
            using (var stream = WriteFile("t_item._dt"))
                using (var writer = new BinaryWriter(stream))
                {
                    stream.Seek(20, SeekOrigin.Begin);
                    long epos = 22;
                    for (int i = 0; i <= 9; i++)
                    {
                        epos += GetLength(Item[i]);
                    }
                    for (int i = 0; i <= 9; i++)
                    {
                        long bpos = stream.Position;
                        stream.Seek(i * 2, SeekOrigin.Begin);
                        writer.Write((ushort)bpos);
                        stream.Position = bpos;
                        int prev = i * 100;
                        foreach (var item in Item[i].Values)
                        {
                            for (int j = prev; j < item.Field.ID; j++)
                            {
                                writer.Write((ushort)epos);
                            }
                            prev = item.Field.ID + 1;
                            writer.Write((ushort)epos);
                            long ipos = stream.Position;
                            stream.Position = epos;
                            WriteStruct(stream, item.Field);
                            epos            = stream.Position;
                            stream.Position = ipos;
                        }
                        if (i == 9)
                        {
                            writer.Write((ushort)epos);
                            long ipos = stream.Position;
                            stream.Position = epos;
                            WriteStruct(stream, new ItemField {
                                ID = 999
                            });
                        }
                    }
                }
            using (var stream = WriteFile("t_item2._dt"))
                using (var writer = new BinaryWriter(stream))
                {
                    stream.Seek(16, SeekOrigin.Begin);
                    long epos = 18;
                    for (int i = 0; i <= 7; i++)
                    {
                        epos += GetLength(Item[i + 10]);
                    }
                    for (int i = 0; i <= 7; i++)
                    {
                        long bpos = stream.Position;
                        stream.Seek(i * 2, SeekOrigin.Begin);
                        writer.Write((ushort)bpos);
                        stream.Position = bpos;
                        int prev = 1000 + i * 100;
                        foreach (var item in Item[i + 10].Values)
                        {
                            for (int j = prev; j < item.Field.ID; j++)
                            {
                                writer.Write((ushort)epos);
                            }
                            prev = item.Field.ID + 1;
                            writer.Write((ushort)epos);
                            long ipos = stream.Position;
                            stream.Position = epos;
                            WriteStruct(stream, item.Field);
                            epos            = stream.Position;
                            stream.Position = ipos;
                        }
                        if (i == 7)
                        {
                            writer.Write((ushort)epos);
                            long ipos = stream.Position;
                            stream.Position = epos;
                            WriteStruct(stream, new ItemField {
                                ID = 9999
                            });
                        }
                    }
                }
            using (var stream = WriteFile("t_ittxt._dt"))
                using (var writer = new BinaryWriter(stream))
                {
                    stream.Seek(20, SeekOrigin.Begin);
                    long epos = 22;
                    for (int i = 0; i <= 9; i++)
                    {
                        epos += GetLength(Item[i]);
                    }
                    for (int i = 0; i <= 9; i++)
                    {
                        long bpos = stream.Position;
                        stream.Seek(i * 2, SeekOrigin.Begin);
                        writer.Write((ushort)bpos);
                        stream.Position = bpos;
                        int prev = i * 100;
                        foreach (var item in Item[i].Values)
                        {
                            for (int j = prev; j < item.Field.ID; j++)
                            {
                                writer.Write((ushort)epos);
                            }
                            prev = item.Field.ID + 1;
                            writer.Write((ushort)epos);
                            long ipos = stream.Position;
                            stream.Position = epos;
                            WriteItemStrings(writer, item);
                            epos            = stream.Position;
                            stream.Position = ipos;
                        }
                        if (i == 9)
                        {
                            writer.Write((ushort)epos);
                            long ipos = stream.Position;
                            stream.Position = epos;
                            WriteItemStrings(writer, new Item {
                                Field = new ItemField {
                                    ID = 999
                                }, Description = " ", Name = " "
                            });
                        }
                    }
                }
            using (var stream = WriteFile("t_ittxt2._dt"))
                using (var writer = new BinaryWriter(stream))
                {
                    stream.Seek(16, SeekOrigin.Begin);
                    long epos = 18;
                    for (int i = 0; i <= 7; i++)
                    {
                        epos += GetLength(Item[i + 10]);
                    }
                    for (int i = 0; i <= 7; i++)
                    {
                        long bpos = stream.Position;
                        stream.Seek(i * 2, SeekOrigin.Begin);
                        writer.Write((ushort)bpos);
                        stream.Position = bpos;
                        int prev = 1000 + i * 100;
                        foreach (var item in Item[i + 10].Values)
                        {
                            for (int j = prev; j < item.Field.ID; j++)
                            {
                                writer.Write((ushort)epos);
                            }
                            prev = item.Field.ID + 1;
                            writer.Write((ushort)epos);
                            long ipos = stream.Position;
                            stream.Position = epos;
                            WriteItemStrings(writer, item);
                            epos            = stream.Position;
                            stream.Position = ipos;
                        }
                        if (i == 7)
                        {
                            writer.Write((ushort)epos);
                            long ipos = stream.Position;
                            stream.Position = epos;
                            WriteItemStrings(writer, new Item {
                                Field = new ItemField {
                                    ID = 9999
                                }, Description = " ", Name = " "
                            });
                        }
                    }
                }
            using (var stream = WriteFile("t_mstqrt._dt"))
                using (var writer = new BinaryWriter(stream))
                {
                    for (int i = 0; i < mqattr.Length; i++)
                    {
                        for (int j = 0; j < 5; j++)
                        {
                            WriteStruct(stream, mqattr[i][j]);
                        }
                    }
                    var effects = Helper.GetEditorByType <MasterEffectsEditor>().MasterEffects;
                    var epos    = stream.Position + effects.Length * sizeof(ushort);
                    for (int i = 0; i < effects.Length; i++)
                    {
                        writer.Write((ushort)epos);
                        long pos = stream.Position;
                        stream.Position = epos;
                        var bytes = Helper.Encoding.GetBytes(effects[i]);
                        stream.Write(bytes, 0, bytes.Length);
                        stream.WriteByte(0);
                        epos            = stream.Position;
                        stream.Position = pos;
                    }
                }
        }
コード例 #2
0
        public override void Load()
        {
            SortedDictionary <ushort, Item> Item = new SortedDictionary <ushort, Item>();

#if AONOKISEKI
            ItemQuartz[]    quartz = new ItemQuartz[120];
            MasterQuartz[]  master = new MasterQuartz[22];
            QuartzLevel[][] mqattr = new QuartzLevel[22][];
            for (int i = 0; i < mqattr.Length; i++)
            {
                mqattr[i] = new QuartzLevel[5];
            }
#else
            ItemQuartz[] quartz = new ItemQuartz[200];
#endif
            using (var stream = ReadFile("t_quartz._dt"))
            {
                int i = 0;
#if AONOKISEKI
                var b1     = stream.ReadByte();
                var b2     = stream.ReadByte();
                var length = (ushort)b2 << 8 | b1;
#else
                var length = stream.Length;
#endif
                while (stream.Position < length)
                {
                    quartz[i++] = ReadStrcuture <ItemQuartz>(stream);
                }
#if AONOKISEKI
                i = 0;
                while (i < master.Length)
                {
                    master[i++] = ReadStrcuture <MasterQuartz>(stream);
                }
#endif
            }
            using (var stream = ReadFile("t_item._dt"))
                using (var reader = new BinaryReader(stream))
                {
                    ushort header = reader.ReadUInt16();
                    stream.Seek(header, SeekOrigin.Begin); //Skip Index Table;
                    ushort        end = reader.ReadUInt16();
                    ushort        pos = end;
                    List <ushort> lp  = new List <ushort>();
                    do
                    {
                        lp.Add(pos);
                        pos = reader.ReadUInt16();
                    } while (stream.Position < end);
                    //lp.Add(pos);
                    foreach (var p in lp)
                    {
                        Item item = new Item {
                            Name = "", Description = ""
                        };
                        stream.Seek(p, SeekOrigin.Begin);
                        item.Field = ReadStrcuture <ItemField>(stream);
                        if (item.Field.ID >= 100 && item.Field.ID < 100 + quartz.Length)
                        {
                            item.Quartz = quartz[item.Field.ID - 100];
#if AONOKISEKI
                        }
                        else if (item.Field.ID >= 220 && item.Field.ID < 242)
                        {
                            item.Quartz = master[item.Field.ID - 220];
#endif
                        }
                        Item[item.Field.ID] = item;
                    }
                }
            using (var stream = ReadFile("t_item2._dt"))
                using (var reader = new BinaryReader(stream))
                {
                    ushort header = reader.ReadUInt16();
                    stream.Seek(header, SeekOrigin.Begin); //Skip Index Table;
                    ushort        end = reader.ReadUInt16();
                    ushort        pos = end;
                    List <ushort> lp  = new List <ushort>();
                    do
                    {
                        lp.Add(pos);
                        pos = reader.ReadUInt16();
                    } while (stream.Position < end);
                    //lp.Add(pos);
                    foreach (var p in lp)
                    {
                        Item item = new Item {
                            Name = "", Description = ""
                        };
                        stream.Seek(p, SeekOrigin.Begin);
                        item.Field          = ReadStrcuture <ItemField>(stream);
                        Item[item.Field.ID] = item;
                    }
                }
            using (var stream = ReadFile("t_ittxt._dt"))
                using (var reader = new BinaryReader(stream))
                {
                    ushort header = reader.ReadUInt16();
                    stream.Seek(header, SeekOrigin.Begin); //Skip Index Table;
                    ushort        end = reader.ReadUInt16();
                    ushort        pos = end;
                    List <ushort> lp  = new List <ushort>();
                    do
                    {
                        lp.Add(pos);
                        pos = reader.ReadUInt16();
                    } while (stream.Position < end);
                    //lp.Add(pos);
                    foreach (var p in lp)
                    {
                        stream.Seek(p, SeekOrigin.Begin);
                        ushort id = reader.ReadUInt16();
                        reader.ReadUInt16(); //skip 0s
                        ushort p1 = reader.ReadUInt16();
                        ushort p2 = reader.ReadUInt16();
                        stream.Seek(p1, SeekOrigin.Begin);
                        Item[id].Name = EditorBase.ReadString(stream);
                        stream.Seek(p2, SeekOrigin.Begin);
                        Item[id].Description = EditorBase.ReadString(stream);
                    }
                }
            using (var stream = ReadFile("t_ittxt2._dt"))
                using (var reader = new BinaryReader(stream))
                {
                    ushort header = reader.ReadUInt16();
                    stream.Seek(header, SeekOrigin.Begin); //Skip Index Table;
                    ushort        end = reader.ReadUInt16();
                    ushort        pos = end;
                    List <ushort> lp  = new List <ushort>();
                    do
                    {
                        lp.Add(pos);
                        pos = reader.ReadUInt16();
                    } while (stream.Position < end);
                    //lp.Add(pos);
                    foreach (var p in lp)
                    {
                        stream.Seek(p, SeekOrigin.Begin);
                        ushort id = reader.ReadUInt16();
                        reader.ReadUInt16(); //skip 0s
                        ushort p1 = reader.ReadUInt16();
                        ushort p2 = reader.ReadUInt16();
                        stream.Seek(p1, SeekOrigin.Begin);
                        Item[id].Name = EditorBase.ReadString(stream);
                        stream.Seek(p2, SeekOrigin.Begin);
                        Item[id].Description = EditorBase.ReadString(stream);
                    }
                    Item.Remove(9999);
                }
            using (var stream = ReadFile("t_mstqrt._dt"))
                using (var reader = new BinaryReader(stream))
                {
                    for (int i = 0; i < mqattr.Length; i++)
                    {
                        for (int j = 0; j < 5; j++)
                        {
                            mqattr[i][j] = ReadStrcuture <QuartzLevel>(stream);
                        }
                        Item[(ushort)(220 + i)].Levels = mqattr[i];
                    }
                    List <ushort> pos = new List <ushort>();
                    do
                    {
                        pos.Add(reader.ReadUInt16());
                    } while (stream.Position < pos[0]);
                    string[] desc = new string[pos.Count];
                    for (int i = 0; i < desc.Length; i++)
                    {
                        stream.Position = pos[i];
                        desc[i]         = ReadString(stream);
                    }
                    Helper.GetEditorByType <MasterEffectsEditor>().Load(desc);
                }
            items = Item;
        }