private void readBinaryNameTable(ArkArchive archive) { var version = archive.GetInt(); if (version != 3) { throw new NotSupportedException($"hibernation version not supported <>3"); } var nameCount = archive.GetInt(); for (int i = 0; i <= nameCount - 1; i++) { _nameTable.Add(archive.GetString()); } var zoneCount = archive.GetInt(); for (int i = 0; i <= zoneCount - 1; i++) { _zoneVolumes.Add(archive.GetString()); } }
protected void readBinaryNameTable(ArkArchive archive) { var position = archive.Position; archive.Position = nameTableOffset; var nameCount = archive.GetInt(); var nameTable = new List <string>(nameCount); for (var n = 0; n < nameCount; n++) { nameTable.Add(archive.GetString()); } archive.NameTable = nameTable; archive.Position = position; }
protected void readBinaryHibernation(ArkArchive archive) { archive.Position = hibernationDataOffset; var unk1 = archive.GetInt(); var unk2 = archive.GetInt(); var unk3 = archive.GetInt(); var unk4 = archive.GetInt(); if (archive.Position == nameTableOffset) { return; } var unk5 = archive.GetInt(); var unk6 = archive.GetInt(); var classCount = archive.GetInt(); _hibernationClassNames.Clear(); for (int i = 0; i <= classCount - 1; i++) { _hibernationClassNames.Add(archive.GetString()); } var indicesCount = archive.GetInt(); if (classCount != indicesCount) { throw new NotSupportedException($"Hibernation classCount:{classCount}<>indicesCount:{indicesCount}"); } _hibernationIndices.Clear(); for (int i = 0; i <= indicesCount - 1; i++) { _hibernationIndices.Add(archive.GetInt()); } var entriesCount = archive.GetInt(); _hibernationEntries.Clear(); // needs more refactoring to use parallel execution for (int i = 0; i <= entriesCount - 1; i++) { _hibernationEntries.Add(new HibernationEntry(archive)); } }
protected void readBinaryDataFiles(ArkArchive archive, bool dataFiles = true) { var count = archive.GetInt(); if (dataFiles) { DataFiles.Clear(); for (var n = 0; n < count; n++) { DataFiles.Add(archive.GetString()); } } else { for (var n = 0; n < count; n++) { archive.SkipString(); } } }
private void readBinaryBase(ArkArchive archive) { readBinaryHeader(archive); if (SaveVersion > 5) { // Name table is located after the objects block, but will be needed to read the objects block readBinaryNameTable(archive); } readBinaryDataFiles(archive); SaveState = new SaveState { GameTime = GameTime, SaveTime = SaveTime, MapName = DataFiles.FirstOrDefault() }; readBinaryEmbeddedData(archive); var unknownValue = archive.GetInt(); if (unknownValue != 0) { //if (unknownValue > 2) //{ // var msg = $"Found unexpected Value {unknownValue} at {archive.Position - 4:X}"; // _logger.Error(msg); // throw new System.NotSupportedException(msg); //} for (int n = 0; n < unknownValue; n++) { archive.GetInt(); //unknownFlags archive.GetInt(); //objectCount archive.GetString(); //name } } _baseRead = true; _gameObjectsOffset = archive.Position; }