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)); }
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); }
/// <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); }