Esempio n. 1
0
        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);
            }
        }
Esempio n. 5
0
        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);
            }
        }
Esempio n. 8
0
        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");
        }