public override void Patch(ReiPatcher.Patch.PatcherArguments args) { try { AssemblyDefinition ta = args.Assembly; AssemblyDefinition da = PatcherHelper.GetAssemblyDefinition(args, "CM3D2.VoiceNormalizer.Managed.dll"); string m = "CM3D2.VoiceNormalizer.Managed."; // 引数の型 string[] targetArgTypes = { "System.String", "System.Boolean" }; string[] calleeArgTypes = { "AudioSourceMgr", "System.String", "System.Boolean" }; PatcherHelper.SetHook( PatcherHelper.HookType.PreCall, ta, "AudioSourceMgr.LoadFromWf", targetArgTypes, da, m + "Callbacks.AudioSourceMgr.LoadFromWf.Invoke", calleeArgTypes); } catch (Exception e) { Helper.ShowException(e); throw; } }
public override void Patch(ReiPatcher.Patch.PatcherArguments args) { try { AssemblyDefinition ta = args.Assembly; AssemblyDefinition da = PatcherHelper.GetAssemblyDefinition(args, "CM3D2.MaidVoicePitch.Managed.dll"); string m = "CM3D2.MaidVoicePitch.Managed."; // TBody.LateUpdateの処理終了後にCM3D2.MaidVoicePitch.Managed.Callbacks.TBody.LateUpdate.Invokeを呼び出す PatcherHelper.SetHook(PatcherHelper.HookType.PostCall, ta, "TBody", "LateUpdate", da, m + "Callbacks.TBody.LateUpdate", "Invoke"); // TBody.MoveHeadAndEyeの処理を完全に乗っ取り、CM3D2.MaidVoicePitch.Managed.Callbacks.TBody.MoveHeadAndEye.Invokeの呼び出しに置き換える PatcherHelper.SetHook(PatcherHelper.HookType.PreJump, ta, "TBody", "MoveHeadAndEye", da, m + "Callbacks.TBody.MoveHeadAndEye", "Invoke"); // BoneMorph_.Blendの処理終了後にCM3D2.MaidVoicePitch.Managed.Callbacks.BoneMorph_.Blend.Invokeを呼び出す PatcherHelper.SetHook(PatcherHelper.HookType.PostCall, ta, "BoneMorph_", "Blend", da, m + "Callbacks.BoneMorph_.Blend", "Invoke"); // AudioSourceMgr.Playの処理終了後にCM3D2.MaidVoicePitch.Managed.Callbacks.AudioSourceMgr.Play.Invokeを呼び出す PatcherHelper.SetHook(PatcherHelper.HookType.PostCall, ta, "AudioSourceMgr", "Play", da, m + "Callbacks.AudioSourceMgr.Play", "Invoke"); // AudioSourceMgr.PlayOneShotの処理終了後にCM3D2.MaidVoicePitch.Managed.Callbacks.AudioSourceMgr.PlayOneShot.Invokeを呼び出す PatcherHelper.SetHook(PatcherHelper.HookType.PostCall, ta, "AudioSourceMgr", "PlayOneShot", da, m + "Callbacks.AudioSourceMgr.PlayOneShot", "Invoke"); SetPatchedAttribute(args.Assembly, patchTag); } catch (Exception e) { Helper.ShowException(e); throw; } }
public override void Patch(ReiPatcher.Patch.PatcherArguments args) { AssemblyDefinition ta = args.Assembly; AssemblyDefinition da = PatcherHelper.GetAssemblyDefinition(args, "CM3D2.ExternalSaveData.Managed.dll"); // GameMain.OnInitializeの処理後、CM3D2.略.ExSaveData.DummyInitializeを呼ぶ PatcherHelper.SetHook( PatcherHelper.HookType.PostCall, ta, "GameMain.OnInitialize", da, "CM3D2.ExternalSaveData.Managed.ExSaveData.DummyInitialize"); // GameMain.Deserializeの処理後、CM3D2.略.GameMainCallbacks.Deserialize.Invokeを呼ぶ PatcherHelper.SetHook( PatcherHelper.HookType.PostCall, ta, "GameMain.Deserialize", da, "CM3D2.ExternalSaveData.Managed.GameMainCallbacks.Deserialize.Invoke"); // GameMain.Deserializeの処理後、CM3D2.略.GameMainCallbacks.Serialize.Invokeを呼ぶ PatcherHelper.SetHook( PatcherHelper.HookType.PostCall, ta, "GameMain.Serialize", da, "CM3D2.ExternalSaveData.Managed.GameMainCallbacks.Serialize.Invoke"); // GameMain.DeleteSerializeDataの処理後、CM3D2.略.GameMainCallbacks.DeleteSerializeData.Invokeを呼ぶ PatcherHelper.SetHook( PatcherHelper.HookType.PostCall, ta, "GameMain.DeleteSerializeData", da, "CM3D2.ExternalSaveData.Managed.GameMainCallbacks.DeleteSerializeData.Invoke"); SetPatchedAttribute(args.Assembly, patchTag); }
public static void Patch(AssemblyDefinition assembly) { Console.WriteLine("C*M3D2.XtMS.Patcher " + assembly); AssemblyDefinition ta = assembly; var prefix = "COM3D2"; var dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string path = ""; if (dir.EndsWith("sybaris", StringComparison.OrdinalIgnoreCase)) { path = @"UnityInjector\"; } else { path = @"..\Plugins\UnityInjector\"; } if (Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().Location).StartsWith("cm3d2", StringComparison.OrdinalIgnoreCase)) { prefix = "CM3D2"; } // Helper使用 try { AssemblyDefinition da = PatcherHelper.GetAssemblyDefinition(string.Format("{0}\\{1}.XtMasterSlave.Plugin.dll", path, prefix)); TypeDefinition typedef = da.MainModule.GetType("CM3D2.XtMasterSlave.Plugin.Hook"); PatcherHelper.SetHook( PatcherHelper.HookType.PreCall, ta, "TBody.AutoTwist", da, "CM3D2.XtMasterSlave.Plugin.Hook.hookPreAutoTwist"); // v5.1 if (prefix == "COM3D2" && ta.MainModule.GetType("FullBodyIKCtrl") != null) { PatcherHelper.SetHook( PatcherHelper.HookType.PreCall, ta, "FullBodyIKCtrl.SolverUpdate", da, "CM3D2.XtMasterSlave.Plugin.Hook.hookPreSolverUpdate"); } /* * PatcherHelper.SetHook( * PatcherHelper.HookType.PostCall, * ta, "FullBodyIKCtrl.IKUpdate", * da, "CM3D2.XtMasterSlave.Plugin.Hook.hookIKPreLateUpdate");*/ /*PatcherHelper.SetHook( * PatcherHelper.HookType.PostCall, * ta, "TBody.LateUpdate", * da, "CM3D2.XtMasterSlave.Plugin.Hook.hookBodyPreLateUpdate");*/ } catch (Exception e) { Console.WriteLine("SetHook例外:" + e); } }
public static void Patch(AssemblyDefinition assembly) { try { AssemblyDefinition ta = assembly; AssemblyDefinition da = PatcherHelper.GetAssemblyDefinition("COM3D2.MaidVoicePitch.Managed.dll"); string m = "CM3D2.MaidVoicePitch.Managed."; // TBody.LateUpdateの処理終了後にCM3D2.MaidVoicePitch.Managed.Callbacks.TBody.LateUpdate.Invokeを呼び出す PatcherHelper.SetHook(PatcherHelper.HookType.PostCall, ta, "TBody", "LateUpdate", da, m + "Callbacks.TBody.LateUpdate", "Invoke"); // TBody.MoveHeadAndEyeの処理を完全に乗っ取り、CM3D2.MaidVoicePitch.Managed.Callbacks.TBody.MoveHeadAndEye.Invokeの呼び出しに置き換える PatcherHelper.SetHook(PatcherHelper.HookType.PreJump, ta, "TBody", "MoveHeadAndEye", da, m + "Callbacks.TBody.MoveHeadAndEye", "Invoke"); // BoneMorph_.Blendの処理終了後にCM3D2.MaidVoicePitch.Managed.Callbacks.BoneMorph_.Blend.Invokeを呼び出す PatcherHelper.SetHook(PatcherHelper.HookType.PostCall, ta, "BoneMorph_", "Blend", da, m + "Callbacks.BoneMorph_.Blend", "Invoke"); // AudioSourceMgr.Playの処理終了後にCM3D2.MaidVoicePitch.Managed.Callbacks.AudioSourceMgr.Play.Invokeを呼び出す PatcherHelper.SetHook(PatcherHelper.HookType.PostCall, ta, "AudioSourceMgr", "Play", da, m + "Callbacks.AudioSourceMgr.Play", "Invoke"); // AudioSourceMgr.PlayOneShotの処理終了後にCM3D2.MaidVoicePitch.Managed.Callbacks.AudioSourceMgr.PlayOneShot.Invokeを呼び出す PatcherHelper.SetHook(PatcherHelper.HookType.PostCall, ta, "AudioSourceMgr", "PlayOneShot", da, m + "Callbacks.AudioSourceMgr.PlayOneShot", "Invoke"); PatcherHelper.SetHook(PatcherHelper.HookType.PreCall, ta, "CharacterMgr", "PresetSet", da, m + "Callbacks.CharacterMgr.PresetSet", "Invoke"); Patch_SceneEdit_SlideCallback(assembly); // スカート調整 PatcherHelper.SetHook( PatcherHelper.HookType.PreCall, ta, "DynamicSkirtBone", "UpdateSelf", da, "CM3D2.MaidVoicePitch.Managed.Callbacks.DynamicSkirtBone.PreUpdateSelf", "Invoke"); PatcherHelper.SetHook( PatcherHelper.HookType.PostCall, ta, "DynamicSkirtBone", "UpdateSelf", da, "CM3D2.MaidVoicePitch.Managed.Callbacks.DynamicSkirtBone.PostUpdateSelf", "Invoke"); // 胸ボーンサイズ用 PatcherHelper.SetHook( PatcherHelper.HookType.PreCall, ta, "jiggleBone", "LateUpdateSelf", da, "CM3D2.MaidVoicePitch.Managed.Callbacks.jiggleBone.PreLateUpdateSelf", "Invoke"); // 胸ボーンサイズ用 PatcherHelper.SetHook( PatcherHelper.HookType.PostCall, ta, "jiggleBone", "LateUpdateSelf", da, "CM3D2.MaidVoicePitch.Managed.Callbacks.jiggleBone.PostLateUpdateSelf", "Invoke"); } catch (Exception e) { Helper.ShowException(e); throw; } }
public override void Patch(ReiPatcher.Patch.PatcherArguments args) { try { AssemblyDefinition ta = args.Assembly; AssemblyDefinition da = PatcherHelper.GetAssemblyDefinition(args, "CM3D2.VoiceNormalizer.Managed.dll"); string m = "CM3D2.VoiceNormalizer.Managed."; PatcherHelper.SetHook( PatcherHelper.HookType.PreCall, ta, "AudioSourceMgr.LoadFromWf", da, m + "Callbacks.AudioSourceMgr.LoadFromWf.Invoke"); } catch (Exception e) { Helper.ShowException(e); throw; } }
// Patches the assemblies /// <summary> /// /// </summary> /// <param name="assembly"></param> public static void Patch(AssemblyDefinition assembly) { LogError(assembly.Name.Name); AssemblyDefinition ta = assembly; AssemblyDefinition da = PatcherHelper.GetAssemblyDefinition("COM3D2.Lilly.Managed.dll"); TypeDefinition typedef = da.MainModule.GetType("COM3D2.Lilly.Managed,LillyManaged"); try { if (assembly.Name.Name == "Assembly-CSharp") { Log("Assembly-CSharp"); // static은 안되나? //public static void Assert(string message, bool nothrow = false) //PatcherHelper.SetHook( // PatcherHelper.HookType.PreJump, // ta, "NDebug.Assert", // da, "COM3D2.Lilly.Managed.NDebugLilly.AssertPreJump"); // 오류 발생 // private void SetProp(MaidProp mp, string filename, int f_nFileNameRID, bool f_bTemp, bool f_bNoScale = false) //PatcherHelper.SetHook( // PatcherHelper.HookType.PreCall, // ta, "Maid.SetProp", // da, "COM3D2.Lilly.Managed.MaidLilly.SetPropPreCall"); // PresetSet(Maid f_maid, Preset f_prest) PatcherHelper.SetHook( PatcherHelper.HookType.PreCall, ta, "CharacterMgr.PresetSet", da, "COM3D2.Lilly.Managed.CharacterMgrLilly.PresetSetPreCall"); // public Preset PresetSave(Maid f_maid, PresetType f_type) PatcherHelper.SetHook( PatcherHelper.HookType.PostCallRet, ta, "CharacterMgr.PresetSave", da, "COM3D2.Lilly.Managed.CharacterMgrLilly.PresetSavePostCallRet"); // 사운드 파일명 출력용 후킹. PatcherHelper.SetHook( PatcherHelper.HookType.PreCall, ta, "AudioSourceMgr.LoadPlay", da, "COM3D2.Lilly.Managed.AudioSourceMgrLilly.LoadPlayPreCall"); PatcherHelper.SetHook( PatcherHelper.HookType.PostCall, ta, "AudioSourceMgr.LoadPlay", da, "COM3D2.Lilly.Managed.AudioSourceMgrLilly.LoadPlayPostCall"); PatcherHelper.SetHook( PatcherHelper.HookType.PreCall, ta, "ImportC.ReadMaterial", da, "COM3D2.Lilly.Managed.ImportCMLilly.ReadMaterial"); } else if (assembly.Name.Name == "UnityEngine") { Log(" UnityEngine"); } else if (assembly.Name.Name == "Assembly-CSharp-firstpass") { Log(" Assembly-CSharp-firstpass"); } } catch (Exception e) { Log(e); } }
public static void Patch(AssemblyDefinition assembly) { AssemblyDefinition assemblyDefinition = AssemblyDefinition.ReadAssembly(Assembly.GetExecutingAssembly().Location); PatcherHelper.SetHook(PatcherHelper.HookType.ExPreCall, assembly, "SoundMgr.PlayBGM", assemblyDefinition, "COM3D2.LegacyEditBGM.Patcher.LegacyEditBGM.PlayBGM"); }