using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using MoonPhaseUtils.patches;
using Photon.Pun;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("MoonPhaseUtils")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+36882cbb7ac1db4c9b85442d846cffedc9c145af")]
[assembly: AssemblyProduct("MoonUtils")]
[assembly: AssemblyTitle("MoonPhaseUtils")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace MoonPhaseUtils
{
[BepInPlugin("MoonPhaseUtils", "MoonUtils", "1.0.0")]
public class Plugin : BaseUnityPlugin
{
internal static ManualLogSource Logger;
private static Harmony harmony;
private static readonly object _updateLock = new object();
public GameObject? screenLabel;
public GameObject? screenImage;
public TextMeshProUGUI? screenLabelText;
public RawImage? screenImageTexture;
public static Plugin Instance { get; private set; }
private void Awake()
{
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Expected O, but got Unknown
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Expected O, but got Unknown
Logger = ((BaseUnityPlugin)this).Logger;
Instance = this;
((Component)this).gameObject.transform.parent = null;
((Object)((Component)this).gameObject).hideFlags = (HideFlags)61;
Logger.LogInfo((object)"Plugin MoonPhaseUtils is loaded!");
harmony = new Harmony("MoonPhaseUtils");
MethodInfo methodInfo = AccessTools.Method(typeof(LevelGenerator), "GenerateDone", (Type[])null, (Type[])null);
MethodInfo methodInfo2 = AccessTools.Method(typeof(MoonPhaseClass), "GenerateDonePatched", (Type[])null, (Type[])null);
harmony.Patch((MethodBase)methodInfo, new HarmonyMethod(methodInfo2), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
PatchMoonUpdate();
}
private void PatchMoonUpdate()
{
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Expected O, but got Unknown
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Expected O, but got Unknown
MethodInfo methodInfo = AccessTools.Method(typeof(RunManager), "CalculateMoonLevel", (Type[])null, (Type[])null);
MethodInfo methodInfo2 = AccessTools.Method(typeof(RunManagerPatchClass), "CalculateMoonLevelPatched", (Type[])null, (Type[])null);
harmony.Patch((MethodBase)methodInfo, new HarmonyMethod(methodInfo2), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
MethodInfo methodInfo3 = AccessTools.Method(typeof(MenuPageSaves), "SaveFileSelected", (Type[])null, (Type[])null);
MethodInfo methodInfo4 = AccessTools.Method(typeof(MenuPageSavesPatchClass), "SaveFileSelectedPatched", (Type[])null, (Type[])null);
harmony.Patch((MethodBase)methodInfo3, new HarmonyMethod(methodInfo4), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
}
public void SetupLabel()
{
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_0084: Expected O, but got Unknown
//IL_015c: Unknown result type (might be due to invalid IL or missing references)
//IL_0171: Unknown result type (might be due to invalid IL or missing references)
//IL_0186: Unknown result type (might be due to invalid IL or missing references)
//IL_019b: Unknown result type (might be due to invalid IL or missing references)
//IL_01af: Unknown result type (might be due to invalid IL or missing references)
lock (_updateLock)
{
if ((Object)(object)screenLabel == (Object)null)
{
Logger.LogInfo((object)"MoonPhaseUtils: Creating label...");
GameObject val = GameObject.Find("Game Hud");
GameObject val2 = GameObject.Find("Tax Haul");
if ((Object)(object)val == (Object)null || (Object)(object)val2 == (Object)null)
{
Logger.LogInfo((object)"MoonPhaseUtils: Error getting HUD or Haul - not setting up label :(");
return;
}
TMP_FontAsset font = val2.GetComponent<TMP_Text>().font;
screenLabel = new GameObject();
screenLabel.SetActive(false);
((Object)screenLabel).name = "ListDeadPlayers";
screenLabel.AddComponent<TextMeshProUGUI>();
screenLabelText = screenLabel.GetComponent<TextMeshProUGUI>();
((TMP_Text)screenLabelText).font = font;
((TMP_Text)screenLabelText).fontSize = 24f;
((TMP_Text)screenLabelText).enableWordWrapping = true;
((TMP_Text)screenLabelText).overflowMode = (TextOverflowModes)0;
((TMP_Text)screenLabelText).alignment = (TextAlignmentOptions)1028;
((TMP_Text)screenLabelText).horizontalAlignment = (HorizontalAlignmentOptions)4;
((TMP_Text)screenLabelText).verticalAlignment = (VerticalAlignmentOptions)1024;
((TMP_Text)screenLabelText).SetText("", true);
screenLabel.transform.SetParent(val.transform, false);
RectTransform component = screenLabel.GetComponent<RectTransform>();
component.anchorMax = new Vector2(1f, 0f);
component.anchorMin = new Vector2(1f, 0f);
component.pivot = new Vector2(1f, 0f);
component.anchoredPosition = new Vector2(-30f, 30f);
component.sizeDelta = new Vector2(300f, 400f);
}
}
}
public void SetupImage()
{
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Expected O, but got Unknown
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
//IL_0100: Unknown result type (might be due to invalid IL or missing references)
//IL_0115: Unknown result type (might be due to invalid IL or missing references)
//IL_0129: Unknown result type (might be due to invalid IL or missing references)
lock (_updateLock)
{
if ((Object)(object)screenImage == (Object)null)
{
Logger.LogInfo((object)"MoonPhaseUtils: Creating image...");
GameObject val = GameObject.Find("Game Hud");
GameObject val2 = GameObject.Find("Tax Haul");
if ((Object)(object)val == (Object)null || (Object)(object)val2 == (Object)null)
{
Logger.LogInfo((object)"MoonPhaseUtils: Error getting HUD or Haul - not setting up image :(");
return;
}
screenImage = new GameObject("MoonImage");
screenImage.SetActive(false);
screenImageTexture = screenImage.AddComponent<RawImage>();
((Graphic)screenImageTexture).color = Color.white;
screenImage.transform.SetParent(val.transform, false);
RectTransform component = screenImage.GetComponent<RectTransform>();
component.anchorMin = new Vector2(1f, 0f);
component.anchorMax = new Vector2(1f, 0f);
component.pivot = new Vector2(1f, 0f);
component.anchoredPosition = new Vector2(-30f, 60f);
component.sizeDelta = new Vector2(30f, 30f);
}
}
}
public void UpdateImagePosition()
{
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
if (!((Object)(object)screenLabel == (Object)null) && !((Object)(object)screenImage == (Object)null) && !((Object)(object)screenLabelText == (Object)null))
{
((TMP_Text)screenLabelText).ForceMeshUpdate(false, false);
float y = ((TMP_Text)screenLabelText).GetRenderedValues(false).y;
RectTransform component = screenImage.GetComponent<RectTransform>();
float num = 30f + y + 10f;
component.anchoredPosition = new Vector2(-30f, num);
}
}
}
public static class MyPluginInfo
{
public const string PLUGIN_GUID = "MoonPhaseUtils";
public const string PLUGIN_NAME = "MoonUtils";
public const string PLUGIN_VERSION = "1.0.0";
}
}
namespace MoonPhaseUtils.UI
{
public class TopUIBanner : MonoBehaviour
{
public static void Show(string moonName, Texture moonIcon)
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Expected O, but got Unknown
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: Unknown result type (might be due to invalid IL or missing references)
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
//IL_011c: Unknown result type (might be due to invalid IL or missing references)
//IL_0136: Unknown result type (might be due to invalid IL or missing references)
//IL_014b: Unknown result type (might be due to invalid IL or missing references)
//IL_0160: Unknown result type (might be due to invalid IL or missing references)
//IL_0174: Unknown result type (might be due to invalid IL or missing references)
//IL_0183: Unknown result type (might be due to invalid IL or missing references)
//IL_0188: Unknown result type (might be due to invalid IL or missing references)
//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
//IL_01ed: Unknown result type (might be due to invalid IL or missing references)
//IL_0202: Unknown result type (might be due to invalid IL or missing references)
//IL_0217: Unknown result type (might be due to invalid IL or missing references)
//IL_022b: Unknown result type (might be due to invalid IL or missing references)
GameObject val = new GameObject("ModUIBanner");
Canvas val2 = val.AddComponent<Canvas>();
val2.renderMode = (RenderMode)0;
val.AddComponent<CanvasScaler>();
val.AddComponent<GraphicRaycaster>();
GameObject val3 = new GameObject("TopPanel");
val3.transform.SetParent(((Component)val2).transform);
RectTransform obj = val3.AddComponent<RectTransform>();
obj.anchorMin = new Vector2(0f, 1f);
obj.anchorMax = new Vector2(1f, 1f);
obj.pivot = new Vector2(0.5f, 1f);
obj.anchoredPosition = new Vector2(0f, 0f);
obj.sizeDelta = new Vector2(0f, 100f);
((Graphic)val3.AddComponent<Image>()).color = new Color(0f, 0f, 0f, 0.6f);
GameObject val4 = new GameObject("TopText");
val4.transform.SetParent(val3.transform);
Text obj2 = val4.AddComponent<Text>();
obj2.text = "Current moon: " + moonName;
obj2.alignment = (TextAnchor)3;
obj2.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
((Graphic)obj2).color = Color.white;
RectTransform component = ((Component)obj2).GetComponent<RectTransform>();
component.anchorMin = new Vector2(0f, 0f);
component.anchorMax = new Vector2(0.7f, 1f);
component.offsetMin = new Vector2(10f, 0f);
component.offsetMax = new Vector2(0f, 0f);
GameObject val5 = new GameObject("TopImage");
val5.transform.SetParent(val3.transform);
Image obj3 = val5.AddComponent<Image>();
Texture2D val6 = (Texture2D)(object)((moonIcon is Texture2D) ? moonIcon : null);
obj3.sprite = Sprite.Create(val6, new Rect(0f, 0f, (float)((Texture)val6).width, (float)((Texture)val6).height), new Vector2(0.5f, 0.5f));
RectTransform component2 = ((Component)obj3).GetComponent<RectTransform>();
component2.anchorMin = new Vector2(0.7f, 0f);
component2.anchorMax = new Vector2(1f, 1f);
component2.offsetMin = new Vector2(0f, 10f);
component2.offsetMax = new Vector2(-10f, -10f);
}
}
}
namespace MoonPhaseUtils.patches
{
public class MenuPageSavesPatchClass
{
internal static ManualLogSource Logger = Plugin.Logger;
[HarmonyPrefix]
private static bool SaveFileSelectedPatched(MenuPageSaves __instance, string saveFolderName, List<string> saveFileBackups)
{
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Expected O, but got Unknown
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_015c: Unknown result type (might be due to invalid IL or missing references)
//IL_0172: Unknown result type (might be due to invalid IL or missing references)
//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
//IL_0249: Unknown result type (might be due to invalid IL or missing references)
//IL_025f: Unknown result type (might be due to invalid IL or missing references)
//IL_0296: Unknown result type (might be due to invalid IL or missing references)
//IL_02e6: Unknown result type (might be due to invalid IL or missing references)
//IL_036e: Unknown result type (might be due to invalid IL or missing references)
//IL_0382: Unknown result type (might be due to invalid IL or missing references)
//IL_03bd: Unknown result type (might be due to invalid IL or missing references)
//IL_020a: Unknown result type (might be due to invalid IL or missing references)
//IL_0220: Unknown result type (might be due to invalid IL or missing references)
MenuElementAnimations component = ((Component)__instance.saveFileInfo).GetComponent<MenuElementAnimations>();
component.UIAniNudgeX(10f, 0.2f, 1f);
component.UIAniRotate(2f, 0.2f, 1f);
__instance.saveInfoDefault.SetActive(false);
__instance.saveInfoSelected.SetActive(true);
Image val = (Image)GetField("saveFileInfoPanel", __instance);
((Graphic)val).color = new Color(0f, 0.1f, 0.25f, 1f);
SetField("saveFileInfoPanel", val, __instance);
SetField("currentSaveFileName", saveFolderName, __instance);
SetField("currentSaveFileBackups", saveFileBackups, __instance);
string text = saveFolderName;
if (!int.TryParse(StatsManager.instance.SaveFileGetRunLevel(saveFolderName, (string)null), out var result) || !int.TryParse(StatsManager.instance.SaveFileGetRunCurrency(saveFolderName, (string)null), out var result2) || !int.TryParse(StatsManager.instance.SaveFileGetTotalHaul(saveFolderName, (string)null), out var result3))
{
SetField("currentSaveFileValid", false, __instance);
if (saveFileBackups.Count > 0)
{
text = saveFileBackups[0];
}
if (saveFolderName == text || !int.TryParse(StatsManager.instance.SaveFileGetRunLevel(saveFolderName, text), out result) || !int.TryParse(StatsManager.instance.SaveFileGetRunCurrency(saveFolderName, text), out result2) || !int.TryParse(StatsManager.instance.SaveFileGetTotalHaul(saveFolderName, text), out result3))
{
((GameObject)GetField("saveFileInfoLoadButton", __instance)).SetActive(false);
((GameObject)GetField("saveFileInfoRestoreButton", __instance)).SetActive(false);
((TMP_Text)__instance.saveFileHeader).text = "CORRUPTED SAVE FILE";
((Graphic)__instance.saveFileHeader).color = new Color(1f, 0f, 0f);
((TMP_Text)__instance.saveFileHeaderDate).text = ":(";
((TMP_Text)__instance.saveFileInfoRow1).text = "Sorry!";
((TMP_Text)__instance.saveFileInfoRow2).text = "";
((Component)__instance.saveFileInfoMoonRect).gameObject.SetActive(false);
((TMP_Text)__instance.saveFileInfoRow3).text = "Press \"Delete Save\" to delete \nthis save file.";
return false;
}
((GameObject)GetField("saveFileInfoLoadButton", __instance)).SetActive(false);
((GameObject)GetField("saveFileInfoRestoreButton", __instance)).SetActive(true);
}
else
{
SetField("currentSaveFileValid", true, __instance);
((GameObject)GetField("saveFileInfoLoadButton", __instance)).SetActive(true);
((GameObject)GetField("saveFileInfoRestoreButton", __instance)).SetActive(false);
}
((TMP_Text)__instance.saveFileHeader).text = StatsManager.instance.SaveFileGetTeamName(saveFolderName, text);
((Graphic)__instance.saveFileHeader).color = new Color(1f, 0.54f, 0f);
((TMP_Text)__instance.saveFileHeaderDate).text = StatsManager.instance.SaveFileGetDateAndTime(saveFolderName, (string)null);
string text2 = " ";
((TMP_Text)__instance.saveFileInfoRow1).text = "<sprite name=truck> <color=#" + ColorUtility.ToHtmlStringRGB(SemiFunc.ColorDifficultyGet(1f, 10f, (float)result + 1f)) + "><b>" + (result + 1) + "</b></color>";
TextMeshProUGUI saveFileInfoRow = __instance.saveFileInfoRow1;
((TMP_Text)saveFileInfoRow).text = ((TMP_Text)saveFileInfoRow).text + text2;
float num = StatsManager.instance.SaveFileGetTimePlayed(saveFolderName, text);
TextMeshProUGUI saveFileInfoRow2 = __instance.saveFileInfoRow1;
((TMP_Text)saveFileInfoRow2).text = ((TMP_Text)saveFileInfoRow2).text + ((TMP_Text)saveFileInfoRow2).text + "<sprite name=clock> " + SemiFunc.TimeToString(num, true, new Color(0.1f, 0.4f, 0.8f), new Color(0.05f, 0.3f, 0.6f));
TextMeshProUGUI saveFileInfoRow3 = __instance.saveFileInfoRow1;
((TMP_Text)saveFileInfoRow3).text = ((TMP_Text)saveFileInfoRow3).text + text2;
string text3 = ColorUtility.ToHtmlStringRGB(new Color(0.2f, 0.5f, 0.3f));
TextMeshProUGUI saveFileInfoRow4 = __instance.saveFileInfoRow1;
((TMP_Text)saveFileInfoRow4).text = ((TMP_Text)saveFileInfoRow4).text + "<sprite name=$$> <b>" + result2 + "</b><color=#" + text3 + ">k</color>";
string text4 = SemiFunc.DollarGetString(result3);
((TMP_Text)__instance.saveFileInfoRow2).text = "<color=#" + text3 + "><sprite name=$$$> TOTAL HAUL: <b></b>$ </color><b>" + text4 + "</b><color=#" + text3 + ">k</color>";
int num2 = Mathf.Clamp(RunManager.instance.CalculateMoonLevel(result), 0, RunManager.instance.moons.Count);
if (num2 > 0)
{
((Component)__instance.saveFileInfoMoonRect).gameObject.SetActive(true);
__instance.saveFileInfoMoonImage.texture = RunManager.instance.MoonGetIcon(num2);
}
else
{
((Component)__instance.saveFileInfoMoonRect).gameObject.SetActive(false);
}
ExecuteMethod("InfoPlayerNames", __instance, new object[3] { __instance.saveFileInfoRow3, saveFolderName, text });
return false;
}
private static object GetField(string fieldName, object instance = null)
{
FieldInfo fieldInfo = AccessTools.Field(typeof(MenuPageSaves), fieldName);
if (!(fieldInfo != null))
{
return null;
}
return fieldInfo.GetValue(instance);
}
private static object ExecuteMethod(string methodName, object instance = null, object[] parameters = null)
{
MethodInfo methodInfo = AccessTools.Method(typeof(MenuPageSaves), methodName, (Type[])null, (Type[])null);
if (methodInfo == null)
{
return null;
}
return methodInfo.Invoke(instance, parameters);
}
private static void SetField(string fieldName, object value, object instance = null)
{
FieldInfo fieldInfo = AccessTools.Field(typeof(MenuPageSaves), fieldName);
if (fieldInfo != null)
{
fieldInfo.SetValue(instance, value);
}
}
}
[HarmonyPatch(typeof(GameManager), "SetGameMode")]
public class MoonPhaseClass
{
internal static ManualLogSource Logger = Plugin.Logger;
[HarmonyPostfix]
public static void GenerateDonePatched(LevelGenerator __instance, PhotonMessageInfo _info)
{
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
//IL_00bf: Invalid comparison between Unknown and I4
//IL_012e: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)RunManager.instance != (Object)null)
{
bool flag = (Object)(object)RunManager.instance.levelCurrent != (Object)(object)RunManager.instance.levelLobby && (Object)(object)RunManager.instance.levelCurrent != (Object)(object)RunManager.instance.levelMainMenu && (Object)(object)RunManager.instance.levelCurrent != (Object)(object)RunManager.instance.levelLobbyMenu && (Object)(object)RunManager.instance.levelCurrent != (Object)(object)RunManager.instance.levelRecording && (Object)(object)RunManager.instance.levelCurrent != (Object)(object)RunManager.instance.levelShop && (Object)(object)RunManager.instance.levelCurrent != (Object)(object)RunManager.instance.levelTutorial;
if (!((int)__instance.State == 15 && flag))
{
return;
}
FieldInfo fieldInfo = AccessTools.Field(typeof(RunManager), "moonLevel");
if (fieldInfo != null)
{
int num = (int)fieldInfo.GetValue(RunManager.instance);
if ((Object)(object)Plugin.Instance != (Object)null)
{
Plugin.Instance.SetupLabel();
Plugin.Instance.SetupImage();
string text = string.Concat("<color=#", ColorUtility.ToHtmlStringRGB(Color.white), "><b>", RunManager.instance.MoonGetName(num).Trim(), "</b>\n" + string.Join("\n", RunManager.instance.MoonGetAttributes(num)), "</color>");
((TMP_Text)Plugin.Instance.screenLabelText).SetText(text, true);
((TMP_Text)Plugin.Instance.screenLabelText).fontSizeMax = 10f;
((TMP_Text)Plugin.Instance.screenLabelText).fontSize = 12f;
Plugin.Instance.screenLabel.SetActive(num != 0);
Plugin.Instance.UpdateImagePosition();
Plugin.Instance.screenImageTexture.texture = RunManager.instance.MoonGetIcon(num);
Plugin.Instance.screenImage.SetActive(true);
}
}
}
else
{
Logger.LogWarning((object)"RunManager.instance is null.");
}
}
}
public class RunManagerPatchClass
{
internal static ManualLogSource Logger = Plugin.Logger;
[HarmonyPrefix]
private static bool CalculateMoonLevelPatched(RunManager __instance, int _levelsCompleted, ref int __result)
{
__result = (_levelsCompleted - 1) % 4 + 1;
return false;
}
[HarmonyPrefix]
private static bool UpdateMoonLevelPatched(RunManager __instance)
{
int num = (int)GetField("moonLevel", __instance);
int num2 = __instance.CalculateMoonLevel((int)GetField("levelsCompleted", __instance));
SetField("moonLevelPrev", num, __instance);
SetField("moonLevel", num2, __instance);
if (num == num2)
{
return false;
}
SetField("moonLevelChanged", true, __instance);
return false;
}
private static object GetField(string fieldName, object instance = null)
{
FieldInfo fieldInfo = AccessTools.Field(typeof(RunManager), fieldName);
if (!(fieldInfo != null))
{
return null;
}
return fieldInfo.GetValue(instance);
}
private static object ExecuteMethod(string methodName, object instance = null, object[] parameters = null)
{
MethodInfo methodInfo = AccessTools.Method(typeof(RunManager), methodName, (Type[])null, (Type[])null);
if (methodInfo == null)
{
return null;
}
return methodInfo.Invoke(instance, parameters);
}
private static void SetField(string fieldName, object value, object instance = null)
{
FieldInfo fieldInfo = AccessTools.Field(typeof(RunManager), fieldName);
if (fieldInfo != null)
{
fieldInfo.SetValue(instance, value);
}
}
}
}