private void FuncCombo_SelectedIndexChanged(object sender, EventArgs e) { richTextBox1.Clear(); if (FunctionInfo.TryGetValue(ClassCombo.SelectedIndex, out StructureSelector) && StructureSelector.TryGetValue(StructCombo.Text, out FunctionSelector) && FunctionIndexer.TryGetValue(FuncCombo.SelectedIndex, out int FuncIndex) && FunctionSelector.TryGetValue(FuncIndex, out string FunctionData) && FunctionData.Contains("NativeCall<")) { string FunctionVariables = Regex.Split(FunctionData, "NativeCall<")[1], FriendlyHookName = FuncCombo.Text; FunctionVariables = FunctionVariables.Substring(0, FunctionVariables.IndexOf('(') - 1).Replace(" * ", "* "); FriendlyHookName = FriendlyHookName.Replace("* >", "*>").Replace(" *>", "*>").Replace("()", "").Replace(")", ""); if (FriendlyHookName.Contains(" ")) { FriendlyHookName = FriendlyHookName.Split(' ')[1]; } if (FriendlyHookName.Contains("(")) { FriendlyHookName = FriendlyHookName.Split('(')[0]; } string TrampFunc = "", Tramp = "DECLARE_HOOK(" + StructCombo.Text + "_" + FriendlyHookName; // DECLARE_HOOK ARGS if (FunctionVariables.Contains(", ")) { bool AddedClass = false; string[] Vars = Regex.Split(FunctionVariables, ", "); foreach (string s in Vars) { Tramp += ", " + s; if (!AddedClass) //Add Structure to args { Tramp += ", " + StructCombo.Text + "*"; AddedClass = true; } } TrampFunc = Vars[0] + " "; } else { //Add Structure to args Tramp += ", " + FunctionVariables + ", " + StructCombo.Text + "*"; TrampFunc = FunctionVariables + " "; } Tramp += ");"; TrampFunc += " Hook_" + StructCombo.Text + "_" + FriendlyHookName + "(" + StructCombo.Text + "* _this"; string Variables = FuncCombo.Text; int FindIndex; if ((FindIndex = Variables.IndexOf('(')) != -1) { Variables = Variables.Remove(0, FindIndex + 1); FindIndex = Variables.IndexOf(')'); Variables = Variables.Substring(0, FindIndex + 1).Replace(" **", "**").Replace(" *", "*").Replace("enum ", "enum'"); TrampFunc += (Variables.Length > 1 ? ", " + Variables.Replace("enum'", "enum ") : ")") + "\n{\n" + (TrampFunc.StartsWith("void") ? " " : " return "); TrampFunc += StructCombo.Text + "_" + FriendlyHookName + "_original(_this"; if (Variables.Length > 1) { string[] Vars = Regex.Split(Variables, ", "); foreach (string s in Vars) { if (s.Contains(" ")) { TrampFunc += ", " + s.Split(' ')[1].Replace(")", ""); } } TrampFunc += ");\n}"; } else { TrampFunc += ");\n}"; } richTextBox1.AppendText(Tramp + Environment.NewLine + Environment.NewLine + TrampFunc + Environment.NewLine + Environment.NewLine + "ArkApi::GetHooks().SetHook(\"" + StructCombo.Text + "." + FriendlyHookName + "\", &Hook_" + StructCombo.Text + "_" + FriendlyHookName + ", &" + StructCombo.Text + "_" + FriendlyHookName + "_original);" + Environment.NewLine + Environment.NewLine + "ArkApi::GetHooks().DisableHook(\"" + StructCombo.Text + "." + FriendlyHookName + "\", &Hook_" + StructCombo.Text + "_" + FriendlyHookName + ");"); Clipboard.SetText(richTextBox1.Text); } } }