public void WriteBinary(ArkArchive archive, WritingOptions options) { if (nameTableForWriteBinary != null) { archive.SetNameTable(OldNameList != null ? ((ListAppendingSet <string>)nameTableForWriteBinary).List : new List <string>(nameTableForWriteBinary)); } writeBinaryHeader(archive); writeBinaryDataFiles(archive); writeBinaryEmbeddedData(archive); writeBinaryDataFilesObjectMap(archive); writeBinaryObjects(archive); if (SaveVersion > 6) { writeBinaryHibernation(archive); } if (SaveVersion > 5) { writeNameTable(archive); } writeBinaryProperties(archive, options); }
private void readBinaryNameTable(ArkArchive archive) { long position = archive.Position; archive.Position = nameTableOffset; int nameCount = archive.ReadInt(); List <string> nameTable = new List <string>(nameCount); for (int n = 0; n < nameCount; n++) { nameTable.Add(archive.ReadString()); } archive.SetNameTable(nameTable); archive.Position = position; }
public void WriteBinary(ArkArchive archive) { archive.WriteFloat(X); archive.WriteFloat(Y); archive.WriteFloat(Z); archive.WriteByte(UnkByte); archive.WriteFloat(UnkFloat); archive.WriteInt(nameTableSize); ArkArchive nameArchive = archive.Slice(nameTableSize); nameArchive.WriteInt(3); nameArchive.WriteInt(nameTable.Count); nameTable.ForEach(nameArchive.WriteString); nameArchive.WriteInt(ZoneVolumes.Count); ZoneVolumes.ForEach(nameArchive.WriteName); archive.WriteInt(objectsSize); ArkArchive objectArchive = archive.Slice(objectsSize); objectArchive.WriteInt(Objects.Count); int currentOffset = propertiesStart; foreach (GameObject gameObject in Objects) { currentOffset = gameObject.WriteBinary(objectArchive, currentOffset); } objectArchive.SetNameTable(nameTable, 0, true); foreach (GameObject gameObject in Objects) { gameObject.WriteProperties(objectArchive, 0); } archive.WriteInt(UnkInt1); archive.WriteInt(ClassIndex); }
private void readBinaryObjects(ArkArchive archive, ReadingOptions options) { int count = archive.ReadInt(); Objects.Clear(); Objects.Capacity = count; ObjectMap.Clear(); for (int index = 0; index < count; index++) { addObject(new GameObject(archive), options.BuildComponentTree); } if (nameTable == null) { return; } archive.SetNameTable(nameTable, 0, true); for (int index = 0; index < count; index++) { Objects[index].LoadProperties(archive, index + 1 < count ? Objects[index + 1] : null, 0); } }