Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of RepoInventoryMod v1.0.0
RepoInventoryMod.dll
Decompiled 18 hours agousing System; using System.Collections.Generic; using System.Reflection; using System.Runtime.CompilerServices; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using TMPro; using UnityEngine; using UnityEngine.UI; [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: CompilationRelaxations(8)] [assembly: AssemblyVersion("0.0.0.0")] namespace RepoInventoryMod; [BepInPlugin("de.geilo.RepoInventoryMod", "RepoInventoryMod", "1.0.0")] [BepInProcess("REPO.exe")] public class Plugin : BaseUnityPlugin { internal static ManualLogSource ModLog; private static Harmony _harmony; private static GameObject _managerObject; private void Awake() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Expected O, but got Unknown //IL_00c2: Unknown result type (might be due to invalid IL or missing references) ModLog = ((BaseUnityPlugin)this).Logger; try { PluginConfig.InitConfig(((BaseUnityPlugin)this).Config); _harmony = new Harmony("de.geilo.RepoInventoryMod"); _harmony.PatchAll(Assembly.GetExecutingAssembly()); _managerObject = new GameObject("RepoInventoryMod_Manager"); Object.DontDestroyOnLoad((Object)(object)_managerObject); _managerObject.AddComponent<RadialMenuManager>(); if (PluginConfig.EnableLogging.Value) { ModLog.LogInfo((object)"=========================================="); ModLog.LogInfo((object)"RepoInventoryMod v1.0.0 loaded successfully!"); ModLog.LogInfo((object)$"Config - SlotCount: {PluginConfig.SlotCount.Value}"); ModLog.LogInfo((object)$"Config - RadialMenuKey: {PluginConfig.RadialMenuKey.Value}"); ModLog.LogInfo((object)"=========================================="); } } catch (Exception ex) { ModLog.LogError((object)$"Load error: {ex.Message}\n{ex.StackTrace}"); } } private void OnDestroy() { if (_harmony != null) { _harmony.UnpatchSelf(); } if ((Object)(object)_managerObject != (Object)null) { Object.Destroy((Object)(object)_managerObject); } } } public static class PluginConfig { public static ConfigEntry<int> SlotCount; public static ConfigEntry<KeyCode> RadialMenuKey; public static ConfigEntry<bool> EnableLogging; public static void InitConfig(ConfigFile config) { SlotCount = config.Bind<int>("General", "SlotCount", 5, "Die Gesamtanzahl der Inventarslots (Standard ist 3, Maximum 10)."); RadialMenuKey = config.Bind<KeyCode>("General", "RadialMenuKey", (KeyCode)103, "Die Taste zum Oeffnen des Ausruestungsrads."); EnableLogging = config.Bind<bool>("Debug", "EnableLogging", true, "Aktiviert Debug-Meldungen in der BepInEx Konsole."); } } public class RadialMenuManager : MonoBehaviour { public static bool IsOpen = false; private Inventory _lastInventoryInstance = null; private bool _slotsDuplicated = false; private int _selectedSlotIndex = -1; private static Texture2D _whiteTexture; private static GUIStyle _textStyle; private static GUIStyle _titleStyle; private static GUIStyle _centerStyle; public static Texture2D WhiteTexture { get { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown //IL_0027: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_whiteTexture == (Object)null) { _whiteTexture = new Texture2D(1, 1); _whiteTexture.SetPixel(0, 0, Color.white); _whiteTexture.Apply(); } return _whiteTexture; } } public static List<InventorySpot> GetInventorySpots(Inventory inv) { if ((Object)(object)inv == (Object)null) { return null; } FieldInfo field = typeof(Inventory).GetField("inventorySpots", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null) { return (List<InventorySpot>)field.GetValue(inv); } return null; } public static void SetInventorySpots(Inventory inv, List<InventorySpot> spots) { if (!((Object)(object)inv == (Object)null)) { FieldInfo field = typeof(Inventory).GetField("inventorySpots", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null) { field.SetValue(inv, spots); } } } public static void SetBatteryVisualLogic(InventorySpot spot, BatteryVisualLogic logic) { if (!((Object)(object)spot == (Object)null)) { FieldInfo field = typeof(InventorySpot).GetField("batteryVisualLogic", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null) { field.SetValue(spot, logic); } } } public static void SetInventoryIcon(InventorySpot spot, Image icon) { if (!((Object)(object)spot == (Object)null)) { FieldInfo field = typeof(InventorySpot).GetField("inventoryIcon", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null) { field.SetValue(spot, icon); } } } public static Vector3 GetInitialPosition(SemiUI ui) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)ui == (Object)null) { return Vector3.zero; } FieldInfo field = typeof(SemiUI).GetField("initialPosition", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null) { return (Vector3)field.GetValue(ui); } return Vector3.zero; } public static void SetInitialPosition(SemiUI ui, Vector3 value) { //IL_0039: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)ui == (Object)null)) { FieldInfo field = typeof(SemiUI).GetField("initialPosition", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null) { field.SetValue(ui, value); } } } public static string GetItemInstanceName(Component itemAttributes) { if ((Object)(object)itemAttributes == (Object)null) { return ""; } FieldInfo field = ((object)itemAttributes).GetType().GetField("instanceName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null) { return (string)field.GetValue(itemAttributes); } return ""; } private void Update() { //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_0241: Unknown result type (might be due to invalid IL or missing references) Inventory instance = Inventory.instance; if ((Object)(object)instance != (Object)(object)_lastInventoryInstance) { _lastInventoryInstance = instance; _slotsDuplicated = false; IsOpen = false; } if ((Object)(object)instance == (Object)null) { return; } List<InventorySpot> inventorySpots = GetInventorySpots(instance); if (!_slotsDuplicated && inventorySpots != null && inventorySpots.Count >= 3) { InventorySpot val = inventorySpots[2]; if ((Object)(object)val != (Object)null && (Object)(object)((Component)val).gameObject != (Object)null) { DuplicateSlots(instance, val); _slotsDuplicated = true; } } if (!_slotsDuplicated || inventorySpots == null) { return; } KeyCode value = PluginConfig.RadialMenuKey.Value; if (Input.GetKeyDown(value)) { IsOpen = true; _selectedSlotIndex = -1; } if (!IsOpen) { return; } Cursor.lockState = (CursorLockMode)0; Cursor.visible = true; if ((Object)(object)PlayerController.instance != (Object)null) { PlayerController.instance.InputDisable(0.1f); } Vector2 val2 = default(Vector2); ((Vector2)(ref val2))..ctor((float)Screen.width / 2f, (float)Screen.height / 2f); Vector2 val3 = default(Vector2); ((Vector2)(ref val3))..ctor(Input.mousePosition.x, (float)Screen.height - Input.mousePosition.y); Vector2 val4 = val3 - val2; float magnitude = ((Vector2)(ref val4)).magnitude; int count = inventorySpots.Count; if (magnitude > 15f && count > 0) { float num = Mathf.Atan2(val4.y, val4.x) * 57.29578f; if (num < 0f) { num += 360f; } float num2 = num - 270f; if (num2 < 0f) { num2 += 360f; } float num3 = 360f / (float)count; _selectedSlotIndex = Mathf.FloorToInt((num2 + num3 / 2f) / num3) % count; } else { _selectedSlotIndex = -1; } if (!Input.GetKeyUp(value)) { return; } IsOpen = false; Cursor.lockState = (CursorLockMode)1; Cursor.visible = false; if (_selectedSlotIndex < 0 || _selectedSlotIndex >= inventorySpots.Count) { return; } InventorySpot val5 = inventorySpots[_selectedSlotIndex]; if ((Object)(object)val5 != (Object)null) { if (PluginConfig.EnableLogging.Value) { Plugin.ModLog.LogInfo((object)$"Radial Menu: Triggering slot {_selectedSlotIndex + 1}"); } MethodInfo method = typeof(InventorySpot).GetMethod("HandleInput", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method != null) { method.Invoke(val5, null); } } } private void DuplicateSlots(Inventory inv, InventorySpot templateSlot) { //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_0181: 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_018a: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_01c2: Unknown result type (might be due to invalid IL or missing references) //IL_01c7: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Unknown result type (might be due to invalid IL or missing references) //IL_0264: Unknown result type (might be due to invalid IL or missing references) int value = PluginConfig.SlotCount.Value; if (value <= 3) { return; } List<InventorySpot> inventorySpots = GetInventorySpots(inv); if (inventorySpots == null) { return; } InventorySpot val = inventorySpots[1]; if ((Object)(object)val == (Object)null) { if (PluginConfig.EnableLogging.Value) { Plugin.ModLog.LogWarning((object)"Cannot duplicate slots: Slot 1 is null."); } return; } Vector2 val2 = ((SemiUI)templateSlot).showPosition - ((SemiUI)val).showPosition; Vector2 val3 = ((SemiUI)templateSlot).hidePosition - ((SemiUI)val).hidePosition; Vector3 val4 = GetInitialPosition((SemiUI)(object)templateSlot) - GetInitialPosition((SemiUI)(object)val); Vector3 val5 = ((Component)templateSlot).transform.localPosition - ((Component)val).transform.localPosition; Transform parent = ((Component)templateSlot).transform.parent; for (int i = 3; i < value; i++) { GameObject val6 = Object.Instantiate<GameObject>(((Component)templateSlot).gameObject, parent); ((Object)val6).name = "Inventory Spot " + (i + 1); InventorySpot component = val6.GetComponent<InventorySpot>(); if ((Object)(object)component == (Object)null) { if (PluginConfig.EnableLogging.Value) { Plugin.ModLog.LogError((object)"Duplicated slot does not have InventorySpot component!"); } continue; } SetInventoryIcon(component, val6.GetComponentInChildren<Image>()); SetBatteryVisualLogic(component, val6.GetComponentInChildren<BatteryVisualLogic>()); component.inventorySpotIndex = i; int num = i - 2; ((SemiUI)component).showPosition = ((SemiUI)templateSlot).showPosition + val2 * (float)num; ((SemiUI)component).hidePosition = ((SemiUI)templateSlot).hidePosition + val3 * (float)num; SetInitialPosition((SemiUI)(object)component, GetInitialPosition((SemiUI)(object)templateSlot) + val4 * (float)num); ((Component)component).transform.localPosition = ((Component)templateSlot).transform.localPosition + val5 * (float)num; if ((Object)(object)component.noItem != (Object)null) { ((TMP_Text)component.noItem).text = (i + 1).ToString(); } inv.InventorySpotAddAtIndex(component, i); if (PluginConfig.EnableLogging.Value) { Plugin.ModLog.LogInfo((object)$"Duplicated and registered slot {i + 1} at position {((Component)component).transform.localPosition}"); } } FieldInfo field = typeof(Inventory).GetField("spotsFeched", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null) { field.SetValue(inv, true); } } private void OnGUI() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Expected O, but got Unknown //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Expected O, but got Unknown //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Expected O, but got Unknown //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_026a: Unknown result type (might be due to invalid IL or missing references) //IL_021b: Unknown result type (might be due to invalid IL or missing references) //IL_02e9: Unknown result type (might be due to invalid IL or missing references) //IL_02f8: Unknown result type (might be due to invalid IL or missing references) //IL_02ff: Unknown result type (might be due to invalid IL or missing references) //IL_0304: Unknown result type (might be due to invalid IL or missing references) //IL_0309: Unknown result type (might be due to invalid IL or missing references) //IL_0376: Unknown result type (might be due to invalid IL or missing references) //IL_035b: Unknown result type (might be due to invalid IL or missing references) //IL_037c: Unknown result type (might be due to invalid IL or missing references) //IL_03b1: Unknown result type (might be due to invalid IL or missing references) //IL_0396: Unknown result type (might be due to invalid IL or missing references) //IL_03b7: Unknown result type (might be due to invalid IL or missing references) //IL_03b9: Unknown result type (might be due to invalid IL or missing references) //IL_03bb: Unknown result type (might be due to invalid IL or missing references) //IL_03c3: Unknown result type (might be due to invalid IL or missing references) //IL_03c6: Unknown result type (might be due to invalid IL or missing references) //IL_0492: Unknown result type (might be due to invalid IL or missing references) //IL_0529: Unknown result type (might be due to invalid IL or missing references) //IL_0530: Expected O, but got Unknown //IL_04ed: Unknown result type (might be due to invalid IL or missing references) //IL_057c: Unknown result type (might be due to invalid IL or missing references) //IL_045b: Unknown result type (might be due to invalid IL or missing references) //IL_0462: Expected O, but got Unknown //IL_0592: Unknown result type (might be due to invalid IL or missing references) //IL_0560: Unknown result type (might be due to invalid IL or missing references) //IL_0559: Unknown result type (might be due to invalid IL or missing references) if (!IsOpen) { return; } DrawRect(new Rect(0f, 0f, (float)Screen.width, (float)Screen.height), new Color(0f, 0f, 0f, 0.45f)); if (_textStyle == null) { _textStyle = new GUIStyle(GUI.skin.label); _textStyle.alignment = (TextAnchor)4; _textStyle.normal.textColor = Color.white; _textStyle.fontSize = 13; _titleStyle = new GUIStyle(GUI.skin.label); _titleStyle.alignment = (TextAnchor)4; _titleStyle.fontStyle = (FontStyle)1; _titleStyle.normal.textColor = new Color(0f, 0.8f, 1f, 1f); _titleStyle.fontSize = 20; _centerStyle = new GUIStyle(GUI.skin.label); _centerStyle.alignment = (TextAnchor)4; _centerStyle.normal.textColor = new Color(0.7f, 0.7f, 0.7f, 1f); _centerStyle.fontSize = 12; } Vector2 val = default(Vector2); ((Vector2)(ref val))..ctor((float)Screen.width / 2f, (float)Screen.height / 2f); GUI.Label(new Rect(val.x - 200f, val.y - 30f, 400f, 25f), "AUSRÜSTUNGSRAD", _titleStyle); GUI.Label(new Rect(val.x - 200f, val.y, 400f, 20f), "Maus bewegen & G loslassen zum Ausrüsten", _centerStyle); if (_selectedSlotIndex >= 0) { GUI.Label(new Rect(val.x - 200f, val.y + 20f, 400f, 20f), $"Ausgewählt: Slot {_selectedSlotIndex + 1}", _textStyle); } else { GUI.Label(new Rect(val.x - 200f, val.y + 20f, 400f, 20f), "Keine Auswahl (Mitte)", _centerStyle); } Inventory instance = Inventory.instance; if ((Object)(object)instance == (Object)null) { return; } List<InventorySpot> inventorySpots = GetInventorySpots(instance); if (inventorySpots == null) { return; } int count = inventorySpots.Count; float num = 160f; float num2 = 360f / (float)count; Rect rect = default(Rect); Rect rect2 = default(Rect); Rect val6 = default(Rect); for (int i = 0; i < count; i++) { float num3 = ((float)i * num2 - 90f) * ((float)Math.PI / 180f); Vector2 val2 = val + new Vector2(Mathf.Cos(num3), Mathf.Sin(num3)) * num; ((Rect)(ref rect))..ctor(val2.x - 45f, val2.y - 45f, 90f, 90f); bool flag = i == _selectedSlotIndex; Color color = (flag ? new Color(0f, 0.45f, 0.7f, 0.75f) : new Color(0.12f, 0.12f, 0.12f, 0.7f)); Color color2 = (flag ? new Color(0f, 0.85f, 1f, 1f) : new Color(0.3f, 0.3f, 0.3f, 0.6f)); DrawRect(rect, color); DrawBorder(rect, 1, color2); InventorySpot val3 = inventorySpots[i]; ItemEquippable val4 = (((Object)(object)val3 != (Object)null) ? val3.CurrentItem : null); Sprite val5 = null; string text = "LEER"; if ((Object)(object)val4 != (Object)null) { Component component = ((Component)val4).GetComponent("ItemAttributes"); if ((Object)(object)component != (Object)null) { FieldInfo field = ((object)component).GetType().GetField("icon", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null) { val5 = (Sprite)field.GetValue(component); } text = GetItemInstanceName(component); } } GUI.Label(new Rect(((Rect)(ref rect)).x + 5f, ((Rect)(ref rect)).y + 2f, 20f, 20f), (i + 1).ToString(), _textStyle); if ((Object)(object)val5 != (Object)null) { ((Rect)(ref rect2))..ctor(((Rect)(ref rect)).x + 20f, ((Rect)(ref rect)).y + 15f, 50f, 50f); DrawSprite(rect2, val5); } ((Rect)(ref val6))..ctor(((Rect)(ref rect)).x - 25f, ((Rect)(ref rect)).y + 92f, 140f, 20f); GUIStyle val7 = new GUIStyle(_textStyle); val7.normal.textColor = (Color)(flag ? new Color(0f, 0.85f, 1f, 1f) : (((Object)(object)val4 != (Object)null) ? Color.white : new Color(0.5f, 0.5f, 0.5f, 1f))); val7.fontSize = 11; GUI.Label(val6, text, val7); } } public static void DrawRect(Rect rect, Color color) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) Color color2 = GUI.color; GUI.color = color; GUI.DrawTexture(rect, (Texture)(object)WhiteTexture); GUI.color = color2; } public static void DrawBorder(Rect rect, int width, Color color) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004b: 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) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) DrawRect(new Rect(((Rect)(ref rect)).x, ((Rect)(ref rect)).y, ((Rect)(ref rect)).width, (float)width), color); DrawRect(new Rect(((Rect)(ref rect)).x, ((Rect)(ref rect)).y + ((Rect)(ref rect)).height - (float)width, ((Rect)(ref rect)).width, (float)width), color); DrawRect(new Rect(((Rect)(ref rect)).x, ((Rect)(ref rect)).y, (float)width, ((Rect)(ref rect)).height), color); DrawRect(new Rect(((Rect)(ref rect)).x + ((Rect)(ref rect)).width - (float)width, ((Rect)(ref rect)).y, (float)width, ((Rect)(ref rect)).height), color); } public static void DrawSprite(Rect rect, Sprite sprite) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)sprite == (Object)null)) { Texture2D texture = sprite.texture; if (!((Object)(object)texture == (Object)null)) { Rect rect2 = sprite.rect; Rect val = default(Rect); ((Rect)(ref val))..ctor(((Rect)(ref rect2)).x / (float)((Texture)texture).width, ((Rect)(ref rect2)).y / (float)((Texture)texture).height, ((Rect)(ref rect2)).width / (float)((Texture)texture).width, ((Rect)(ref rect2)).height / (float)((Texture)texture).height); GUI.DrawTextureWithTexCoords(rect, (Texture)(object)texture, val); } } } } [HarmonyPatch(typeof(Inventory), "Awake")] public class Inventory_Awake_Patch { [HarmonyPostfix] public static void Postfix(Inventory __instance) { int value = PluginConfig.SlotCount.Value; List<InventorySpot> list = RadialMenuManager.GetInventorySpots(__instance); if (list == null) { list = new List<InventorySpot>(); RadialMenuManager.SetInventorySpots(__instance, list); } while (list.Count < value) { list.Add(null); } if (PluginConfig.EnableLogging.Value) { Plugin.ModLog.LogInfo((object)$"Inventory_Awake_Patch: Resized inventorySpots list to {list.Count}"); } } } [HarmonyPatch(typeof(Inventory), "GetSpotByIndex")] public class Inventory_GetSpotByIndex_Patch { [HarmonyPrefix] public static bool Prefix(Inventory __instance, int index, ref InventorySpot __result) { List<InventorySpot> inventorySpots = RadialMenuManager.GetInventorySpots(__instance); if (inventorySpots == null || index < 0 || index >= inventorySpots.Count) { __result = null; return false; } __result = inventorySpots[index]; return false; } } [HarmonyPatch(typeof(Inventory), "IsSpotOccupied")] public class Inventory_IsSpotOccupied_Patch { [HarmonyPrefix] public static bool Prefix(Inventory __instance, int index, ref bool __result) { List<InventorySpot> inventorySpots = RadialMenuManager.GetInventorySpots(__instance); if (inventorySpots == null || index < 0 || index >= inventorySpots.Count) { __result = false; return false; } InventorySpot val = inventorySpots[index]; __result = (Object)(object)val != (Object)null && val.IsOccupied(); return false; } } [HarmonyPatch(typeof(Inventory), "GetBatteryStateFromInventorySpot")] public class Inventory_GetBatteryStateFromInventorySpot_Patch { [HarmonyPrefix] public static bool Prefix(Inventory __instance, int index, ref int __result) { List<InventorySpot> inventorySpots = RadialMenuManager.GetInventorySpots(__instance); if (inventorySpots == null || index < 0 || index >= inventorySpots.Count) { __result = 0; return false; } return true; } }