Пример #1
0
        public FSoftObjectPath OwningLevel; // UWorld

        public FLevelStreamedDeleteActorRecord(FAssetArchive Ar)
        {
            ActorId     = Ar.ReadFName();
            Transform   = Ar.Read <FTransform>();
            ActorClass  = new FSoftObjectPath(Ar);
            OwningLevel = new FSoftObjectPath(Ar);
        }
Пример #2
0
 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));
 }
Пример #3
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;
                }
            }
        }
Пример #4
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
     });
Пример #5
0
        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;
                }
            }
        }
Пример #6
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();
 }