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