Ejemplo n.º 1
0
        protected void readBinaryHeader(ArkArchive archive)
        {
            SaveVersion = archive.GetShort();

            if (SaveVersion == 5)
            {
                GameTime = archive.GetFloat();

                propertiesBlockOffset = 0;
            }
            else if (SaveVersion == 6)
            {
                nameTableOffset       = archive.GetInt();
                propertiesBlockOffset = archive.GetInt();
                GameTime = archive.GetFloat();
            }
            else if (SaveVersion == 7 || SaveVersion == 8)
            {
                binaryDataOffset = archive.GetInt();
                var unknownValue = archive.GetInt();
                if (unknownValue != 0)
                {
                    var msg = $"Found unexpected Value {unknownValue} at {archive.Position - 4:X}";
                    _logger.Error(msg);
                    throw new System.NotSupportedException(msg);
                }

                nameTableOffset       = archive.GetInt();
                propertiesBlockOffset = archive.GetInt();
                GameTime = archive.GetFloat();
            }
            else if (SaveVersion == 9)
            {
                binaryDataOffset = archive.GetInt();
                var unknownValue = archive.GetInt();
                if (unknownValue != 0)
                {
                    var msg = $"Found unexpected Value {unknownValue} at {archive.Position - 4:X}";
                    _logger.Error(msg);
                    throw new System.NotSupportedException(msg);
                }

                nameTableOffset       = archive.GetInt();
                propertiesBlockOffset = archive.GetInt();
                GameTime = archive.GetFloat();

                //note: unknown integer value was added in v268.22 with SaveVersion=9 [0x25 (37) on The Island, 0x26 (38) on ragnarok/center/scorched]
                archive.GetInt(); //unknownValue2
            }
            else
            {
                var msg = $"Found unknown Version {SaveVersion}";
                _logger.Error(msg);
                throw new System.NotSupportedException(msg);
            }
        }
Ejemplo n.º 2
0
        public void readBinary(ArkArchive archive)
        {
            var x               = archive.GetFloat();
            var y               = archive.GetFloat();
            var z               = archive.GetFloat();
            var unkByte         = archive.GetByte();
            var unkFloat        = archive.GetFloat();
            var nameArchiveSize = archive.GetInt();
            var nameArchive     = archive.Slice(archive.Position, nameArchiveSize);

            readBinaryNameTable(nameArchive);
            archive.Position += nameArchiveSize;
            var objectArchiveSize = archive.GetInt();
            var objectArchive     = archive.Slice(archive.Position, objectArchiveSize);

            readBinaryObjects(objectArchive);
            archive.Position += objectArchiveSize;
            var unkInt1 = archive.GetInt();

            _classIndex = archive.GetInt();
        }