Guest User

CM3D2.KagSetMotionSpeed.Plugin

a guest
Oct 9th, 2015
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.27 KB | None | 0 0
  1. /* CM3D2.KagSetMotionSpeed.Plugin.cs
  2. ksスクリプトに@SetMotionSpeedタグを追加するUnityInjector用プラグイン
  3.  
  4. # コンパイル
  5. cd /d C:\KISS\CM3D2_KAIZOU\UnityInjector
  6. C:\Windows\Microsoft.NET\Framework\v3.5\csc /t:library /lib:..\CM3D2x64_Data\Managed /r:UnityEngine.dll /r:UnityInjector.dll /r:Assembly-CSharp.dll /r:Assembly-CSharp-firstpass.dll CM3D2.KagSetMotionSpeed.Plugin.cs
  7.  
  8. # タグの仕様
  9. @SetMotionSpeed maid=0 speed=50.0
  10.  
  11.     maid=X  メイド指定
  12.     man=X   男指定
  13.     speed=X 速度の倍率指定 (1.0 で通常速度)
  14.  
  15. # スクリプトの変更例
  16. 例として「愛撫」コマンドの待機時モーション速度を変更。
  17. srcipt/motion/sex/sex_aibu.ks内の性格別モーション指定を以下のように変更する
  18.  
  19. ; ▼ツンデレ待機
  20. *ツンデレ待機
  21. @MotionAutoTwist maid=0 kata=on
  22. ...
  23.  
  24. ; ↓この行を追加する。この例だと 50 倍速になる
  25. @SetMotionSpeed maid=0 speed=50.0
  26. @s
  27. */
  28.  
  29. using System;
  30. using System.Collections.Generic;
  31. using System.Reflection;
  32.  
  33. using UnityEngine;
  34. using UnityInjector.Attributes;
  35.  
  36. [PluginFilter("CM3D2x64"), PluginFilter("CM3D2x86"),
  37. PluginFilter("CM3D2OHx64"), PluginFilter("CM3D2OHx86"),
  38. PluginFilter("CM3D2VRx64"), PluginFilter("CM3D2VRx86"),
  39. PluginFilter("CM3D2OHVRx64"), PluginFilter("CM3D2OHVRx86")]
  40. public class KagSetMotionSpeedPlugin : UnityInjector.PluginBase
  41. {
  42.     static MethodInfo getMaidAndMan_ = null;
  43.  
  44.     public void OnLevelWasLoaded(int level)
  45.     {
  46.         var managers = new List<BaseKagManager>();
  47.         managers.Add(GameMain.Instance.ScriptMgr.adv_kag);
  48.         managers.Add(GameMain.Instance.ScriptMgr.yotogi_kag);
  49.         foreach (MotionKagManager m in GameMain.Instance.ScriptMgr.kag_mot_dic.Values)
  50.         {
  51.             managers.Add(m);
  52.         }
  53.  
  54.         string tagName = "setmotionspeed";
  55.         foreach (BaseKagManager m in managers)
  56.         {
  57.             m.kag.RemoveTagCallBack(tagName);
  58.             m.kag.AddTagCallBack(
  59.                 tagName, new KagScript.KagTagCallBack(TagSetMotionSpeed));
  60.         }
  61.     }
  62.  
  63.     static bool TagSetMotionSpeed(KagTagSupport tag_data)
  64.     {
  65.         Maid maidAndMan = GetMaidAndMan(tag_data);
  66.         if (maidAndMan == null)
  67.         {
  68.             return false;
  69.         }
  70.  
  71.         float speed = 1.0f;
  72.         if (tag_data.IsValid("speed"))
  73.         {
  74.             speed = tag_data.GetTagProperty("speed").AsReal();
  75.         }
  76.  
  77.         if (speed >= -100.0f && speed < 100.0f)
  78.         {
  79.             if (maidAndMan.Visible && maidAndMan.body0.m_Bones != null)
  80.             {
  81.                 foreach (AnimationState a in maidAndMan.body0.m_Bones.animation)
  82.                 {
  83.                     a.speed = speed;
  84.                 }
  85.             }
  86.         }
  87.         return true;
  88.     }
  89.  
  90.     static Maid GetMaidAndMan(KagTagSupport tag_data)
  91.     {
  92.         if (getMaidAndMan_ == null)
  93.         {
  94.             getMaidAndMan_ = typeof(BaseKagManager).GetMethod(
  95.                 "GetMaidAndMan", BindingFlags.NonPublic | BindingFlags.Static,
  96.                 null, new Type[] { typeof(KagTagSupport) }, null);
  97.         }
  98.         if (getMaidAndMan_ == null)
  99.         {
  100.             return null;
  101.         }
  102.         return getMaidAndMan_.Invoke(null, new object[] { tag_data }) as Maid;
  103.     }
  104. }
Advertisement
Add Comment
Please, Sign In to add comment