public static FSaveHeader Parse(BinaryReader reader) { var header = new FSaveHeader { HeaderVersion = (SaveHeaderVersion)reader.ReadInt32(), SaveVersion = (FSaveCustomVersion)reader.ReadInt32(), BuildVersion = reader.ReadInt32(), MapName = reader.ReadLengthPrefixedString(), MapOptions = reader.ReadLengthPrefixedString(), SessionName = reader.ReadLengthPrefixedString(), PlayDuration = reader.ReadInt32(), SaveDateTime = reader.ReadInt64() }; log.Debug($"Read save header: Version={header.HeaderVersion}, Build={(int)header.SaveVersion}, Magic={header.BuildVersion}, MapName={header.MapName}, MapOpts={header.MapOptions}, Session={header.SessionName}, PlayTime={header.PlayDuration}, SaveTime={header.SaveDateTime}"); if (header.HeaderVersion > SaveHeaderVersion.LatestVersion) { throw new UnknownSaveVersionException(header.HeaderVersion); } if (header.SaveVersion < FSaveCustomVersion.WireSpanFromConnnectionComponents || header.SaveVersion > FSaveCustomVersion.LatestVersion) { throw new UnknownBuildVersionException(header.SaveVersion); } if (header.HeaderVersion >= SaveHeaderVersion.AddedSessionVisibility) { header.SessionVisibility = (ESessionVisibility)reader.ReadByte(); } return(header); }
public static FSaveHeader Parse(BinaryReader reader) { var header = new FSaveHeader { HeaderVersion = (SaveHeaderVersion)reader.ReadInt32(), SaveVersion = (FSaveCustomVersion)reader.ReadInt32(), BuildVersion = reader.ReadInt32(), MapName = reader.ReadLengthPrefixedString(), MapOptions = reader.ReadLengthPrefixedString(), SessionName = reader.ReadLengthPrefixedString(), PlayDuration = reader.ReadInt32(), SaveDateTime = reader.ReadInt64() }; log.Debug($"Read save header: HeaderVersion={header.HeaderVersion}, SaveVersion={(int)header.SaveVersion}, BuildVersion={header.BuildVersion}, MapName={header.MapName}, MapOpts={header.MapOptions}, Session={header.SessionName}, PlayTime={header.PlayDuration}, SaveTime={header.SaveDateTime}"); if (header.HeaderVersion > SaveHeaderVersion.LatestVersion) { throw new UnknownSaveVersionException(header.HeaderVersion); } if (header.SaveVersion < FSaveCustomVersion.DROPPED_WireSpanFromConnnectionComponents || header.SaveVersion > FSaveCustomVersion.LatestVersion) { throw new UnknownBuildVersionException(header.SaveVersion); } if (header.HeaderVersion >= SaveHeaderVersion.AddedSessionVisibility) { header.SessionVisibility = (ESessionVisibility)reader.ReadByte(); log.Debug($"SessionVisibility={header.SessionVisibility}"); } if (header.HeaderVersion >= SaveHeaderVersion.UE425EngineUpdate) { header.EditorObjectVersion = reader.ReadInt32(); log.Debug($"EditorObjectVersion={header.EditorObjectVersion}"); } if (header.HeaderVersion >= SaveHeaderVersion.AddedModdingParams) { header.ModMetadata = reader.ReadLengthPrefixedString(); header.IsModdedSave = reader.ReadInt32() > 0; log.Debug($"ModMetadata={header.ModMetadata}, IsModdedSave={header.IsModdedSave}"); } return(header); }