namespace Patching_Postfix
{
using HarmonyLib;
using System.Collections.Generic;
public class ResultExample
{
//
public class OriginalCode
{
public string GetName() => name; // ...
}
[HarmonyPatch(typeof(OriginalCode), nameof(OriginalCode.GetName))]
class Patch
{
static void Postfix(ref string __result)
{
if (__result == "foo")
__result = "bar";
}
}
//
public static string name;
}
public class PassThroughExample
{
//
public class OriginalCode
{
public string GetName() => "David";
public IEnumerable GetNumbers()
{
yield return 1;
yield return 2;
yield return 3;
}
}
[HarmonyPatch(typeof(OriginalCode), nameof(OriginalCode.GetName))]
class Patch1
{
static string Postfix(string name) => "Hello " + name;
}
[HarmonyPatch(typeof(OriginalCode), nameof(OriginalCode.GetNumbers))]
class Patch2
{
static IEnumerable Postfix(IEnumerable values)
{
yield return 0;
foreach (var value in values)
if (value > 1)
yield return value * 10;
yield return 99;
}
}
// will make GetNumbers() return [0, 20, 30, 99] instead of [1, 2, 3]
//
}
public class ArgsExample
{
//
public class OriginalCode
{
public void Test(int counter)
{
// ...
}
}
[HarmonyPatch(typeof(OriginalCode), nameof(OriginalCode.Test))]
class Patch
{
static void Prefix(int counter) => FileLog.Log("counter = " + counter);
}
//
}
}