Exemple #1
0
            public Task <string> GetName()
            {
                if (!ObjName.Empty())
                {
                    return(Task.FromResult(ObjName));
                }

                string name = NamesStore.GetByIndex(Object.Name.Index);

                if (!name.Empty() && (Object.Name.Number > 0 && Object.Name.Index != Object.Name.Number))
                {
                    name += "_" + Object.Name.Number;
                }

                int pos = name.LastIndexOf('/');

                if (pos == -1)
                {
                    ObjName = name;
                    return(Task.FromResult(ObjName));
                }

                ObjName = name.Substring(pos + 1);
                return(Task.FromResult(ObjName));
            }
Exemple #2
0
            public async Task <List <string> > GetNames()
            {
                if (ObjEnum.Empty())
                {
                    ObjEnum = await Object.Cast <UEnum>();
                }

                // Get Names
                IntPtr dataAddress = ObjEnum.Names.Data;

                if (ObjEnum.Names.Count > 300)
                {
                    throw new IndexOutOfRangeException("Enum have more than 300 value !!, Maybe EngineStructs Problem.!");
                }

                var cls    = Utils.MemObj.ReadClassArray <FUEnumItem>(dataAddress, ObjEnum.Names.Count);
                var buffer = cls
                             .Where(e => e.Key.Index < NamesStore.GNames.Names.Count || e.Key.Index != 0)
                             .Select(e => NamesStore.GetByIndex(e.Key.Index))
                             .ToList();

                return(buffer);
            }
Exemple #3
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);
        }