public FSoftObjectPath OwningLevel; // UWorld public FLevelStreamedDeleteActorRecord(FAssetArchive Ar) { ActorId = Ar.ReadFName(); Transform = Ar.Read <FTransform>(); ActorClass = new FSoftObjectPath(Ar); OwningLevel = new FSoftObjectPath(Ar); }
public FActorTemplateRecord(FStructFallback fallback) { ActorClass = fallback.GetOrDefault <FSoftObjectPath>(nameof(ActorClass)); ID = fallback.GetOrDefault <ulong>(nameof(ID)); ActorComponents = fallback.GetOrDefault <FActorComponentRecord[]>(nameof(ActorComponents)); ActorData = fallback.GetOrDefault <byte[]>(nameof(ActorData)); DataHash = fallback.GetOrDefault <uint>(nameof(DataHash)); }
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; } } }
public object GetValue() { return(Value switch { UObject uObject => uObject.GetJsonDict(), FAssetData fAssetData => fAssetData.GetValue(), FAssetDataTagMapSharedView fAssetDataTagMapSharedView => fAssetDataTagMapSharedView.Map, FAssetIdentifier fAssetIdentifier => fAssetIdentifier.GetValue(), FAssetPackageData fAssetPackageData => fAssetPackageData.GetValue(), FGameplayTagContainer fGameplayTagContainer => fGameplayTagContainer.GetValue(), FSoftObjectPath fSoftObjectPath => fSoftObjectPath.GetValue(), FGuid fGuid => fGuid.Hex, _ => Value });
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 BaseQuest(int completionCount, FSoftObjectPath itemDefinition, EIconStyle style) : this(completionCount, style) // completion { _reward = Utils.TryLoadObject(itemDefinition.AssetPathName.Text, out UObject uObject) ? new Reward(uObject) : new Reward(); }