bepinexプラグインにしたい場合

文書の過去の版を表示しています。


作り的にはSybarisプラグインとほぼ同じ、参照先、基底クラス、クラスに付けるべき属性を変えるぐらいでBepInExプラグインになる。
ネット上の資料がBepInExの方が多いのでBepInExプラグインの方が作りやすい。パッチはもうHarmonyが使えるの比較にならない。

UnityInjectorだったものが、BepInExに変わる。
パッチを当てる場合はmono.cecilより0Harmonyを使う方が楽

UnityInjector.PluginBaseがBepInEx.BaseUnityPluginになる。
どちらもUnityEngine.MonoBehaviourを継承しているので、AwakeとかUpdateで実装するのは同じ。

UnityInjector.Attributes.PluginNameAttribute,UnityInjector.Attributes.PluginVersionAttributeだったものが、BepInEx.BepInPluginに変わる。
名前とバージョン以外にGuidを設定する必要がある。

using BepInEx; using HarmonyLib; using System.Collections.Generic; using System.Reflection.Emit; using System.Xml.Serialization;

namespace DisableXmlSerializerExceptionMessage {

  /// <summary>
  /// プラグイン本体
  /// </summary>
  [BepInPlugin(PluginGuid, PluginName, PluginVersion)]
  public class Plugin : BaseUnityPlugin
  {
      /// <summary>
      /// プラグイン名
      /// </summary>
      public const string PluginName = "Disable XmlSerializer Exception Message Plug-In";
      /// <summary>
      /// プラグインGuid
      /// </summary>
      public const string PluginGuid = "jp.fumble.DisableXmlSerializerExceptionMessage";
      /// <summary>
      /// プラグインカンパニー
      /// </summary>
      public const string CompanyName = "Fumble Warez";
      /// <summary>
      /// プラグインコピーライト
      /// </summary>
      public const string Copyright = "Copyright © Fumble Warez 2024-2025";
      /// <summary>
      /// プラグインバージョン
      /// </summary>
      public const string PluginVersion = "1.0.1.0";
      /// <summary>
      /// HarmonyLib(HarmonyX)のインスタンス
      /// </summary>
      /// <remarks>
      /// Harmonyがあれば「もう何も恐くない」。
      /// </remarks>
      private static Harmony harmony;
      /// <summary>
      /// コンストラクタ
      /// </summary>
      static Plugin()
      {
          // パッチする
          if (Plugin.harmony == null)
              Plugin.harmony = new Harmony(PluginGuid);
          Plugin.harmony.PatchAll(typeof(Patch_XmlSerializer_RunSerializerGeneration));
      }
      /// <summary>
      /// プラグイン起動
      /// </summary>
      private void Awake()
      {
          // 何もしない、パッチしてしまえばアンロードされても「もう何も恐くない」。
      }
  }
  /// <summary>
  /// XmlSerializer.RunSerializerGenerationパッチ
  /// </summary>
  [HarmonyPatch(typeof(XmlSerializer), "RunSerializerGeneration", typeof(System.Object))]
  public static class Patch_XmlSerializer_RunSerializerGeneration
  {
      /// <summary>
      /// とらんすぱいら
      /// </summary>
      /// <param name="instructions">変更前のIL</param>
      /// <returns>変更後のIL</returns>
      [HarmonyTranspiler]
      static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
      {
          // 見つかっただけ書き換える、なかったら何もしない。
          // 想定は1箇所、まかり間違って2回目走ってもすべて書き換え済みなのでやはり「もう何も恐くない」。
          //  書き換え元IL
          //      call        System.Void System.Console::WriteLine(System.Object)
          //  書き換え先IL
          //      pop
          foreach (var instruction in instructions)
          {
              if (instruction.opcode == OpCodes.Call &&
                  instruction.operand != null && instruction.operand.ToString() == "Void WriteLine(System.Object)")
                  yield return new CodeInstruction(OpCodes.Pop);
              else
                  yield return instruction;
          }
      }
  }

} <

コメント

コメントを入力:
 
  • bepinexプラグインにしたい場合.1736161343.txt.gz
  • 最終更新: 2025/01/06 20:02
  • by fumble