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 EmoteWheel v1.4.1
EmoteWheel.dll
Decompiled 2 years 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 BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using UnityEngine; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("EmoteWheel")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("EmoteWheel")] [assembly: AssemblyCopyright("Copyright © 2021")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("48f4900a-7fbb-4274-9a65-0cff9eb9bb2c")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.5", FrameworkDisplayName = "")] [assembly: AssemblyVersion("1.0.0.0")] namespace EmoteWheel; [BepInPlugin("virtuacode.valheim.emotewheel", "Emote Wheel Mod", "1.4.1")] public class EmoteWheel : BaseUnityPlugin { private static Harmony harmony; public static ConfigEntry<KeyboardShortcut> Hotkey; public static ConfigEntry<bool> TriggerOnRelease; public static ConfigEntry<bool> TriggerOnClick; public static ConfigEntry<Color> HighlightColor; public static ConfigEntry<float> GuiScale; public static ConfigEntry<int> IgnoreJoyStickDuration; public static ConfigEntry<bool> ToggleMenu; public static ConfigEntry<bool> ModEnabled; public static ConfigEntry<string> ProtectedBindings; public static ConfigEntry<KeyboardShortcut> HotkeyGamepad; public static KeyCode replacedKey = (KeyCode)0; public static List<string> replacedButtons = new List<string>(); public static ManualLogSource MyLogger = Logger.CreateLogSource(Assembly.GetExecutingAssembly().GetName().Name); public static float JoyStickIgnoreTime = 0f; public static bool inventoryVisible = false; public static Color GetHighlightColor => HighlightColor.Value; 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() && !inventoryVisible && ((Object)(object)Chat.instance == (Object)null || !Chat.instance.HasFocus()) && !Console.IsVisible() && !Menu.IsVisible() && (Object)(object)TextViewer.instance != (Object)null && !TextViewer.instance.IsVisible() && !GameCamera.InFreeFly()) { return !Minimap.IsOpen(); } return false; } } public static bool IsShortcutDown { get { //IL_0018: 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_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) KeyboardShortcut val = (ZInput.IsGamepadActive() ? HotkeyGamepad.Value : Hotkey.Value); KeyCode mainKey = ((KeyboardShortcut)(ref val)).MainKey; KeyCode[] source = ((KeyboardShortcut)(ref val)).Modifiers.ToArray(); if (Input.GetKeyDown(mainKey)) { return ((IEnumerable<KeyCode>)source).All((Func<KeyCode, bool>)Input.GetKey); } return false; } } public static bool IsShortcutUp { get { //IL_0018: 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_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) KeyboardShortcut val = (ZInput.IsGamepadActive() ? HotkeyGamepad.Value : Hotkey.Value); KeyCode mainKey = ((KeyboardShortcut)(ref val)).MainKey; KeyCode[] source = ((KeyboardShortcut)(ref val)).Modifiers.ToArray(); if (!Input.GetKeyUp(mainKey)) { return ((IEnumerable<KeyCode>)source).Any((Func<KeyCode, bool>)Input.GetKeyUp); } return true; } } public static bool IsShortcutPressed { get { //IL_0018: 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_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) KeyboardShortcut val = (ZInput.IsGamepadActive() ? HotkeyGamepad.Value : Hotkey.Value); KeyCode mainKey = ((KeyboardShortcut)(ref val)).MainKey; KeyCode[] source = ((KeyboardShortcut)(ref val)).Modifiers.ToArray(); if (Input.GetKey(mainKey)) { return ((IEnumerable<KeyCode>)source).All((Func<KeyCode, bool>)Input.GetKey); } return false; } } 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); } } 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 void Awake() { //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Expected O, but got Unknown MyLogger = ((BaseUnityPlugin)this).Logger; if (IsDedicated()) { LogWarn("Mod not loaded because game instance is a dedicated server."); return; } ModEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "ModEnabled", true, "Enable mod when value is true"); Hotkey = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("General", "Hotkey", KeyboardShortcut.Deserialize("T"), "Hotkey for opening emote wheel menu"); HotkeyGamepad = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("Input", "HotkeyGamepad", KeyboardShortcut.Deserialize("JoystickButton2"), "Hotkey on gamepads for opening emote wheel menu"); ProtectedBindings = ((BaseUnityPlugin)this).Config.Bind<string>("Input", "ProtectedBindings", "JoyTabLeft JoyTabRight JoyButtonA JoyButtonB JoyButtonX JoyButtonY", "Button bindings that should never be overriden"); TriggerOnRelease = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "TriggerOnRelease", true, "Releasing the Hotkey will trigger the selected emote"); TriggerOnClick = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "TriggerOnClick", false, "Click with left mouse button will trigger the selected emote"); ToggleMenu = ((BaseUnityPlugin)this).Config.Bind<bool>("Input", "ToggleMenu", false, "When enabled the emote wheel will toggle between hidden/visible when the hotkey was pressed"); HighlightColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Appereance", "HighlightColor", new Color(1f, 0.82f, 0f), "Color of the highlighted selection"); GuiScale = ((BaseUnityPlugin)this).Config.Bind<float>("Appereance", "GuiScale", 0.75f, "Scale factor of the user interface"); IgnoreJoyStickDuration = ((BaseUnityPlugin)this).Config.Bind<int>("Input", "IgnoreJoyStickDuration", 300, new ConfigDescription("Duration in milliseconds for ignoring left joystick input after button release", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 2000), new object[0])); if (!ModEnabled.Value) { LogWarn("Mod not loaded because it was disabled via config."); return; } HotkeyGamepad.SettingChanged += delegate { RestoreGamepadButton(); ReplaceGamepadButton(); }; harmony = Harmony.CreateAndPatchAll(typeof(Patcher), (string)null); Log("EmoteWheel Loaded!"); } private void OnDestroy() { Harmony obj = harmony; if (obj != null) { obj.UnpatchAll((string)null); } } private static void SetButtonKey(string name, KeyCode keyCode) { //IL_000b: 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) GetButtonsFromZInput()[name].m_key = keyCode; } private static Dictionary<string, ButtonDef> GetButtonsFromZInput() { return (Dictionary<string, ButtonDef>)typeof(ZInput).GetField("m_buttons", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(ZInput.instance); } public static void ReplaceGamepadButton() { //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_006f: 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) //IL_007a: 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_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) if (ZInput.instance == null) { return; } Dictionary<string, ButtonDef> obj = (Dictionary<string, ButtonDef>)typeof(ZInput).GetField("m_buttons", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(ZInput.instance); string[] array = ParseTokens(ProtectedBindings.Value); foreach (KeyValuePair<string, ButtonDef> item in obj) { KeyCode key = item.Value.m_key; if (Array.IndexOf(array, item.Key) <= -1 && (int)key != 0) { KeyboardShortcut value = HotkeyGamepad.Value; if (key == ((KeyboardShortcut)(ref value)).MainKey) { replacedButtons.Add(item.Key); replacedKey = key; SetButtonKey(item.Key, (KeyCode)0); } } } } public static void RestoreGamepadButton() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) if (ZInput.instance == null || replacedButtons.Count <= 0) { return; } foreach (string replacedButton in replacedButtons) { SetButtonKey(replacedButton, replacedKey); } replacedButtons.Clear(); replacedKey = (KeyCode)0; } public static string[] ParseTokens(string value) { char[] separator = new char[5] { ' ', ',', '.', ':', '\t' }; return value.Split(separator, StringSplitOptions.RemoveEmptyEntries); } } public class EmoteGui : MonoBehaviour { private EmoteWheelUI ui; public static AssetBundle assets; public static bool visible; public int toggleVisible; private void Awake() { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003b: 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<EmoteWheelUI>(); 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)) { EmoteWheel.RestoreGamepadButton(); EmoteWheel.ReplaceGamepadButton(); } } private void LoadAssets() { Stream manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("EmoteWheel.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 (EmoteWheel.JoyStickIgnoreTime > 0f) { EmoteWheel.JoyStickIgnoreTime -= Time.deltaTime; } if (!EmoteWheel.CanOpenMenu) { Hide(); return; } if (EmoteWheel.IsShortcutDown && EmoteWheel.ToggleMenu.Value && toggleVisible < 2) { toggleVisible++; } bool flag = EmoteWheel.IsShortcutDown && EmoteWheel.ToggleMenu.Value && toggleVisible == 2; bool flag2 = EmoteWheel.IsShortcutUp && !EmoteWheel.ToggleMenu.Value; if ((EmoteWheel.ToggleMenu.Value && toggleVisible > 0 && !flag) || (EmoteWheel.IsShortcutPressed && !EmoteWheel.ToggleMenu.Value)) { ((Component)ui).gameObject.SetActive(true); visible = true; if (EmoteWheel.TriggerOnClick.Value && (Input.GetMouseButtonDown(0) || Input.GetKeyDown((KeyCode)330)) && ui.CurrentEmote != null) { PlayEmote(ui.CurrentEmote); } if (!flag) { return; } } if (EmoteWheel.TriggerOnRelease.Value && (flag || flag2)) { if (ui.CurrentEmote != null) { PlayEmote(ui.CurrentEmote); } EmoteWheel.JoyStickIgnoreTime = (float)EmoteWheel.IgnoreJoyStickDuration.Value / 1000f; } Hide(); } private void PlayEmote(string emote) { Player localPlayer = Player.m_localPlayer; if (!((Character)localPlayer).IsSitting()) { StopEmote(localPlayer); } switch (emote) { case "blowkiss": case "challenge": case "bow": case "comehere": case "nonono": case "wave": case "thumbsup": case "point": localPlayer.FaceLookDirection(); localPlayer.StartEmote(emote, true); break; case "sit": if (((Character)localPlayer).IsSitting()) { StopEmote(localPlayer); } else { localPlayer.StartEmote(emote, false); } break; default: localPlayer.StartEmote(emote, true); break; } ui.Flash(); } private void StopEmote(Player player) { typeof(Player).GetMethod("StopEmote", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(player, new object[0]); } } public class EmoteWheelUI : MonoBehaviour { [Serializable] private class Emote { public string name; public string command; } public readonly float INNER_DIAMETER = 340f; private readonly Emote[] EMOTES = new Emote[18] { new Emote { name = "Bow", command = "bow" }, new Emote { name = "Roar", command = "roar" }, new Emote { name = "Cower", command = "cower" }, new Emote { name = "Blow Kiss", command = "blowkiss" }, new Emote { name = "Challenge", command = "challenge" }, new Emote { name = "Headbang", command = "headbang" }, new Emote { name = "Dance", command = "dance" }, new Emote { name = "Despair", command = "despair" }, new Emote { name = "Flex", command = "flex" }, new Emote { name = "Sit", command = "sit" }, new Emote { name = "Kneel", command = "kneel" }, new Emote { name = "Point", command = "point" }, new Emote { name = "Cheer", command = "cheer" }, new Emote { name = "Come Here", command = "comehere" }, new Emote { name = "No No No", command = "nonono" }, new Emote { name = "Thumbs Up", command = "thumbsup" }, new Emote { name = "Wave", command = "wave" }, new Emote { name = "Cry", command = "cry" } }; private Font font; private GameObject cursor; private GameObject highlight; private GameObject textPrefab; private Transform itemsRoot; private Text[] itemTexts; private Color NormalColor = new Color(1f, 1f, 1f, 0.5f); private Color HighlightColor = Color.white; private int previous = -1; public int Current { get { if ((!ZInput.IsGamepadActive() && MouseInCenter) || JoyStickInCenter) { return -1; } int num = Mod((int)Mathf.Round(Angle / (360f / (float)EMOTES.Length)), EMOTES.Length); if (num >= EMOTES.Length) { return -1; } return num; } } public bool JoyStickInCenter { get { float joyLeftStickX = ZInput.GetJoyLeftStickX(false); float joyLeftStickY = ZInput.GetJoyLeftStickY(true); if (ZInput.IsGamepadActive() && joyLeftStickX == 0f) { return joyLeftStickY == 0f; } return false; } } public string CurrentEmote { get { if (Current < 0) { return null; } return EMOTES[Current].command; } } 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 float Angle { get { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: 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) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) if (ZInput.IsGamepadActive()) { float joyLeftStickX = ZInput.GetJoyLeftStickX(false); float num = 0f - ZInput.GetJoyLeftStickY(true); if (joyLeftStickX != 0f || num != 0f) { return Mathf.Atan2(num, joyLeftStickX) * 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 = EmoteWheel.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; } } public GameObject BuildTextPrefab() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: 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_001d: 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_0047: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Expected O, but got Unknown GameObject val = new GameObject(); RectTransform val2 = val.AddComponent<RectTransform>(); Text obj = val.AddComponent<Text>(); val2.sizeDelta = new Vector2(200f, 100f); val2.anchorMax = new Vector2(0.5f, 0.5f); val2.anchorMin = new Vector2(0.5f, 0.5f); val2.pivot = new Vector2(0.5f, 0.5f); val2.anchoredPosition = Vector2.op_Implicit(new Vector3(0f, 300f, 0f)); obj.fontSize = 28; ((Graphic)obj).color = Color.white; obj.font = font; obj.fontStyle = (FontStyle)1; obj.alignByGeometry = true; obj.alignment = (TextAnchor)4; val.SetActive(false); return val; } 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_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_012c: 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) Font[] array = Resources.FindObjectsOfTypeAll<Font>(); foreach (Font val in array) { if (((Object)val).name == "AveriaSerifLibre-Bold") { font = val; break; } } cursor = ((Component)((Component)this).transform.Find("Cursor")).gameObject; highlight = ((Component)((Component)this).transform.Find("Highlight")).gameObject; ((Graphic)highlight.GetComponent<Image>()).material.SetFloat("_Degree", 360f / (float)EMOTES.Length); textPrefab = BuildTextPrefab(); itemsRoot = ((Component)this).transform.Find("Items"); itemTexts = (Text[])(object)new Text[EMOTES.Length]; for (int j = 0; j < EMOTES.Length; j++) { GameObject val2 = Object.Instantiate<GameObject>(textPrefab); val2.transform.SetParent(itemsRoot); val2.transform.RotateAround(((Component)this).transform.position, Vector3.forward, (float)j * (360f / (float)EMOTES.Length)); val2.transform.localRotation = Quaternion.AngleAxis(0f, Vector3.forward); val2.GetComponent<Text>().text = EMOTES[j].name; val2.SetActive(true); itemTexts[j] = val2.GetComponent<Text>(); ((Graphic)itemTexts[j]).color = NormalColor; } } 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 = EmoteWheel.GetHighlightColor; float value = EmoteWheel.GuiScale.Value; ((Transform)((Component)this).GetComponent<RectTransform>()).localScale = new Vector3(value, value, value); 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_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0126: 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_0159: 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_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) if (Current != previous) { if (previous > -1) { ((Graphic)itemTexts[previous]).color = NormalColor; } if (Current > -1) { ((Graphic)itemTexts[Current]).color = HighlightColor; InventoryGui.instance.m_moveItemEffects.Create(((Component)this).transform.position, Quaternion.identity, (Transform)null, 1f, -1); } previous = Current; } highlight.SetActive(Current > -1); Image[] componentsInChildren = cursor.GetComponentsInChildren<Image>(true); foreach (Image val in componentsInChildren) { ((Graphic)val).color = (Color)((Current < 0) ? new Color(0f, 0f, 0f, 0.5f) : EmoteWheel.GetHighlightColor); if (((Object)((Component)val).gameObject).name == "Image") { ((Component)val).gameObject.SetActive(Current > -1); } } cursor.transform.rotation = Quaternion.AngleAxis(Angle, Vector3.forward); float num = (float)Current * (360f / (float)EMOTES.Length); highlight.transform.rotation = Quaternion.AngleAxis(num, Vector3.forward); } } public class Patcher { public static readonly KeyCode[] NUMBERS; [HarmonyPatch(typeof(InventoryGui), "IsVisible")] [HarmonyPostfix] public static void IsVisible_Postfix(ref bool __result) { EmoteWheel.inventoryVisible = __result; __result = __result || EmoteGui.visible; } [HarmonyPatch(typeof(ZInput), "GetJoyLeftStickX")] [HarmonyPostfix] public static void GetJoyLeftStickX_Postfix(ref float __result) { if (EmoteWheel.JoyStickIgnoreTime > 0f) { __result = 0f; } } [HarmonyPatch(typeof(ZInput), "GetJoyLeftStickY")] [HarmonyPostfix] public static void GetJoyLeftStickY_Postfix(ref float __result) { if (EmoteWheel.JoyStickIgnoreTime > 0f) { __result = 0f; } } [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); val.AddComponent<EmoteGui>(); val.transform.SetParent(((Component)Menu.instance).transform.parent, false); EmoteWheel.Log("Spawned EquipGui!"); } } [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 = EmoteWheel.Hotkey.Value; bool num = Array.IndexOf(nUMBERS, ((KeyboardShortcut)(ref value)).MainKey) != index - 1; bool flag = !EmoteWheel.IsShortcutDown; if (!(num || flag) && EmoteWheel.CanOpenMenu) { return ZInput.IsGamepadActive(); } return true; } static Patcher() { KeyCode[] array = new KeyCode[8]; RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/); NUMBERS = (KeyCode[])(object)array; } }