Please disclose if your mod was created primarily 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 EquipWheel v1.5.3
EquipWheel.dll
Decompiled a year agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using TMPro; using UnityEngine; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("EquipWheel")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("EquipWheel")] [assembly: AssemblyCopyright("Copyright © 2021")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("9299ddd5-a76a-423e-b5ce-c053e68f6abf")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.5", FrameworkDisplayName = "")] [assembly: AssemblyVersion("1.0.0.0")] namespace EquipWheel; public class EpicLootWrapper { private Assembly EpicLootAssembly; private Type ItemBackgroundHelper; private Type EpicLoot; private Type ItemDataExtensions; private MethodInfo CreateAndGetMagicItemBackgroundImage; private MethodInfo GetMagicItemBgSprite; private MethodInfo UseMagicBackground; private MethodInfo GetRarityColor; private MethodInfo GetDecoratedName; public static EpicLootWrapper instance; private EpicLootWrapper() { } public static EpicLootWrapper CreateInstance() { PluginInfo val; try { val = Chainloader.PluginInfos["randyknapp.mods.epicloot"]; } catch (KeyNotFoundException) { return null; } EpicLootWrapper epicLootWrapper = new EpicLootWrapper(); Assembly assembly = ((object)val.Instance).GetType().Assembly; if (assembly == null) { throw new Exception("Assembly for EpicLoot cannot be resolved"); } epicLootWrapper.EpicLootAssembly = assembly; Type[] exportedTypes = epicLootWrapper.EpicLootAssembly.GetExportedTypes(); foreach (Type type in exportedTypes) { if (type.FullName == "EpicLoot.ItemBackgroundHelper") { epicLootWrapper.ItemBackgroundHelper = type; } if (type.FullName == "EpicLoot.EpicLoot") { epicLootWrapper.EpicLoot = type; } if (type.FullName == "EpicLoot.ItemDataExtensions") { epicLootWrapper.ItemDataExtensions = type; } } if (epicLootWrapper.ItemBackgroundHelper == null) { throw new Exception("Type EpicLoot.ItemBackgroundHelper cannot be resolved"); } if (epicLootWrapper.EpicLoot == null) { throw new Exception("Type EpicLoot.EpicLoot cannot be resolved"); } if (epicLootWrapper.ItemDataExtensions == null) { throw new Exception("Type EpicLoot.ItemDataExtensions cannot be resolved"); } epicLootWrapper.CreateAndGetMagicItemBackgroundImage = epicLootWrapper.ItemBackgroundHelper.GetMethod("CreateAndGetMagicItemBackgroundImage", new Type[3] { typeof(GameObject), typeof(GameObject), typeof(bool) }); if (epicLootWrapper.CreateAndGetMagicItemBackgroundImage == null) { throw new Exception("Method CreateAndGetMagicItemBackgroundImage cannot be resolved"); } epicLootWrapper.GetMagicItemBgSprite = epicLootWrapper.EpicLoot.GetMethod("GetMagicItemBgSprite", new Type[0]); if (epicLootWrapper.GetMagicItemBgSprite == null) { throw new Exception("Method GetMagicItemBgSprite cannot be resolved"); } epicLootWrapper.UseMagicBackground = epicLootWrapper.ItemDataExtensions.GetMethod("UseMagicBackground", new Type[1] { typeof(ItemData) }); if (epicLootWrapper.UseMagicBackground == null) { throw new Exception("Method UseMagicBackground cannot be resolved"); } epicLootWrapper.GetRarityColor = epicLootWrapper.ItemDataExtensions.GetMethod("GetRarityColor", new Type[1] { typeof(ItemData) }); if (epicLootWrapper.GetRarityColor == null) { throw new Exception("Method GetRarityColor cannot be resolved"); } epicLootWrapper.GetDecoratedName = epicLootWrapper.ItemDataExtensions.GetMethod("GetDecoratedName", new Type[2] { typeof(ItemData), typeof(string) }); if (epicLootWrapper.GetDecoratedName == null) { throw new Exception("Method GetDecoratedName cannot be resolved"); } instance = epicLootWrapper; return epicLootWrapper; } public string GetItemName(ItemData item, Color color) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) return (string)GetDecoratedName.Invoke(null, new object[2] { item, "#" + ColorUtility.ToHtmlStringRGB(color) }); } public string GetItemName(ItemData item) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) return GetItemName(item, EquipWheel.GetHighlightColor); } public Color GetItemColor(ItemData item) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) return (Color)GetRarityColor.Invoke(null, new object[1] { item }); } public void ModifyElement(EquipWheelUI.ElementData element, ItemData item) { //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Expected O, but got Unknown //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Expected O, but got Unknown //IL_0109: Unknown result type (might be due to invalid IL or missing references) if (element == null || item == null) { return; } Transform val = element.m_go.transform.Find("magicItem"); if ((Object)(object)val != (Object)null) { Image component = ((Component)val).GetComponent<Image>(); if ((Object)(object)component != (Object)null) { ((Behaviour)component).enabled = false; } } Transform val2 = element.m_go.transform.Find("setItem"); if ((Object)(object)val2 != (Object)null) { Image component2 = ((Component)val2).GetComponent<Image>(); if ((Object)(object)component2 != (Object)null) { ((Behaviour)component2).enabled = false; } } Image val3 = (Image)CreateAndGetMagicItemBackgroundImage.Invoke(null, new object[3] { element.m_go, element.m_equiped.gameObject, true }); if ((bool)UseMagicBackground.Invoke(null, new object[1] { item })) { ((Behaviour)val3).enabled = true; val3.sprite = (Sprite)GetMagicItemBgSprite.Invoke(null, new object[0]); ((Graphic)val3).color = (Color)GetRarityColor.Invoke(null, new object[1] { item }); } Transform val4 = element.m_go.transform.Find("setItem"); if ((Object)(object)val4 != (Object)null && !string.IsNullOrEmpty(item.m_shared.m_setName)) { ((Behaviour)((Component)val4).GetComponent<Image>()).enabled = true; } } } [BepInPlugin("virtuacode.valheim.equipwheel", "Equip Wheel Mod", "1.5.3")] public class EquipWheel : BaseUnityPlugin, WheelManager.IWheel { private static Harmony harmony; public static ManualLogSource MyLogger = Logger.CreateLogSource(Assembly.GetExecutingAssembly().GetName().Name); public static ConfigEntry<KeyboardShortcut> Hotkey; public static ConfigEntry<WheelManager.DPadButton> HotkeyDPad; public static ConfigEntry<bool> UseSitButton; public static ConfigEntry<bool> EquipWhileRunning; public static ConfigEntry<bool> AutoEquipShield; public static ConfigEntry<bool> HideHotkeyBar; public static ConfigEntry<int> IgnoreJoyStickDuration; public static ConfigEntry<bool> UseRarityColoring; public static ConfigEntry<bool> TriggerOnRelease; public static ConfigEntry<bool> TriggerOnClick; public static ConfigEntry<bool> ToggleMenu; public static ConfigEntry<bool> ModEnabled; public static ConfigEntry<Color> HighlightColor; public static ConfigEntry<float> GuiScale; public static ConfigEntry<int> InventoryRow; public static ConfigEntry<bool> ItemFiltering; public static ConfigEntry<ItemType> ItemType1; public static ConfigEntry<ItemType> ItemType2; public static ConfigEntry<ItemType> ItemType3; public static ConfigEntry<ItemType> ItemType4; public static ConfigEntry<ItemType> ItemType5; public static ConfigEntry<ItemType> ItemType6; public static ConfigEntry<string> ItemRegex; public static ConfigEntry<string> ItemRegexIgnore; public static ConfigEntry<bool> ItemRegexCaseSensitive; private static EquipWheel instance; public static KeyCode replacedKey = (KeyCode)0; public static List<string> replacedButtons = new List<string>(); public static float JoyStickIgnoreTime = 0f; public static EquipGui Gui; public static Color GetHighlightColor => HighlightColor.Value; public static EquipWheel Instance => instance; public static bool CanOpenMenu { get { Player localPlayer = Player.m_localPlayer; if (!((Object)(object)localPlayer == (Object)null) && !((Character)localPlayer).IsDead() && !((Character)localPlayer).InCutscene() && !((Character)localPlayer).IsTeleporting() && TakeInput(look: true) && !InInventoryEtc() && !WheelManager.inventoryVisible) { if (IsUsingUseButton()) { return !WheelManager.pressedOnHovering; } return true; } return false; } } public static bool BestMatchPressed { get { if ((Object)(object)Instance == (Object)null) { return false; } return WheelManager.BestMatchPressed(Instance); } } public static bool BestMatchDown { get { if ((Object)(object)Instance == (Object)null) { return false; } return WheelManager.BestMatchDown(Instance); } } public static bool IsShortcutDown { get { //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) if (ZInput.IsGamepadActive()) { switch (HotkeyDPad.Value) { case WheelManager.DPadButton.None: if (UseSitButton.Value) { return ZInput.GetButtonDown("JoySit"); } return ZInput.GetButtonDown("JoyUse"); case WheelManager.DPadButton.Left: return ZInput.GetButtonDown("JoyHotbarLeft"); case WheelManager.DPadButton.Right: return ZInput.GetButtonDown("JoyHotbarRight"); case WheelManager.DPadButton.LeftOrRight: if (!ZInput.GetButtonDown("JoyHotbarRight")) { return ZInput.GetButtonDown("JoyHotbarLeft"); } return true; default: if (!ZInput.GetButtonDown("JoyHotbarRight")) { return ZInput.GetButtonDown("JoyHotbarLeft"); } return true; } } KeyboardShortcut value = Hotkey.Value; KeyCode mainKey = ((KeyboardShortcut)(ref value)).MainKey; KeyCode[] source = ((KeyboardShortcut)(ref value)).Modifiers.ToArray(); if (!Input.GetKeyDown(mainKey)) { return ((IEnumerable<KeyCode>)source).Any((Func<KeyCode, bool>)Input.GetKeyDown); } return true; } } public static bool IsShortcutUp { get { //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) if (ZInput.IsGamepadActive()) { switch (HotkeyDPad.Value) { case WheelManager.DPadButton.None: if (UseSitButton.Value) { return ZInput.GetButtonUp("JoySit"); } return ZInput.GetButtonUp("JoyUse"); case WheelManager.DPadButton.Left: return ZInput.GetButtonUp("JoyHotbarLeft"); case WheelManager.DPadButton.Right: return ZInput.GetButtonUp("JoyHotbarRight"); case WheelManager.DPadButton.LeftOrRight: if (!ZInput.GetButtonUp("JoyHotbarRight")) { return ZInput.GetButtonUp("JoyHotbarLeft"); } return true; default: if (!ZInput.GetButtonUp("JoyHotbarRight")) { return ZInput.GetButtonUp("JoyHotbarLeft"); } return true; } } KeyboardShortcut value = Hotkey.Value; KeyCode mainKey = ((KeyboardShortcut)(ref value)).MainKey; KeyCode[] source = ((KeyboardShortcut)(ref value)).Modifiers.ToArray(); if (!Input.GetKeyUp(mainKey)) { return ((IEnumerable<KeyCode>)source).Any((Func<KeyCode, bool>)Input.GetKeyUp); } return true; } } public static bool IsShortcutPressed { get { //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) if (ZInput.IsGamepadActive()) { switch (HotkeyDPad.Value) { case WheelManager.DPadButton.None: if (UseSitButton.Value) { return ZInput.GetButton("JoySit"); } return ZInput.GetButton("JoyUse"); case WheelManager.DPadButton.Left: return ZInput.GetButton("JoyHotbarLeft"); case WheelManager.DPadButton.Right: return ZInput.GetButton("JoyHotbarRight"); case WheelManager.DPadButton.LeftOrRight: if (!ZInput.GetButton("JoyHotbarRight")) { return ZInput.GetButton("JoyHotbarLeft"); } return true; default: if (!ZInput.GetButton("JoyHotbarRight")) { return ZInput.GetButton("JoyHotbarLeft"); } return true; } } KeyboardShortcut value = Hotkey.Value; KeyCode mainKey = ((KeyboardShortcut)(ref value)).MainKey; KeyCode[] source = ((KeyboardShortcut)(ref value)).Modifiers.ToArray(); if (!Input.GetKey(mainKey)) { return ((IEnumerable<KeyCode>)source).Any((Func<KeyCode, bool>)Input.GetKey); } return true; } } public static void Log(string msg) { ManualLogSource myLogger = MyLogger; if (myLogger != null) { myLogger.LogInfo((object)msg); } } public static void LogErr(string msg) { ManualLogSource myLogger = MyLogger; if (myLogger != null) { myLogger.LogError((object)msg); } } public static void LogWarn(string msg) { ManualLogSource myLogger = MyLogger; if (myLogger != null) { myLogger.LogWarning((object)msg); } } private static bool TakeInput(bool look = false) { if (!GameCamera.InFreeFly() && (!Object.op_Implicit((Object)(object)Chat.instance) || !Chat.instance.HasFocus()) && !Menu.IsVisible() && !Console.IsVisible() && !TextInput.IsVisible() && !Minimap.InTextInput() && (!ZInput.IsGamepadActive() || !Minimap.IsOpen()) && (!ZInput.IsGamepadActive() || !StoreGui.IsVisible()) && (!ZInput.IsGamepadActive() || !Hud.IsPieceSelectionVisible()) && (!PlayerCustomizaton.IsBarberGuiVisible() || look)) { if (PlayerCustomizaton.BarberBlocksLook()) { return !look; } return true; } return false; } private static bool InInventoryEtc() { if (!Minimap.IsOpen() && !StoreGui.IsVisible()) { return Hud.IsPieceSelectionVisible(); } return true; } public static bool IsDedicated() { MethodInfo method = typeof(ZNet).GetMethod("IsDedicated", BindingFlags.Instance | BindingFlags.Public); return ((Func<ZNet, bool>)Delegate.CreateDelegate(typeof(Func<ZNet, bool>), method))(null); } public static bool IsUsingUseButton() { if (ZInput.IsGamepadActive() && HotkeyDPad.Value == WheelManager.DPadButton.None) { return !UseSitButton.Value; } return false; } public void Awake() { //IL_003b: 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_01fa: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Expected O, but got Unknown //IL_022c: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Expected O, but got Unknown instance = this; ModEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "ModEnabled", true, "Enable mod when value is true"); Hotkey = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("Input", "Hotkey", KeyboardShortcut.Deserialize("G"), "Hotkey for opening equip wheel menu"); HotkeyDPad = ((BaseUnityPlugin)this).Config.Bind<WheelManager.DPadButton>("Input", "HotkeyDPad", WheelManager.DPadButton.None, "Hotkey on the D-Pad (None, Left, Right or LeftOrRight)"); UseSitButton = ((BaseUnityPlugin)this).Config.Bind<bool>("Input", "UseSitButton", false, "When enabled use the sit button as hotkey (HotkeyDPad has to be set to None)"); TriggerOnRelease = ((BaseUnityPlugin)this).Config.Bind<bool>("Input", "TriggerOnRelease", true, "Releasing the Hotkey will equip/use the selected item"); TriggerOnClick = ((BaseUnityPlugin)this).Config.Bind<bool>("Input", "TriggerOnClick", false, "Click with left mouse button will equip/use the selected item"); ToggleMenu = ((BaseUnityPlugin)this).Config.Bind<bool>("Input", "ToggleMenu", false, "When enabled the equip wheel will toggle between hidden/visible when the hotkey was pressed"); HighlightColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Appereance", "HighlightColor", new Color(0.414f, 0.734f, 1f), "Color of the highlighted selection"); GuiScale = ((BaseUnityPlugin)this).Config.Bind<float>("Appereance", "GuiScale", 0.5f, "Scale factor of the user interface"); HideHotkeyBar = ((BaseUnityPlugin)this).Config.Bind<bool>("Appereance", "HideHotkeyBar", false, "Hides the top-left Hotkey Bar"); EquipWhileRunning = ((BaseUnityPlugin)this).Config.Bind<bool>("Misc", "EquipWhileRunning", true, "Allow to equip weapons while running"); AutoEquipShield = ((BaseUnityPlugin)this).Config.Bind<bool>("Misc", "AutoEquipShield", true, "Enable auto equip of shield when one-handed weapon was equipped"); HideHotkeyBar.SettingChanged += delegate { if (!((Object)(object)Hud.instance == (Object)null)) { HotkeyBar component = ((Component)((Component)Hud.instance).transform.Find("hudroot/HotKeyBar")).GetComponent<HotkeyBar>(); if (!((Object)(object)component == (Object)null)) { ((Component)component).gameObject.SetActive(!HideHotkeyBar.Value); } } }; IgnoreJoyStickDuration = ((BaseUnityPlugin)this).Config.Bind<int>("Input", "IgnoreJoyStickDuration", 500, new ConfigDescription("Duration in milliseconds for ignoring left joystick input after button release", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 2000), new object[0])); InventoryRow = ((BaseUnityPlugin)this).Config.Bind<int>("Misc", "InventoryRow", 1, new ConfigDescription("Row of the inventory that should be used for the equip wheel", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 4), new object[0])); ItemFiltering = ((BaseUnityPlugin)this).Config.Bind<bool>("Misc", "ItemFiltering", false, "Will scan the whole inventory for items of the specified item types and Regex and show them in the equip wheel"); ItemType1 = ((BaseUnityPlugin)this).Config.Bind<ItemType>("Misc", "ItemType1", (ItemType)0, "Item type used for filtering items"); ItemType2 = ((BaseUnityPlugin)this).Config.Bind<ItemType>("Misc", "ItemType2", (ItemType)0, "Item type used for filtering items"); ItemType3 = ((BaseUnityPlugin)this).Config.Bind<ItemType>("Misc", "ItemType3", (ItemType)0, "Item type used for filtering items"); ItemType4 = ((BaseUnityPlugin)this).Config.Bind<ItemType>("Misc", "ItemType4", (ItemType)0, "Item type used for filtering items"); ItemType5 = ((BaseUnityPlugin)this).Config.Bind<ItemType>("Misc", "ItemType5", (ItemType)0, "Item type used for filtering items"); ItemType6 = ((BaseUnityPlugin)this).Config.Bind<ItemType>("Misc", "ItemType6", (ItemType)0, "Item type used for filtering items"); ItemRegex = ((BaseUnityPlugin)this).Config.Bind<string>("Misc", "ItemRegex", "", "Regex used for filtering items"); ItemRegexIgnore = ((BaseUnityPlugin)this).Config.Bind<string>("Misc", "ItemRegexIgnore", "", "Regex used for ignoring items"); ItemRegexCaseSensitive = ((BaseUnityPlugin)this).Config.Bind<bool>("Misc", "ItemRegexCaseSensitive", false, "When enabled the Regex will be case-sensitive"); if (!ModEnabled.Value) { LogWarn("Mod not loaded because it was disabled via config."); return; } if (IsDedicated()) { LogWarn("Mod not loaded because game instance is a dedicated server."); return; } harmony = Harmony.CreateAndPatchAll(typeof(Patcher), (string)null); WheelManager.AddWheel(this); try { EpicLootWrapper.CreateInstance(); UseRarityColoring = ((BaseUnityPlugin)this).Config.Bind<bool>("Appereance", "UseRarityColoring", true, "When enabled, the highlight color will be set to the rarity color of the selected item."); Log("Epicloot Mod installed. Applied compatibility patch."); } catch (Exception ex) { LogErr(ex.Message); LogErr("Failed to initialize EpicLootWrapper. Probably a compatibility issue. Please inform the mod creator of EquipWheel about this issue! (https://www.nexusmods.com/valheim/mods/536)"); } Log(((object)this).GetType().Namespace + " Loaded!"); } private void OnDestroy() { WheelManager.RemoveWheel(this); Harmony obj = harmony; if (obj != null) { obj.UnpatchAll((string)null); } } public static void TryHideHotkeyBar() { HotkeyBar component = ((Component)((Component)Hud.instance).transform.Find("hudroot/HotKeyBar")).GetComponent<HotkeyBar>(); if (!((Object)(object)component == (Object)null)) { ((Component)component).gameObject.SetActive(!HideHotkeyBar.Value); } } public static void ParseNames(string value, ref string[] arr) { if ((Object)(object)ObjectDB.instance == (Object)null) { return; } string[] array = ParseTokens(value); List<string> list = new List<string>(); string[] array2 = array; foreach (string text in array2) { GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(text); if ((Object)(object)itemPrefab != (Object)null) { ItemDrop component = itemPrefab.GetComponent<ItemDrop>(); list.Add(component.m_itemData.m_shared.m_name); } } arr = list.Distinct().ToArray(); } public static string[] ParseTokens(string value) { char[] separator = new char[5] { ' ', ',', '.', ':', '\t' }; return value.Split(separator, StringSplitOptions.RemoveEmptyEntries); } public int GetKeyCount(bool pressed = false) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //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_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0032: 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) int num = 0; KeyboardShortcut value = Hotkey.Value; KeyCode mainKey = ((KeyboardShortcut)(ref value)).MainKey; KeyCode[] source = ((KeyboardShortcut)(ref value)).Modifiers.ToArray(); if ((int)mainKey == 0) { return num; } if (pressed ? Input.GetKey(mainKey) : Input.GetKeyDown(mainKey)) { num++; } return num + ((IEnumerable<KeyCode>)source).Count((Func<KeyCode, bool>)Input.GetKey); } public int GetKeyCountDown() { return GetKeyCount(); } public int GetKeyCountPressed() { return GetKeyCount(pressed: true); } public bool IsVisible() { return EquipGui.visible; } public void Hide() { if (!((Object)(object)Gui == (Object)null)) { Gui.Hide(); } } public string GetName() { return Assembly.GetExecutingAssembly().GetName().Name; } float WheelManager.IWheel.JoyStickIgnoreTime() { return JoyStickIgnoreTime; } } public class EquipGui : MonoBehaviour { private EquipWheelUI ui; public AssetBundle assets; public static bool visible; public int toggleVisible; public static bool toggleDownWasPressed; private void Awake() { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) LoadAssets(); GameObject obj = assets.LoadAsset<GameObject>("assets/selectionwheel/selectionwheel.prefab"); RectTransform val = ((Component)this).gameObject.AddComponent<RectTransform>(); GameObject val2 = Object.Instantiate<GameObject>(obj, new Vector3(0f, 0f, 0f), ((Component)this).transform.rotation, (Transform)(object)val); ui = val2.AddComponent<EquipWheelUI>(); val2.SetActive(false); visible = false; assets.Unload(false); } private void Start() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) RectTransform component = ((Component)this).gameObject.GetComponent<RectTransform>(); component.offsetMin = Vector2.zero; component.offsetMax = Vector2.zero; component.anchorMax = new Vector2(1f, 1f); component.anchorMin = new Vector2(0f, 0f); component.anchoredPosition = new Vector2(0f, 0f); if (!((Object)(object)Hud.instance == (Object)null)) { EquipWheel.TryHideHotkeyBar(); } } private void LoadAssets() { Stream manifestResourceStream = Assembly.GetAssembly(typeof(EquipWheel)).GetManifestResourceStream("EquipWheel.res.selectionwheel"); using MemoryStream memoryStream = new MemoryStream(); manifestResourceStream.CopyTo(memoryStream); assets = AssetBundle.LoadFromMemory(memoryStream.ToArray()); } public void Hide() { ((Component)ui).gameObject.SetActive(false); visible = false; toggleVisible = 0; } private void Update() { if (EquipWheel.ToggleMenu.Value) { HandleToggleEnabled(); } else { HandleToggleDisabled(); } } private void ReduceJoyStickIgnoreTime() { if (EquipWheel.JoyStickIgnoreTime > 0f) { EquipWheel.JoyStickIgnoreTime -= Time.deltaTime; } } private void HandlePressedHovering() { if (WheelManager.pressedOnHovering && ZInput.GetButtonUp("JoyUse")) { WheelManager.pressedOnHovering = false; WheelManager.hoverTextVisible = false; } else if (EquipWheel.IsShortcutDown && EquipWheel.IsUsingUseButton()) { WheelManager.pressedOnHovering = WheelManager.pressedOnHovering || WheelManager.hoverTextVisible; } } private void HandleToggleEnabled() { ReduceJoyStickIgnoreTime(); HandlePressedHovering(); if (!EquipWheel.CanOpenMenu) { Hide(); return; } if (toggleDownWasPressed) { if (EquipWheel.IsShortcutUp) { Hide(); toggleDownWasPressed = false; } return; } if (EquipWheel.IsShortcutDown && toggleVisible < 2) { toggleVisible++; } bool flag = EquipWheel.IsShortcutDown && toggleVisible == 2; if (EquipWheel.TriggerOnRelease.Value && flag && WheelManager.IsActive(EquipWheel.Instance)) { UseCurrentItem(); toggleDownWasPressed = true; } else if (toggleVisible > 0 && !flag) { if (!visible) { ((Component)ui).gameObject.SetActive(true); visible = true; WheelManager.Activate(EquipWheel.Instance); } if (EquipWheel.TriggerOnClick.Value && (Input.GetMouseButtonDown(0) || Input.GetKeyDown((KeyCode)330))) { UseCurrentItem(flash: true); } } else { Hide(); } } private void UseCurrentItem(bool flash = false) { if (ui.CurrentItem != null) { if (flash) { ui.Flash(); } ((Humanoid)Player.m_localPlayer).UseItem((Inventory)null, ui.CurrentItem, false); EquipWheel.JoyStickIgnoreTime = (float)EquipWheel.IgnoreJoyStickDuration.Value / 1000f; } } private void HandleToggleDisabled() { ReduceJoyStickIgnoreTime(); HandlePressedHovering(); if (!EquipWheel.CanOpenMenu) { Hide(); } else if (EquipWheel.TriggerOnRelease.Value && EquipWheel.IsShortcutUp) { UseCurrentItem(); Hide(); } else if ((EquipWheel.IsShortcutPressed && ZInput.IsGamepadActive()) || (EquipWheel.IsShortcutPressed && (EquipWheel.BestMatchPressed || EquipWheel.BestMatchDown))) { if (!visible) { ((Component)ui).gameObject.SetActive(true); visible = true; WheelManager.Activate(EquipWheel.Instance); } if (EquipWheel.TriggerOnClick.Value && (Input.GetMouseButtonDown(0) || Input.GetKeyDown((KeyCode)330))) { UseCurrentItem(flash: true); } } else { Hide(); } } } public class EquipWheelUI : MonoBehaviour { public class ElementData { public bool m_used; public GameObject m_go; public Image m_icon; public GuiBar m_durability; public TextMeshProUGUI m_amount; public GameObject m_equiped; public GameObject m_queued; public GameObject m_selection; } public readonly float ANGLE_STEP = 45f; public readonly float ITEM_DISTANCE = 295f; public readonly float ITEM_SCALE = 2f; public readonly float INNER_DIAMETER = 340f; public readonly float LENGTH_THRESHOLD = 0.1f; private GameObject cursor; private Text text; private GameObject highlight; private readonly ItemData[] items = (ItemData[])(object)new ItemData[8]; private HotkeyBar hotKeyBar; private Transform itemsRoot; private bool addedListener; private readonly List<ElementData> m_elements = new List<ElementData>(); private GameObject m_elementPrefab; private int previous = -1; public int Current { get { if ((!ZInput.IsGamepadActive() && MouseInCenter) || JoyStickInCenter || (ZInput.IsGamepadActive() && Lenght < (double)LENGTH_THRESHOLD)) { return -1; } int num = Mod((int)Mathf.Round((0f - Angle) / ANGLE_STEP), 8); if (num >= items.Length) { return -1; } return num; } } public bool JoyStickInCenter { get { if (EquipWheel.HotkeyDPad.Value == WheelManager.DPadButton.None) { float joyLeftStickX = ZInput.GetJoyLeftStickX(false); float joyLeftStickY = ZInput.GetJoyLeftStickY(true); if (ZInput.IsGamepadActive() && joyLeftStickX == 0f) { return joyLeftStickY == 0f; } return false; } float joyRightStickX = ZInput.GetJoyRightStickX(true); float joyRightStickY = ZInput.GetJoyRightStickY(true); if (ZInput.IsGamepadActive() && joyRightStickX == 0f) { return joyRightStickY == 0f; } return false; } } public ItemData CurrentItem { get { if (Current < 0) { return null; } return items[Current]; } } public bool MouseInCenter { get { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) float num = INNER_DIAMETER / 2f * ((Component)this).gameObject.transform.lossyScale.x; Vector3 val = Input.mousePosition - cursor.transform.position; return ((Vector3)(ref val)).magnitude <= num; } } public double Lenght { get { if (EquipWheel.HotkeyDPad.Value == WheelManager.DPadButton.None) { float joyLeftStickX = ZInput.GetJoyLeftStickX(false); float joyLeftStickY = ZInput.GetJoyLeftStickY(true); return Math.Sqrt(Math.Pow(joyLeftStickX, 2.0) + Math.Pow(joyLeftStickY, 2.0)); } float joyRightStickX = ZInput.GetJoyRightStickX(true); float joyRightStickY = ZInput.GetJoyRightStickY(true); return Math.Sqrt(Math.Pow(joyRightStickX, 2.0) + Math.Pow(joyRightStickY, 2.0)); } } public float Angle { get { //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_008c: 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_0096: 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_009d: Unknown result type (might be due to invalid IL or missing references) if (ZInput.IsGamepadActive()) { if (EquipWheel.HotkeyDPad.Value == WheelManager.DPadButton.None) { float joyLeftStickX = ZInput.GetJoyLeftStickX(false); float num = 0f - ZInput.GetJoyLeftStickY(true); if (joyLeftStickX != 0f || num != 0f) { return Mathf.Atan2(num, joyLeftStickX) * 57.29578f - 90f; } } else { float joyRightStickX = ZInput.GetJoyRightStickX(true); float num2 = 0f - ZInput.GetJoyRightStickY(true); if (joyRightStickX != 0f || num2 != 0f) { return Mathf.Atan2(num2, joyRightStickX) * 57.29578f - 90f; } } } Vector3 val = Input.mousePosition - cursor.transform.position; return Mathf.Atan2(val.y, val.x) * 57.29578f - 90f; } } public IEnumerator FlashCoroutine(float aTime) { Color color = EquipWheel.GetHighlightColor; for (float t = 0f; t < 1f; t += Time.deltaTime / aTime) { ((Graphic)highlight.GetComponent<Image>()).color = Color.Lerp(Color.white, color, t); yield return null; } } private int Mod(int a, int b) { return (a % b + b) % b; } public void Flash() { ((MonoBehaviour)this).StartCoroutine(FlashCoroutine(0.4f)); } private void Awake() { //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Expected O, but got Unknown //IL_00c9: 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_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Unknown result type (might be due to invalid IL or missing references) cursor = ((Component)((Component)this).transform.Find("Cursor")).gameObject; highlight = ((Component)((Component)this).transform.Find("Highlight")).gameObject; hotKeyBar = ((Component)((Component)Hud.instance).transform.Find("hudroot/HotKeyBar")).gameObject.GetComponent<HotkeyBar>(); m_elementPrefab = hotKeyBar.m_elementPrefab; itemsRoot = ((Component)this).transform.Find("Items"); ((Graphic)highlight.GetComponent<Image>()).material.SetFloat("_Degree", ANGLE_STEP); GameObject val = new GameObject("Text"); RectTransform obj = val.AddComponent<RectTransform>(); ((Transform)obj).SetParent(((Component)this).transform); obj.sizeDelta = new Vector2(1000f, 100f); obj.anchoredPosition = new Vector2(0f, 450f); text = val.AddComponent<Text>(); ((Graphic)text).color = EquipWheel.GetHighlightColor; EquipWheel.HighlightColor.SettingChanged += delegate { //IL_0006: Unknown result type (might be due to invalid IL or missing references) ((Graphic)text).color = EquipWheel.GetHighlightColor; }; text.alignment = (TextAnchor)1; text.fontSize = 60; text.supportRichText = true; Font[] array = Resources.FindObjectsOfTypeAll<Font>(); foreach (Font val2 in array) { if (((Object)val2).name == "AveriaSerifLibre-Bold") { text.font = val2; break; } } Outline obj2 = val.AddComponent<Outline>(); ((Shadow)obj2).effectDistance = new Vector2(1f, -1f); ((Shadow)obj2).effectColor = Color.black; val.SetActive(false); } private void Start() { if (!addedListener) { Inventory inventory = ((Humanoid)Player.m_localPlayer).GetInventory(); inventory.m_onChanged = (Action)Delegate.Combine(inventory.m_onChanged, new Action(OnInventoryChanged)); addedListener = true; } } public void OnInventoryChanged() { if (EquipGui.visible) { UpdateItems(); UpdateIcons(Player.m_localPlayer, forceUpdate: true); } } private void UpdateItems() { //IL_0200: Unknown result type (might be due to invalid IL or missing references) //IL_0206: Expected I4, but got Unknown //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_0213: Expected I4, but got Unknown //IL_021a: Unknown result type (might be due to invalid IL or missing references) //IL_0220: Expected I4, but got Unknown //IL_0227: Unknown result type (might be due to invalid IL or missing references) //IL_022d: Expected I4, but got Unknown //IL_0234: Unknown result type (might be due to invalid IL or missing references) //IL_023a: Expected I4, but got Unknown //IL_0241: Unknown result type (might be due to invalid IL or missing references) //IL_0247: Expected I4, but got Unknown //IL_0173: 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_0181: 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_018f: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_019d: Unknown result type (might be due to invalid IL or missing references) //IL_0098: 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_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: 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_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: 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) if ((Object)(object)Player.m_localPlayer == (Object)null) { return; } Inventory inventory = ((Humanoid)Player.m_localPlayer).GetInventory(); if (inventory == null) { return; } if (EquipWheel.ItemFiltering.Value) { List<ItemData> list = new List<ItemData>(); List<ItemData> list2 = new List<ItemData>(); foreach (ItemData allItem in inventory.GetAllItems()) { if (EquipWheel.ItemRegexIgnore.Value.Length > 0) { Regex regex = new Regex(EquipWheel.ItemRegexIgnore.Value, (!EquipWheel.ItemRegexCaseSensitive.Value) ? RegexOptions.IgnoreCase : RegexOptions.None); string input; if (EpicLootWrapper.instance != null) { Color itemColor = EpicLootWrapper.instance.GetItemColor(allItem); input = Localization.instance.Localize(EpicLootWrapper.instance.GetItemName(allItem, itemColor)); } else { input = Localization.instance.Localize(allItem.m_shared.m_name); } if (regex.IsMatch(input)) { continue; } } if (EquipWheel.ItemRegex.Value.Length > 0) { Regex regex2 = new Regex(EquipWheel.ItemRegex.Value, (!EquipWheel.ItemRegexCaseSensitive.Value) ? RegexOptions.IgnoreCase : RegexOptions.None); string input2; if (EpicLootWrapper.instance != null) { Color itemColor2 = EpicLootWrapper.instance.GetItemColor(allItem); input2 = Localization.instance.Localize(EpicLootWrapper.instance.GetItemName(allItem, itemColor2)); } else { input2 = Localization.instance.Localize(allItem.m_shared.m_name); } if (regex2.IsMatch(input2)) { list.Add(allItem); continue; } } ItemType itemType = allItem.m_shared.m_itemType; if (itemType == EquipWheel.ItemType1.Value || itemType == EquipWheel.ItemType2.Value || itemType == EquipWheel.ItemType3.Value || itemType == EquipWheel.ItemType4.Value || itemType == EquipWheel.ItemType5.Value || itemType == EquipWheel.ItemType6.Value) { list2.Add(allItem); } } ItemType[] types = (ItemType[])(object)new ItemType[6] { (ItemType)(int)EquipWheel.ItemType1.Value, (ItemType)(int)EquipWheel.ItemType2.Value, (ItemType)(int)EquipWheel.ItemType3.Value, (ItemType)(int)EquipWheel.ItemType4.Value, (ItemType)(int)EquipWheel.ItemType5.Value, (ItemType)(int)EquipWheel.ItemType6.Value }; list2.Sort((ItemData a, ItemData b) => Array.IndexOf(types, a.m_shared.m_itemType).CompareTo(Array.IndexOf(types, b.m_shared.m_itemType))); for (int i = 0; i < 8; i++) { items[i] = null; if (list.Count > i) { items[i] = list[i]; } else if (list2.Count > i - list.Count) { items[i] = list2[i - list.Count]; } } return; } for (int j = 0; j < 8; j++) { items[j] = null; ItemData itemAt = inventory.GetItemAt(j, EquipWheel.InventoryRow.Value - 1); if (itemAt != null) { items[j] = itemAt; } } } private void OnEnable() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) ((Graphic)highlight.GetComponent<Image>()).color = EquipWheel.GetHighlightColor; float value = EquipWheel.GuiScale.Value; ((Transform)((Component)this).GetComponent<RectTransform>()).localScale = new Vector3(value, value, value); EquipWheel.JoyStickIgnoreTime = 0f; UpdateItems(); UpdateIcons(Player.m_localPlayer, forceUpdate: true); Update(); } private void OnDisable() { //IL_0036: Unknown result type (might be due to invalid IL or missing references) highlight.SetActive(false); Image[] componentsInChildren = cursor.GetComponentsInChildren<Image>(true); foreach (Image val in componentsInChildren) { ((Graphic)val).color = new Color(0f, 0f, 0f, 0.5f); if (((Object)((Component)val).gameObject).name == "Image") { ((Component)val).gameObject.SetActive(false); } } } private void Update() { //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006b: 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_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) //IL_0237: 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_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) if (Current != previous) { if (CurrentItem != null) { InventoryGui.instance.m_moveItemEffects.Create(((Component)this).transform.position, Quaternion.identity, (Transform)null, 1f, -1); ((Component)text).gameObject.SetActive(true); if (EpicLootWrapper.instance != null) { Color color = EpicLootWrapper.instance.GetItemColor(CurrentItem); if (((Color)(ref color)).Equals(Color.white) || !EquipWheel.UseRarityColoring.Value) { color = EquipWheel.GetHighlightColor; } text.text = Localization.instance.Localize(EpicLootWrapper.instance.GetItemName(CurrentItem, color)); } else { text.text = Localization.instance.Localize(CurrentItem.m_shared.m_name); } } else { ((Component)text).gameObject.SetActive(false); } previous = Current; } highlight.SetActive(CurrentItem != null); Color color2 = (Color)((CurrentItem == null) ? new Color(0f, 0f, 0f, 0.5f) : EquipWheel.GetHighlightColor); if (CurrentItem != null && EpicLootWrapper.instance != null) { Color itemColor = EpicLootWrapper.instance.GetItemColor(CurrentItem); if (!((Color)(ref itemColor)).Equals(Color.white) && EquipWheel.UseRarityColoring.Value) { color2 = itemColor; ((Graphic)highlight.GetComponent<Image>()).color = color2; } else { ((Graphic)highlight.GetComponent<Image>()).color = EquipWheel.GetHighlightColor; } } Image[] componentsInChildren = cursor.GetComponentsInChildren<Image>(true); foreach (Image val in componentsInChildren) { ((Graphic)val).color = color2; if (((Object)((Component)val).gameObject).name == "Image") { ((Component)val).gameObject.SetActive(CurrentItem != null); } } cursor.transform.rotation = Quaternion.AngleAxis(Angle, Vector3.forward); float num = (float)Current * ANGLE_STEP; highlight.transform.rotation = Quaternion.AngleAxis(0f - num, Vector3.forward); UpdateIcons(Player.m_localPlayer); } private int CountItems(ItemData[] items) { int num = 0; for (int i = 0; i < items.Length; i++) { if (items[i] != null) { num++; } } return num; } private void UpdateIcons(Player player, bool forceUpdate = false) { //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0161: 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_03f4: Unknown result type (might be due to invalid IL or missing references) //IL_03ed: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)player) || ((Character)player).IsDead()) { foreach (ElementData element in m_elements) { Object.Destroy((Object)(object)element.m_go); } m_elements.Clear(); return; } if (m_elements.Count != CountItems(items) || forceUpdate) { foreach (ElementData element2 in m_elements) { Object.Destroy((Object)(object)element2.m_go); } m_elements.Clear(); for (int i = 0; i < items.Length; i++) { if (items[i] != null) { ElementData elementData = new ElementData(); elementData.m_go = Object.Instantiate<GameObject>(m_elementPrefab, itemsRoot); elementData.m_go.GetComponent<RectTransform>().pivot = new Vector2(0.5f, 0.5f); float num = Mathf.Sin((float)i * ANGLE_STEP * ((float)Math.PI / 180f)) * ITEM_DISTANCE; float num2 = Mathf.Cos((float)i * ANGLE_STEP * ((float)Math.PI / 180f)) * ITEM_DISTANCE; elementData.m_go.transform.localScale = new Vector3(ITEM_SCALE, ITEM_SCALE, ITEM_SCALE); elementData.m_go.transform.localPosition = new Vector3(num, num2, 0f); ((TMP_Text)((Component)elementData.m_go.transform.Find("binding")).GetComponent<TextMeshProUGUI>()).text = (i + 1).ToString(); elementData.m_icon = ((Component)((Component)elementData.m_go.transform).transform.Find("icon")).GetComponent<Image>(); elementData.m_durability = ((Component)elementData.m_go.transform.Find("durability")).GetComponent<GuiBar>(); elementData.m_amount = ((Component)elementData.m_go.transform.Find("amount")).GetComponent<TextMeshProUGUI>(); elementData.m_equiped = ((Component)elementData.m_go.transform.Find("equiped")).gameObject; elementData.m_queued = ((Component)elementData.m_go.transform.Find("queued")).gameObject; elementData.m_selection = ((Component)elementData.m_go.transform.Find("selected")).gameObject; elementData.m_selection.SetActive(false); if (EquipWheel.InventoryRow.Value > 1 || EquipWheel.ItemFiltering.Value) { ((Behaviour)((Component)elementData.m_go.transform.Find("binding")).GetComponent<TextMeshProUGUI>()).enabled = false; } m_elements.Add(elementData); } } } foreach (ElementData element3 in m_elements) { element3.m_used = false; } int num3 = 0; for (int j = 0; j < items.Length; j++) { if (items[j] == null) { continue; } ItemData val = items[j]; ElementData elementData2 = m_elements[num3]; elementData2.m_used = true; ((Component)elementData2.m_icon).gameObject.SetActive(true); elementData2.m_icon.sprite = val.GetIcon(); ((Component)elementData2.m_durability).gameObject.SetActive(val.m_shared.m_useDurability); if (val.m_shared.m_useDurability) { if (val.m_durability <= 0f) { elementData2.m_durability.SetValue(1f); elementData2.m_durability.SetColor((Color)((Mathf.Sin(Time.time * 10f) > 0f) ? Color.red : new Color(0f, 0f, 0f, 0f))); } else { elementData2.m_durability.SetValue(val.GetDurabilityPercentage()); elementData2.m_durability.ResetColor(); } } elementData2.m_equiped.SetActive(val.m_equipped); elementData2.m_queued.SetActive(player.IsEquipActionQueued(val)); if (val.m_shared.m_maxStackSize > 1) { ((Component)elementData2.m_amount).gameObject.SetActive(true); ((TMP_Text)elementData2.m_amount).text = val.m_stack + "/" + val.m_shared.m_maxStackSize; } else { ((Component)elementData2.m_amount).gameObject.SetActive(false); } if (EpicLootWrapper.instance != null) { EpicLootWrapper.instance.ModifyElement(elementData2, val); } num3++; } for (int k = 0; k < m_elements.Count; k++) { ElementData elementData3 = m_elements[k]; if (!elementData3.m_used) { ((Component)elementData3.m_icon).gameObject.SetActive(false); ((Component)elementData3.m_durability).gameObject.SetActive(false); elementData3.m_equiped.SetActive(false); elementData3.m_queued.SetActive(false); ((Component)elementData3.m_amount).gameObject.SetActive(false); } } } } public class Patcher { public static readonly KeyCode[] NUMBERS; [HarmonyPatch(typeof(InventoryGui), "IsVisible")] [HarmonyPostfix] public static void IsVisible_Postfix(ref bool __result) { WheelManager.inventoryVisible = __result; __result = __result || WheelManager.AnyVisible; } [HarmonyPatch(typeof(Hud), "UpdateCrosshair")] [HarmonyPostfix] public static void IsVisible_Postfix(Hud __instance, Player player, float bowDrawPercentage) { GameObject hoverObject = ((Humanoid)player).GetHoverObject(); if ((Object.op_Implicit((Object)(object)hoverObject) ? hoverObject.GetComponentInParent<Interactable>() : null) != null && !TextViewer.instance.IsVisible()) { WheelManager.hoverTextVisible = true; } else { WheelManager.hoverTextVisible = false; } } [HarmonyPatch(typeof(Humanoid), "UseItem")] [HarmonyPostfix] public static void UseItem_Postfix(Humanoid __instance, Inventory inventory, ItemData item, bool fromInventoryGui) { //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Invalid comparison between Unknown and I4 //IL_0068: 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_0089: Invalid comparison between Unknown and I4 //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Invalid comparison between Unknown and I4 if (!EquipWheel.AutoEquipShield.Value || ((object)__instance).GetType() != typeof(Player) || fromInventoryGui) { return; } ItemData val = (ItemData)typeof(Humanoid).GetMethod("GetLeftItem", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(__instance, new object[0]); if ((val != null && (int)val.m_shared.m_itemType == 5) || !((Player)__instance).IsEquipActionQueued(item) || item.m_equipped || (int)item.m_shared.m_itemType != 3) { return; } List<ItemData> allItems = __instance.GetInventory().GetAllItems(); int num = -1; int num2 = -1; ItemData val2 = null; foreach (ItemData item2 in allItems) { if (item2 != null && (int)item2.m_shared.m_itemType == 5 && (val2 == null || item2.m_gridPos.y < num2 || (item2.m_gridPos.y == num2 && item2.m_gridPos.x < num))) { val2 = item2; num = val2.m_gridPos.x; num2 = val2.m_gridPos.y; } } if (val2 != null) { __instance.UseItem((Inventory)null, val2, false); } } [HarmonyPatch(typeof(ZInput), "GetJoyRightStickX")] [HarmonyPostfix] public static void GetJoyRightStickX_Postfix(ref float __result) { if (WheelManager.GetJoyStickIgnoreTime() > 0f) { __result = 0f; } } [HarmonyPatch(typeof(ZInput), "GetJoyRightStickY")] [HarmonyPostfix] public static void GetJoyRightStickY_Postfix(ref float __result) { if (WheelManager.GetJoyStickIgnoreTime() > 0f) { __result = 0f; } } [HarmonyPatch(typeof(ZInput), "GetJoyLeftStickX")] [HarmonyPostfix] public static void GetJoyLeftStickX_Postfix(ref float __result) { if (WheelManager.GetJoyStickIgnoreTime() > 0f) { __result = 0f; } } [HarmonyPatch(typeof(ZInput), "GetJoyLeftStickY")] [HarmonyPostfix] public static void GetJoyLeftStickY_Postfix(ref float __result) { if (WheelManager.GetJoyStickIgnoreTime() > 0f) { __result = 0f; } } [HarmonyPatch(typeof(HotkeyBar), "Update")] [HarmonyPostfix] public static void Update_Postfix(HotkeyBar __instance) { if (EquipWheel.HideHotkeyBar.Value) { ((Component)__instance).gameObject.SetActive(false); } } [HarmonyPatch(typeof(Player), "ClearActionQueue")] [HarmonyPrefix] public static bool Prefix(Player __instance) { if ((bool)typeof(Player).GetField("m_run", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(__instance)) { return !EquipWheel.EquipWhileRunning.Value; } return true; } [HarmonyPatch(typeof(Player), "Awake")] [HarmonyPostfix] public static void Awake_Postfix() { //IL_003b: 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) string text = "EquipGui (" + Assembly.GetExecutingAssembly().GetName().Name + ")"; if (!((Object)(object)Menu.instance == (Object)null) && !Object.op_Implicit((Object)(object)GameObject.Find(text))) { GameObject val = new GameObject(text); EquipWheel.Gui = val.AddComponent<EquipGui>(); val.transform.SetParent(((Component)Menu.instance).transform.parent, false); EquipWheel.Log("Spawned EquipGui!"); } } [HarmonyPatch(typeof(HotkeyBar), "Update")] [HarmonyPrefix] public static bool Prefix(HotkeyBar __instance) { if ((Object)(object)EquipWheel.Instance == (Object)null) { return true; } if (EquipWheel.HotkeyDPad != null && EquipWheel.HotkeyDPad.Value == WheelManager.DPadButton.None) { return true; } Player localPlayer = Player.m_localPlayer; if ((Object)(object)localPlayer != (Object)null) { typeof(HotkeyBar).GetMethod("UpdateIcons", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(__instance, new object[1] { localPlayer }); } return false; } [HarmonyPatch(typeof(Player), "UseHotbarItem")] [HarmonyPrefix] public static bool UseHotbarItem(int index) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) KeyCode[] nUMBERS = NUMBERS; KeyboardShortcut value = EquipWheel.Hotkey.Value; bool num = Array.IndexOf(nUMBERS, ((KeyboardShortcut)(ref value)).MainKey) != index - 1; bool flag = !EquipWheel.IsShortcutDown; if (!(num || flag) && EquipWheel.CanOpenMenu) { return ZInput.IsGamepadActive(); } return true; } [HarmonyPatch(typeof(Player), "Update")] [HarmonyPostfix] public static void Update() { Player localPlayer = Player.m_localPlayer; if (!((Object)(object)localPlayer == (Object)null) && EquipWheel.UseSitButton.Value && EquipWheel.HotkeyDPad.Value == WheelManager.DPadButton.None && (ZInput.GetButtonDown("JoySit") || ZInput.GetButtonUp("JoySit"))) { typeof(Player).GetMethod("StopEmote", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(localPlayer, new object[0]); } } static Patcher() { KeyCode[] array = new KeyCode[8]; RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/); NUMBERS = (KeyCode[])(object)array; } } public sealed class WheelManager { public enum DPadButton { None, Left, Right, LeftOrRight } public interface IWheel { int GetKeyCountDown(); int GetKeyCountPressed(); bool IsVisible(); void Hide(); string GetName(); float JoyStickIgnoreTime(); } private static readonly HashSet<IWheel> wheels = new HashSet<IWheel>(); private static IWheel activeWheel; public static bool inventoryVisible = false; public static bool hoverTextVisible = false; public static bool pressedOnHovering = false; public static bool AnyVisible => wheels.Any((IWheel w) => w.IsVisible()); public static void Activate(IWheel wheel) { if (!wheel.IsVisible()) { return; } foreach (IWheel wheel2 in wheels) { if (!wheel.Equals(wheel2)) { wheel2.Hide(); } } activeWheel = wheel; } public static bool IsActive(IWheel wheel) { return wheel.Equals(activeWheel); } public static bool AddWheel(IWheel wheel) { return wheels.Add(wheel); } public static bool RemoveWheel(IWheel wheel) { return wheels.Remove(wheel); } public static bool BestMatchDown(IWheel wheel) { if (!wheels.Contains(wheel)) { return false; } IWheel obj = wheels.OrderByDescending((IWheel w) => w.GetKeyCountDown()).FirstOrDefault(); return wheel.Equals(obj); } public static bool BestMatchPressed(IWheel wheel) { if (!wheels.Contains(wheel)) { return false; } IWheel obj = wheels.OrderByDescending((IWheel w) => w.GetKeyCountPressed()).FirstOrDefault(); return wheel.Equals(obj); } public static float GetJoyStickIgnoreTime() { float num = 0f; foreach (IWheel wheel in wheels) { num += wheel.JoyStickIgnoreTime(); } return num; } }