-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPatches.cs
More file actions
67 lines (61 loc) · 2.44 KB
/
Patches.cs
File metadata and controls
67 lines (61 loc) · 2.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using HarmonyLib;
using System.Collections.Generic;
using System.Reflection.Emit;
namespace CompactStorage
{
class Patches
{
[HarmonyPatch(typeof(GameDataLoader), nameof(GameDataLoader.LoadModCards))]
[HarmonyPostfix]
private static void AddCards(List<CardData> __result)
{
CardLoader.AddCards(__result);
}
[HarmonyPatch(typeof(WorldManager), nameof(WorldManager.CardCapIncrease))]
[HarmonyPostfix]
private static void StackedWarehousesCardCapIncrease(WorldManager __instance, ref int __result, GameBoard board)
{
foreach (var card in __instance.AllCards)
if (card.MyBoard == board && card.CardData is StackedWarehouses w)
__result += w.Count;
}
[HarmonyPatch(typeof(WorldManager), nameof(WorldManager.BoardSizeIncrease))]
[HarmonyPostfix]
private static void StackedWarehousesBoardSizeIncrease(
WorldManager __instance,
ref int __result,
GameBoard board
)
{
foreach (var card in __instance.AllCards)
if (card.MyBoard == board && card.CardData is StackedWarehouses w)
__result += w.LighthouseCount * 10;
}
[HarmonyPatch(typeof(FoodWarehouse), nameof(FoodWarehouse.UpdateCard))]
[HarmonyTranspiler]
private static IEnumerable<CodeInstruction> FoodWarehouseDontCallHotpotUpdateCard(
IEnumerable<CodeInstruction> instructions
)
{
return new CodeMatcher(instructions)
.MatchForward(
false,
new CodeMatch(OpCodes.Call, AccessTools.Method(typeof(Hotpot), nameof(Hotpot.UpdateCard)))
)
.ThrowIfInvalid("Didn't find Hotpot::UpdateCard() call")
.SetOperandAndAdvance(AccessTools.Method(typeof(Food), nameof(Food.UpdateCard)))
.InstructionEnumeration();
}
[HarmonyPostfix]
[HarmonyPatch(typeof(SokLoc), nameof(SokLoc.SetLanguage))]
public static void LanguageChanged(SokLoc __instance)
{
if (SokLoc.instance == null)
return;
foreach (var term in CardLoader.Translations)
{
SokLoc.instance.CurrentLocSet.TermLookup[term.Id] = term;
}
}
}
}