using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using LethalCompanyInputUtils.Api; using Microsoft.CodeAnalysis; using TMPro; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Controls; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: IgnoresAccessChecksTo("ClientNetworkTransform")] [assembly: IgnoresAccessChecksTo("com.olegknyazev.softmask")] [assembly: IgnoresAccessChecksTo("DissonanceVoip")] [assembly: IgnoresAccessChecksTo("DunGen")] [assembly: IgnoresAccessChecksTo("DunGen.Integration.ASPP")] [assembly: IgnoresAccessChecksTo("DunGen.Integration.UnityNav")] [assembly: IgnoresAccessChecksTo("EasyTextEffects")] [assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")] [assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")] [assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")] [assembly: IgnoresAccessChecksTo("Unity.Burst")] [assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")] [assembly: IgnoresAccessChecksTo("Unity.Collections")] [assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")] [assembly: IgnoresAccessChecksTo("Unity.Jobs")] [assembly: IgnoresAccessChecksTo("Unity.Mathematics")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")] [assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")] [assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Components")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")] [assembly: IgnoresAccessChecksTo("Unity.Services.QoS")] [assembly: IgnoresAccessChecksTo("Unity.Services.Relay")] [assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")] [assembly: IgnoresAccessChecksTo("Unity.Timeline")] [assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.XR.CoreUtils")] [assembly: IgnoresAccessChecksTo("Unity.XR.Management")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.ConformanceAutomation")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.MetaQuestSupport")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.MockRuntime")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.OculusQuestSupport")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.RuntimeDebugger")] [assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.SpatialTracking")] [assembly: IgnoresAccessChecksTo("UnityEngine.UI")] [assembly: IgnoresAccessChecksTo("UnityEngine.XR.LegacyInputHelpers")] [assembly: AssemblyCompany("Snowlance.WearableItemsAPI.UI")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("0.2.0.0")] [assembly: AssemblyInformationalVersion("0.2.0+f06ba30bd8cd4f120c509e9511fc58390495ee08")] [assembly: AssemblyProduct("WearableItemsAPI.UI")] [assembly: AssemblyTitle("Snowlance.WearableItemsAPI.UI")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.2.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace WearableItemsAPI.UI { internal class ForceDirection : MonoBehaviour { private RectTransform rt; public float forcedZRotation = 0f; private Vector3 rot = Vector3.zero; private void Awake() { rot.z = forcedZRotation; rt = ((Component)this).GetComponent(); } private void Update() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) if (!Application.isPlaying) { rot.z = forcedZRotation; } if (((Transform)rt).eulerAngles != rot) { ((Transform)rt).eulerAngles = rot; } } } [HarmonyPatch] internal static class Patches { [HarmonyPrefix] [HarmonyPatch(typeof(QuickMenuManager), "OpenQuickMenu")] private static bool QuickMenuManager_OpenQuickMenuPrefix() { try { if ((Object)(object)WearableUIController.Instance != (Object)null && (Object)(object)WearableUIController.Instance.radial != (Object)null) { return false; } return true; } catch (Exception ex) { Plugin.logger.LogError((object)ex); return true; } } [HarmonyPrefix] [HarmonyPatch(typeof(PlayerControllerB), "CanUseItem")] private static bool PlayerControllerB_CanUseItemPrefix() { try { if ((Object)(object)WearableUIController.Instance != (Object)null && (Object)(object)WearableUIController.Instance.radial != (Object)null) { return false; } return true; } catch (Exception ex) { Plugin.logger.LogError((object)ex); return true; } } [HarmonyPostfix] [HarmonyPatch(typeof(PlayerControllerB), "ConnectClientToPlayerObject")] private static void PlayerControllerB_ConnectClientToPlayerObjectPostfix() { try { WearableUIController.Init(); } catch (Exception ex) { Plugin.logger.LogError((object)ex); } } } [BepInPlugin("Snowlance.WearableItemsAPI.UI", "WearableItemsAPI.UI", "0.2.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] internal class Plugin : BaseUnityPlugin { public static Plugin Instance; public static ManualLogSource logger; private readonly Harmony harmony = new Harmony("Snowlance.WearableItemsAPI.UI"); public static PlayerControllerB localPlayer => StartOfRound.Instance.localPlayerController; public void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } logger = ((BaseUnityPlugin)Instance).Logger; harmony.PatchAll(); AssetBundle val = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "wearable_items_assets")); WearableUIController.prefab = val.LoadAsset("Assets/ModAssets/WearableItemsUI.prefab"); ((BaseUnityPlugin)this).Logger.LogInfo((object)"WearableItemsAPI.UI v0.2.0 has loaded!"); } } internal class RadialMenu : MonoBehaviour { private RectTransform rt = null; public Transform elementsContainer = null; public Text textLabel = null; [HideInInspector] public List elements = new List(); private float currentAngle = 0f; private int index = 0; private float angleOffset; private int previousActiveIndex = 0; private PointerEventData pointer = null; private WearableUIController? ui => WearableUIController.Instance; private int elementCount => elements.Count; public void Rebuild() { //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) angleOffset = ((elementCount > 0) ? (360f / (float)elementCount) : 0f); for (int i = 0; i < elementCount; i++) { RadialMenuElement radialMenuElement = elements[i]; if (!((Object)(object)radialMenuElement == (Object)null)) { radialMenuElement.parentRM = this; radialMenuElement.assignedIndex = i; radialMenuElement.setAllAngles(angleOffset * (float)i, angleOffset); RectTransform component = ((Component)radialMenuElement).GetComponent(); ((Transform)component).rotation = Quaternion.Euler(0f, 0f, 0f - radialMenuElement.angleOffset); ((Component)radialMenuElement.button).transform.localRotation = Quaternion.Euler(0f, 0f, radialMenuElement.angleOffset); } } previousActiveIndex = Mathf.Clamp(previousActiveIndex, 0, elementCount - 1); index = Mathf.Clamp(index, 0, elementCount - 1); } private void Awake() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown pointer = new PointerEventData(EventSystem.current); rt = ((Component)this).GetComponent(); } private void Update() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0011: 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_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) Vector2 val = ((InputControl)(object)((Pointer)Mouse.current).position).ReadValue(); float num = Mathf.Atan2(val.y - ((Transform)rt).position.y, val.x - ((Transform)rt).position.x) * 57.29578f; currentAngle = NormalizeAngle(0f - num + 90f + angleOffset / 2f); if (angleOffset == 0f || elementCount <= 0) { return; } index = Mathf.Clamp((int)(currentAngle / angleOffset), 0, elementCount - 1); if ((Object)(object)elements[index] != (Object)null) { SelectButton(index); if (Mouse.current.leftButton.wasPressedThisFrame) { ExecuteEvents.Execute(((Component)elements[index].button).gameObject, (BaseEventData)(object)pointer, ExecuteEvents.submitHandler); } } } private void SelectButton(int i) { //IL_0054: Unknown result type (might be due to invalid IL or missing references) if (!elements[i].active) { elements[i].highlightThisElement(pointer); ui?.SetBodyOutline(elements[i].item.wearableItemProperties.slot); if (previousActiveIndex != i) { elements[previousActiveIndex].unHighlightThisElement(pointer); } } previousActiveIndex = i; } private float NormalizeAngle(float angle) { angle %= 360f; if (angle < 0f) { angle += 360f; } return angle; } } internal class RadialMenuElement : MonoBehaviour { public Button button = null; public Image icon = null; [HideInInspector] public RadialMenu parentRM = null; [HideInInspector] public string label = null; [HideInInspector] public WearableObject item = null; [HideInInspector] public float angleMin; [HideInInspector] public float angleMax; [HideInInspector] public float angleOffset; [HideInInspector] public bool active = false; [HideInInspector] public int assignedIndex = 0; private RectTransform rt = null; private void Awake() { rt = ((Component)this).gameObject.GetComponent(); } public void setAllAngles(float offset, float baseOffset) { angleOffset = offset; angleMin = offset - baseOffset / 2f; angleMax = offset + baseOffset / 2f; } public void highlightThisElement(PointerEventData p) { ExecuteEvents.Execute(((Component)button).gameObject, (BaseEventData)(object)p, ExecuteEvents.selectHandler); active = true; setParentMenuLable(label); } public void setParentMenuLable(string l) { if ((Object)(object)parentRM.textLabel != (Object)null) { parentRM.textLabel.text = l; } } public void unHighlightThisElement(PointerEventData p) { ExecuteEvents.Execute(((Component)button).gameObject, (BaseEventData)(object)p, ExecuteEvents.deselectHandler); active = false; } } internal class WearableItemsInputs : LcInputActions { public static WearableItemsInputs Instance = new WearableItemsInputs(); public string OpenUIKey_BindingDisplayString => InputActionRebindingExtensions.GetBindingDisplayString(OpenUIKey, StartOfRound.Instance.localPlayerUsingController ? 1 : 0, (DisplayStringOptions)0); [InputAction(/*Could not decode attribute arguments.*/)] public InputAction OpenUIKey { get; set; } = null; } internal class WearableUIController : MonoBehaviour { public static GameObject prefab; public static WearableUIController? Instance; [SerializeField] private GameObject radialMenuPrefab = null; [SerializeField] private GameObject radialMenuElementPrefab = null; [SerializeField] private Transform canvas = null; [SerializeField] private Image icon = null; [SerializeField] private TMP_Text iconLabel = null; [SerializeField] private Animator animator = null; [SerializeField] private Sprite[] bodyOutlineParts = null; [HideInInspector] public RadialMenu? radial; private Image? selfHighlight; private CanvasGroup? selfHighlightCanvasGroup; private bool openingUI; private bool iconEnabled; public bool uiOpen => (Object)(object)radial != (Object)null; public static void Init() { if (!((Object)(object)Instance != (Object)null)) { if ((Object)(object)prefab == (Object)null) { Plugin.logger.LogError((object)"Could not instantiate UI"); } else { Object.Instantiate(prefab, ((Component)Plugin.localPlayer).transform); } } } public void OnDestroy() { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown if ((Object)(object)Instance == (Object)(object)this) { Plugin.logger.LogDebug((object)"Destroying UIController"); Instance = null; PlayerWearables.OnWearablesUpdate.RemoveListener(new UnityAction(UpdateIcon)); } } public void Start() { //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Expected O, but got Unknown //IL_00d1: Unknown result type (might be due to invalid IL or missing references) Plugin.logger.LogDebug((object)"UIController: Start()"); if ((Object)(object)Instance != (Object)null && (Object)(object)Instance != (Object)(object)this) { Object.Destroy((Object)(object)((Component)this).gameObject); return; } Instance = this; Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); CanvasGroup selfRedCanvasGroup = HUDManager.Instance.selfRedCanvasGroup; GameObject val = ((selfRedCanvasGroup != null) ? ((Component)selfRedCanvasGroup).gameObject : null); if ((Object)(object)val != (Object)null) { GameObject val2 = Object.Instantiate(val, val.transform.parent); ((Object)val2).name = "WISelfHighlight"; selfHighlight = val2.GetComponent(); selfHighlightCanvasGroup = val2.GetComponent(); selfHighlightCanvasGroup.alpha = 0f; selfHighlight.sprite = null; ((Graphic)selfHighlight).color = Color.white; } PlayerWearables.OnWearablesUpdate.AddListener(new UnityAction(UpdateIcon)); Plugin.logger.LogDebug((object)"UIControllerScript: Start() complete"); } public void Update() { iconLabel.text = "[" + WearableItemsInputs.Instance.OpenUIKey_BindingDisplayString + "]"; if (uiOpen && (((ButtonControl)Keyboard.current.escapeKey).wasPressedThisFrame || ((ButtonControl)Keyboard.current.tabKey).wasPressedThisFrame)) { HideUI(); } if (WearableItemsInputs.Instance.OpenUIKey.WasPressedThisFrame() && Plugin.localPlayer.CheckConditionsForEmote() && PlayerWearables.GetWearables(Plugin.localPlayer).Count > 0) { if (!uiOpen) { ShowUI(); } else { HideUI(); } } } public void UpdateIcon() { //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) int count = PlayerWearables.GetWearables(Plugin.localPlayer).Count; Plugin.logger.LogDebug((object)("Updating icon, wearables count: " + count)); ((Behaviour)icon).enabled = count > 0; ((Behaviour)iconLabel).enabled = count > 0; ((Graphic)icon).color = Color32.op_Implicit(new Color32((byte)Random.Range(0, 255), (byte)Random.Range(0, 255), (byte)Random.Range(0, 255), (byte)200)); HUDManager.Instance.DisplayTip("WearableItemsAPI", "Press " + WearableItemsInputs.Instance.OpenUIKey_BindingDisplayString + " to open the Wearable Items UI", false, true, "WearableItemsAPITip1"); } public void ShowUI() { Plugin.logger.LogDebug((object)"Showing UI"); Plugin.localPlayer.disableMoveInput = true; Plugin.localPlayer.disableInteract = true; Plugin.localPlayer.disableLookInput = true; Cursor.lockState = (CursorLockMode)0; Cursor.visible = true; openingUI = true; animator.SetBool("open", true); } public void HideUI() { Plugin.logger.LogDebug((object)"Hiding UI"); Plugin.localPlayer.disableMoveInput = false; Plugin.localPlayer.disableInteract = false; Plugin.localPlayer.disableLookInput = false; Cursor.lockState = (CursorLockMode)1; Cursor.visible = false; openingUI = false; RadialMenu? radialMenu = radial; Object.Destroy((Object)(object)((radialMenu != null) ? ((Component)radialMenu).gameObject : null)); radial = null; animator.SetBool("open", false); SetBodyOutline((WearableSlot)(-1)); } public void BuildUI() { //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Expected O, but got Unknown if (!openingUI) { return; } if ((Object)(object)radial != (Object)null) { Object.Destroy((Object)(object)((Component)radial).gameObject); radial = null; } radial = Object.Instantiate(radialMenuPrefab, canvas).GetComponent(); foreach (WearableObject item in PlayerWearables.GetWearables(Plugin.localPlayer).ToList()) { RadialMenuElement element = Object.Instantiate(radialMenuElementPrefab, radial.elementsContainer).GetComponent(); element.item = item; element.label = ((GrabbableObject)item).itemProperties.itemName; element.icon.sprite = (((Object)(object)item.wearableItemProperties.icon != (Object)null) ? item.wearableItemProperties.icon : ((GrabbableObject)item).itemProperties.itemIcon); ((UnityEvent)element.button.onClick).AddListener((UnityAction)delegate { OnClickElement(element); }); radial.elements.Add(element); } radial.Rebuild(); } public void OnClickElement(RadialMenuElement element) { element.item.UnWearItem(); radial.elements.Remove(element); Object.Destroy((Object)(object)((Component)element).gameObject); HideUI(); } public void SetBodyOutline(WearableSlot slot) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Expected I4, but got Unknown if (!((Object)(object)selfHighlight == (Object)null) && !((Object)(object)selfHighlightCanvasGroup == (Object)null)) { int num = (int)slot; selfHighlight.sprite = ((num >= 0) ? bodyOutlineParts[num] : null); selfHighlightCanvasGroup.alpha = ((num >= 0) ? 1 : 0); } } } public static class MyPluginInfo { public const string PLUGIN_GUID = "Snowlance.WearableItemsAPI.UI"; public const string PLUGIN_NAME = "WearableItemsAPI.UI"; public const string PLUGIN_VERSION = "0.2.0"; } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }