Exemplo n.º 1
0
 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);
         }
     }
 }