Ignore:
Timestamp:
Jul 26, 2014, 4:41:11 PM (10 years ago)
Author:
alloc
Message:

fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • binary-improvements/assembly-patcher/Main.cs

    r96 r107  
    11using System;
     2using System.Collections.Generic;
    23using System.Reflection;
    34using Mono.Cecil;
     
    1415                        TypeDefinition type = module.GetType ("GameManager");
    1516                        if (isPatched (type)) {
    16                                 Console.WriteLine("Assembly already patched");
     17                                Console.WriteLine ("Assembly already patched");
    1718                                return;
    1819                        }
    1920                        markTypePatched (module, type);
    2021
     22                        consoleOutputPatch (module);
    2123                        telnetPatch (module);
    2224                        connectLogPatch (module);
    23                         executionLogPatch (module);
    2425                        publicCommandPermissionsPatch (module);
    2526                        playerDataPatch (module);
     27
    2628                        module.Write ("Assembly-CSharp.dll");
    2729                        Console.WriteLine ("Done");
     30
     31                }
     32
     33                private static void consoleOutputPatch (ModuleDefinition module)
     34                {
     35                        TypeDefinition type = module.GetType ("ConsoleSdtd");
     36                        replaceMethod (type, "ExecuteCmdFromClient", true, 3, typeof(ConsoleOutputSeparator).GetMethod ("C_ExecuteCmdFromClient"));
     37                        addHook (type, "Run", true, 0, true, typeof(ConsoleOutputSeparator).GetMethod ("C_Run"));
     38                        replaceMethod (type, "SendResult", true, 1, typeof(ConsoleOutputSeparator).GetMethod ("C_SendResult"));
     39
    2840                }
    2941
     
    3143                {
    3244                        TypeDefinition type = module.GetType ("GameManager");
    33 
    3445                        addHook (type, "SavePlayerData", true, 2, true, typeof(PlayerDataStuff).GetMethod ("GM_SavePlayerData"));
    35                         addHook (type, "Awake", true, 0, true, typeof(CommandExtensions).GetMethod("InitCommandExtensions"));
     46                        addHook (type, "Awake", true, 0, true, typeof(CommandExtensions).GetMethod ("InitCommandExtensions"));
    3647                }
    3748
     
    3950                {
    4051                        TypeDefinition type = module.GetType ("AdminTools");
    41 
    4252                        replaceMethod (type, "GetAllowedCommandsList", true, 1, typeof(AdminToolsStuff).GetMethod ("GetAllowedCommandsList"));
    4353                }
     
    4656                {
    4757                        TypeDefinition type = module.GetType ("GameManager");
    48 
    4958                        addHook (type, "RequestToSpawnPlayer", true, 5, true, typeof(AllocsLogFunctions).GetMethod ("RequestToSpawnPlayer"));
    50                 }
    51 
    52                 private static void executionLogPatch (ModuleDefinition module)
    53                 {
    54                         TypeDefinition type = module.GetType ("ConsoleSdtd");
    55 
    56                         addHook (type, "ExecuteCmdFromClient", true, 3, false, typeof(AllocsLogFunctions).GetMethod ("ExecuteCmdFromClient"));
    5759                }
    5860
     
    6062                {
    6163                        TypeDefinition type = module.GetType ("NetTelnetServer");
    62 
    6364                        replaceMethod (type, ".ctor", false, 1, typeof(AllocsNetTelnetServer).GetMethod ("init"));
    6465                        replaceMethod (type, "Disconnect", false, 0, typeof(AllocsNetTelnetServer).GetMethod ("Disconnect"));
     
    7677                        foreach (MethodDefinition method in type.Methods) {
    7778                                if (method.Name.Equals (methodName)) {
    78                                         Console.WriteLine ("Patching " + methodName);
    7979                                        var il = method.Body.GetILProcessor ();
    8080                                        var call = il.Create (OpCodes.Call, method.Module.Import (targetMethod));
     
    9898                                                il.InsertBefore (method.Body.Instructions [i++], call);
    9999                                        }
     100                                        return;
    100101                                }
    101102                        }
     103                        Console.WriteLine ("ERROR: Did not find " + type.Name + "." + methodName + "()");
    102104                }
    103105
     
    106108                        foreach (MethodDefinition method in type.Methods) {
    107109                                if (method.Name.Equals (methodName)) {
    108                                         Console.WriteLine ("Patching " + methodName);
    109110                                        var il = method.Body.GetILProcessor ();
    110111                                        var call = il.Create (OpCodes.Call, method.Module.Import (targetMethod));
     
    117118                                        il.InsertBefore (method.Body.Instructions [i++], call);
    118119                                        il.InsertBefore (method.Body.Instructions [i++], il.Create (OpCodes.Ret));
     120                                        return;
    119121                                }
    120122                        }
     123                        Console.WriteLine ("ERROR: Did not find " + type.Name + "." + methodName + "()");
    121124                }
    122125
     
    125128                        foreach (FieldDefinition fd in type.Fields) {
    126129                                if (fd.Name.Equals ("AllocsPatch")) {
    127                                         Console.WriteLine ("\"" + type.Name + "\" is already patched, skipping");
    128130                                        return true;
    129131                                }
    130132                        }
    131                         Console.WriteLine ("Patching \"" + type.Name + "\"");
    132133                        return false;
    133134                }
Note: See TracChangeset for help on using the changeset viewer.