public FActorComponentRecord(FLevelSaveRecordArchive Ar) { ComponentName = Ar.ReadFName(); if (Ar.Version < ELevelSaveRecordVersion.SoftActorComponentClassReferences) { var obj = Ar.ReadUObject(); // TODO untested code path if (obj != null) { var pathName = obj.GetPathName(); ComponentClass = new FSoftObjectPath(pathName.SubstringBeforeLast(':'), ""); // TODO SubPathString } else { ComponentClass = new(); } } else { ComponentClass = new FSoftObjectPath(Ar); } // skip, idk what it's doing with /Game/ and /Script/ ComponentData = Ar.ReadArray <byte>(); var crc = new CRC32(); crc.SlurpBlock(ComponentData, 0, ComponentData.Length); var hash = (uint)crc.Crc32Result; if (Ar.Version < ELevelSaveRecordVersion.AddingDataHash) { DataHash = hash; } else { DataHash = Ar.Read <uint>(); if (DataHash != hash) { Log.Error("FActorComponentRecord::Serialize failed to deserialize data for: {0} dropping corrupted data.", ComponentClass.ToString()); ComponentData = null; DataHash = 0; } } }
public FActorTemplateRecord(FLevelSaveRecordArchive Ar) { ID = Ar.Read <ulong>(); if (Ar.Version < ELevelSaveRecordVersion.SoftActorClassReferences) { var obj = Ar.ReadUObject(); // TODO untested code path if (obj != null) { var pathName = obj.GetPathName(); ActorClass = new FSoftObjectPath(pathName.SubstringBeforeLast(':'), ""); // TODO SubPathString } else { ActorClass = new(); } } else { ActorClass = new FSoftObjectPath(Ar); } // var redirectsObj = GetDefaultObject<ULevelSaveRecordActorClassRedirects>(); // var redirects = redirectsObj.LevelSaveRecordActorClassRedirects; // ... We don't care about redirects anyways ActorComponents = Ar.ReadArray(() => new FActorComponentRecord(Ar)); // skip, idk what it's doing ActorData = Ar.ReadArray <byte>(); var crc = new CRC32(); crc.SlurpBlock(ActorData, 0, ActorData.Length); var hash = (uint)crc.Crc32Result; if (Ar.Version < ELevelSaveRecordVersion.AddingDataHash) { DataHash = hash; } else { DataHash = Ar.Read <uint>(); if (DataHash != hash) { Log.Error("FActorTemplateRecord::Serialize failed to deserialize data for: {0} dropping corrupted data.", ActorClass.ToString()); ActorData = null; DataHash = 0; } } }