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; } } }
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; }