Ejemplo n.º 1
0
        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());
            }
        }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
        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));
            }
        }
Ejemplo n.º 4
0
        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();
                }
            }
        }
Ejemplo n.º 5
0
        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;
        }