private void saveToolStripMenuItem_Click(object sender, EventArgs e) { if (pcc == null) { return; } pcc.save(); MessageBox.Show("Done."); }
public void Save() { int tmp1, tmp2, size; if (pcc == null) { return; } MemoryStream m = new MemoryStream(); m.Write(BitConverter.GetBytes(Unk1), 0, 4); foreach (PropertyReader.Property p in Props) { switch (pcc.getNameEntry(p.Name)) { case "m_StartingList": m.Write(p.raw, 0, 0x10); m.Write(BitConverter.GetBytes(StartingList.Count * 4 + 4), 0, 4); m.Write(BitConverter.GetBytes(0), 0, 4); m.Write(BitConverter.GetBytes(StartingList.Count), 0, 4); foreach (int i in StartingList) { m.Write(BitConverter.GetBytes(i), 0, 4); } break; case "m_EntryList": tmp1 = (int)m.Position; m.Write(p.raw, 0, 0x10); m.Write(new byte[8], 0, 8); m.Write(BitConverter.GetBytes(EntryList.Count), 0, 4); size = 4; foreach (EntryListStuct el in EntryList) { size += WriteEntryList(m, el); } tmp2 = (int)m.Position; m.Seek(tmp1 + 0x10, 0); m.Write(BitConverter.GetBytes(size), 0, 4); m.Seek(tmp2, 0); break; case "m_ReplyList": tmp1 = (int)m.Position; m.Write(p.raw, 0, 0x10); m.Write(new byte[8], 0, 8); m.Write(BitConverter.GetBytes(ReplyList.Count), 0, 4); size = 4; foreach (ReplyListStruct rp in ReplyList) { size += WriteReplyList(m, rp); } tmp2 = (int)m.Position; m.Seek(tmp1 + 0x10, 0); m.Write(BitConverter.GetBytes(size), 0, 4); m.Seek(tmp2, 0); break; case "m_aSpeakerList": tmp1 = (int)m.Position; m.Write(p.raw, 0, 0x10); m.Write(new byte[8], 0, 8); //size placeholder m.Write(BitConverter.GetBytes(SpeakerList.Count), 0, 4); size = 4; foreach (SpeakerListStruct sp in SpeakerList) { size += WriteSpeakerList(m, sp); } tmp2 = (int)m.Position; m.Seek(tmp1 + 0x10, 0); m.Write(BitConverter.GetBytes(size), 0, 4); m.Seek(tmp2, 0); break; case "m_aFemaleFaceSets": m.Write(p.raw, 0, 0x10); m.Write(BitConverter.GetBytes(FemaleFaceSets.Count * 4 + 4), 0, 4); m.Write(BitConverter.GetBytes(0), 0, 4); m.Write(BitConverter.GetBytes(FemaleFaceSets.Count), 0, 4); foreach (int i in FemaleFaceSets) { m.Write(BitConverter.GetBytes(i), 0, 4); } break; case "m_aMaleFaceSets": m.Write(p.raw, 0, 0x10); m.Write(BitConverter.GetBytes(MaleFaceSets.Count * 4 + 4), 0, 4); m.Write(BitConverter.GetBytes(0), 0, 4); m.Write(BitConverter.GetBytes(MaleFaceSets.Count), 0, 4); foreach (int i in MaleFaceSets) { m.Write(BitConverter.GetBytes(i), 0, 4); } break; case "m_ScriptList": tmp1 = (int)m.Position; m.Write(p.raw, 0, 0x10); m.Write(new byte[8], 0, 8); //size placeholder m.Write(BitConverter.GetBytes(ScriptList.Count), 0, 4); size = 4; foreach (ScriptListStruct sd in ScriptList) { size += WriteScriptList(m, sd); } tmp2 = (int)m.Position; m.Seek(tmp1 + 0x10, 0); m.Write(BitConverter.GetBytes(size), 0, 4); m.Seek(tmp2, 0); break; default: m.Write(p.raw, 0, p.raw.Length); break; } } pcc.Exports[MyIndex].Data = m.ToArray(); pcc.save(pcc.FileName); }