├── .gitattributes ├── Tools Injector Mod Menu ├── T5 - 32.ico ├── Resources │ ├── github.png │ ├── info-24.png │ ├── save-24.png │ ├── folder-7-24.png │ ├── home-7-24.png │ ├── note-2-24.png │ ├── syringe-24.png │ ├── tool-box-24.png │ ├── moderator-24.png │ └── package-2-24.png ├── Utility │ ├── Values.cs │ ├── MyMessage.cs │ ├── UpdateService.cs │ ├── ZipArchiveExtensions.cs │ ├── StringHelper.cs │ ├── Utility.cs │ ├── EnumHelper.cs │ ├── AppSettings.cs │ └── Checker.cs ├── packages.config ├── Properties │ ├── Settings.settings │ ├── Settings.Designer.cs │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ └── Resources.resx ├── Program.cs ├── Patch Manager │ ├── Enums.cs │ ├── OffsetInfo.cs │ └── OffsetPatch.cs ├── App.config ├── Form │ ├── FrmImageText.cs │ ├── FrmAddFunction.cs │ ├── FrmImageText.resx │ ├── FrmAddFunction.resx │ ├── FrmAddFunction.Designer.cs │ └── FrmImageText.Designer.cs ├── Control │ ├── CtrlCategory.cs │ ├── CtrlCategory.resx │ ├── CtrlPatch.resx │ ├── CtrlHookButton.resx │ ├── CtrlHookInput.resx │ ├── CtrlHook.resx │ ├── CtrlCategory.Designer.cs │ ├── CtrlPatch.cs │ ├── CtrlHookButton.cs │ └── CtrlHook.cs ├── app.manifest └── Tools Injector Mod Menu.csproj ├── .gitmodules ├── .github ├── ISSUE_TEMPLATE │ ├── feature_request.md │ └── bug_report.md └── workflows │ └── main.yml ├── README.md ├── Tools-Injector-Mod-Menu.sln └── .gitignore /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /Tools Injector Mod Menu/T5 - 32.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/T5ive/Tools-Injector-Mod-Menu/HEAD/Tools Injector Mod Menu/T5 - 32.ico -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Resources/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/T5ive/Tools-Injector-Mod-Menu/HEAD/Tools Injector Mod Menu/Resources/github.png -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Resources/info-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/T5ive/Tools-Injector-Mod-Menu/HEAD/Tools Injector Mod Menu/Resources/info-24.png -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Resources/save-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/T5ive/Tools-Injector-Mod-Menu/HEAD/Tools Injector Mod Menu/Resources/save-24.png -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Resources/folder-7-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/T5ive/Tools-Injector-Mod-Menu/HEAD/Tools Injector Mod Menu/Resources/folder-7-24.png -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Resources/home-7-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/T5ive/Tools-Injector-Mod-Menu/HEAD/Tools Injector Mod Menu/Resources/home-7-24.png -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Resources/note-2-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/T5ive/Tools-Injector-Mod-Menu/HEAD/Tools Injector Mod Menu/Resources/note-2-24.png -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Resources/syringe-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/T5ive/Tools-Injector-Mod-Menu/HEAD/Tools Injector Mod Menu/Resources/syringe-24.png -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Resources/tool-box-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/T5ive/Tools-Injector-Mod-Menu/HEAD/Tools Injector Mod Menu/Resources/tool-box-24.png -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Resources/moderator-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/T5ive/Tools-Injector-Mod-Menu/HEAD/Tools Injector Mod Menu/Resources/moderator-24.png -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Resources/package-2-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/T5ive/Tools-Injector-Mod-Menu/HEAD/Tools Injector Mod Menu/Resources/package-2-24.png -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Utility/Values.cs: -------------------------------------------------------------------------------- 1 | namespace Tools_Injector_Mod_Menu 2 | { 3 | public static class Values 4 | { 5 | public static bool Save; 6 | } 7 | } -------------------------------------------------------------------------------- /Tools Injector Mod Menu/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "MaterialSkin/ModernFolderBrowserDialog"] 2 | path = MaterialSkin/ModernFolderBrowserDialog 3 | url = https://github.com/SetsunaF/ModernFolderBrowserDialog.git 4 | [submodule "ModernFolderBrowserDialog"] 5 | path = ModernFolderBrowserDialog 6 | url = https://github.com/SetsunaF/ModernFolderBrowserDialog.git 7 | [submodule "MaterialSkin"] 8 | path = MaterialSkin 9 | url = https://github.com/T5ive/MaterialSkin.git 10 | branch = master 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | pull_request: 7 | branches: [ master ] 8 | 9 | workflow_dispatch: 10 | 11 | jobs: 12 | build: 13 | runs-on: windows-latest 14 | 15 | steps: 16 | - uses: actions/checkout@v2 17 | with: 18 | submodules: true 19 | 20 | - name: Setup MSBuild 21 | uses: microsoft/setup-msbuild@v1 22 | 23 | - name: Setup NuGet 24 | uses: NuGet/setup-nuget@v1.0.5 25 | 26 | - name: Restore NuGet packages 27 | run: nuget restore Tools-Injector-Mod-Menu.sln 28 | 29 | - name: Build the Solution 30 | run: msbuild Tools-Injector-Mod-Menu.sln 31 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Only bug reports from Canary builds will be accepted.** 11 | **Failed compilation issues**, upload both `settings.json` and `logs` 12 | **Tools Injector Mod Menu issues**, explain how it went wrong. 13 | **Theme issues**, upload your theme. 14 | 15 | **Describe the bug** 16 | - (A clear and concise description of what the bug is) 17 | 18 | **Expected behavior** 19 | - (A clear and concise description of what you expected to happen) 20 | 21 | **Tools Injector Mod Menu Version** 22 | - 23 | 24 | **Screenshots** 25 | If applicable, add screenshots to help explain your problem. 26 | 27 | **Desktop (please complete the following information):** 28 | - Windows Version: 29 | 30 | **Additional context** 31 | - (Add any other context about the problem here) 32 | -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading; 3 | using System.Windows.Forms; 4 | 5 | namespace Tools_Injector_Mod_Menu 6 | { 7 | static class Program 8 | { 9 | /// 10 | /// The main entry point for the application. 11 | /// 12 | [STAThread] 13 | static void Main() 14 | { 15 | using (new Mutex(true, "Tools Injector Mod Menu", out var createdNew)) 16 | { 17 | if (createdNew) 18 | { 19 | Application.EnableVisualStyles(); 20 | Application.SetCompatibleTextRenderingDefault(false); 21 | Application.Run(new FrmMain()); 22 | } 23 | else 24 | { 25 | MessageBox.Show(@"[Detected] - There is same tools that still running on your windows!", "TFive", MessageBoxButtons.OK, MessageBoxIcon.Hand); 26 | Application.Exit(); 27 | } 28 | } 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace Tools_Injector_Mod_Menu.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.8.1.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Utility/MyMessage.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Forms; 2 | 3 | namespace Tools_Injector_Mod_Menu 4 | { 5 | public static class MyMessage 6 | { 7 | private const string Caption = "Tools Injector"; 8 | 9 | public static void MsgShowError(string text) 10 | { 11 | MessageBox.Show(text, Caption, MessageBoxButtons.OK, MessageBoxIcon.Error); 12 | } 13 | 14 | public static void MsgShowWarning(string text) 15 | { 16 | MessageBox.Show(text, Caption, MessageBoxButtons.OK, MessageBoxIcon.Warning); 17 | } 18 | 19 | public static void MsgShowInfo(string text) 20 | { 21 | MessageBox.Show(text, Caption, MessageBoxButtons.OK, MessageBoxIcon.Information); 22 | } 23 | 24 | public static void MsgShow(string text, MessageBoxIcon icon) 25 | { 26 | MessageBox.Show(text, Caption, MessageBoxButtons.OK, icon); 27 | } 28 | 29 | public static bool MsgOkCancel(string text) 30 | { 31 | return MessageBox.Show(text, Caption, MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK; 32 | } 33 | 34 | public static DialogResult MsgYesNoCancel(string text) 35 | { 36 | return MessageBox.Show(text, Caption, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); 37 | } 38 | } 39 | } -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Patch Manager/Enums.cs: -------------------------------------------------------------------------------- 1 | namespace Tools_Injector_Mod_Menu.Patch_Manager 2 | { 3 | public static class Enums 4 | { 5 | public enum TypeAbi 6 | { 7 | Arm, 8 | Arm64 9 | } 10 | 11 | public enum Type 12 | { 13 | Bool = 0, 14 | BoolBack = 1, 15 | Double = 100, 16 | Float = 101, 17 | Int = 102, 18 | Long = 103, 19 | Void = 300, 20 | Links = 301, 21 | Empty = 1000 22 | } 23 | 24 | public enum FunctionType 25 | { 26 | Category, 27 | HookButton, 28 | HookButtonOnOf, 29 | HookInputButton, 30 | HookInputOnOff, 31 | HookInputValue, 32 | HookSeekBar, 33 | HookSeekBarToggle, 34 | HookToggle, 35 | PatchButtonOnOff, 36 | PatchLabel, 37 | PatchToggle, 38 | Empty = 100 39 | } 40 | 41 | public enum LogsType 42 | { 43 | CompileMenu, 44 | Success, 45 | Warning, 46 | Error, 47 | Logs, 48 | Dump, 49 | Decompile, 50 | CompileApk, 51 | } 52 | 53 | public enum ProcessType 54 | { 55 | CompileApk, 56 | MenuFull, 57 | ApkFull1Decompile, 58 | ApkFull1, 59 | ApkFull2Decompile, 60 | ApkFull2, 61 | None = 100 62 | } 63 | } 64 | } -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("Tools Injector Mod Menu")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("Tools Injector Mod Menu")] 13 | [assembly: AssemblyCopyright("Copyright © TFive 2020-2021")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("dbc33172-02ff-407f-98a3-dc1a9289928a")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.4.4.3")] 36 | [assembly: AssemblyFileVersion("1.4.4.3")] 37 | -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Utility/UpdateService.cs: -------------------------------------------------------------------------------- 1 | using Octokit; 2 | using System; 3 | using System.Diagnostics; 4 | using System.Reflection; 5 | using System.Threading.Tasks; 6 | 7 | namespace Tools_Injector_Mod_Menu 8 | { 9 | public static class UpdateService 10 | { 11 | public static async Task CheckGitHubNewerVersion(bool msg = false) 12 | { 13 | var client = new GitHubClient(new ProductHeaderValue("Tools-Injector-Mod-Menu")); 14 | var releases = await client.Repository.Release.GetAll("T5ive", "Tools-Injector-Mod-Menu").ConfigureAwait(false); 15 | 16 | var latestGitHubVersion = new Version(releases[0].TagName); 17 | var localVersion = Assembly.GetEntryAssembly()?.GetName().Version; 18 | 19 | if (localVersion < latestGitHubVersion) 20 | { 21 | var url = releases[0].Assets[0].BrowserDownloadUrl; 22 | if (MyMessage.MsgOkCancel($"You are using version {localVersion}\n" + 23 | $"The latest version is {latestGitHubVersion}\n\n" + 24 | "Do you want to update? ")) 25 | { 26 | Process.Start(url); 27 | } 28 | } 29 | else 30 | { 31 | if(msg) return; 32 | MyMessage.MsgShowInfo($"You are using version {localVersion}\n" + 33 | $"The latest version is {latestGitHubVersion }\n\n" + 34 | "You are using the latest version"); 35 | } 36 | } 37 | } 38 | } -------------------------------------------------------------------------------- /Tools Injector Mod Menu/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Form/FrmImageText.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.Windows.Forms; 4 | 5 | namespace Tools_Injector_Mod_Menu 6 | { 7 | public partial class FrmImageText : Form 8 | { 9 | public FrmImageText() 10 | { 11 | InitializeComponent(); 12 | } 13 | 14 | private void FrmImageText_Load(object sender, EventArgs e) 15 | { 16 | txtImg.Text = FrmMain.ImageCode; 17 | } 18 | 19 | private void btnSave_Click(object sender, EventArgs e) 20 | { 21 | if (!MyMessage.MsgOkCancel("Do you want to save?\n\n" + 22 | "Click \"OK\" to confirm.\n\n" + 23 | "Click \"Cancel\" to cancel.")) return; 24 | FrmMain.ImageCode = string.IsNullOrWhiteSpace(txtImg.Text) ? "Null" : $"{txtImg.Text}"; 25 | Dispose(); 26 | } 27 | 28 | private void btnClose_Click(object sender, EventArgs e) 29 | { 30 | if (!MyMessage.MsgOkCancel("Do you want to close?\n\n" + 31 | "Click \"OK\" to confirm.\n\n" + 32 | "Click \"Cancel\" to cancel.")) return; 33 | Dispose(); 34 | } 35 | 36 | private void lbImgCompress_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 37 | { 38 | Process.Start("https://compresspng.com/"); 39 | } 40 | 41 | private void lbImageEncoder_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 42 | { 43 | Process.Start("https://codebeautify.org/image-to-base64-converter"); 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Utility/ZipArchiveExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.IO.Compression; 5 | 6 | namespace Tools_Injector_Mod_Menu 7 | { 8 | public static class ZipArchiveExtensions 9 | { 10 | public static void ExtractToDirectory(this ZipArchive archive, string destinationDirectoryName, bool overwrite) 11 | { 12 | if (!overwrite) 13 | { 14 | archive.ExtractToDirectory(destinationDirectoryName); 15 | return; 16 | } 17 | foreach (var zipArchiveEntry in archive.Entries) 18 | { 19 | var text = Path.Combine(destinationDirectoryName, zipArchiveEntry.FullName); 20 | var directoryName = Path.GetDirectoryName(text); 21 | if (!Directory.Exists(directoryName)) 22 | { 23 | Directory.CreateDirectory(directoryName ?? throw new InvalidOperationException()); 24 | } 25 | if (zipArchiveEntry.Name != "") 26 | { 27 | zipArchiveEntry.ExtractToFile(text, true); 28 | } 29 | } 30 | } 31 | 32 | public static void AddFiles(this string filePath, List<(string, string)> list, bool overwrite = true) 33 | { 34 | using var file = new FileStream(filePath, FileMode.Open); 35 | using var archive = new ZipArchive(file, ZipArchiveMode.Update); 36 | for (var i = 0; i < list.Count; i++) 37 | { 38 | if (overwrite) 39 | { 40 | var oldEntry = archive.GetEntry(list[i].Item2); 41 | oldEntry?.Delete(); 42 | } 43 | archive.CreateEntryFromFile(list[i].Item1, list[i].Item2); 44 | } 45 | archive.Dispose(); 46 | file.Dispose(); 47 | } 48 | } 49 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Tools Injector Mod Menu 2 | 3 | **Please read the wiki before you have any questions or concerns!!** 4 | 5 | # [Wiki](https://github.com/T5ive/Tools-Injector-Mod-Menu/wiki) 6 | 7 | # Requesting New Features 8 | 9 | New issue with title "[Request]..." 10 | 11 | Write what features you want with examples and tutorials. 12 | 13 | # Bug Reports 14 | 15 | **Only bug reports from Canary builds will be accepted.** 16 | 17 | For failed compilation issues, upload both settings.json and logs. 18 | 19 | For Tools Injector Mod Menu issues, Please explain how it went wrong. 20 | 21 | For theme issues, upload your theme. 22 | 23 | For mod not running by Tools Injector (it's not your fault) upload original apk and method name or address method. (Only accepted for https://github.com/LGLTeam/Android-Mod-Menu work, but my tool doesn't work) 24 | 25 | # Known Issue 26 | 27 | - Does not work on Windows 7 or 32 bit. 28 | 29 | # Credits/Acknowledgements 30 | 31 | Default Theme -> https://github.com/T5ive/Android-Mod-Menu/tree/inject-mod-menu 32 | 33 | https://github.com/LGLTeam/Android-Mod-Menu 34 | 35 | [PMT IvesAwadi](https://platinmods.com/members/ivesawadiyt.629982/) for hook tutorial 36 | 37 | [PMT DVA](https://platinmods.com/members/dvatsu.1884750/) for [basic tutorial mod menu template](https://www.youtube.com/watch?v=ieMclBtL6Ig) 38 | 39 | [PMT Mika Cybertron](https://platinmods.com/members/mika-cybertron.43/) for idea [MEGA Tools Injection to Make Mod Menu](https://platinmods.com/threads/exclusive-mega-tools-injection-to-make-mod-menu-for-native-games-only-available-for-approved-modder-higher-on-platinmods-com.74490/) 40 | 41 | [7.Hackers polarmods](https://polarmods.com/members/7-hackers.12698/) for hook [tutorial 1](https://polarmods.com/threads/%F0%9F%8E%83-hooking-part-1-how-to-hook-a-field-with-mod-menu-%F0%9F%8E%83.1536/), [tutorial 2](https://polarmods.com/threads/%F0%9F%8E%83-hooking-part-2-how-to-hook-a-function-with-menu-%F0%9F%8E%83.1539/) 42 | 43 | and you :)) 44 | -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Patch Manager/OffsetInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Xml.Serialization; 3 | 4 | namespace Tools_Injector_Mod_Menu.Patch_Manager 5 | { 6 | [XmlRoot(ElementName = "OffsetInfo")] 7 | public class OffsetInfo 8 | { 9 | [XmlElement(ElementName = "OffsetId")] public int OffsetId { get; set; } 10 | 11 | [XmlElement(ElementName = "Offset")] public string Offset { get; set; } 12 | 13 | [XmlElement(ElementName = "Hex")] public string Hex { get; set; } 14 | 15 | [XmlElement(ElementName = "HookInfo")] public HookInfo HookInfo { get; set; } 16 | 17 | [XmlElement(ElementName = "Name")] public string Name { get; set; } 18 | 19 | [XmlElement(ElementName = "Method")] public List<(string, string)> Method { get; set; } 20 | } 21 | 22 | public class HookInfo 23 | { 24 | [XmlElement(ElementName = "Type")] public Enums.Type Type { get; set; } 25 | 26 | [XmlElement(ElementName = "Value")] public string Value { get; set; } 27 | 28 | [XmlElement(ElementName = "Links")] public string Links { get; set; } 29 | 30 | [XmlElement(ElementName = "FieldInfo")] public FieldInfo FieldInfo { get; set; } 31 | } 32 | 33 | public class FieldInfo 34 | { 35 | [XmlElement(ElementName = "Type")] public Enums.Type Type { get; set; } 36 | 37 | [XmlElement(ElementName = "Offset")] public string Offset { get; set; } 38 | } 39 | 40 | public class TFiveMenu 41 | { 42 | [XmlElement(ElementName = "GameName")] public string GameName { get; set; } 43 | 44 | [XmlElement(ElementName = "TypeAbi")] public Enums.TypeAbi TypeAbi { get; set; } 45 | 46 | [XmlElement(ElementName = "Target")] public string Target { get; set; } 47 | 48 | [XmlElement] public List FunctionList { get; set; } 49 | } 50 | 51 | [XmlRoot(ElementName = "FunctionList")] 52 | public class FunctionList 53 | { 54 | [XmlElement(ElementName = "OffsetList")] public List OffsetList { get; set; } 55 | 56 | [XmlElement(ElementName = "CheatName")] public string CheatName { get; set; } 57 | 58 | [XmlElement(ElementName = "FunctionType")] public Enums.FunctionType FunctionType { get; set; } 59 | 60 | [XmlElement(ElementName = "FunctionExtra")] public string FunctionExtra { get; set; } 61 | 62 | [XmlElement(ElementName = "MultipleValue")] public bool MultipleValue { get; set; } 63 | } 64 | } -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Control/CtrlCategory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Windows.Forms; 4 | using Tools_Injector_Mod_Menu.Patch_Manager; 5 | 6 | namespace Tools_Injector_Mod_Menu 7 | { 8 | public partial class CtrlCategory : UserControl 9 | { 10 | private readonly int _index; 11 | private readonly FrmAddFunction _frmAddFunction; 12 | 13 | public CtrlCategory(FrmAddFunction frmAdd, int index) 14 | { 15 | InitializeComponent(); 16 | _index = index; 17 | _frmAddFunction = frmAdd; 18 | _frmAddFunction.Text = "Category"; 19 | if (_index != 1150) 20 | { 21 | AddListValues(); 22 | } 23 | else 24 | { 25 | btnSave.Text = "Add Function"; 26 | } 27 | } 28 | 29 | private void AddListValues() 30 | { 31 | txtCategory.Text = OffsetPatch.FunctionList[_index].CheatName; 32 | } 33 | 34 | private void btnSave_Click(object sender, EventArgs e) 35 | { 36 | const Enums.FunctionType functionType = Enums.FunctionType.Category; 37 | try 38 | { 39 | if (txtNameCheat.IsEmpty("Name Cheat")) return; 40 | if (txtCategory.IsEmpty("Category")) return; 41 | 42 | if (_index == 1150) 43 | { 44 | OffsetPatch.AddFunction(txtNameCheat.Text, functionType, txtCategory.Text); 45 | } 46 | else 47 | { 48 | var result = MyMessage.MsgYesNoCancel("Do you want to save?\n\n" + 49 | "Click \"OK\" to confirm.\n\n" + 50 | "Click \"Cancel\" to cancel."); 51 | switch (result) 52 | { 53 | case DialogResult.Cancel: 54 | return; 55 | 56 | case DialogResult.No: 57 | Values.Save = false; 58 | Dispose(); 59 | _frmAddFunction.Dispose(); 60 | break; 61 | } 62 | 63 | OffsetPatch.FunctionList[_index] = new FunctionList 64 | { 65 | CheatName = txtNameCheat.Text, 66 | FunctionType = functionType, 67 | OffsetList = new List(), 68 | FunctionExtra = txtCategory.Text, 69 | MultipleValue = false 70 | }; 71 | } 72 | 73 | Values.Save = true; 74 | Dispose(); 75 | _frmAddFunction.Dispose(); 76 | } 77 | catch (Exception exception) 78 | { 79 | MyMessage.MsgShowError("Error" + exception.Message); 80 | } 81 | } 82 | } 83 | } -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Utility/StringHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using System.Text; 4 | 5 | namespace Tools_Injector_Mod_Menu 6 | { 7 | public static class StringHelper 8 | { 9 | public static string InsertSpaces(this string str) 10 | { 11 | if (!str.Contains(' ')) 12 | { 13 | for (var i = 2; i <= str.Length; i += 2) 14 | { 15 | str = str.Insert(i, " "); 16 | str = str.TrimEnd(' '); 17 | i++; 18 | } 19 | } 20 | return str; 21 | } 22 | 23 | public static string RemoveSpecialCharacters(this string str) 24 | { 25 | var sb = new StringBuilder(); 26 | foreach (var c in str.Where(c => c is >= '0' and <= '9' or >= 'A' and <= 'Z' or >= 'a' and <= 'z' or '.' or '_' or ' ')) 27 | { 28 | sb.Append(c); 29 | } 30 | return sb.ToString(); 31 | } 32 | 33 | public static string RemoveMiniSpecialCharacters(this string str) 34 | { 35 | var sb = new StringBuilder(); 36 | foreach (var c in str.Where(c => c is >= '0' and <= '9' or >= 'A' and <= 'Z' or >= 'a' and <= 'z' or '.' or ',' or '_')) 37 | { 38 | sb.Append(c); 39 | } 40 | return sb.ToString(); 41 | } 42 | 43 | public static string RemoveSuperSpecialCharacters(this string str) 44 | { 45 | var sb = new StringBuilder(); 46 | foreach (var c in str.Where(c => c is >= '0' and <= '9' or >= 'A' and <= 'Z' or >= 'a' and <= 'z')) 47 | { 48 | sb.Append(c); 49 | } 50 | return sb.ToString(); 51 | } 52 | 53 | public static string ReplaceNumCharacters(this string str) 54 | { 55 | return str.Replace("0", "Zero").Replace("1", "One").Replace("2", "Two").Replace("3", "Three") 56 | .Replace("4", "Four").Replace("5", "Five").Replace("6", "Six").Replace("7", "Seven") 57 | .Replace("8", "Eight").Replace("9", "Nine").Replace("-", "Dash").Replace(".", "Dot").Replace(",", "Comma"); 58 | } 59 | 60 | public static string GetBetween(this string strSource, string strStart, string strEnd) 61 | { 62 | if (strSource.Contains(strStart) && strSource.Contains(strEnd)) 63 | { 64 | var start = strSource.IndexOf(strStart, 0, StringComparison.Ordinal) + strStart.Length; 65 | var end = strSource.IndexOf(strEnd, start, StringComparison.Ordinal); 66 | return strSource.Substring(start, end - start); 67 | } 68 | return null; 69 | } 70 | 71 | public static string ReplaceFirst(this string text, string oldValue, string newValue) 72 | { 73 | var pos = text.IndexOf(oldValue, StringComparison.Ordinal); 74 | if (pos < 0) 75 | { 76 | return text; 77 | } 78 | return text.Substring(0, pos) + newValue + text.Substring(pos + oldValue.Length); 79 | } 80 | } 81 | } -------------------------------------------------------------------------------- /Tools-Injector-Mod-Menu.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.30225.117 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tools Injector Mod Menu", "Tools Injector Mod Menu\Tools Injector Mod Menu.csproj", "{DBC33172-02FF-407F-98A3-DC1A9289928A}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MaterialSkin", "MaterialSkin\MaterialSkin\MaterialSkin.csproj", "{8EB7611B-68CD-4B8B-987A-11717E2B250C}" 9 | EndProject 10 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModernFolderBrowserDialog", "ModernFolderBrowserDialog\ModernFolderBrowserDialog\ModernFolderBrowserDialog.csproj", "{E1F5AEB2-7CFD-40C6-9A97-ADA7E13F1D0C}" 11 | EndProject 12 | Global 13 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 14 | Debug|Any CPU = Debug|Any CPU 15 | Debug|x86 = Debug|x86 16 | Release|Any CPU = Release|Any CPU 17 | Release|x86 = Release|x86 18 | EndGlobalSection 19 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 20 | {DBC33172-02FF-407F-98A3-DC1A9289928A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 21 | {DBC33172-02FF-407F-98A3-DC1A9289928A}.Debug|Any CPU.Build.0 = Debug|Any CPU 22 | {DBC33172-02FF-407F-98A3-DC1A9289928A}.Debug|x86.ActiveCfg = Debug|Any CPU 23 | {DBC33172-02FF-407F-98A3-DC1A9289928A}.Debug|x86.Build.0 = Debug|Any CPU 24 | {DBC33172-02FF-407F-98A3-DC1A9289928A}.Release|Any CPU.ActiveCfg = Release|Any CPU 25 | {DBC33172-02FF-407F-98A3-DC1A9289928A}.Release|Any CPU.Build.0 = Release|Any CPU 26 | {DBC33172-02FF-407F-98A3-DC1A9289928A}.Release|x86.ActiveCfg = Release|Any CPU 27 | {DBC33172-02FF-407F-98A3-DC1A9289928A}.Release|x86.Build.0 = Release|Any CPU 28 | {8EB7611B-68CD-4B8B-987A-11717E2B250C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 29 | {8EB7611B-68CD-4B8B-987A-11717E2B250C}.Debug|Any CPU.Build.0 = Debug|Any CPU 30 | {8EB7611B-68CD-4B8B-987A-11717E2B250C}.Debug|x86.ActiveCfg = Debug|Any CPU 31 | {8EB7611B-68CD-4B8B-987A-11717E2B250C}.Debug|x86.Build.0 = Debug|Any CPU 32 | {8EB7611B-68CD-4B8B-987A-11717E2B250C}.Release|Any CPU.ActiveCfg = Release|Any CPU 33 | {8EB7611B-68CD-4B8B-987A-11717E2B250C}.Release|Any CPU.Build.0 = Release|Any CPU 34 | {8EB7611B-68CD-4B8B-987A-11717E2B250C}.Release|x86.ActiveCfg = Release|Any CPU 35 | {8EB7611B-68CD-4B8B-987A-11717E2B250C}.Release|x86.Build.0 = Release|Any CPU 36 | {E1F5AEB2-7CFD-40C6-9A97-ADA7E13F1D0C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 37 | {E1F5AEB2-7CFD-40C6-9A97-ADA7E13F1D0C}.Debug|Any CPU.Build.0 = Debug|Any CPU 38 | {E1F5AEB2-7CFD-40C6-9A97-ADA7E13F1D0C}.Debug|x86.ActiveCfg = Debug|Any CPU 39 | {E1F5AEB2-7CFD-40C6-9A97-ADA7E13F1D0C}.Debug|x86.Build.0 = Debug|Any CPU 40 | {E1F5AEB2-7CFD-40C6-9A97-ADA7E13F1D0C}.Release|Any CPU.ActiveCfg = Release|Any CPU 41 | {E1F5AEB2-7CFD-40C6-9A97-ADA7E13F1D0C}.Release|Any CPU.Build.0 = Release|Any CPU 42 | {E1F5AEB2-7CFD-40C6-9A97-ADA7E13F1D0C}.Release|x86.ActiveCfg = Release|Any CPU 43 | {E1F5AEB2-7CFD-40C6-9A97-ADA7E13F1D0C}.Release|x86.Build.0 = Release|Any CPU 44 | EndGlobalSection 45 | GlobalSection(SolutionProperties) = preSolution 46 | HideSolutionNode = FALSE 47 | EndGlobalSection 48 | GlobalSection(ExtensibilityGlobals) = postSolution 49 | SolutionGuid = {D524576B-C017-48CF-A634-44F9531C21BD} 50 | EndGlobalSection 51 | EndGlobal 52 | -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Form/FrmAddFunction.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | using Tools_Injector_Mod_Menu.Patch_Manager; 4 | 5 | namespace Tools_Injector_Mod_Menu 6 | { 7 | public partial class FrmAddFunction : Form 8 | { 9 | private readonly int _index; 10 | 11 | public FrmAddFunction(Enums.FunctionType type = Enums.FunctionType.Empty, int index = 1150) 12 | { 13 | InitializeComponent(); 14 | _index = index; 15 | LoadType(type); 16 | if (type != Enums.FunctionType.Empty) 17 | { 18 | comboFunction.Enabled = false; 19 | } 20 | } 21 | 22 | private void LoadType(Enums.FunctionType type) 23 | { 24 | switch (type) 25 | { 26 | case Enums.FunctionType.Empty: 27 | case Enums.FunctionType.Category: 28 | LoadUserControl(new CtrlCategory(this, _index)); 29 | break; 30 | 31 | case Enums.FunctionType.HookButton: 32 | case Enums.FunctionType.HookInputButton: 33 | comboFunction.SelectedIndex = 1; 34 | break; 35 | 36 | case Enums.FunctionType.HookButtonOnOf: 37 | case Enums.FunctionType.HookToggle: 38 | comboFunction.SelectedIndex = 2; 39 | break; 40 | 41 | case Enums.FunctionType.HookInputOnOff: 42 | case Enums.FunctionType.HookInputValue: 43 | case Enums.FunctionType.HookSeekBar: 44 | case Enums.FunctionType.HookSeekBarToggle: 45 | comboFunction.SelectedIndex = 3; 46 | break; 47 | 48 | case Enums.FunctionType.PatchButtonOnOff: 49 | case Enums.FunctionType.PatchLabel: 50 | case Enums.FunctionType.PatchToggle: 51 | comboFunction.SelectedIndex = 4; 52 | break; 53 | 54 | default: 55 | comboFunction.SelectedIndex = 0; 56 | break; 57 | } 58 | } 59 | 60 | private void comboFunction_SelectedIndexChanged(object sender, EventArgs e) 61 | { 62 | switch (comboFunction.SelectedIndex) 63 | { 64 | case 0: 65 | { 66 | LoadUserControl(new CtrlCategory(this, _index)); 67 | break; 68 | } 69 | case 1: 70 | { 71 | LoadUserControl(new CtrlHookButton(this, _index)); 72 | break; 73 | } 74 | case 2: 75 | { 76 | LoadUserControl(new CtrlHook(this, _index)); 77 | break; 78 | } 79 | case 3: 80 | { 81 | LoadUserControl(new CtrlHookInput(this, _index)); 82 | break; 83 | } 84 | case 4: 85 | { 86 | LoadUserControl(new CtrlPatch(this, _index)); 87 | break; 88 | } 89 | } 90 | } 91 | 92 | private void LoadUserControl(Control ctrl) 93 | { 94 | panelFunction.Controls.Clear(); 95 | panelFunction.Controls.Add(ctrl); 96 | } 97 | } 98 | } -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Utility/Utility.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.Drawing.Imaging; 4 | using System.IO; 5 | using Encoder = System.Drawing.Imaging.Encoder; 6 | 7 | namespace Tools_Injector_Mod_Menu 8 | { 9 | public static class Utility 10 | { 11 | #region Image Encoder 12 | 13 | //https://stackoverflow.com/a/45673201/8902883 14 | public static string ImageToBase64(this Image image, ImageFormat imageFormat) 15 | { 16 | using var ms = new MemoryStream(); 17 | image.Save(ms, imageFormat); 18 | var imageBytes = ms.ToArray(); 19 | return Convert.ToBase64String(imageBytes); 20 | } 21 | 22 | public static Image Base64ToImage(this string base64String) 23 | { 24 | var imageBytes = Convert.FromBase64String(base64String); 25 | using var ms = new MemoryStream(imageBytes, 0, imageBytes.Length); 26 | ms.Write(imageBytes, 0, imageBytes.Length); 27 | return Image.FromStream(ms, true); 28 | } 29 | 30 | public static string GetMimeType(this string fileName) 31 | { 32 | var mimeType = "application/unknown"; 33 | var ext = Path.GetExtension(fileName).ToLower(); 34 | var regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(ext); 35 | if (regKey?.GetValue("Content Type") != null) 36 | mimeType = regKey.GetValue("Content Type").ToString(); 37 | return mimeType; 38 | } 39 | 40 | //https://stackoverflow.com/a/24651073/8902883 41 | public static Image CompressImage(this string fileName, int newQuality) 42 | { 43 | using var image = new Bitmap(fileName); 44 | using var memImage = new Bitmap(image); 45 | 46 | var myEncoderParameters = new EncoderParameters(1) 47 | { 48 | Param = { [0] = new EncoderParameter(Encoder.Quality, newQuality) } 49 | }; 50 | 51 | var memStream = new MemoryStream(); 52 | memImage.Save(memStream, GetEncoderInfo(GetMimeType(fileName)), myEncoderParameters); 53 | var newImage = Image.FromStream(memStream); 54 | var imageAttributes = new ImageAttributes(); 55 | using var g = Graphics.FromImage(newImage); 56 | g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 57 | g.DrawImage(newImage, new Rectangle(Point.Empty, newImage.Size), 0, 0, newImage.Width, newImage.Height, GraphicsUnit.Pixel, imageAttributes); 58 | return newImage; 59 | } 60 | 61 | public static ImageCodecInfo GetEncoderInfo(this string mimeType) 62 | { 63 | var encoders = ImageCodecInfo.GetImageEncoders(); 64 | return Array.Find(encoders, ici => ici.MimeType == mimeType); 65 | } 66 | 67 | #endregion Image Encoder 68 | 69 | public static string SmaliCountToName(int count, bool move = false) 70 | { 71 | if (move) 72 | { 73 | return $"smali_classes{count + 1}"; 74 | } 75 | 76 | return count == 1 ? "smali" : $"smali_classes{count}"; 77 | } 78 | 79 | public static string SmaliCountToClass(int count) 80 | { 81 | return $"classes{count}.dex"; 82 | } 83 | 84 | public static string GetApkName(string apk) 85 | { 86 | try 87 | { 88 | var split = apk.Split('\\'); 89 | return split[split.Length - 1]; 90 | } 91 | catch 92 | { 93 | return null; 94 | } 95 | } 96 | } 97 | } -------------------------------------------------------------------------------- /Tools Injector Mod Menu/app.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | true 30 | 31 | 32 | 33 | 34 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 55 | 63 | 64 | 78 | -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Patch Manager/OffsetPatch.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | 4 | namespace Tools_Injector_Mod_Menu.Patch_Manager 5 | { 6 | public static class OffsetPatch 7 | { 8 | public static List OffsetList = new(); 9 | public static List FunctionList = new(); 10 | public static TFiveMenu T5Menu = new(); 11 | 12 | public static void AddOffset(OffsetInfo offsetInfo) 13 | { 14 | OffsetList.Add(offsetInfo); 15 | } 16 | 17 | public static void AddOffset(OffsetInfo offsetInfo, List offsetList) 18 | { 19 | offsetList.Add(offsetInfo); 20 | } 21 | 22 | public static void AddFunction(string cheatName, Enums.FunctionType functionType) 23 | { 24 | FunctionList.Add(new FunctionList 25 | { 26 | CheatName = cheatName, 27 | OffsetList = OffsetList.ToList(), 28 | FunctionType = functionType, 29 | FunctionExtra = null, 30 | MultipleValue = false 31 | }); 32 | } 33 | 34 | public static void AddFunction(string cheatName = null, Enums.FunctionType functionType = Enums.FunctionType.Empty, string functionExtra = null, bool multipleValue = false) 35 | { 36 | FunctionList.Add(new FunctionList 37 | { 38 | CheatName = cheatName, 39 | OffsetList = (OffsetList ?? new List()).ToList(), 40 | FunctionType = functionType, 41 | FunctionExtra = functionExtra, 42 | MultipleValue = multipleValue 43 | }); 44 | } 45 | 46 | public static void AddFunction(string cheatName = null, List offsetList = null, Enums.FunctionType functionType = Enums.FunctionType.Empty, string functionExtra = null, bool multipleValue = false) 47 | { 48 | FunctionList.Add(new FunctionList 49 | { 50 | CheatName = cheatName, 51 | OffsetList = (offsetList ?? new List()).ToList(), 52 | FunctionType = functionType, 53 | FunctionExtra = functionExtra, 54 | MultipleValue = multipleValue 55 | }); 56 | } 57 | 58 | public static void AddFunction(string cheatName, List offsetList, List functionList) 59 | { 60 | functionList.Add(new FunctionList { CheatName = cheatName, OffsetList = offsetList }); 61 | } 62 | 63 | public static List ConvertNameList(List functionList) 64 | { 65 | var cheatName = new List(); 66 | foreach (var result in functionList) 67 | { 68 | cheatName.Add(result.CheatName); 69 | } 70 | return cheatName; 71 | } 72 | 73 | public static List ConvertNameList() 74 | { 75 | return FunctionList.Select(result => result.CheatName).ToList(); 76 | } 77 | 78 | public static List ConvertFunction(FunctionList functionList) 79 | { 80 | return functionList.OffsetList.ToList(); 81 | } 82 | 83 | public static List ConvertFunctionList(List functionList) 84 | { 85 | var offsetList = new List(); 86 | foreach (var result in functionList) 87 | { 88 | offsetList.AddRange(result.OffsetList); 89 | } 90 | return offsetList; 91 | } 92 | 93 | public static List ConvertFunctionList() 94 | { 95 | var offsetList = new List(); 96 | foreach (var result in FunctionList) 97 | { 98 | offsetList.AddRange(result.OffsetList); 99 | } 100 | return offsetList; 101 | } 102 | 103 | public static List ConvertFunctionList(int id) 104 | { 105 | var offsetList = new List(); 106 | offsetList.AddRange(FunctionList[id].OffsetList); 107 | return offsetList; 108 | } 109 | 110 | public static OffsetInfo OffsetValue() 111 | { 112 | return new() 113 | { 114 | OffsetId = 0, 115 | Offset = null, 116 | Hex = null, 117 | HookInfo = HookValue(), 118 | Name = null, 119 | Method = new List<(string, string)> { (null, null) } 120 | }; 121 | } 122 | 123 | public static HookInfo HookValue() 124 | { 125 | return new() 126 | { 127 | Type = Enums.Type.Empty, 128 | Value = null, 129 | Links = null, 130 | FieldInfo = FieldValue() 131 | }; 132 | } 133 | 134 | public static FieldInfo FieldValue() 135 | { 136 | return new() 137 | { 138 | Type = Enums.Type.Empty, 139 | Offset = null 140 | }; 141 | } 142 | } 143 | } -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Utility/EnumHelper.cs: -------------------------------------------------------------------------------- 1 | using Tools_Injector_Mod_Menu.Patch_Manager; 2 | 3 | namespace Tools_Injector_Mod_Menu 4 | { 5 | public static class EnumHelper 6 | { 7 | public static string FunctionTypeToString(this Enums.FunctionType type) 8 | { 9 | return type switch 10 | { 11 | Enums.FunctionType.Category => "Category", 12 | Enums.FunctionType.HookButton => "Hook: Button", 13 | Enums.FunctionType.HookButtonOnOf => "Hook: Button On/Of", 14 | Enums.FunctionType.HookInputButton => "Hook: Input Button", 15 | Enums.FunctionType.HookInputOnOff => "Hook: Input OnOff", 16 | Enums.FunctionType.HookInputValue => "Hook: Input Value", 17 | Enums.FunctionType.HookSeekBar => "Hook: SeekBar", 18 | Enums.FunctionType.HookSeekBarToggle => "Hook: SeekBar Toggle", 19 | Enums.FunctionType.HookToggle => "Hook: Toggle", 20 | Enums.FunctionType.PatchButtonOnOff => "Patch: Button On/Off", 21 | Enums.FunctionType.PatchLabel => "Patch: Label", 22 | Enums.FunctionType.PatchToggle => "Patch: Toggle", 23 | _ => "Empty" 24 | }; 25 | } 26 | 27 | public static Enums.FunctionType StringToFunctionType(this string str) 28 | { 29 | return str switch 30 | { 31 | "Category" => Enums.FunctionType.Category, 32 | "Hook: Button" => Enums.FunctionType.HookButton, 33 | "Hook: Button On/Of" => Enums.FunctionType.HookButtonOnOf, 34 | "Hook: Input Button" => Enums.FunctionType.HookInputButton, 35 | "Hook: Input OnOff" => Enums.FunctionType.HookInputOnOff, 36 | "Hook: Input Value" => Enums.FunctionType.HookInputValue, 37 | "Hook: SeekBar" => Enums.FunctionType.HookSeekBar, 38 | "Hook: SeekBar Toggle" => Enums.FunctionType.HookSeekBarToggle, 39 | "Hook: Toggle" => Enums.FunctionType.HookToggle, 40 | "Patch: Button On/Off" => Enums.FunctionType.PatchButtonOnOff, 41 | "Patch: Label" => Enums.FunctionType.PatchLabel, 42 | "Patch: Toggle" => Enums.FunctionType.PatchToggle, 43 | _ => Enums.FunctionType.Empty 44 | }; 45 | } 46 | 47 | public static string FunctionTypeToStringFeatures(this Enums.FunctionType type) 48 | { 49 | return type switch 50 | { 51 | Enums.FunctionType.Category => "Category", 52 | Enums.FunctionType.HookButton => "Button", 53 | Enums.FunctionType.HookButtonOnOf => "ButtonOnOff", 54 | Enums.FunctionType.HookInputButton => "InputButton", 55 | Enums.FunctionType.HookInputOnOff => "InputOnOff", 56 | Enums.FunctionType.HookInputValue => "InputValue", 57 | Enums.FunctionType.HookSeekBar => "SeekBar", 58 | Enums.FunctionType.HookSeekBarToggle => "SeekBarSwitch", 59 | Enums.FunctionType.HookToggle => "Toggle", 60 | Enums.FunctionType.PatchButtonOnOff => "ButtonOnOff", 61 | Enums.FunctionType.PatchLabel => "RichTextView", 62 | Enums.FunctionType.PatchToggle => "Toggle", 63 | _ => "Empty" 64 | }; 65 | } 66 | 67 | public static Enums.Type StringToType(this string str) 68 | { 69 | return str switch 70 | { 71 | "bool" => Enums.Type.Bool, 72 | "boolback" => Enums.Type.BoolBack, 73 | "double" => Enums.Type.Double, 74 | "float" => Enums.Type.Float, 75 | "int" => Enums.Type.Int, 76 | "long" => Enums.Type.Long, 77 | "void" => Enums.Type.Void, 78 | "links" => Enums.Type.Links, 79 | _ => Enums.Type.Empty 80 | }; 81 | } 82 | 83 | public static string TypeToString(this Enums.Type type, bool data = false) 84 | { 85 | return type is Enums.Type.Bool ? "bool" : 86 | type is Enums.Type.BoolBack && data ? "boolback" : 87 | type is Enums.Type.BoolBack && !data ? "bool" : 88 | type is Enums.Type.Double ? "double" : 89 | type is Enums.Type.Float ? "float" : 90 | type is Enums.Type.Int ? "int" : 91 | type is Enums.Type.Long ? "long" : 92 | type is Enums.Type.Void ? "void" : 93 | type is Enums.Type.Links ? "links" : null; 94 | } 95 | public static string TypeToStringEnd(this Enums.Type type) 96 | { 97 | return type switch 98 | { 99 | Enums.Type.Bool => ";", 100 | Enums.Type.BoolBack => ";", 101 | Enums.Type.Double => "= 1;", 102 | Enums.Type.Float => "= 1;", 103 | Enums.Type.Int => "= 1;", 104 | Enums.Type.Long => "= 1;", 105 | Enums.Type.Void => ";", 106 | Enums.Type.Links => "", 107 | _ => null 108 | }; 109 | } 110 | 111 | public static Enums.LogsType ProcessTypeToLogsType(this Enums.ProcessType type) 112 | { 113 | return type switch 114 | { 115 | Enums.ProcessType.ApkFull1Decompile => Enums.LogsType.Decompile, 116 | Enums.ProcessType.ApkFull2Decompile => Enums.LogsType.Decompile, 117 | Enums.ProcessType.MenuFull => Enums.LogsType.CompileMenu, 118 | Enums.ProcessType.ApkFull1 => Enums.LogsType.CompileMenu, 119 | Enums.ProcessType.ApkFull2 => Enums.LogsType.CompileMenu, 120 | Enums.ProcessType.CompileApk => Enums.LogsType.CompileApk, 121 | _ => Enums.LogsType.Logs 122 | }; 123 | } 124 | } 125 | } -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Form/FrmImageText.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Control/CtrlCategory.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Utility/AppSettings.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.IO; 3 | using System.Text; 4 | using System.Web.Script.Serialization; 5 | 6 | namespace Tools_Injector_Mod_Menu 7 | { 8 | //https://stackoverflow.com/a/6541739/8902883 9 | public class MySettings : AppSettings 10 | { 11 | public bool debugMode; 12 | public string txtLibName; 13 | public string txtToast; 14 | public string txtName; 15 | public string txtSite; 16 | public string txtText; 17 | public string txtEndCredit; 18 | public string ImageCode; 19 | public bool chkNoMenu; 20 | 21 | public bool chkRemoveTemp; 22 | public bool chkTFiveCredit = true; 23 | public bool chkSound = true; 24 | public bool chkCheckUpdate = true; 25 | public bool chkAlwaysOverwrite = true; 26 | public bool chkMergeApk; 27 | public bool chkOpenOutput = true; 28 | public bool chkRemoveOther = true; 29 | 30 | public string txtNDK; 31 | public int menuStyle; 32 | public int apkTools; 33 | 34 | public string txtService = @""; 35 | public string txtOnCreate = "invoke-static {p0}, Lcom/tfive/MainActivity;->Start(Landroid/content/Context;)V"; 36 | 37 | public string txtActionMain = @" 38 | 39 | 40 | 41 | 42 | 43 | "; 44 | } 45 | 46 | public class AppSettings where T : new() 47 | { 48 | private const string DefaultFilename = "settings.json"; 49 | 50 | public void Save(string fileName = DefaultFilename) 51 | { 52 | var pretty = Process(new JavaScriptSerializer().Serialize(this)); 53 | File.WriteAllText(fileName, pretty); 54 | } 55 | 56 | public static void Save(T pSettings, string fileName = DefaultFilename) 57 | { 58 | File.WriteAllText(fileName, new JavaScriptSerializer().Serialize(pSettings)); 59 | } 60 | 61 | public static T Load(string fileName = DefaultFilename) 62 | { 63 | var t = new T(); 64 | if (File.Exists(fileName)) 65 | t = new JavaScriptSerializer().Deserialize(File.ReadAllText(fileName)); 66 | return t; 67 | } 68 | 69 | //https://stackoverflow.com/a/23828858/8902883 70 | private static string Process(string inputText) 71 | { 72 | var escaped = false; 73 | var inQuotes = false; 74 | var column = 0; 75 | var indentation = 0; 76 | var indentations = new Stack(); 77 | const int tabbing = 8; 78 | var sb = new StringBuilder(); 79 | inputText = "{\n " + inputText.Remove(0, 1); 80 | inputText = inputText.Remove(inputText.Length - 1, 1) + "\n}"; 81 | foreach (var x in inputText) 82 | { 83 | sb.Append(x); 84 | column++; 85 | if (escaped) 86 | { 87 | escaped = false; 88 | } 89 | else 90 | { 91 | switch (x) 92 | { 93 | case '\\': 94 | escaped = true; 95 | break; 96 | 97 | case '\"': 98 | inQuotes = !inQuotes; 99 | break; 100 | 101 | default: 102 | { 103 | if (!inQuotes) 104 | { 105 | if (x == ',') 106 | { 107 | // if we see a comma, go to next line, and indent to the same depth 108 | sb.Append("\r\n"); 109 | column = 0; 110 | for (var i = 0; i < indentation; i++) 111 | { 112 | sb.Append(" "); 113 | column++; 114 | } 115 | } 116 | else if (x == '[' || x == '{') 117 | { 118 | // if we open a bracket or brace, indent further (push on stack) 119 | indentations.Push(indentation); 120 | indentation = column; 121 | } 122 | else if (x == ']' || x == '}') 123 | { 124 | // if we close a bracket or brace, undo one level of indent (pop) 125 | indentation = indentations.Pop(); 126 | } 127 | else if (x == ':') 128 | { 129 | // if we see a colon, add spaces until we get to the next 130 | // tab stop, but without using tab characters! 131 | while (column % tabbing != 0) 132 | { 133 | sb.Append(' '); 134 | column++; 135 | } 136 | } 137 | } 138 | 139 | break; 140 | } 141 | } 142 | } 143 | } 144 | return sb.ToString(); 145 | } 146 | } 147 | } -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Utility/Checker.cs: -------------------------------------------------------------------------------- 1 | using MaterialSkin.Controls; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Windows.Forms; 6 | using Tools_Injector_Mod_Menu.Patch_Manager; 7 | 8 | namespace Tools_Injector_Mod_Menu 9 | { 10 | public static class Checker 11 | { 12 | #region Check Directory & File 13 | 14 | public static void CheckFolder(string folderName, bool appPath = true) 15 | { 16 | var path = appPath ? FrmMain.AppPath + "\\" + folderName : folderName; 17 | 18 | if (!Directory.Exists(path)) 19 | { 20 | Directory.CreateDirectory(path); 21 | } 22 | } 23 | 24 | public static bool CheckFiles(string folderName, string fileName) => File.Exists(FrmMain.AppPath + "\\" + folderName + "\\" + fileName); 25 | 26 | #endregion Check Directory & File 27 | 28 | #region Check SpecialChar 29 | 30 | public static bool IsSpecialChar(this string input) => @"\|!#$%&/()=?»«@£§€{}.-;'<>_,".Any(input.Contains); 31 | 32 | public static bool IsPathSpecialChar(this string input) => "|!#$%&/()=?»«@£§€{};'<>_, ".Any(input.Contains); 33 | 34 | #endregion Check SpecialChar 35 | 36 | #region Check Equal & Duplicate 37 | 38 | public static bool IsEqual(this List str1, List str2) => !str1.Where((t, i) => !t.Equals(str2[i])).Any(); 39 | 40 | public static bool IsEqual(this string[] str1, string[] str2) => !str1.Where((t, i) => !t.Equals(str2[i])).Any(); 41 | 42 | public static bool IsDuplicate(this OffsetInfo offsetInfo, List offsetList) 43 | { 44 | if (offsetList.Count != 0 && offsetList.Any(offset => offsetInfo.Offset == offset.Offset)) 45 | { 46 | MyMessage.MsgShowWarning("Found Duplicate " + offsetInfo.Offset + @", Please Check it again before adding a offset!!!"); 47 | return true; 48 | } 49 | return false; 50 | } 51 | 52 | public static bool IsDuplicate(this Dictionary offsetDict, OffsetInfo offsetInfo) 53 | { 54 | if (offsetDict.Count != 0 && offsetDict.Values.Any(offset => offsetInfo.Offset == offset.Offset)) 55 | { 56 | MyMessage.MsgShowWarning("Found Duplicate " + offsetInfo.Offset + ", Please Check it again before adding a offset!!!"); 57 | return true; 58 | } 59 | return false; 60 | } 61 | 62 | public static bool IsDuplicate(this Dictionary> functionDict, OffsetInfo offsetInfo) 63 | { 64 | if (functionDict.Count != 0 && functionDict.Values.Any(offsetDick => offsetDick.Values.Any(offset => offsetInfo.Offset == offset.Offset))) 65 | { 66 | MyMessage.MsgShowWarning("Found Duplicate " + offsetInfo.Offset + ", Please Check it again before adding a offset!!!"); 67 | return true; 68 | } 69 | return false; 70 | } 71 | 72 | public static bool IsDuplicateName(this string nameCheat, List functionList) 73 | { 74 | if (functionList.Count != 0 && functionList.Any(result => nameCheat == result.CheatName)) 75 | { 76 | MyMessage.MsgShowWarning("Found Duplicate " + nameCheat + ", Please Check it again before adding a offset!!!"); 77 | return true; 78 | } 79 | return false; 80 | } 81 | 82 | public static bool IsDuplicateName(this Dictionary> functionDict, string nameCheat) 83 | { 84 | if (functionDict.Count != 0 && functionDict.Keys.Any(offsetDict => nameCheat == offsetDict)) 85 | { 86 | MyMessage.MsgShowWarning("Found Duplicate " + nameCheat + ", Please Check it again before adding a offset!!!"); 87 | return true; 88 | } 89 | return false; 90 | } 91 | 92 | #endregion Check Equal & Duplicate 93 | 94 | #region Check Empty 95 | 96 | public static bool IsEmpty(this object str) 97 | { 98 | return str == null || string.IsNullOrWhiteSpace(str.ToString()); 99 | } 100 | 101 | public static bool IsEmpty(this object str, string message) 102 | { 103 | if (str == null || string.IsNullOrWhiteSpace(str.ToString())) 104 | { 105 | MyMessage.MsgShowWarning($"{message} is Empty, Please Check it again!!!"); 106 | return true; 107 | } 108 | return false; 109 | } 110 | 111 | public static bool IsEmpty(this MaterialTextBox textBox) 112 | { 113 | return string.IsNullOrWhiteSpace(textBox.Text); 114 | } 115 | 116 | public static bool IsEmpty(this MaterialTextBox textBox, string message) 117 | { 118 | if (string.IsNullOrWhiteSpace(textBox.Text)) 119 | { 120 | MyMessage.MsgShowWarning($"{message} is Empty, Please Check it again!!!"); 121 | return true; 122 | } 123 | 124 | return false; 125 | } 126 | 127 | public static bool IsEmpty(this object str, int line, string name = "", bool msg = true) 128 | { 129 | if (str == null || string.IsNullOrWhiteSpace(str.ToString())) 130 | { 131 | if (!msg) return true; 132 | MyMessage.MsgShowWarning($"{name} At {line} is Empty, Please Check it again!!!"); 133 | return true; 134 | } 135 | return false; 136 | } 137 | 138 | public static bool IsEmpty(this DataGridView dataGrid, bool msg = true) 139 | { 140 | if (dataGrid.Rows.Count == 0) 141 | { 142 | if (!msg) return true; 143 | 144 | MyMessage.MsgShowWarning($"{dataGrid.Name} is Empty, Please Check it again!!!"); 145 | return true; 146 | } 147 | return false; 148 | } 149 | 150 | public static bool IsEmpty(List offsetList) => offsetList.Count == 0; 151 | 152 | public static bool IsEmpty(List functionList) => functionList.Count == 0; 153 | 154 | public static bool IsEmpty(List<(string, string)> methodList) => methodList.Count == 0; 155 | 156 | public static bool IsEmpty(this Dictionary offsetDict) => offsetDict.Count == 0; 157 | 158 | public static bool IsEmpty(this Dictionary> functionDict) => functionDict.Count == 0; 159 | 160 | #endregion Check Empty 161 | } 162 | } -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Control/CtrlPatch.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | True 122 | 123 | 124 | True 125 | 126 | 127 | True 128 | 129 | 130 | 17, 17 131 | 132 | -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace Tools_Injector_Mod_Menu.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Tools_Injector_Mod_Menu.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// Looks up a localized resource of type System.Drawing.Bitmap. 65 | /// 66 | internal static System.Drawing.Bitmap folder_7_24 { 67 | get { 68 | object obj = ResourceManager.GetObject("folder_7_24", resourceCulture); 69 | return ((System.Drawing.Bitmap)(obj)); 70 | } 71 | } 72 | 73 | /// 74 | /// Looks up a localized resource of type System.Drawing.Bitmap. 75 | /// 76 | internal static System.Drawing.Bitmap github { 77 | get { 78 | object obj = ResourceManager.GetObject("github", resourceCulture); 79 | return ((System.Drawing.Bitmap)(obj)); 80 | } 81 | } 82 | 83 | /// 84 | /// Looks up a localized resource of type System.Drawing.Bitmap. 85 | /// 86 | internal static System.Drawing.Bitmap home_7_24 { 87 | get { 88 | object obj = ResourceManager.GetObject("home_7_24", resourceCulture); 89 | return ((System.Drawing.Bitmap)(obj)); 90 | } 91 | } 92 | 93 | /// 94 | /// Looks up a localized resource of type System.Drawing.Bitmap. 95 | /// 96 | internal static System.Drawing.Bitmap info_24 { 97 | get { 98 | object obj = ResourceManager.GetObject("info_24", resourceCulture); 99 | return ((System.Drawing.Bitmap)(obj)); 100 | } 101 | } 102 | 103 | /// 104 | /// Looks up a localized resource of type System.Drawing.Bitmap. 105 | /// 106 | internal static System.Drawing.Bitmap moderator_24 { 107 | get { 108 | object obj = ResourceManager.GetObject("moderator_24", resourceCulture); 109 | return ((System.Drawing.Bitmap)(obj)); 110 | } 111 | } 112 | 113 | /// 114 | /// Looks up a localized resource of type System.Drawing.Bitmap. 115 | /// 116 | internal static System.Drawing.Bitmap note_2_24 { 117 | get { 118 | object obj = ResourceManager.GetObject("note_2_24", resourceCulture); 119 | return ((System.Drawing.Bitmap)(obj)); 120 | } 121 | } 122 | 123 | /// 124 | /// Looks up a localized resource of type System.Drawing.Bitmap. 125 | /// 126 | internal static System.Drawing.Bitmap package_2_24 { 127 | get { 128 | object obj = ResourceManager.GetObject("package_2_24", resourceCulture); 129 | return ((System.Drawing.Bitmap)(obj)); 130 | } 131 | } 132 | 133 | /// 134 | /// Looks up a localized resource of type System.Drawing.Bitmap. 135 | /// 136 | internal static System.Drawing.Bitmap save_24 { 137 | get { 138 | object obj = ResourceManager.GetObject("save_24", resourceCulture); 139 | return ((System.Drawing.Bitmap)(obj)); 140 | } 141 | } 142 | 143 | /// 144 | /// Looks up a localized resource of type System.Drawing.Bitmap. 145 | /// 146 | internal static System.Drawing.Bitmap syringe_24 { 147 | get { 148 | object obj = ResourceManager.GetObject("syringe_24", resourceCulture); 149 | return ((System.Drawing.Bitmap)(obj)); 150 | } 151 | } 152 | 153 | /// 154 | /// Looks up a localized resource of type System.Drawing.Bitmap. 155 | /// 156 | internal static System.Drawing.Bitmap tool_box_24 { 157 | get { 158 | object obj = ResourceManager.GetObject("tool_box_24", resourceCulture); 159 | return ((System.Drawing.Bitmap)(obj)); 160 | } 161 | } 162 | } 163 | } 164 | -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Control/CtrlHookButton.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | 124 | True 125 | 126 | 127 | True 128 | 129 | 130 | True 131 | 132 | 133 | True 134 | 135 | 136 | True 137 | 138 | -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Control/CtrlHookInput.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | 124 | True 125 | 126 | 127 | True 128 | 129 | 130 | True 131 | 132 | 133 | True 134 | 135 | 136 | True 137 | 138 | 139 | True 140 | 141 | -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Control/CtrlHook.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | 124 | True 125 | 126 | 127 | True 128 | 129 | 130 | True 131 | 132 | 133 | True 134 | 135 | 136 | True 137 | 138 | 139 | True 140 | 141 | 142 | True 143 | 144 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Aa][Rr][Mm]/ 27 | [Aa][Rr][Mm]64/ 28 | bld/ 29 | [Bb]in/ 30 | [Oo]bj/ 31 | [Ll]og/ 32 | [Ll]ogs/ 33 | 34 | # Visual Studio 2015/2017 cache/options directory 35 | .vs/ 36 | # Uncomment if you have tasks that create the project's static files in wwwroot 37 | #wwwroot/ 38 | 39 | # Visual Studio 2017 auto generated files 40 | Generated\ Files/ 41 | 42 | # MSTest test Results 43 | [Tt]est[Rr]esult*/ 44 | [Bb]uild[Ll]og.* 45 | 46 | # NUnit 47 | *.VisualState.xml 48 | TestResult.xml 49 | nunit-*.xml 50 | 51 | # Build Results of an ATL Project 52 | [Dd]ebugPS/ 53 | [Rr]eleasePS/ 54 | dlldata.c 55 | 56 | # Benchmark Results 57 | BenchmarkDotNet.Artifacts/ 58 | 59 | # .NET Core 60 | project.lock.json 61 | project.fragment.lock.json 62 | artifacts/ 63 | 64 | # StyleCop 65 | StyleCopReport.xml 66 | 67 | # Files built by Visual Studio 68 | *_i.c 69 | *_p.c 70 | *_h.h 71 | *.ilk 72 | *.meta 73 | *.obj 74 | *.iobj 75 | *.pch 76 | *.pdb 77 | *.ipdb 78 | *.pgc 79 | *.pgd 80 | *.rsp 81 | *.sbr 82 | *.tlb 83 | *.tli 84 | *.tlh 85 | *.tmp 86 | *.tmp_proj 87 | *_wpftmp.csproj 88 | *.log 89 | *.vspscc 90 | *.vssscc 91 | .builds 92 | *.pidb 93 | *.svclog 94 | *.scc 95 | 96 | # Chutzpah Test files 97 | _Chutzpah* 98 | 99 | # Visual C++ cache files 100 | ipch/ 101 | *.aps 102 | *.ncb 103 | *.opendb 104 | *.opensdf 105 | *.sdf 106 | *.cachefile 107 | *.VC.db 108 | *.VC.VC.opendb 109 | 110 | # Visual Studio profiler 111 | *.psess 112 | *.vsp 113 | *.vspx 114 | *.sap 115 | 116 | # Visual Studio Trace Files 117 | *.e2e 118 | 119 | # TFS 2012 Local Workspace 120 | $tf/ 121 | 122 | # Guidance Automation Toolkit 123 | *.gpState 124 | 125 | # ReSharper is a .NET coding add-in 126 | _ReSharper*/ 127 | *.[Rr]e[Ss]harper 128 | *.DotSettings.user 129 | 130 | # JustCode is a .NET coding add-in 131 | .JustCode 132 | 133 | # TeamCity is a build add-in 134 | _TeamCity* 135 | 136 | # DotCover is a Code Coverage Tool 137 | *.dotCover 138 | 139 | # AxoCover is a Code Coverage Tool 140 | .axoCover/* 141 | !.axoCover/settings.json 142 | 143 | # Visual Studio code coverage results 144 | *.coverage 145 | *.coveragexml 146 | 147 | # NCrunch 148 | _NCrunch_* 149 | .*crunch*.local.xml 150 | nCrunchTemp_* 151 | 152 | # MightyMoose 153 | *.mm.* 154 | AutoTest.Net/ 155 | 156 | # Web workbench (sass) 157 | .sass-cache/ 158 | 159 | # Installshield output folder 160 | [Ee]xpress/ 161 | 162 | # DocProject is a documentation generator add-in 163 | DocProject/buildhelp/ 164 | DocProject/Help/*.HxT 165 | DocProject/Help/*.HxC 166 | DocProject/Help/*.hhc 167 | DocProject/Help/*.hhk 168 | DocProject/Help/*.hhp 169 | DocProject/Help/Html2 170 | DocProject/Help/html 171 | 172 | # Click-Once directory 173 | publish/ 174 | 175 | # Publish Web Output 176 | *.[Pp]ublish.xml 177 | *.azurePubxml 178 | # Note: Comment the next line if you want to checkin your web deploy settings, 179 | # but database connection strings (with potential passwords) will be unencrypted 180 | *.pubxml 181 | *.publishproj 182 | 183 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 184 | # checkin your Azure Web App publish settings, but sensitive information contained 185 | # in these scripts will be unencrypted 186 | PublishScripts/ 187 | 188 | # NuGet Packages 189 | *.nupkg 190 | # NuGet Symbol Packages 191 | *.snupkg 192 | # The packages folder can be ignored because of Package Restore 193 | **/[Pp]ackages/* 194 | # except build/, which is used as an MSBuild target. 195 | !**/[Pp]ackages/build/ 196 | # Uncomment if necessary however generally it will be regenerated when needed 197 | #!**/[Pp]ackages/repositories.config 198 | # NuGet v3's project.json files produces more ignorable files 199 | *.nuget.props 200 | *.nuget.targets 201 | 202 | # Microsoft Azure Build Output 203 | csx/ 204 | *.build.csdef 205 | 206 | # Microsoft Azure Emulator 207 | ecf/ 208 | rcf/ 209 | 210 | # Windows Store app package directories and files 211 | AppPackages/ 212 | BundleArtifacts/ 213 | Package.StoreAssociation.xml 214 | _pkginfo.txt 215 | *.appx 216 | *.appxbundle 217 | *.appxupload 218 | 219 | # Visual Studio cache files 220 | # files ending in .cache can be ignored 221 | *.[Cc]ache 222 | # but keep track of directories ending in .cache 223 | !?*.[Cc]ache/ 224 | 225 | # Others 226 | ClientBin/ 227 | ~$* 228 | *~ 229 | *.dbmdl 230 | *.dbproj.schemaview 231 | *.jfm 232 | *.pfx 233 | *.publishsettings 234 | orleans.codegen.cs 235 | 236 | # Including strong name files can present a security risk 237 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 238 | #*.snk 239 | 240 | # Since there are multiple workflows, uncomment next line to ignore bower_components 241 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 242 | #bower_components/ 243 | 244 | # RIA/Silverlight projects 245 | Generated_Code/ 246 | 247 | # Backup & report files from converting an old project file 248 | # to a newer Visual Studio version. Backup files are not needed, 249 | # because we have git ;-) 250 | _UpgradeReport_Files/ 251 | Backup*/ 252 | UpgradeLog*.XML 253 | UpgradeLog*.htm 254 | ServiceFabricBackup/ 255 | *.rptproj.bak 256 | 257 | # SQL Server files 258 | *.mdf 259 | *.ldf 260 | *.ndf 261 | 262 | # Business Intelligence projects 263 | *.rdl.data 264 | *.bim.layout 265 | *.bim_*.settings 266 | *.rptproj.rsuser 267 | *- [Bb]ackup.rdl 268 | *- [Bb]ackup ([0-9]).rdl 269 | *- [Bb]ackup ([0-9][0-9]).rdl 270 | 271 | # Microsoft Fakes 272 | FakesAssemblies/ 273 | 274 | # GhostDoc plugin setting file 275 | *.GhostDoc.xml 276 | 277 | # Node.js Tools for Visual Studio 278 | .ntvs_analysis.dat 279 | node_modules/ 280 | 281 | # Visual Studio 6 build log 282 | *.plg 283 | 284 | # Visual Studio 6 workspace options file 285 | *.opt 286 | 287 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 288 | *.vbw 289 | 290 | # Visual Studio LightSwitch build output 291 | **/*.HTMLClient/GeneratedArtifacts 292 | **/*.DesktopClient/GeneratedArtifacts 293 | **/*.DesktopClient/ModelManifest.xml 294 | **/*.Server/GeneratedArtifacts 295 | **/*.Server/ModelManifest.xml 296 | _Pvt_Extensions 297 | 298 | # Paket dependency manager 299 | .paket/paket.exe 300 | paket-files/ 301 | 302 | # FAKE - F# Make 303 | .fake/ 304 | 305 | # CodeRush personal settings 306 | .cr/personal 307 | 308 | # Python Tools for Visual Studio (PTVS) 309 | __pycache__/ 310 | *.pyc 311 | 312 | # Cake - Uncomment if you are using it 313 | # tools/** 314 | # !tools/packages.config 315 | 316 | # Tabs Studio 317 | *.tss 318 | 319 | # Telerik's JustMock configuration file 320 | *.jmconfig 321 | 322 | # BizTalk build output 323 | *.btp.cs 324 | *.btm.cs 325 | *.odx.cs 326 | *.xsd.cs 327 | 328 | # OpenCover UI analysis results 329 | OpenCover/ 330 | 331 | # Azure Stream Analytics local run output 332 | ASALocalRun/ 333 | 334 | # MSBuild Binary and Structured Log 335 | *.binlog 336 | 337 | # NVidia Nsight GPU debugger configuration file 338 | *.nvuser 339 | 340 | # MFractors (Xamarin productivity tool) working folder 341 | .mfractor/ 342 | 343 | # Local History for Visual Studio 344 | .localhistory/ 345 | 346 | # BeatPulse healthcheck temp database 347 | healthchecksdb 348 | 349 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 350 | MigrationBackup/ 351 | 352 | # Ionide (cross platform F# VS Code tools) working folder 353 | .ionide/ 354 | -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Form/FrmAddFunction.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | 123 | AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAMMOAADDDgAAAAAAAAAA 124 | AADy7e7/8u3u//Lt7v/y7e7/8u3t//Lv8//04tH/9ti2//fQov/13MD/8fL7//Ls6//y7e7/8u3u//Lt 125 | 7v/y7e7/8u3u//Lt7v/y7e7/8u3u//Ls6//x8/3/+M2a//2zVf/4zZv/+7po//bYt//x8vv/8uzs//Lt 126 | 7v/y7e7/8u3u//Lt7v/y7e7/8u3u//Lt7v/y7Ov/8fP9//jOnP/8uWT/7/z///Hz/f/6wnv/9du9//Hw 127 | 9//y7Oz/8u3u//Lt7v/y7e7/8u3u//Lt7v/y7e7/8uzr//Hz/f/4zpz//Lhh//Xdw//1273/+sF5//rB 128 | ev/x8///8uzr//Lt7v/y7e7/8u3u//Lt7v/y7e7/8u3u//Ls6v/x8vr/98+f//yzVv/5wXn/+sF7//u/ 129 | dv/22bj/8fD1//Ls7P/y7e7/8u3u//Lt7v/y7e7/8u3u//Lt7f/w7e//7Pf///fQov//sEz/+dWv//Ls 130 | 6//v6eT/8Ovq//Lt7//y7e7/8u3u//Lt7v/y7e7/8u3u//Lt7f/x7/P//uHO///auP/6zZr/87Zg//HB 131 | fP//tVv//69G///OnP/w8fr/8uzr//Lt7v/y7e7/8u3u//Lt7v/x7e7/9+7w/8Lo5/9h07z/MePh/xXp 132 | 9f8U7///MOjv/2LUvv/F2L3/9vD0//Hs7f/y7e7/8u3u//Lt7v/y7e7/7e3u///s7/9U7/H/APD1/wDJ 133 | //83uMD/N7a8/wDI//8A7/L/VfDy///s7v/t7e7/8u3u//Lt7v/y7e7/8e3u//Xt7v/t7e//UvP2/wr0 134 | 9v9K7v3/PuLo/z/j6f9K7v3/CvT2/1Lz9v/t7e//9e3u//Ht7v/y7e7/8u3u//Ht7v/37e7/r/Hy/5Dz 135 | 9f8A/P//xO/w/0v//v9M//7/xO/w/wD8//+Q8/X/r/Hy//ft7v/x7e7/8u3u//Lt7v/y7e7/7u3u/+ru 136 | 7/+I9fX/su/y/7j98v8At/3/ALf9/7j98v+y7/L/iPX1/+ru7//u7e7/8u3u//Lt7v/y7e7/8u3u//Tt 137 | 7v/w7e7/7u3u///o7P+t//P/AJr+/wCb/v+u//P//+js/+7t7v/w7e7/9O3u//Lt7v/y7e7/8u3u//Lt 138 | 7v/y7e7/8+3u//Lt7v/r7u7//+ns/03/+f9O//n//+ns/+vu7v/y7e7/8+3u//Lt7v/y7e7/8u3u//Lt 139 | 7v/y7e7/8u3u//Lt7v/y7e7/7+3u///s7f+y8PL/svDy///s7f/w7e7/8u3u//Lt7v/y7e7/8u3u//Lt 140 | 7v/y7e7/8u3u//Lt7v/y7e7/8u3u//Lt7v/z7e7/7u3u/+7t7v/z7e7/8u3u//Lt7v/y7e7/8u3u//Lt 141 | 7v/y7e7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 142 | AAAAAAAAAAAAAA== 143 | 144 | 145 | -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Form/FrmAddFunction.Designer.cs: -------------------------------------------------------------------------------- 1 | 2 | namespace Tools_Injector_Mod_Menu 3 | { 4 | partial class FrmAddFunction 5 | { 6 | /// 7 | /// Required designer variable. 8 | /// 9 | private System.ComponentModel.IContainer components = null; 10 | 11 | /// 12 | /// Clean up any resources being used. 13 | /// 14 | /// true if managed resources should be disposed; otherwise, false. 15 | protected override void Dispose(bool disposing) 16 | { 17 | if (disposing && (components != null)) 18 | { 19 | components.Dispose(); 20 | } 21 | base.Dispose(disposing); 22 | } 23 | 24 | #region Windows Form Designer generated code 25 | 26 | /// 27 | /// Required method for Designer support - do not modify 28 | /// the contents of this method with the code editor. 29 | /// 30 | private void InitializeComponent() 31 | { 32 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmAddFunction)); 33 | this.label14 = new System.Windows.Forms.Label(); 34 | this.panel1 = new System.Windows.Forms.Panel(); 35 | this.panel2 = new System.Windows.Forms.Panel(); 36 | this.comboFunction = new MaterialSkin.Controls.MaterialComboBox(); 37 | this.materialCard2 = new MaterialSkin.Controls.MaterialCard(); 38 | this.panelFunction = new System.Windows.Forms.Panel(); 39 | this.panel1.SuspendLayout(); 40 | this.panel2.SuspendLayout(); 41 | this.materialCard2.SuspendLayout(); 42 | this.SuspendLayout(); 43 | // 44 | // label14 45 | // 46 | this.label14.AutoSize = true; 47 | this.label14.BackColor = System.Drawing.Color.Transparent; 48 | this.label14.Font = new System.Drawing.Font("Roboto", 20F); 49 | this.label14.ForeColor = System.Drawing.Color.White; 50 | this.label14.Location = new System.Drawing.Point(12, 12); 51 | this.label14.Name = "label14"; 52 | this.label14.Size = new System.Drawing.Size(190, 33); 53 | this.label14.TabIndex = 12; 54 | this.label14.Text = "Function Type:"; 55 | // 56 | // panel1 57 | // 58 | this.panel1.Controls.Add(this.panel2); 59 | this.panel1.Controls.Add(this.label14); 60 | this.panel1.Dock = System.Windows.Forms.DockStyle.Top; 61 | this.panel1.Location = new System.Drawing.Point(0, 0); 62 | this.panel1.Name = "panel1"; 63 | this.panel1.Size = new System.Drawing.Size(799, 64); 64 | this.panel1.TabIndex = 14; 65 | // 66 | // panel2 67 | // 68 | this.panel2.BackColor = System.Drawing.Color.White; 69 | this.panel2.Controls.Add(this.comboFunction); 70 | this.panel2.Location = new System.Drawing.Point(208, 12); 71 | this.panel2.Name = "panel2"; 72 | this.panel2.Size = new System.Drawing.Size(577, 35); 73 | this.panel2.TabIndex = 0; 74 | // 75 | // comboFunction 76 | // 77 | this.comboFunction.AutoResize = false; 78 | this.comboFunction.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); 79 | this.comboFunction.Depth = 0; 80 | this.comboFunction.Dock = System.Windows.Forms.DockStyle.Fill; 81 | this.comboFunction.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable; 82 | this.comboFunction.DropDownHeight = 437; 83 | this.comboFunction.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 84 | this.comboFunction.DropDownWidth = 121; 85 | this.comboFunction.Font = new System.Drawing.Font("Roboto Medium", 14F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Pixel); 86 | this.comboFunction.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(222)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); 87 | this.comboFunction.FormattingEnabled = true; 88 | this.comboFunction.IntegralHeight = false; 89 | this.comboFunction.ItemHeight = 29; 90 | this.comboFunction.Items.AddRange(new object[] { 91 | "Category", 92 | "Hook: Button", 93 | "Hook: Button On/Off & Toggle", 94 | "Hook: Input", 95 | "Patch"}); 96 | this.comboFunction.Location = new System.Drawing.Point(0, 0); 97 | this.comboFunction.MaxDropDownItems = 15; 98 | this.comboFunction.MouseState = MaterialSkin.MouseState.OUT; 99 | this.comboFunction.Name = "comboFunction"; 100 | this.comboFunction.Size = new System.Drawing.Size(577, 35); 101 | this.comboFunction.StartIndex = 0; 102 | this.comboFunction.TabIndex = 13; 103 | this.comboFunction.UseTallSize = false; 104 | this.comboFunction.SelectedIndexChanged += new System.EventHandler(this.comboFunction_SelectedIndexChanged); 105 | // 106 | // materialCard2 107 | // 108 | this.materialCard2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); 109 | this.materialCard2.Controls.Add(this.panelFunction); 110 | this.materialCard2.Depth = 0; 111 | this.materialCard2.Dock = System.Windows.Forms.DockStyle.Fill; 112 | this.materialCard2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(222)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); 113 | this.materialCard2.Location = new System.Drawing.Point(0, 64); 114 | this.materialCard2.Margin = new System.Windows.Forms.Padding(14); 115 | this.materialCard2.MouseState = MaterialSkin.MouseState.HOVER; 116 | this.materialCard2.Name = "materialCard2"; 117 | this.materialCard2.Padding = new System.Windows.Forms.Padding(14); 118 | this.materialCard2.Size = new System.Drawing.Size(799, 452); 119 | this.materialCard2.TabIndex = 4; 120 | // 121 | // panelFunction 122 | // 123 | this.panelFunction.Dock = System.Windows.Forms.DockStyle.Fill; 124 | this.panelFunction.Location = new System.Drawing.Point(14, 14); 125 | this.panelFunction.Name = "panelFunction"; 126 | this.panelFunction.Size = new System.Drawing.Size(771, 424); 127 | this.panelFunction.TabIndex = 3; 128 | // 129 | // FrmAddFunction 130 | // 131 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 132 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 133 | this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(81)))), ((int)(((byte)(181))))); 134 | this.ClientSize = new System.Drawing.Size(799, 516); 135 | this.Controls.Add(this.materialCard2); 136 | this.Controls.Add(this.panel1); 137 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; 138 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 139 | this.MaximizeBox = false; 140 | this.MinimizeBox = false; 141 | this.Name = "FrmAddFunction"; 142 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 143 | this.Text = "Category"; 144 | this.panel1.ResumeLayout(false); 145 | this.panel1.PerformLayout(); 146 | this.panel2.ResumeLayout(false); 147 | this.materialCard2.ResumeLayout(false); 148 | this.ResumeLayout(false); 149 | 150 | } 151 | 152 | #endregion 153 | private System.Windows.Forms.Panel panelFunction; 154 | private MaterialSkin.Controls.MaterialCard materialCard2; 155 | private System.Windows.Forms.Label label14; 156 | private System.Windows.Forms.Panel panel1; 157 | private MaterialSkin.Controls.MaterialComboBox comboFunction; 158 | private System.Windows.Forms.Panel panel2; 159 | } 160 | } -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\Resources\folder-7-24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 123 | 124 | 125 | ..\Resources\moderator-24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 126 | 127 | 128 | ..\Resources\tool-box-24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 129 | 130 | 131 | ..\Resources\info-24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 132 | 133 | 134 | ..\Resources\package-2-24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 135 | 136 | 137 | ..\Resources\syringe-24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 138 | 139 | 140 | ..\Resources\note-2-24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 141 | 142 | 143 | ..\Resources\home-7-24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 144 | 145 | 146 | ..\Resources\save-24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 147 | 148 | 149 | ..\Resources\github.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 150 | 151 | -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Control/CtrlCategory.Designer.cs: -------------------------------------------------------------------------------- 1 | 2 | namespace Tools_Injector_Mod_Menu 3 | { 4 | partial class CtrlCategory 5 | { 6 | /// 7 | /// Required designer variable. 8 | /// 9 | private System.ComponentModel.IContainer components = null; 10 | 11 | /// 12 | /// Clean up any resources being used. 13 | /// 14 | /// true if managed resources should be disposed; otherwise, false. 15 | protected override void Dispose(bool disposing) 16 | { 17 | if (disposing && (components != null)) 18 | { 19 | components.Dispose(); 20 | } 21 | base.Dispose(disposing); 22 | } 23 | 24 | #region Component Designer generated code 25 | 26 | /// 27 | /// Required method for Designer support - do not modify 28 | /// the contents of this method with the code editor. 29 | /// 30 | private void InitializeComponent() 31 | { 32 | this.materialCard1 = new MaterialSkin.Controls.MaterialCard(); 33 | this.groupBox1 = new System.Windows.Forms.GroupBox(); 34 | this.txtNameCheat = new MaterialSkin.Controls.MaterialTextBox(); 35 | this.label1 = new System.Windows.Forms.Label(); 36 | this.txtCategory = new MaterialSkin.Controls.MaterialTextBox(); 37 | this.label16 = new System.Windows.Forms.Label(); 38 | this.btnSave = new MaterialSkin.Controls.MaterialButton(); 39 | this.materialCard1.SuspendLayout(); 40 | this.groupBox1.SuspendLayout(); 41 | this.SuspendLayout(); 42 | // 43 | // materialCard1 44 | // 45 | this.materialCard1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); 46 | this.materialCard1.Controls.Add(this.groupBox1); 47 | this.materialCard1.Controls.Add(this.btnSave); 48 | this.materialCard1.Depth = 0; 49 | this.materialCard1.Dock = System.Windows.Forms.DockStyle.Fill; 50 | this.materialCard1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(222)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); 51 | this.materialCard1.Location = new System.Drawing.Point(0, 0); 52 | this.materialCard1.Margin = new System.Windows.Forms.Padding(14); 53 | this.materialCard1.MouseState = MaterialSkin.MouseState.HOVER; 54 | this.materialCard1.Name = "materialCard1"; 55 | this.materialCard1.Size = new System.Drawing.Size(771, 424); 56 | this.materialCard1.TabIndex = 0; 57 | // 58 | // groupBox1 59 | // 60 | this.groupBox1.Controls.Add(this.txtNameCheat); 61 | this.groupBox1.Controls.Add(this.label1); 62 | this.groupBox1.Controls.Add(this.txtCategory); 63 | this.groupBox1.Controls.Add(this.label16); 64 | this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; 65 | this.groupBox1.Font = new System.Drawing.Font("Roboto", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel); 66 | this.groupBox1.Location = new System.Drawing.Point(0, 0); 67 | this.groupBox1.Name = "groupBox1"; 68 | this.groupBox1.Size = new System.Drawing.Size(771, 388); 69 | this.groupBox1.TabIndex = 3; 70 | this.groupBox1.TabStop = false; 71 | this.groupBox1.Text = "Main Settings"; 72 | // 73 | // txtNameCheat 74 | // 75 | this.txtNameCheat.BorderStyle = System.Windows.Forms.BorderStyle.None; 76 | this.txtNameCheat.Depth = 0; 77 | this.txtNameCheat.Font = new System.Drawing.Font("Roboto", 16F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel); 78 | this.txtNameCheat.LeadingIcon = null; 79 | this.txtNameCheat.Location = new System.Drawing.Point(107, 25); 80 | this.txtNameCheat.MaxLength = 50; 81 | this.txtNameCheat.MouseState = MaterialSkin.MouseState.OUT; 82 | this.txtNameCheat.Multiline = false; 83 | this.txtNameCheat.Name = "txtNameCheat"; 84 | this.txtNameCheat.Size = new System.Drawing.Size(292, 36); 85 | this.txtNameCheat.TabIndex = 17; 86 | this.txtNameCheat.Text = ""; 87 | this.txtNameCheat.TrailingIcon = null; 88 | this.txtNameCheat.UseTallSize = false; 89 | // 90 | // label1 91 | // 92 | this.label1.AutoSize = true; 93 | this.label1.Location = new System.Drawing.Point(6, 34); 94 | this.label1.Name = "label1"; 95 | this.label1.Size = new System.Drawing.Size(95, 18); 96 | this.label1.TabIndex = 16; 97 | this.label1.Text = "Name Cheat:"; 98 | // 99 | // txtCategory 100 | // 101 | this.txtCategory.BorderStyle = System.Windows.Forms.BorderStyle.None; 102 | this.txtCategory.Depth = 0; 103 | this.txtCategory.Font = new System.Drawing.Font("Roboto", 16F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel); 104 | this.txtCategory.LeadingIcon = null; 105 | this.txtCategory.Location = new System.Drawing.Point(107, 67); 106 | this.txtCategory.MaxLength = 50; 107 | this.txtCategory.MouseState = MaterialSkin.MouseState.OUT; 108 | this.txtCategory.Multiline = false; 109 | this.txtCategory.Name = "txtCategory"; 110 | this.txtCategory.Size = new System.Drawing.Size(658, 36); 111 | this.txtCategory.TabIndex = 15; 112 | this.txtCategory.Text = ""; 113 | this.txtCategory.TrailingIcon = null; 114 | this.txtCategory.UseTallSize = false; 115 | // 116 | // label16 117 | // 118 | this.label16.AutoSize = true; 119 | this.label16.Location = new System.Drawing.Point(21, 76); 120 | this.label16.Name = "label16"; 121 | this.label16.Size = new System.Drawing.Size(80, 18); 122 | this.label16.TabIndex = 14; 123 | this.label16.Text = "Cagtegory:"; 124 | // 125 | // btnSave 126 | // 127 | this.btnSave.AccentTextColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(64)))), ((int)(((byte)(129))))); 128 | this.btnSave.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; 129 | this.btnSave.Density = MaterialSkin.Controls.MaterialButton.MaterialButtonDensity.Default; 130 | this.btnSave.Depth = 0; 131 | this.btnSave.Dock = System.Windows.Forms.DockStyle.Bottom; 132 | this.btnSave.HighEmphasis = true; 133 | this.btnSave.Icon = null; 134 | this.btnSave.Location = new System.Drawing.Point(0, 388); 135 | this.btnSave.Margin = new System.Windows.Forms.Padding(4, 6, 4, 6); 136 | this.btnSave.MouseState = MaterialSkin.MouseState.HOVER; 137 | this.btnSave.Name = "btnSave"; 138 | this.btnSave.NoAccentTextColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(81)))), ((int)(((byte)(181))))); 139 | this.btnSave.Size = new System.Drawing.Size(771, 36); 140 | this.btnSave.TabIndex = 0; 141 | this.btnSave.Text = "Save"; 142 | this.btnSave.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Contained; 143 | this.btnSave.UseAccentColor = false; 144 | this.btnSave.UseVisualStyleBackColor = true; 145 | this.btnSave.Click += new System.EventHandler(this.btnSave_Click); 146 | // 147 | // CtrlCategory 148 | // 149 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 150 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 151 | this.Controls.Add(this.materialCard1); 152 | this.Name = "CtrlCategory"; 153 | this.Size = new System.Drawing.Size(771, 424); 154 | this.materialCard1.ResumeLayout(false); 155 | this.materialCard1.PerformLayout(); 156 | this.groupBox1.ResumeLayout(false); 157 | this.groupBox1.PerformLayout(); 158 | this.ResumeLayout(false); 159 | 160 | } 161 | 162 | #endregion 163 | 164 | private MaterialSkin.Controls.MaterialCard materialCard1; 165 | private MaterialSkin.Controls.MaterialButton btnSave; 166 | private System.Windows.Forms.GroupBox groupBox1; 167 | private System.Windows.Forms.Label label16; 168 | private MaterialSkin.Controls.MaterialTextBox txtCategory; 169 | private MaterialSkin.Controls.MaterialTextBox txtNameCheat; 170 | private System.Windows.Forms.Label label1; 171 | } 172 | } 173 | -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Form/FrmImageText.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace Tools_Injector_Mod_Menu 2 | { 3 | partial class FrmImageText 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.txtImg = new System.Windows.Forms.RichTextBox(); 32 | this.materialCard1 = new MaterialSkin.Controls.MaterialCard(); 33 | this.lbImgCompress = new System.Windows.Forms.LinkLabel(); 34 | this.lbImageEncoder = new System.Windows.Forms.LinkLabel(); 35 | this.btnClose = new MaterialSkin.Controls.MaterialButton(); 36 | this.btnSave = new MaterialSkin.Controls.MaterialButton(); 37 | this.materialCard1.SuspendLayout(); 38 | this.SuspendLayout(); 39 | // 40 | // txtImg 41 | // 42 | this.txtImg.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 43 | this.txtImg.Dock = System.Windows.Forms.DockStyle.Top; 44 | this.txtImg.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); 45 | this.txtImg.Location = new System.Drawing.Point(14, 14); 46 | this.txtImg.Name = "txtImg"; 47 | this.txtImg.Size = new System.Drawing.Size(506, 438); 48 | this.txtImg.TabIndex = 18; 49 | this.txtImg.Text = ""; 50 | // 51 | // materialCard1 52 | // 53 | this.materialCard1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); 54 | this.materialCard1.Controls.Add(this.lbImgCompress); 55 | this.materialCard1.Controls.Add(this.lbImageEncoder); 56 | this.materialCard1.Controls.Add(this.btnClose); 57 | this.materialCard1.Controls.Add(this.btnSave); 58 | this.materialCard1.Controls.Add(this.txtImg); 59 | this.materialCard1.Depth = 0; 60 | this.materialCard1.Dock = System.Windows.Forms.DockStyle.Fill; 61 | this.materialCard1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(222)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); 62 | this.materialCard1.Location = new System.Drawing.Point(0, 0); 63 | this.materialCard1.Margin = new System.Windows.Forms.Padding(14); 64 | this.materialCard1.MouseState = MaterialSkin.MouseState.HOVER; 65 | this.materialCard1.Name = "materialCard1"; 66 | this.materialCard1.Padding = new System.Windows.Forms.Padding(14); 67 | this.materialCard1.Size = new System.Drawing.Size(534, 511); 68 | this.materialCard1.TabIndex = 19; 69 | // 70 | // lbImgCompress 71 | // 72 | this.lbImgCompress.AutoSize = true; 73 | this.lbImgCompress.Location = new System.Drawing.Point(69, 472); 74 | this.lbImgCompress.Name = "lbImgCompress"; 75 | this.lbImgCompress.Size = new System.Drawing.Size(79, 13); 76 | this.lbImgCompress.TabIndex = 22; 77 | this.lbImgCompress.TabStop = true; 78 | this.lbImgCompress.Text = "Compress PNG"; 79 | this.lbImgCompress.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lbImgCompress_LinkClicked); 80 | // 81 | // lbImageEncoder 82 | // 83 | this.lbImageEncoder.AutoSize = true; 84 | this.lbImageEncoder.Location = new System.Drawing.Point(154, 472); 85 | this.lbImageEncoder.Name = "lbImageEncoder"; 86 | this.lbImageEncoder.Size = new System.Drawing.Size(79, 13); 87 | this.lbImageEncoder.TabIndex = 21; 88 | this.lbImageEncoder.TabStop = true; 89 | this.lbImageEncoder.Text = "Image Encoder"; 90 | this.lbImageEncoder.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lbImageEncoder_LinkClicked); 91 | // 92 | // btnClose 93 | // 94 | this.btnClose.AccentTextColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(64)))), ((int)(((byte)(129))))); 95 | this.btnClose.AutoSize = false; 96 | this.btnClose.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; 97 | this.btnClose.Density = MaterialSkin.Controls.MaterialButton.MaterialButtonDensity.Default; 98 | this.btnClose.Depth = 0; 99 | this.btnClose.HighEmphasis = true; 100 | this.btnClose.Icon = null; 101 | this.btnClose.Location = new System.Drawing.Point(421, 461); 102 | this.btnClose.Margin = new System.Windows.Forms.Padding(4, 6, 4, 6); 103 | this.btnClose.MouseState = MaterialSkin.MouseState.HOVER; 104 | this.btnClose.Name = "btnClose"; 105 | this.btnClose.NoAccentTextColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(81)))), ((int)(((byte)(181))))); 106 | this.btnClose.Size = new System.Drawing.Size(100, 35); 107 | this.btnClose.TabIndex = 20; 108 | this.btnClose.Text = "Cancel"; 109 | this.btnClose.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Contained; 110 | this.btnClose.UseAccentColor = false; 111 | this.btnClose.UseVisualStyleBackColor = true; 112 | this.btnClose.Click += new System.EventHandler(this.btnClose_Click); 113 | // 114 | // btnSave 115 | // 116 | this.btnSave.AccentTextColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(64)))), ((int)(((byte)(129))))); 117 | this.btnSave.AutoSize = false; 118 | this.btnSave.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; 119 | this.btnSave.Density = MaterialSkin.Controls.MaterialButton.MaterialButtonDensity.Default; 120 | this.btnSave.Depth = 0; 121 | this.btnSave.HighEmphasis = true; 122 | this.btnSave.Icon = null; 123 | this.btnSave.Location = new System.Drawing.Point(313, 461); 124 | this.btnSave.Margin = new System.Windows.Forms.Padding(4, 6, 4, 6); 125 | this.btnSave.MouseState = MaterialSkin.MouseState.HOVER; 126 | this.btnSave.Name = "btnSave"; 127 | this.btnSave.NoAccentTextColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(81)))), ((int)(((byte)(181))))); 128 | this.btnSave.Size = new System.Drawing.Size(100, 35); 129 | this.btnSave.TabIndex = 19; 130 | this.btnSave.Text = "Save"; 131 | this.btnSave.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Contained; 132 | this.btnSave.UseAccentColor = false; 133 | this.btnSave.UseVisualStyleBackColor = true; 134 | this.btnSave.Click += new System.EventHandler(this.btnSave_Click); 135 | // 136 | // FrmImageText 137 | // 138 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 139 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 140 | this.ClientSize = new System.Drawing.Size(534, 511); 141 | this.Controls.Add(this.materialCard1); 142 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; 143 | this.Name = "FrmImageText"; 144 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 145 | this.Text = "Image Code"; 146 | this.TopMost = true; 147 | this.Load += new System.EventHandler(this.FrmImageText_Load); 148 | this.materialCard1.ResumeLayout(false); 149 | this.materialCard1.PerformLayout(); 150 | this.ResumeLayout(false); 151 | 152 | } 153 | 154 | #endregion 155 | 156 | private System.Windows.Forms.RichTextBox txtImg; 157 | private MaterialSkin.Controls.MaterialCard materialCard1; 158 | private MaterialSkin.Controls.MaterialButton btnClose; 159 | private MaterialSkin.Controls.MaterialButton btnSave; 160 | private System.Windows.Forms.LinkLabel lbImageEncoder; 161 | private System.Windows.Forms.LinkLabel lbImgCompress; 162 | } 163 | } -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Control/CtrlPatch.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Windows.Forms; 4 | using Tools_Injector_Mod_Menu.Patch_Manager; 5 | 6 | namespace Tools_Injector_Mod_Menu 7 | { 8 | public partial class CtrlPatch : UserControl 9 | { 10 | private readonly int _index; 11 | private Enums.FunctionType _type; 12 | private readonly FrmAddFunction _frmAddFunction; 13 | 14 | public CtrlPatch(FrmAddFunction frmAdd, int index = 1150) 15 | { 16 | InitializeComponent(); 17 | _index = index; 18 | _frmAddFunction = frmAdd; 19 | _frmAddFunction.Text = PatchName(); 20 | if (_index != 1150) 21 | { 22 | AddListValues(); 23 | } 24 | else 25 | { 26 | btnSave.Text = "Add Function"; 27 | } 28 | } 29 | 30 | private void AddListValues() 31 | { 32 | _type = OffsetPatch.FunctionList[_index].FunctionType; 33 | switch (_type) 34 | { 35 | case Enums.FunctionType.PatchButtonOnOff: 36 | radButtonOnOff.Checked = true; 37 | break; 38 | 39 | case Enums.FunctionType.PatchLabel: 40 | radLabel.Checked = true; 41 | break; 42 | 43 | case Enums.FunctionType.PatchToggle: 44 | radToggle.Checked = true; 45 | break; 46 | } 47 | 48 | txtNameCheat.Text = OffsetPatch.FunctionList[_index].CheatName; 49 | 50 | foreach (var offset in OffsetPatch.FunctionList[_index].OffsetList) 51 | { 52 | dataList.Rows.Add(offset.Name, offset.Offset, offset.Hex); 53 | } 54 | } 55 | 56 | private void btnSave_Click(object sender, EventArgs e) 57 | { 58 | try 59 | { 60 | var offsetList = new List(); 61 | 62 | if (dataList.IsEmpty()) return; 63 | if (txtNameCheat.IsEmpty("Name Cheat")) return; 64 | 65 | for (var i = 0; i < dataList.Rows.Count; i++) 66 | { 67 | var name = dataList.Rows[i].Cells[0].Value.IsEmpty() ? "" : dataList.Rows[i].Cells[0].Value.ToString(); 68 | var offset = dataList.Rows[i].Cells[1].Value.IsEmpty() ? "" : dataList.Rows[i].Cells[1].Value.ToString(); 69 | var hex = dataList.Rows[i].Cells[2].Value.IsEmpty() ? "" : dataList.Rows[i].Cells[2].Value.ToString(); 70 | 71 | if (offset.IsEmpty(i + 1, "Offset")) 72 | { 73 | return; 74 | } 75 | 76 | if (hex.IsEmpty(i + 1, "Hex")) 77 | { 78 | return; 79 | } 80 | 81 | if (!offset.StartsWith("0x")) 82 | { 83 | MyMessage.MsgShowWarning(@$"Offset At {i + 1}, does not start with ""0x"" Please check it again!!!"); 84 | return; 85 | } 86 | 87 | hex = dataList.Rows[i].Cells[2].Value.ToString().InsertSpaces(); 88 | 89 | var offsetInfo = new OffsetInfo 90 | { 91 | OffsetId = i, 92 | Offset = offset, 93 | Hex = hex, 94 | HookInfo = OffsetPatch.HookValue(), 95 | Name = name, 96 | Method = new List<(string, string)> { (null, null) } 97 | }; 98 | offsetList.Add(offsetInfo); 99 | } 100 | var functionType = GetFunctionType(); 101 | if (_index == 1150) 102 | { 103 | if (txtNameCheat.Text.IsDuplicateName(OffsetPatch.FunctionList)) 104 | { 105 | return; 106 | } 107 | OffsetPatch.OffsetList = offsetList; 108 | OffsetPatch.AddFunction(txtNameCheat.Text, functionType); 109 | OffsetPatch.OffsetList.Clear(); 110 | } 111 | else 112 | { 113 | var result = MyMessage.MsgYesNoCancel("Do you want to save?\n\n" + 114 | "Click \"OK\" to confirm.\n\n" + 115 | "Click \"Cancel\" to cancel."); 116 | switch (result) 117 | { 118 | case DialogResult.Cancel: 119 | return; 120 | 121 | case DialogResult.No: 122 | Values.Save = false; 123 | Dispose(); 124 | _frmAddFunction.Dispose(); 125 | break; 126 | } 127 | 128 | OffsetPatch.FunctionList[_index] = new FunctionList 129 | { 130 | CheatName = txtNameCheat.Text, 131 | FunctionType = functionType, 132 | OffsetList = offsetList, 133 | FunctionExtra = null, 134 | MultipleValue = false 135 | }; 136 | } 137 | 138 | Values.Save = true; 139 | Dispose(); 140 | _frmAddFunction.Dispose(); 141 | } 142 | catch (Exception exception) 143 | { 144 | MyMessage.MsgShowError("Error" + exception.Message); 145 | } 146 | } 147 | 148 | #region Data List 149 | 150 | private void dataList_KeyDown(object sender, KeyEventArgs e) 151 | { 152 | if (e.KeyCode == Keys.Delete) 153 | { 154 | RemoveRows(); 155 | } 156 | 157 | if (e.KeyCode == Keys.V && e.Control) 158 | { 159 | if (dataList.GetCellCount(DataGridViewElementStates.Selected) > 0 && !dataList.CurrentCell.ReadOnly) 160 | { 161 | dataList.CurrentCell.Value = Clipboard.GetText(); 162 | } 163 | } 164 | } 165 | 166 | private void dataList_MouseDown(object sender, MouseEventArgs e) 167 | { 168 | if (e.Button == MouseButtons.Right) 169 | { 170 | try 171 | { 172 | var hti = dataList.HitTest(e.X, e.Y); 173 | dataList.ClearSelection(); 174 | dataList.Rows[hti.RowIndex].Selected = true; 175 | } 176 | catch 177 | { 178 | // 179 | } 180 | } 181 | 182 | if (dataList.SelectedRows.Count > 0) 183 | { 184 | addToolStripMenuItem.Enabled = false; 185 | removeToolStripMenuItem.Enabled = true; 186 | } 187 | else 188 | { 189 | addToolStripMenuItem.Enabled = true; 190 | removeToolStripMenuItem.Enabled = false; 191 | } 192 | } 193 | 194 | private void RemoveRows() 195 | { 196 | try 197 | { 198 | if (dataList.RowCount <= 1 || dataList.CurrentCell.RowIndex == dataList.RowCount - 1) return; 199 | dataList.Rows.RemoveAt(dataList.SelectedCells[0].RowIndex); 200 | dataList.ClearSelection(); 201 | } 202 | catch 203 | { 204 | // 205 | } 206 | } 207 | 208 | #endregion Data List 209 | 210 | #region ToolStripMenuItem 211 | 212 | private void removeToolStripMenuItem_Click(object sender, EventArgs e) 213 | { 214 | try 215 | { 216 | var rowToDelete = dataList.Rows.GetFirstRow(DataGridViewElementStates.Selected); 217 | dataList.Rows.RemoveAt(rowToDelete); 218 | dataList.ClearSelection(); 219 | } 220 | catch 221 | { 222 | // 223 | } 224 | } 225 | 226 | private void addToolStripMenuItem_Click(object sender, EventArgs e) 227 | { 228 | dataList.Rows.Add(null, null, null); 229 | } 230 | 231 | #endregion ToolStripMenuItem 232 | 233 | private void rad_CheckedChanged(object sender, EventArgs e) 234 | { 235 | _frmAddFunction.Text = PatchName(); 236 | } 237 | 238 | private string PatchName() 239 | { 240 | return radButtonOnOff.Checked ? "Patch: Button On/Off" : 241 | radLabel.Checked ? "Patch: Label" : 242 | radToggle.Checked ? "Patch: Toggle" : 243 | null; 244 | } 245 | 246 | private Enums.FunctionType GetFunctionType() 247 | { 248 | return radButtonOnOff.Checked ? Enums.FunctionType.PatchButtonOnOff : 249 | radLabel.Checked ? Enums.FunctionType.PatchLabel : 250 | radToggle.Checked ? Enums.FunctionType.PatchToggle : 251 | Enums.FunctionType.Empty; 252 | } 253 | } 254 | } -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Tools Injector Mod Menu.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {DBC33172-02FF-407F-98A3-DC1A9289928A} 8 | WinExe 9 | Tools_Injector_Mod_Menu 10 | Tools Injector Mod Menu 11 | v4.8 12 | 512 13 | true 14 | true 15 | false 16 | publish\ 17 | true 18 | Disk 19 | false 20 | Foreground 21 | 7 22 | Days 23 | false 24 | false 25 | true 26 | 0 27 | 1.0.0.%2a 28 | false 29 | true 30 | 31 | 32 | AnyCPU 33 | true 34 | full 35 | false 36 | bin\Debug\ 37 | DEBUG;TRACE 38 | prompt 39 | 4 40 | latest 41 | 42 | 43 | 44 | 45 | AnyCPU 46 | pdbonly 47 | true 48 | bin\Release\ 49 | TRACE 50 | prompt 51 | 4 52 | latest 53 | 54 | 55 | T5 - 32.ico 56 | 57 | 58 | app.manifest 59 | 60 | 61 | LocalIntranet 62 | 63 | 64 | false 65 | 66 | 67 | false 68 | 69 | 70 | 71 | ..\packages\Octokit.0.50.0\lib\net46\Octokit.dll 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | UserControl 94 | 95 | 96 | CtrlHookButton.cs 97 | 98 | 99 | UserControl 100 | 101 | 102 | CtrlHookInput.cs 103 | 104 | 105 | UserControl 106 | 107 | 108 | CtrlHook.cs 109 | 110 | 111 | UserControl 112 | 113 | 114 | CtrlCategory.cs 115 | 116 | 117 | Form 118 | 119 | 120 | FrmMain.cs 121 | 122 | 123 | Form 124 | 125 | 126 | FrmImageText.cs 127 | 128 | 129 | Form 130 | 131 | 132 | FrmAddFunction.cs 133 | 134 | 135 | UserControl 136 | 137 | 138 | CtrlPatch.cs 139 | 140 | 141 | Form 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | CtrlHookButton.cs 160 | 161 | 162 | CtrlHookInput.cs 163 | 164 | 165 | CtrlHook.cs 166 | 167 | 168 | CtrlCategory.cs 169 | 170 | 171 | FrmMain.cs 172 | 173 | 174 | FrmImageText.cs 175 | 176 | 177 | FrmAddFunction.cs 178 | 179 | 180 | ResXFileCodeGenerator 181 | Resources.Designer.cs 182 | Designer 183 | 184 | 185 | True 186 | Resources.resx 187 | True 188 | 189 | 190 | CtrlPatch.cs 191 | 192 | 193 | 194 | 195 | SettingsSingleFileGenerator 196 | Settings.Designer.cs 197 | 198 | 199 | True 200 | Settings.settings 201 | True 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | {8eb7611b-68cd-4b8b-987a-11717e2b250c} 224 | MaterialSkin 225 | 226 | 227 | {e1f5aeb2-7cfd-40c6-9a97-ada7e13f1d0c} 228 | ModernFolderBrowserDialog 229 | 230 | 231 | 232 | 233 | False 234 | Microsoft .NET Framework 4.8 %28x86 and x64%29 235 | true 236 | 237 | 238 | False 239 | .NET Framework 3.5 SP1 240 | false 241 | 242 | 243 | 244 | 245 | 246 | 247 | -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Control/CtrlHookButton.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Globalization; 4 | using System.Linq; 5 | using System.Windows.Forms; 6 | using Tools_Injector_Mod_Menu.Patch_Manager; 7 | 8 | namespace Tools_Injector_Mod_Menu 9 | { 10 | public partial class CtrlHookButton : UserControl 11 | { 12 | private readonly int _index; 13 | private Enums.FunctionType _type; 14 | private readonly FrmAddFunction _frmAddFunction; 15 | 16 | public CtrlHookButton(FrmAddFunction frmAdd, int index = 1150) 17 | { 18 | InitializeComponent(); 19 | _index = index; 20 | _frmAddFunction = frmAdd; 21 | _frmAddFunction.Text = HookName(); 22 | if (_index != 1150) 23 | { 24 | AddListValues(); 25 | } 26 | else 27 | { 28 | btnSave.Text = "Add Function"; 29 | } 30 | } 31 | 32 | private void AddListValues() 33 | { 34 | var num = OffsetPatch.FunctionList[_index].FunctionExtra; 35 | _type = OffsetPatch.FunctionList[_index].FunctionType; 36 | switch (_type) 37 | { 38 | case Enums.FunctionType.HookButton: 39 | radButton.Checked = true; 40 | break; 41 | 42 | case Enums.FunctionType.HookInputButton: 43 | numMax.Value = Convert.ToDecimal(num); 44 | radInput.Checked = true; 45 | break; 46 | } 47 | 48 | txtNameCheat.Text = OffsetPatch.FunctionList[_index].CheatName; 49 | 50 | foreach (var offset in OffsetPatch.FunctionList[_index].OffsetList) 51 | { 52 | var type = ""; 53 | var values = ""; 54 | for (var i = 0; i < offset.Method.Count; i++) 55 | { 56 | type += $"{offset.Method[i].Item1}, "; 57 | values += $"{offset.Method[i].Item2}, "; 58 | } 59 | type = type.Remove(type.Length - 2); 60 | values = values.Remove(values.Length - 2); 61 | dataList.Rows.Add(offset.Name, offset.Offset, offset.HookInfo.FieldInfo.Offset, type, values); 62 | } 63 | } 64 | 65 | private void btnSave_Click(object sender, EventArgs e) 66 | { 67 | try 68 | { 69 | var offsetList = new List(); 70 | 71 | if (dataList.IsEmpty()) return; 72 | if (txtNameCheat.IsEmpty("Name Cheat")) return; 73 | 74 | for (var i = 0; i < dataList.Rows.Count; i++) 75 | { 76 | var name = dataList.Rows[i].Cells[0].Value.IsEmpty() ? "" : dataList.Rows[i].Cells[0].Value.ToString(); 77 | var updateOffset = dataList.Rows[i].Cells[1].Value.IsEmpty() ? "" : dataList.Rows[i].Cells[1].Value.ToString(); 78 | var offset = dataList.Rows[i].Cells[2].Value.IsEmpty() ? "" : dataList.Rows[i].Cells[2].Value.ToString(); 79 | var type = dataList.Rows[i].Cells[3].Value.IsEmpty() ? "" : dataList.Rows[i].Cells[3].Value.ToString(); 80 | var values = dataList.Rows[i].Cells[4].Value.IsEmpty() ? "" : dataList.Rows[i].Cells[4].Value.ToString(); 81 | 82 | if (!offset.StartsWith("0x") || !updateOffset.StartsWith("0x")) 83 | { 84 | MyMessage.MsgShowWarning(@$"Offset At {i + 1}, does not start with ""0x"" Please check it again!!!"); 85 | return; 86 | } 87 | 88 | if (!type.IsEmpty(i + 1, "Type", false) && values.IsEmpty(i + 1, "Values")) 89 | { 90 | return; 91 | } 92 | 93 | if (radInput.Checked && !values.Contains("value")) 94 | { 95 | MyMessage.MsgShowWarning(@$"Values At {i + 1}, does not contains ""value"" for input value. Please check it again!!!"); 96 | return; 97 | } 98 | 99 | var typeList = type.RemoveMiniSpecialCharacters().Split(','); 100 | var valueList = values.RemoveMiniSpecialCharacters().Split(','); 101 | if (typeList.Length != valueList.Length) 102 | { 103 | MyMessage.MsgShowWarning($"Type At {i + 1}, does not equal Values At {i + 1}. Please check it again!!!"); 104 | return; 105 | } 106 | 107 | var method = typeList.Select((t, j) => (t, valueList[j])).ToList(); 108 | 109 | var fieldInfo = new FieldInfo 110 | { 111 | Type = Enums.Type.Empty, 112 | Offset = offset 113 | }; 114 | var hookInfo = new HookInfo 115 | { 116 | Type = Enums.Type.Empty, 117 | Value = null, 118 | Links = null, 119 | FieldInfo = fieldInfo 120 | }; 121 | 122 | var offsetInfo = new OffsetInfo 123 | { 124 | OffsetId = i, 125 | Offset = updateOffset, 126 | Hex = null, 127 | HookInfo = hookInfo, 128 | Name = name, 129 | Method = method 130 | }; 131 | offsetList.Add(offsetInfo); 132 | } 133 | 134 | var functionType = GetFunctionType(); 135 | var functionExtra = numMax.Value.ToString(CultureInfo.InvariantCulture); 136 | if (_index == 1150) 137 | { 138 | if (txtNameCheat.Text.IsDuplicateName(OffsetPatch.FunctionList)) 139 | { 140 | return; 141 | } 142 | OffsetPatch.OffsetList = offsetList; 143 | OffsetPatch.AddFunction(txtNameCheat.Text, functionType, functionExtra); 144 | OffsetPatch.OffsetList.Clear(); 145 | } 146 | else 147 | { 148 | var result = MyMessage.MsgYesNoCancel("Do you want to save?\n\n" + 149 | "Click \"OK\" to confirm.\n\n" + 150 | "Click \"Cancel\" to cancel."); 151 | switch (result) 152 | { 153 | case DialogResult.Cancel: 154 | return; 155 | 156 | case DialogResult.No: 157 | Values.Save = false; 158 | Dispose(); 159 | _frmAddFunction.Dispose(); 160 | break; 161 | } 162 | 163 | OffsetPatch.FunctionList[_index] = new FunctionList 164 | { 165 | CheatName = txtNameCheat.Text, 166 | FunctionType = functionType, 167 | OffsetList = offsetList, 168 | FunctionExtra = functionExtra, 169 | MultipleValue = false 170 | }; 171 | } 172 | 173 | Values.Save = true; 174 | Dispose(); 175 | _frmAddFunction.Dispose(); 176 | } 177 | catch (Exception exception) 178 | { 179 | MyMessage.MsgShowError("Error" + exception.Message); 180 | } 181 | } 182 | 183 | #region Data List 184 | 185 | private void dataList_KeyDown(object sender, KeyEventArgs e) 186 | { 187 | if (e.KeyCode == Keys.Delete) 188 | { 189 | RemoveRows(); 190 | } 191 | 192 | if (e.KeyCode == Keys.V && e.Control) 193 | { 194 | if (dataList.GetCellCount(DataGridViewElementStates.Selected) > 0 && !dataList.CurrentCell.ReadOnly) 195 | { 196 | dataList.CurrentCell.Value = Clipboard.GetText(); 197 | } 198 | } 199 | } 200 | 201 | private void dataList_MouseDown(object sender, MouseEventArgs e) 202 | { 203 | if (e.Button == MouseButtons.Right) 204 | { 205 | try 206 | { 207 | var hti = dataList.HitTest(e.X, e.Y); 208 | dataList.ClearSelection(); 209 | dataList.Rows[hti.RowIndex].Selected = true; 210 | } 211 | catch 212 | { 213 | // 214 | } 215 | } 216 | 217 | if (dataList.SelectedRows.Count > 0) 218 | { 219 | addToolStripMenuItem.Enabled = false; 220 | removeToolStripMenuItem.Enabled = true; 221 | } 222 | else 223 | { 224 | addToolStripMenuItem.Enabled = true; 225 | removeToolStripMenuItem.Enabled = false; 226 | } 227 | } 228 | 229 | private void RemoveRows() 230 | { 231 | try 232 | { 233 | if (dataList.RowCount <= 1 || dataList.CurrentCell.RowIndex == dataList.RowCount - 1) return; 234 | dataList.Rows.RemoveAt(dataList.SelectedCells[0].RowIndex); 235 | dataList.ClearSelection(); 236 | } 237 | catch 238 | { 239 | // 240 | } 241 | } 242 | 243 | #endregion Data List 244 | 245 | #region ToolStripMenuItem 246 | 247 | private void removeToolStripMenuItem_Click(object sender, EventArgs e) 248 | { 249 | try 250 | { 251 | var rowToDelete = dataList.Rows.GetFirstRow(DataGridViewElementStates.Selected); 252 | dataList.Rows.RemoveAt(rowToDelete); 253 | dataList.ClearSelection(); 254 | } 255 | catch 256 | { 257 | // 258 | } 259 | } 260 | 261 | private void addToolStripMenuItem_Click(object sender, EventArgs e) 262 | { 263 | dataList.Rows.Add(null, null, null, null); 264 | } 265 | 266 | #endregion ToolStripMenuItem 267 | 268 | private void rad_CheckedChanged(object sender, EventArgs e) 269 | { 270 | _frmAddFunction.Text = HookName(); 271 | numMax.Enabled = radInput.Checked; 272 | } 273 | 274 | private string HookName() 275 | { 276 | return radButton.Checked ? "Hook: Button" : 277 | radInput.Checked ? "Hook: Input Button" : 278 | null; 279 | } 280 | 281 | private Enums.FunctionType GetFunctionType() 282 | { 283 | return radButton.Checked ? Enums.FunctionType.HookButton : 284 | radInput.Checked ? Enums.FunctionType.HookInputButton : 285 | Enums.FunctionType.Empty; 286 | } 287 | } 288 | } -------------------------------------------------------------------------------- /Tools Injector Mod Menu/Control/CtrlHook.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Drawing; 4 | using System.Windows.Forms; 5 | using Tools_Injector_Mod_Menu.Patch_Manager; 6 | 7 | namespace Tools_Injector_Mod_Menu 8 | { 9 | public partial class CtrlHook : UserControl 10 | { 11 | private readonly int _index; 12 | private Enums.FunctionType _type; 13 | private readonly FrmAddFunction _frmAddFunction; 14 | 15 | public CtrlHook(FrmAddFunction frmAdd, int index = 1150) 16 | { 17 | InitializeComponent(); 18 | _index = index; 19 | _frmAddFunction = frmAdd; 20 | _frmAddFunction.Text = HookName(); 21 | if (_index != 1150) 22 | { 23 | AddListValues(); 24 | } 25 | else 26 | { 27 | btnSave.Text = "Add Function"; 28 | } 29 | } 30 | 31 | private void AddListValues() 32 | { 33 | _type = OffsetPatch.FunctionList[_index].FunctionType; 34 | switch (_type) 35 | { 36 | case Enums.FunctionType.HookButtonOnOf: 37 | radButtonOnOff.Checked = true; 38 | break; 39 | 40 | case Enums.FunctionType.HookToggle: 41 | radToggle.Checked = true; 42 | break; 43 | } 44 | 45 | txtNameCheat.Text = OffsetPatch.FunctionList[_index].CheatName; 46 | 47 | foreach (var offset in OffsetPatch.FunctionList[_index].OffsetList) 48 | { 49 | dataList.Rows.Add(offset.Name, offset.Offset, offset.HookInfo.Type.TypeToString(true), offset.HookInfo.FieldInfo.Type.TypeToString(true), offset.HookInfo.FieldInfo.Offset, offset.HookInfo.Value, offset.HookInfo.Links); 50 | } 51 | 52 | LoadDataList(); 53 | } 54 | 55 | private void btnSave_Click(object sender, EventArgs e) 56 | { 57 | try 58 | { 59 | var offsetList = new List(); 60 | 61 | if (dataList.IsEmpty()) return; 62 | if (txtNameCheat.IsEmpty("Name Cheat")) return; 63 | 64 | for (var i = 0; i < dataList.Rows.Count; i++) 65 | { 66 | var name = dataList.Rows[i].Cells[0].Value.IsEmpty() ? "" : dataList.Rows[i].Cells[0].Value.ToString(); 67 | var offset = dataList.Rows[i].Cells[1].Value.IsEmpty() ? "" : dataList.Rows[i].Cells[1].Value.ToString(); 68 | var type = dataList.Rows[i].Cells[2].Value.IsEmpty() ? "" : dataList.Rows[i].Cells[2].Value.ToString(); 69 | var fieldType = dataList.Rows[i].Cells[3].Value.IsEmpty() ? "" : dataList.Rows[i].Cells[3].Value.ToString(); 70 | var fieldOffset = dataList.Rows[i].Cells[4].Value.IsEmpty() ? "" : dataList.Rows[i].Cells[4].Value.ToString(); 71 | var value = dataList.Rows[i].Cells[5].Value.IsEmpty() ? "" : dataList.Rows[i].Cells[5].Value.ToString(); 72 | var links = dataList.Rows[i].Cells[6].Value.IsEmpty() ? "" : dataList.Rows[i].Cells[6].Value.ToString(); 73 | 74 | FieldInfo fieldInfo; 75 | 76 | if (!offset.StartsWith("0x")) 77 | { 78 | MyMessage.MsgShowWarning(@$"Offset At {i + 1}, does not start with ""0x"" Please check it again!!!"); 79 | return; 80 | } 81 | 82 | switch (type) 83 | { 84 | case "void" when fieldType.IsEmpty(i + 1, "Field Type"): 85 | case "void" when fieldOffset.IsEmpty(i + 1, "Field Offset"): 86 | return; 87 | 88 | case "void" when !fieldOffset.StartsWith("0x"): 89 | MyMessage.MsgShowWarning(@$"Field Offset At {i + 1}, does not start with ""0x"" Please check it again!!!"); 90 | return; 91 | 92 | case "void" when fieldType is not ("bool" or "boolback") && value.IsEmpty(i + 1, "Value"): 93 | return; 94 | 95 | case "void": 96 | fieldInfo = new FieldInfo 97 | { 98 | Type = fieldType.StringToType(), 99 | Offset = fieldOffset 100 | }; 101 | break; 102 | 103 | case "links" when fieldType.IsEmpty(i + 1, "Field Type"): 104 | case "links" when fieldType is not ("bool" or "boolback") && value.IsEmpty(i + 1, "Value"): 105 | case "links" when links.IsEmpty(i + 1, "Links"): 106 | return; 107 | 108 | case "links" when int.Parse(links) > dataList.RowCount || int.Parse(links) == i + 1: 109 | MyMessage.MsgShowWarning($"Links At {i + 1}, is invalid. Please check it again!!!"); 110 | return; 111 | 112 | case "links": 113 | fieldInfo = new FieldInfo 114 | { 115 | Type = fieldType.StringToType(), 116 | Offset = fieldOffset 117 | }; 118 | break; 119 | 120 | default: 121 | fieldInfo = OffsetPatch.FieldValue(); 122 | break; 123 | } 124 | 125 | if (type is not ("bool" or "boolback") && type != "void" && type != "links" && value.IsEmpty(i + 1, "Value")) 126 | { 127 | return; 128 | } 129 | 130 | var hookInfo = new HookInfo 131 | { 132 | Type = type.StringToType(), 133 | Value = value, 134 | Links = links, 135 | FieldInfo = fieldInfo 136 | }; 137 | 138 | var offsetInfo = new OffsetInfo 139 | { 140 | OffsetId = i, 141 | Offset = offset, 142 | Hex = null, 143 | HookInfo = hookInfo, 144 | Name = name, 145 | Method = new List<(string, string)> { (null, null) } 146 | }; 147 | offsetList.Add(offsetInfo); 148 | } 149 | 150 | var functionType = GetFunctionType(); 151 | 152 | if (_index == 1150) 153 | { 154 | if (txtNameCheat.Text.IsDuplicateName(OffsetPatch.FunctionList)) 155 | { 156 | return; 157 | } 158 | OffsetPatch.OffsetList = offsetList; 159 | OffsetPatch.AddFunction(txtNameCheat.Text, functionType); 160 | OffsetPatch.OffsetList.Clear(); 161 | } 162 | else 163 | { 164 | var result = MyMessage.MsgYesNoCancel("Do you want to save?\n\n" + 165 | "Click \"OK\" to confirm.\n\n" + 166 | "Click \"Cancel\" to cancel."); 167 | switch (result) 168 | { 169 | case DialogResult.Cancel: 170 | return; 171 | 172 | case DialogResult.No: 173 | Values.Save = false; 174 | Dispose(); 175 | _frmAddFunction.Dispose(); 176 | break; 177 | } 178 | 179 | OffsetPatch.FunctionList[_index] = new FunctionList 180 | { 181 | CheatName = txtNameCheat.Text, 182 | FunctionType = functionType, 183 | OffsetList = offsetList, 184 | FunctionExtra = null, 185 | MultipleValue = false 186 | }; 187 | } 188 | 189 | Values.Save = true; 190 | Dispose(); 191 | _frmAddFunction.Dispose(); 192 | } 193 | catch (Exception exception) 194 | { 195 | MyMessage.MsgShowError("Error" + exception.Message); 196 | } 197 | } 198 | 199 | #region Data List 200 | 201 | private void LoadDataList() 202 | { 203 | for (var i = 0; i < dataList.RowCount; i++) 204 | { 205 | var typeValue = dataList.Rows[i].Cells[2].Value.IsEmpty() ? "" : dataList.Rows[i].Cells[2].Value.ToString(); 206 | var fieldTypeValue = dataList.Rows[i].Cells[3].Value.IsEmpty() ? "" : dataList.Rows[i].Cells[3].Value.ToString(); 207 | 208 | var fieldType = dataList.Rows[i].Cells[3]; 209 | var fieldOffset = dataList.Rows[i].Cells[4]; 210 | var value = dataList.Rows[i].Cells[5]; 211 | var links = dataList.Rows[i].Cells[6]; 212 | 213 | if (typeValue == "void") 214 | { 215 | fieldType.ReadOnly = false; 216 | fieldOffset.ReadOnly = false; 217 | fieldOffset.Style.BackColor = Color.White; 218 | } 219 | else 220 | { 221 | fieldType.ReadOnly = true; 222 | fieldOffset.Style.BackColor = Color.Silver; 223 | fieldOffset.ReadOnly = true; 224 | 225 | if (typeValue == "links") 226 | { 227 | fieldType.ReadOnly = false; 228 | links.Style.BackColor = Color.White; 229 | links.ReadOnly = false; 230 | } 231 | else 232 | { 233 | fieldType.ReadOnly = true; 234 | links.Style.BackColor = Color.Silver; 235 | links.ReadOnly = true; 236 | } 237 | } 238 | 239 | if (typeValue == "bool" || fieldTypeValue == "bool" || 240 | typeValue == "boolback" || fieldTypeValue == "boolback") 241 | { 242 | value.Value = ""; 243 | value.Style.BackColor = Color.Silver; 244 | value.ReadOnly = true; 245 | } 246 | else 247 | { 248 | value.Style.BackColor = Color.White; 249 | value.ReadOnly = false; 250 | } 251 | } 252 | } 253 | 254 | private void dataList_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 255 | { 256 | if (e.Control is ComboBox cb) 257 | { 258 | cb.SelectedIndexChanged += SelectionChange; 259 | } 260 | } 261 | 262 | private void SelectionChange(object sender, EventArgs e) 263 | { 264 | try 265 | { 266 | var cb = (ComboBox)sender; 267 | if (dataList.CurrentRow == null) return; 268 | 269 | var type = dataList.CurrentRow.Cells[2]; 270 | var fieldType = dataList.CurrentRow.Cells[3]; 271 | var fieldOffset = dataList.CurrentRow.Cells[4]; 272 | var value = dataList.CurrentRow.Cells[5]; 273 | var links = dataList.CurrentRow.Cells[6]; 274 | 275 | if (dataList.CurrentCell == type) 276 | { 277 | if (cb.Text is "bool" or "boolback") 278 | { 279 | value.Style.BackColor = Color.Silver; 280 | value.ReadOnly = true; 281 | } 282 | else 283 | { 284 | value.Style.BackColor = Color.White; 285 | value.ReadOnly = false; 286 | 287 | if (cb.Text == "void") 288 | { 289 | fieldType.ReadOnly = false; 290 | fieldOffset.ReadOnly = false; 291 | fieldOffset.Style.BackColor = Color.White; 292 | } 293 | else 294 | { 295 | fieldType.ReadOnly = true; 296 | fieldOffset.Style.BackColor = Color.Silver; 297 | fieldOffset.ReadOnly = true; 298 | 299 | if (cb.Text == "links") 300 | { 301 | fieldType.ReadOnly = false; 302 | links.Style.BackColor = Color.White; 303 | links.ReadOnly = false; 304 | } 305 | else 306 | { 307 | fieldType.ReadOnly = true; 308 | links.Style.BackColor = Color.Silver; 309 | links.ReadOnly = true; 310 | } 311 | } 312 | } 313 | } 314 | 315 | if (dataList.CurrentCell == fieldType && type.Value.ToString() == "links" || 316 | type.Value.ToString() == "void") 317 | { 318 | if (cb.Text is "bool" or "boolback") 319 | { 320 | value.Value = ""; 321 | value.Style.BackColor = Color.Silver; 322 | value.ReadOnly = true; 323 | } 324 | else 325 | { 326 | value.Style.BackColor = Color.White; 327 | value.ReadOnly = false; 328 | } 329 | } 330 | } 331 | catch 332 | { 333 | // 334 | } 335 | } 336 | 337 | private void dataList_KeyDown(object sender, KeyEventArgs e) 338 | { 339 | if (e.KeyCode == Keys.Delete) 340 | { 341 | RemoveRows(); 342 | } 343 | 344 | if (e.KeyCode == Keys.V && e.Control) 345 | { 346 | if (dataList.GetCellCount(DataGridViewElementStates.Selected) > 0 && !dataList.CurrentCell.ReadOnly) 347 | { 348 | dataList.CurrentCell.Value = Clipboard.GetText(); 349 | } 350 | } 351 | } 352 | 353 | private void dataList_MouseDown(object sender, MouseEventArgs e) 354 | { 355 | if (e.Button == MouseButtons.Right) 356 | { 357 | try 358 | { 359 | var hti = dataList.HitTest(e.X, e.Y); 360 | dataList.ClearSelection(); 361 | dataList.Rows[hti.RowIndex].Selected = true; 362 | } 363 | catch 364 | { 365 | // 366 | } 367 | } 368 | 369 | if (dataList.SelectedRows.Count > 0) 370 | { 371 | addToolStripMenuItem.Enabled = false; 372 | removeToolStripMenuItem.Enabled = true; 373 | } 374 | else 375 | { 376 | addToolStripMenuItem.Enabled = true; 377 | removeToolStripMenuItem.Enabled = false; 378 | } 379 | } 380 | 381 | private void RemoveRows() 382 | { 383 | try 384 | { 385 | if (dataList.RowCount <= 1 || dataList.CurrentCell.RowIndex == dataList.RowCount - 1) return; 386 | dataList.Rows.RemoveAt(dataList.SelectedCells[0].RowIndex); 387 | dataList.ClearSelection(); 388 | } 389 | catch 390 | { 391 | // 392 | } 393 | } 394 | 395 | #endregion Data List 396 | 397 | #region ToolStripMenuItem 398 | 399 | private void removeToolStripMenuItem_Click(object sender, EventArgs e) 400 | { 401 | try 402 | { 403 | var rowToDelete = dataList.Rows.GetFirstRow(DataGridViewElementStates.Selected); 404 | dataList.Rows.RemoveAt(rowToDelete); 405 | dataList.ClearSelection(); 406 | } 407 | catch 408 | { 409 | // 410 | } 411 | } 412 | 413 | private void addToolStripMenuItem_Click(object sender, EventArgs e) 414 | { 415 | dataList.Rows.Add(null, null, "bool", null, null, null, null); 416 | } 417 | 418 | #endregion ToolStripMenuItem 419 | 420 | private void rad_CheckedChanged(object sender, EventArgs e) 421 | { 422 | _frmAddFunction.Text = HookName(); 423 | } 424 | 425 | private string HookName() 426 | { 427 | return radButtonOnOff.Checked ? "Hook: Button On/Off" : 428 | radToggle.Checked ? "Hook: Toggle" : 429 | null; 430 | } 431 | 432 | private Enums.FunctionType GetFunctionType() 433 | { 434 | return radButtonOnOff.Checked ? Enums.FunctionType.HookButtonOnOf : 435 | radToggle.Checked ? Enums.FunctionType.HookToggle : 436 | Enums.FunctionType.Empty; 437 | } 438 | } 439 | } --------------------------------------------------------------------------------