appendix:harmonyがある時

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
appendix:harmonyがある時 [2024/12/29 00:23]
fumble
appendix:harmonyがある時 [2024/12/29 00:31] (現在)
fumble
行 62: 行 62:
 static void ILManipulator(ILContext il, MethodBase original, ILLabel retLabel) static void ILManipulator(ILContext il, MethodBase original, ILLabel retLabel)
 static void SomeOtherILManipulator(ILContext ctx, MethodBase orig) static void SomeOtherILManipulator(ILContext ctx, MethodBase orig)
 +</code>
 +
 +渡すときはHarmonyMethod(MethodInfo method)の変換、つまりコンストラクターを呼んで変換させる。
 +<code csharp>
 +var transpilermethod = typeof(トランスパイラーのあるクラス).GetMethod(トランスパイラーのメソッド名);
 +var transpiler = Activator.CreateInstance(typeHarmonyMethod, transpiler);
 </code> </code>
  
行 82: 行 88:
             var opecode = fldOpecode.GetValue(instruction);             var opecode = fldOpecode.GetValue(instruction);
             var operand = fldOperand.GetValue(instruction);             var operand = fldOperand.GetValue(instruction);
-            if (opecode.Equals(変えたいところのOpCode) && operand.Equals(変えたいところのOperand))+            if (opecode.Equals(変えたいところのOpCode) && operand != null && operand.ToString() == 変えたいところのOperand)
                 newInstructions.Add(Activator.CreateInstance(type, 変えたいOpCode, 変えたいOperand));                 newInstructions.Add(Activator.CreateInstance(type, 変えたいOpCode, 変えたいOperand));
             else             else
行 91: 行 97:
 } }
 </code> </code>
-引数をIEnumerableで受けて戻り値をobjectとかで宣言してしまいます。+引数をIEnumerableで受けて戻り値をobjectとかで宣言してしまいます。\\
 引数で貰った IEnumerable<CodeInstruction> を書き換えて返していいのかがわからない((Copilotは書き換えて構わないみたいなことを言いますが…))ので、リストを作り直しそこに詰め込んで返しています。\\ 引数で貰った IEnumerable<CodeInstruction> を書き換えて返していいのかがわからない((Copilotは書き換えて構わないみたいなことを言いますが…))ので、リストを作り直しそこに詰め込んで返しています。\\
  
  • appendix/harmonyがある時.1735399433.txt.gz
  • 最終更新: 2024/12/29 00:23
  • by fumble