public void Unpatch(HarmonyPatchType type, string harmonyID) { lock (locker) { foreach (var original in originals) { var patchInfo = HarmonySharedState.GetPatchInfo(original); if (patchInfo == null) { patchInfo = new PatchInfo(); } if (type == HarmonyPatchType.All || type == HarmonyPatchType.Prefix) { PatchFunctions.RemovePrefix(patchInfo, harmonyID); } if (type == HarmonyPatchType.All || type == HarmonyPatchType.Postfix) { PatchFunctions.RemovePostfix(patchInfo, harmonyID); } if (type == HarmonyPatchType.All || type == HarmonyPatchType.Transpiler) { PatchFunctions.RemoveTranspiler(patchInfo, harmonyID); } PatchFunctions.UpdateWrapper(original, patchInfo, instance.Id); HarmonySharedState.UpdatePatchInfo(original, patchInfo); } } }
/// <summary> /// 执行Patch /// </summary> /// <returns></returns> public PatchInfoData Patch(PatchFlags flags) { PatchInfo patchInfo = null; lock (locker) { #if RECORD_PATCH_STATE patchInfo = HarmonySharedState.GetPatchInfo(original); if (patchInfo == null) { patchInfo = new PatchInfo(); } #endif patchInfo = new PatchInfo(); PatchFunctions.AddPrefix(patchInfo, instance.id, prefix); PatchFunctions.AddPostfix(patchInfo, instance.id, postfix); PatchFunctions.AddTranspiler(patchInfo, instance.id, transpiler); PatchFunctions.UpdateWrapper(original, patchInfo, flags); #if RECORD_PATCH_STATE HarmonySharedState.UpdatePatchInfo(original, patchInfo); #endif } return(patchInfo.patchdata); }
public List <DynamicMethod> Patch() { lock (locker) { var dynamicMethods = new List <DynamicMethod>(); foreach (var original in originals) { if (original == null) { throw new NullReferenceException("original"); } var individualPrepareResult = RunMethod <HarmonyPrepare, bool>(true, original); if (individualPrepareResult) { var patchInfo = HarmonySharedState.GetPatchInfo(original); if (patchInfo == null) { patchInfo = new PatchInfo(); } PatchFunctions.AddPrefix(patchInfo, instance.Id, prefix); PatchFunctions.AddPostfix(patchInfo, instance.Id, postfix); PatchFunctions.AddTranspiler(patchInfo, instance.Id, transpiler); dynamicMethods.Add(PatchFunctions.UpdateWrapper(original, patchInfo, instance.Id)); HarmonySharedState.UpdatePatchInfo(original, patchInfo); RunMethod <HarmonyCleanup>(original); } } return(dynamicMethods); } }
public void Patch() { var obj = locker; lock (obj) { foreach (var methodBase in originals) { if (methodBase == null) { throw new NullReferenceException("original"); } if (RunMethod <HarmonyPrepare, bool>(true, methodBase)) { var patchInfo = HarmonySharedState.GetPatchInfo(methodBase) ?? new PatchInfo(); PatchFunctions.AddPrefix(patchInfo, instance.Id, prefix); PatchFunctions.AddPostfix(patchInfo, instance.Id, postfix); PatchFunctions.AddTranspiler(patchInfo, instance.Id, transpiler); PatchFunctions.UpdateWrapper(methodBase, patchInfo, instance.Id); HarmonySharedState.UpdatePatchInfo(methodBase, patchInfo); RunMethod <HarmonyCleanup>(methodBase); } } } }
public void Unpatch(HarmonyPatchType type, string harmonyID) { var obj = locker; lock (obj) { foreach (var methodBase in originals) { var patchInfo = HarmonySharedState.GetPatchInfo(methodBase) ?? new PatchInfo(); if (type == HarmonyPatchType.All || type == HarmonyPatchType.Prefix) { PatchFunctions.RemovePrefix(patchInfo, harmonyID); } if (type == HarmonyPatchType.All || type == HarmonyPatchType.Postfix) { PatchFunctions.RemovePostfix(patchInfo, harmonyID); } if (type == HarmonyPatchType.All || type == HarmonyPatchType.Transpiler) { PatchFunctions.RemoveTranspiler(patchInfo, harmonyID); } PatchFunctions.UpdateWrapper(methodBase, patchInfo, instance.Id); HarmonySharedState.UpdatePatchInfo(methodBase, patchInfo); } } }
public void Unpatch(MethodInfo patch) { var obj = locker; lock (obj) { foreach (var methodBase in originals) { var patchInfo = HarmonySharedState.GetPatchInfo(methodBase) ?? new PatchInfo(); PatchFunctions.RemovePatch(patchInfo, patch); PatchFunctions.UpdateWrapper(methodBase, patchInfo, instance.Id); HarmonySharedState.UpdatePatchInfo(methodBase, patchInfo); } } }
public void Patch() { lock (locker) { var patchInfo = HarmonySharedState.GetPatchInfo(original); if (patchInfo == null) { patchInfo = new PatchInfo(); } PatchFunctions.AddPrefix(patchInfo, instance.Id, prefix); PatchFunctions.AddPostfix(patchInfo, instance.Id, postfix); PatchFunctions.AddInfix(patchInfo, instance.Id, infix); PatchFunctions.UpdateWrapper(original, patchInfo); HarmonySharedState.UpdatePatchInfo(original, patchInfo); } }
public List <DynamicMethod> Patch() { lock (locker) { var dynamicMethods = new List <DynamicMethod>(); foreach (var original in originals) { if (original == null) { throw new NullReferenceException("original"); } if ((original.DeclaringType.Assembly.GetCustomAttributes(typeof(HarmonyShield), false).Count() > 0) || (original.DeclaringType.GetCustomAttributes(typeof(HarmonyShield), false).Count() > 0) || (original.GetCustomAttributes(typeof(HarmonyShield), false).Count() > 0)) { continue; } if (MelonDebug.IsEnabled() && UnhollowerSupport.IsGeneratedAssemblyType(original.DeclaringType)) { WarnIfTargetMethodInlined(original); } var individualPrepareResult = RunMethod <HarmonyPrepare, bool>(true, original); if (individualPrepareResult) { var patchInfo = HarmonySharedState.GetPatchInfo(original); if (patchInfo == null) { patchInfo = new PatchInfo(); } PatchFunctions.AddPrefix(patchInfo, instance.Id, prefix); PatchFunctions.AddPostfix(patchInfo, instance.Id, postfix); PatchFunctions.AddTranspiler(patchInfo, instance.Id, transpiler); dynamicMethods.Add(PatchFunctions.UpdateWrapper(original, patchInfo, instance.Id)); HarmonySharedState.UpdatePatchInfo(original, patchInfo); RunMethod <HarmonyCleanup>(original); } } return(dynamicMethods); } }
public void Restore() { lock (locker) { var patchInfo = HarmonySharedState.GetPatchInfo(original); if (patchInfo == null) { return; } PatchFunctions.RemovePrefix(patchInfo, prefix); PatchFunctions.RemovePostfix(patchInfo, postfix); PatchFunctions.RemoveTranspiler(patchInfo, transpiler); PatchFunctions.UpdateWrapper(original, patchInfo); HarmonySharedState.UpdatePatchInfo(original, patchInfo); } }
public void Unpatch(MethodInfo patch) { lock (locker) { foreach (var original in originals) { var patchInfo = HarmonySharedState.GetPatchInfo(original); if (patchInfo == null) { patchInfo = new PatchInfo(); } PatchFunctions.RemovePatch(patchInfo, patch); PatchFunctions.UpdateWrapper(original, patchInfo, instance.Id); HarmonySharedState.UpdatePatchInfo(original, patchInfo); } } }