Ignore:
Timestamp:
Jul 17, 2014, 1:46:42 AM (10 years ago)
Author:
alloc
Message:

fixer

Location:
binary-improvements/assembly-patcher
Files:
2 edited

Legend:

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

    r75 r76  
    1212                        ModuleDefinition module = ModuleDefinition.ReadModule ("Assembly-CSharp.dll");
    1313                        telnetPatch (module);
    14                         connectLogPatch(module);
     14                        connectLogPatch (module);
    1515                        module.Write ("Assembly-CSharp.dll");
    1616                        Console.WriteLine ("Done");
     
    2626
    2727                        markTypePatched (module, type);
    28                         addHook (type, "RequestToSpawnPlayer", true, 5, typeof(AllocsRequestToSpawnPlayer).GetMethod ("RequestToSpawnPlayer"));
     28                        addHook (type, "RequestToSpawnPlayer", true, 5, true, typeof(AllocsRequestToSpawnPlayer).GetMethod ("RequestToSpawnPlayer"));
    2929                }
    3030
     
    4949                }
    5050
    51                 private static void addHook (TypeDefinition type, string methodName, bool addThisRef, int opCount, MethodBase targetMethod)
     51                private static void addHook (TypeDefinition type, string methodName, bool addThisRef, int opCount, bool atEnd, MethodBase targetMethod)
    5252                {
    5353                        foreach (MethodDefinition method in type.Methods) {
     
    5656                                        var il = method.Body.GetILProcessor ();
    5757                                        var call = il.Create (OpCodes.Call, method.Module.Import (targetMethod));
    58                                         var i = 0;
    59                                         if (addThisRef)
    60                                                 il.InsertBefore (method.Body.Instructions [i++], il.Create (OpCodes.Ldarg, 0));
    61                                         for (int op = 0; op < opCount; op++) {
    62                                                 il.InsertBefore (method.Body.Instructions [i++], il.Create (OpCodes.Ldarg, op + 1));
     58                                        if (atEnd) {
     59                                                int insBefore = method.Body.Instructions.Count;
     60                                                if (addThisRef)
     61                                                        il.Append (il.Create (OpCodes.Ldarg, 0));
     62                                                for (int op = 0; op < opCount; op++) {
     63                                                        il.Append (il.Create (OpCodes.Ldarg, op + 1));
     64                                                }
     65                                                il.Append (call);
     66                                                il.Remove (method.Body.Instructions [insBefore - 1]);
     67                                                il.Append (il.Create (OpCodes.Ret));
     68                                        } else {
     69                                                var i = 0;
     70                                                if (addThisRef)
     71                                                        il.InsertBefore (method.Body.Instructions [i++], il.Create (OpCodes.Ldarg, 0));
     72                                                for (int op = 0; op < opCount; op++) {
     73                                                        il.InsertBefore (method.Body.Instructions [i++], il.Create (OpCodes.Ldarg, op + 1));
     74                                                }
     75                                                il.InsertBefore (method.Body.Instructions [i++], call);
    6376                                        }
    64                                         il.InsertBefore (method.Body.Instructions [i++], call);
    6577                                }
    6678                        }
Note: See TracChangeset for help on using the changeset viewer.