예제 #1
0
            public async Task <UEClass> GetClass()
            {
                // Must have a class, aka must not hit that condition
                if (!Object.Class.IsValid())
                {
                    return(new UEClass());
                }

                return((await ObjectsStore.GetByAddress(Object.Class)).Cast <UEClass>());
            }
예제 #2
0
            public async Task <string> GetInstanceClassName()
            {
                if (!IsValid())
                {
                    return(string.Empty);
                }

                UEObject obj = ObjectsStore.GetByAddress(GetAddress(), out bool found);

                return(found ? await(await obj.GetClass()).GetNameCpp() : string.Empty);
            }
예제 #3
0
        /// <summary>
        /// Called After All Of Packages Proceed
        /// </summary>
        private static async Task SdkAfterFinish(List <Package> packages)
        {
            var missing    = Package.ProcessedObjects.Where(kv => !kv.Value).ToList();
            var missedList = new List <GenericTypes.UEStruct>();

            if (!missing.Empty())
            {
                missedList = missing.Select(kv => ObjectsStore.GetByAddress(kv.Key).Result.Cast <GenericTypes.UEStruct>()).ToList();
            }

            await Generator.GenLang.SdkAfterFinish(packages, missedList);
        }
예제 #4
0
            public async Task <UENumericProperty> GetUnderlyingProperty()
            {
                if (ObjEnumProperty.Empty())
                {
                    ObjEnumProperty = await Object.Cast <UEnumProperty>();
                }

                if (!ObjEnumProperty.UnderlyingProp.IsValid())
                {
                    return(new UENumericProperty());
                }

                return((await ObjectsStore.GetByAddress(ObjEnumProperty.UnderlyingProp)).Cast <UENumericProperty>());
            }
예제 #5
0
            public async Task <UEFunction> GetSignatureFunction()
            {
                if (ObjDelegateProperty.Empty())
                {
                    ObjDelegateProperty = await Object.Cast <UDelegateProperty>();
                }

                if (!ObjDelegateProperty.SignatureFunction.IsValid())
                {
                    return(new UEFunction());
                }

                return((await ObjectsStore.GetByAddress(ObjDelegateProperty.SignatureFunction)).Cast <UEFunction>());
            }
예제 #6
0
            public async Task <UEProperty> GetValueProperty()
            {
                if (ObjMapProperty.Empty())
                {
                    ObjMapProperty = await Object.Cast <UMapProperty>();
                }

                if (!ObjMapProperty.ValueProp.IsValid())
                {
                    return(new UEProperty());
                }

                return((await ObjectsStore.GetByAddress(ObjMapProperty.ValueProp)).Cast <UEProperty>());
            }
예제 #7
0
            public async Task <UEProperty> GetInner()
            {
                if (ObjArrayProperty.Empty())
                {
                    ObjArrayProperty = await Object.Cast <UArrayProperty>();
                }

                if (!ObjArrayProperty.Inner.IsValid())
                {
                    return(new UEProperty());
                }

                return((await ObjectsStore.GetByAddress(ObjArrayProperty.Inner)).Cast <UEProperty>());
            }
예제 #8
0
            public async Task <UEClass> GetMetaClass()
            {
                if (ObjAssetClassProperty.Empty())
                {
                    ObjAssetClassProperty = await Object.Cast <UAssetClassProperty>();
                }

                if (!ObjAssetClassProperty.MetaClass.IsValid())
                {
                    return(new UEClass());
                }

                return((await ObjectsStore.GetByAddress(ObjAssetClassProperty.MetaClass)).Cast <UEClass>());
            }
예제 #9
0
            public async Task <UEClass> GetPropertyClass()
            {
                if (ObjObjectPropertyBase.Empty())
                {
                    ObjObjectPropertyBase = await Object.Cast <UObjectPropertyBase>();
                }

                if (!ObjObjectPropertyBase.PropertyClass.IsValid())
                {
                    return(new UEClass());
                }

                return((await ObjectsStore.GetByAddress(ObjObjectPropertyBase.PropertyClass)).Cast <UEClass>());
            }
예제 #10
0
            public async Task <UEClass> GetInterfaceClass()
            {
                if (ObjInterfaceProperty.Empty())
                {
                    ObjInterfaceProperty = await Object.Cast <UInterfaceProperty>();
                }

                if (!ObjInterfaceProperty.InterfaceClass.IsValid())
                {
                    return(new UEClass());
                }

                return((await ObjectsStore.GetByAddress(ObjInterfaceProperty.InterfaceClass)).Cast <UEClass>());
            }
예제 #11
0
            public async Task <UEEnum> GetEnum()
            {
                if (ObjByteProperty.Empty())
                {
                    ObjByteProperty = await Object.Cast <UByteProperty>();
                }

                if (!ObjByteProperty.Enum.IsValid())
                {
                    return(new UEEnum());
                }

                return((await ObjectsStore.GetByAddress(ObjByteProperty.Enum)).Cast <UEEnum>());
            }
예제 #12
0
            public async Task <UEField> GetChildren()
            {
                if (ObjStruct.Empty())
                {
                    ObjStruct = await Object.Cast <UStruct>();
                }

                if (!ObjStruct.Children.IsValid())
                {
                    return(new UEField());
                }

                return((await ObjectsStore.GetByAddress(ObjStruct.Children)).Cast <UEField>());
            }
예제 #13
0
            public async Task <UEStruct> GetSuper()
            {
                if (ObjStruct.Empty())
                {
                    ObjStruct = await Object.Cast <UStruct>();
                }

                if (!ObjStruct.SuperField.IsValid())
                {
                    return(new UEStruct());
                }

                return((await ObjectsStore.GetByAddress(ObjStruct.SuperField)).Cast <UEStruct>());
            }
예제 #14
0
            public async Task <UEField> GetNext()
            {
                if (ObjField.Empty())
                {
                    ObjField = await Object.Cast <UField>();
                }

                if (!ObjField.Next.IsValid())
                {
                    return(new UEField());
                }

                return((await ObjectsStore.GetByAddress(ObjField.Next)).Cast <UEField>());
            }
예제 #15
0
            public async Task <UEScriptStruct> GetStruct()
            {
                if (ObjStructProperty.Empty())
                {
                    ObjStructProperty = await Object.Cast <UStructProperty>();
                }

                if (!ObjStructProperty.Struct.IsValid())
                {
                    return(new UEScriptStruct());
                }

                return((await ObjectsStore.GetByAddress(ObjStructProperty.Struct)).Cast <UEScriptStruct>());
            }
예제 #16
0
            public async Task <UEObject> GetPackageObject()
            {
                if (Package != null)
                {
                    return(Package);
                }

                // Package Is The Last Outer
                for (UEObject outer = await GetOuter(); outer.IsValid(); outer = await outer.GetOuter())
                {
                    Package = outer;
                }

                return(Package ?? (Package = await ObjectsStore.GetByAddress(Object.ObjAddress)));
            }
예제 #17
0
        /// <summary>
        /// Start Dumping Packages On Target Process<para/>
        /// As Programming Lang Code.
        /// </summary>
        /// <param name="requestInfo">Information About User</param>
        public async Task <GenRetInfo> Start(AgentRequestInfo requestInfo)
        {
            var ret = new GenRetInfo();

            _requestInfo  = requestInfo;
            ret.StartTime = DateTime.Now;

            #region Check Address
            var uDiscord = UpdateDiscordState("State", "Check Address !!");

            if (!Utils.IsValidGNamesAddress(_gnames))
            {
                return new GenRetInfo {
                           State = GeneratorState.BadGName
                }
            }
            ;
            if (!Utils.IsTUobjectArray(_gobjects))
            {
                return new GenRetInfo {
                           State = GeneratorState.BadGObject
                }
            }
            ;
            #endregion

            // Flag for `DiscordMessageUpdater`
            _sdkWork = true;

            #region GNames
            // Wait Discord message to send (if was not !!)
            await uDiscord; uDiscord = UpdateDiscordState("State", "Dumping **GNames**. !!");

            // Dump GNames
            var gnamesT = NamesStore.Initialize(_gnames);
            if (!await gnamesT)
            {
                return new GenRetInfo {
                           State = GeneratorState.BadGName
                }
            }
            ;

            // Update Information
            await uDiscord; uDiscord = UpdateDiscordState("GNames", $"*{NamesStore.GNames.Names.Count}*");
            #endregion

            #region GObjects
            // Wait Discord message to send (if was not !!)
            await uDiscord; uDiscord = UpdateDiscordState("State", "Dumping **GObjects**. !!");

            // Dump GObjects
            var gobjectsT = ObjectsStore.Initialize(_gobjects);
            if (!await gobjectsT)
            {
                return new GenRetInfo {
                           State = GeneratorState.BadGObject
                }
            }
            ;

            // Update Information
            await uDiscord; uDiscord = UpdateDiscordState("GObjects", $"*{ObjectsStore.GObjects.Objects.Count}*");
            #endregion

            #region Init Generator
            // Init Generator Settings
            if (!Generator.Initialize())
            {
                return new GenRetInfo {
                           State = GeneratorState.BadGenerator
                }
            }
            ;

            // Init Generator info
            Generator.SdkPath          = Path.Combine(Program.GenPath, "SDK");
            Generator.LangPaths        = Program.LangsPath;
            Generator.IsGObjectsChunks = ObjectsStore.GObjects.IsChunksAddress;

            // Ask User For Information
            Generator.GameName = await Utils.DiscordManager.StringQuestion(_requestInfo, "Game Name .?");

            Generator.GameVersion = await Utils.DiscordManager.StringQuestion(_requestInfo, "Game Version .?");

            Generator.GameModule = await Utils.DiscordManager.OptionsQuestion(_requestInfo, "Game Module .?",
                                                                              Utils.MemObj.GetModuleList().Where(m => !m.ModuleName.ToLower().EndsWith(".dll")).Select(m => m.ModuleName).ToList());

            Generator.SdkType = await Utils.DiscordManager.YesNoMessage(_requestInfo, "Internal SDK .?") ? SdkType.Internal : SdkType.External;

            Generator.SdkLangName = await Utils.DiscordManager.OptionsQuestion(_requestInfo, "Syntax Lang .?",
                                                                               Program.SupportedLangs.Select(s => s.Key).ToList());

            // Get Module Info
            Utils.MemObj.GetModuleInfo(Generator.GameModule, out var mod);
            Generator.GameModuleBase = mod.BaseAddress;

            #region Move Sdk Message
            // Move the Sdk Dump Message, to be the last message
            ulong oldMessage = _requestInfo.AgentMessage.Id;

            // New Message
            _requestInfo.AgentMessage = await _requestInfo.Context.Channel.SendMessageAsync(embed : _requestInfo.AgentMessage.Embeds.First());

            // Delete Old
            await(await _requestInfo.Context.Channel.GetMessageAsync(oldMessage)).DeleteAsync();
            #endregion

            // Init Sdk Lang
            if (!InitSdkLang())
            {
                return new GenRetInfo {
                           State = GeneratorState.BadSdkLang
                }
            }
            ;
            #endregion

            Directory.CreateDirectory(Generator.SdkPath);

            #region Dump Names/Objects To Files
            //if (Generator.ShouldDumpArrays)
            //{
            //    *startInfo.State = "Dumping (GNames/GObjects).";
            //    Dump(outputDirectory, *startInfo.State);
            //    *startInfo.State = "Dump (GNames/GObjects) Done.";
            //}
            #endregion

            // Wait Discord message to send (if was not !!)
            await uDiscord;

            // Process Packages
            await ProcessPackages();

            ret.State = GeneratorState.Good;

            return(ret);
        }
예제 #18
0
 public int GetIndex()
 {
     return(ObjectsStore.GetIndexByAddress(Object.ObjAddress));
 }
예제 #19
0
 public async Task <UEObject> GetOuter()
 {
     return(!Object.Outer.IsValid() ? new UEObject() : await ObjectsStore.GetByAddress(Object.Outer));
 }