Beispiel #1
0
        public override void Save()
        {
            MagicQuartz[] quartz = new MagicQuartz[151];
            using (var stream = WriteFile("t_magic._dt"))
                using (var writer = new BinaryWriter(stream))
                {
                    long p = magics.Length * 2;
                    for (int i = 0; i < magics.Length; i++)
                    {
                        writer.Write((ushort)p);
                        long pos = stream.Position;
                        stream.Position = p;
                        if (magics[i] != null)
                        {
                            if (i < quartz.Length)
                            {
                                quartz[i] = magics[i].Quartz;
                            }
                            byte[] str1 = Helper.Encoding.GetBytes(magics[i].Name);
                            byte[] str2 = Helper.Encoding.GetBytes(magics[i].Description);
                            magics[i].Field.Str1 = (ushort)(p + Marshal.SizeOf(typeof(MagicField)));
                            magics[i].Field.Str2 = (ushort)(magics[i].Field.Str1 + str1.Length + 1);
                            WriteStruct(stream, magics[i].Field);
                            stream.Write(str1, 0, str1.Length);
                            writer.Write((byte)0);
                            stream.Write(str2, 0, str2.Length);
                            writer.Write((byte)0);
                            p = stream.Position;
                        }
                        stream.Position = pos;
                    }
                }
            using (var stream = WriteFile("t_magqrt._dt"))
                using (var writer = new BinaryWriter(stream))
                {
                    long p = quartz.Length * 2;
                    for (int i = 0; i < quartz.Length; i++)
                    {
                        writer.Write((ushort)p);
                        long pos = stream.Position;
                        stream.Position = p;
                        if (quartz[i] != null)
                        {
#if AONOKISEKI
                            quartz[i].ID = (byte)i;
#else
                            quartz[i].ID = (ushort)i;
#endif
                            WriteStruct(stream, quartz[i]);
                            p = stream.Position;
                        }
                        stream.Position = pos;
                    }
                }
        }
Beispiel #2
0
        public override void Load()
        {
#if AONOKISEKI
            Magic[] magics = new Magic[433];
#else
            Magic[] magics = new Magic[350];
#endif
            MagicQuartz[] quartz = new MagicQuartz[151];
#if AONOKISEKI
            ushort[] lp = new ushort[433];
#else
            ushort[] lp = new ushort[350];
#endif
            using (var stream = ReadFile("t_magqrt._dt"))
                using (var reader = new BinaryReader(stream))
                {
                    for (int i = 0; i < quartz.Length; i++)
                    {
                        lp[i] = reader.ReadUInt16();
                    }
                    for (int i = 0; i < quartz.Length; i++)
                    {
                        stream.Position = lp[i];
                        MagicQuartz quart = ReadStrcuture <MagicQuartz>(stream);
#if AONOKISEKI
                        if (quart.ID != 255)
#else
                        if (quart.ID != 999)
#endif
                        { quartz[quart.ID] = quart; }
                    }
                }
            using (var stream = ReadFile("t_magic._dt"))
                using (var reader = new BinaryReader(stream))
                {
                    for (int i = 0; i < lp.Length; i++)
                    {
                        lp[i] = reader.ReadUInt16();
                    }
                    for (int i = 0; i < lp.Length; i++)
                    {
                        if (i + 1 < lp.Length && lp[i + 1] - lp[i] <= 4)
                        {
                            continue;
                        }
                        Magic magic = new Magic();
                        stream.Seek(lp[i], SeekOrigin.Begin);
                        magic.Field = ReadStrcuture <MagicField>(stream);
                        stream.Seek(magic.Field.Str1, SeekOrigin.Begin);
                        magic.Name = ReadString(stream);
                        stream.Seek(magic.Field.Str2, SeekOrigin.Begin);
                        magic.Description = ReadString(stream);
                        if (i < quartz.Length)
                        {
                            magic.Quartz = quartz[i];
                        }
                        magic.ID  = i;
                        magics[i] = magic;
                    }
                }
            this.magics = magics;
        }