The BepInEx console will not appear when launching like it does for other games on Thunderstore (you can turn it back on in your BepInEx.cfg file). If your PEAK crashes on startup, add -dx12 to your launch parameters.
Decompiled source of FriendsInfo v1.0.0
plugins/com.github.SniffRx.FriendsInfo.dll
Decompiled a week agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using DG.Tweening; using DG.Tweening.Core; using DG.Tweening.Plugins.Options; using Microsoft.CodeAnalysis; using Peak.Afflictions; using Photon.Pun; using Photon.Realtime; using TMPro; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; using Zorro.Core; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("com.github.SniffRx.FriendsInfo")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("com.github.SniffRx.FriendsInfo")] [assembly: AssemblyTitle("FriendsInfo")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.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] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace BepInEx { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] internal sealed class BepInAutoPluginAttribute : Attribute { public BepInAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace BepInEx.Preloader.Core.Patching { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] internal sealed class PatcherAutoPluginAttribute : Attribute { public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace FriendsInfo { internal sealed class CharacterBarAffliction : MonoBehaviour { internal AfflictionType afflictionType; private RectTransform rectTransform; private CharacterStaminaBar characterStaminaBar; private float size; internal void FetchReferences() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown rectTransform = (RectTransform)((Component)this).transform; Transform obj = ((Component)this).transform.Find("Icon"); if (obj != null) { ((Component)obj).gameObject.SetActive(false); } characterStaminaBar = ((Component)this).GetComponentInParent<CharacterStaminaBar>(); characterStaminaBar.AddCharacterBarAffliction(this); } internal void FetchDesiredSize() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0037: 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) if ((Object)(object)characterStaminaBar == (Object)null) { return; } Character observedCharacter = characterStaminaBar.observedCharacter; if ((Object)(object)observedCharacter == (Object)null) { return; } STATUSTYPE val = (STATUSTYPE)afflictionType; float currentStatus = observedCharacter.refs.afflictions.GetCurrentStatus(val); size = characterStaminaBar.fullBarRectTransform.sizeDelta.x * currentStatus; if (currentStatus > 0.01f) { if (size < 15f) { size = 15f; } ((Component)this).gameObject.SetActive(true); } else { ((Component)this).gameObject.SetActive(false); } } internal void UpdateVisual() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: 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_0049: Unknown result type (might be due to invalid IL or missing references) Vector2 sizeDelta = rectTransform.sizeDelta; sizeDelta.x = Mathf.Lerp(rectTransform.sizeDelta.x, size, Mathf.Min(Time.deltaTime * 10f, 0.1f)); rectTransform.sizeDelta = sizeDelta; } } internal sealed class CharacterStaminaBar : MonoBehaviour { [CompilerGenerated] private sealed class <DisableIEnumerator>d__3 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public CharacterStaminaBar <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DisableIEnumerator>d__3(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Expected O, but got Unknown int num = <>1__state; CharacterStaminaBar characterStaminaBar = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; ((Component)characterStaminaBar).transform.localScale = Vector3.one * 0.72f; TweenSettingsExtensions.SetEase<TweenerCore<Vector3, Vector3, VectorOptions>>(ShortcutExtensions.DOScale(((Component)characterStaminaBar).transform, 0f, 0.5f), (Ease)17); <>2__current = (object)new WaitForSeconds(0.5f); <>1__state = 1; return true; case 1: <>1__state = -1; ((Component)characterStaminaBar).gameObject.SetActive(false); characterStaminaBar.animateDisableCoroutine = null; return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <EnableIEnumerator>d__2 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public CharacterStaminaBar <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <EnableIEnumerator>d__2(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Expected O, but got Unknown int num = <>1__state; CharacterStaminaBar characterStaminaBar = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; ((Component)characterStaminaBar).transform.localScale = Vector3.zero; TweenSettingsExtensions.SetEase<TweenerCore<Vector3, Vector3, VectorOptions>>(ShortcutExtensions.DOScale(((Component)characterStaminaBar).transform, 0.72f, 0.5f), (Ease)24); <>2__current = (object)new WaitForSeconds(0.5f); <>1__state = 1; return true; case 1: <>1__state = -1; characterStaminaBar.animateDisableCoroutine = null; return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private static readonly Color defaultBarColor = new Color(0.1035f, 0.2656f, 0.3019f, 1f); private static readonly Color outOfStaminaColor = new Color(0.566f, 0.0089f, 0.0089f, 1f); internal RectTransform fullBarRectTransform; internal RectTransform staminaBarRectTransform; internal RectTransform maxStaminaBarRectTransform; internal RectTransform staminaBarOutlineRectTransform; internal RectTransform staminaBarOutlineOverflowBar; private Image barImage; private Image glowImage; private RectTransform extraBar; private RectTransform extraBarStamina; private RectTransform extraBarOutline; private float staminaBarOffset; private readonly List<CharacterBarAffliction> characterBarAfflictions = new List<CharacterBarAffliction>(); private Coroutine? animateDisableCoroutine; private Character? _observedCharacter; private bool hadObservedCharacter; private bool outOfStamina; private bool sequencingExtraBar; internal bool isEnabled; private float sinTime; private readonly float TAU = MathF.PI * 2f; private float desiredExtraStaminaSize; private float extraOutlineMaxWidth; private readonly List<RawImage> inventorySlotImages = new List<RawImage>(); private const int InventorySlotCount = 3; private readonly List<InventorySlotUI> inventorySlots = new List<InventorySlotUI>(); private InventorySlotUI? heldItemSlot; internal Character? observedCharacter { get { return _observedCharacter; } set { if ((Object)(object)value != (Object)null) { hadObservedCharacter = true; } _observedCharacter = value; } } internal void AnimateEnable() { if (!isEnabled && animateDisableCoroutine == null) { isEnabled = true; ((Component)this).gameObject.SetActive(true); animateDisableCoroutine = ((MonoBehaviour)this).StartCoroutine(EnableIEnumerator()); } } internal void AnimateDisable() { if (isEnabled && animateDisableCoroutine == null) { isEnabled = false; animateDisableCoroutine = ((MonoBehaviour)this).StartCoroutine(DisableIEnumerator()); } } [IteratorStateMachine(typeof(<EnableIEnumerator>d__2))] private IEnumerator EnableIEnumerator() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <EnableIEnumerator>d__2(0) { <>4__this = this }; } [IteratorStateMachine(typeof(<DisableIEnumerator>d__3))] private IEnumerator DisableIEnumerator() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <DisableIEnumerator>d__3(0) { <>4__this = this }; } private void Awake() { Debug.Log((object)"CharacterStaminaBar Awake"); StaminaBar val = default(StaminaBar); if (((Component)this).TryGetComponent<StaminaBar>(ref val)) { staminaBarOffset = val.staminaBarOffset; } FixBarGroupPosition(); CacheStaminaBarReferences(); CreateInventorySlots(); CreateExtraStaminaBar(); if ((Object)(object)val?.extraBar != (Object)null) { ((Component)val.extraBar).gameObject.SetActive(false); } } private void CacheStaminaBarReferences() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Expected O, but got Unknown fullBarRectTransform = (RectTransform)((Component)this).transform.Find("FullBar"); maxStaminaBarRectTransform = (RectTransform)((Component)this).transform.Find("LayoutGroup/MaxStamina"); staminaBarOutlineRectTransform = (RectTransform)((Component)this).transform.Find("OutlineMask/Outline"); staminaBarOutlineOverflowBar = (RectTransform)((Component)this).transform.Find("OutlineOverflowLine"); barImage = ((Component)((Transform)maxStaminaBarRectTransform).Find("Back")).GetComponent<Image>(); staminaBarRectTransform = (RectTransform)((Component)barImage).transform.Find("Stamina"); glowImage = ((Component)((Transform)staminaBarRectTransform).Find("Glow")).GetComponent<Image>(); } private void CreateExtraStaminaBar() { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown //IL_0066: 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_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0092: 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_009e: 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) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_015b: 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_0192: Unknown result type (might be due to invalid IL or missing references) //IL_01f5: Unknown result type (might be due to invalid IL or missing references) //IL_0205: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)fullBarRectTransform == (Object)null) { Debug.LogError((object)"FullBar not found"); return; } StaminaBar component = ((Component)this).GetComponent<StaminaBar>(); GameObject val = new GameObject("FriendExtraBar"); val.transform.SetParent(((Component)this).transform, false); extraBar = val.AddComponent<RectTransform>(); RectTransform obj = extraBar; RectTransform obj2 = extraBar; Vector2 val2 = default(Vector2); ((Vector2)(ref val2))..ctor(0f, 0.5f); obj2.anchorMax = val2; obj.anchorMin = val2; extraBar.pivot = new Vector2(0f, 0.5f); Vector2 anchoredPosition = fullBarRectTransform.anchoredPosition; extraBar.anchoredPosition = new Vector2(anchoredPosition.x, anchoredPosition.y - 31f); extraBar.sizeDelta = new Vector2(28f, 28f); if ((Object)(object)component?.extraBarOutline != (Object)null) { GameObject val3 = Object.Instantiate<GameObject>(((Component)component.extraBarOutline).gameObject, val.transform, false); ((Object)val3).name = "FriendExtraBarOutline"; extraBarOutline = val3.GetComponent<RectTransform>(); Vector2 anchoredPosition2 = extraBarOutline.anchoredPosition; extraBarOutline.anchoredPosition = new Vector2(anchoredPosition2.x - 46f, anchoredPosition2.y - 1f); extraOutlineMaxWidth = fullBarRectTransform.sizeDelta.x * 0.7f + 12f; extraBarOutline.sizeDelta = new Vector2(extraOutlineMaxWidth, extraBarOutline.sizeDelta.y); RemoveAllScriptsExcept<Image, RectTransform>(val3); } if ((Object)(object)component?.extraBarStamina != (Object)null) { GameObject val4 = Object.Instantiate<GameObject>(((Component)component.extraBarStamina).gameObject, val.transform, false); ((Object)val4).name = "FriendExtraBarStamina"; extraBarStamina = val4.GetComponent<RectTransform>(); extraBarStamina.sizeDelta = new Vector2(extraBarStamina.sizeDelta.x, extraBarStamina.sizeDelta.y * 0.5f); RemoveAllScriptsExcept<Image, RectTransform>(val4); } val.SetActive(false); } private void UpdateExtraStaminaBar() { //IL_0070: 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_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_01c9: Expected O, but got Unknown if ((Object)(object)extraBar == (Object)null || (Object)(object)extraBarStamina == (Object)null || (Object)(object)extraBarOutline == (Object)null || (Object)(object)observedCharacter == (Object)null) { return; } float extraStamina = observedCharacter.data.extraStamina; bool flag = extraStamina > 0f; if (!((Component)extraBar).gameObject.activeSelf && flag) { extraBar.sizeDelta = Vector2.zero; ShortcutExtensions.DOKill((Component)(object)extraBar, false); TweenSettingsExtensions.SetEase<TweenerCore<Vector2, Vector2, VectorOptions>>(DOTweenModuleUI.DOSizeDelta(extraBar, new Vector2(28f, 28f), 0.25f, false), (Ease)9); ((Component)extraBar).gameObject.SetActive(true); } if (((Component)extraBar).gameObject.activeSelf) { desiredExtraStaminaSize = Mathf.Max(0f, extraStamina * fullBarRectTransform.sizeDelta.x * 0.7f); extraBarStamina.sizeDelta = new Vector2(extraBarStamina.sizeDelta.x.MathfLerp(Mathf.Max(4f, desiredExtraStaminaSize), Time.deltaTime * 10f), extraBarStamina.sizeDelta.y); extraBarOutline.sizeDelta = new Vector2(extraOutlineMaxWidth, extraBarOutline.sizeDelta.y); if (!flag && !sequencingExtraBar) { sequencingExtraBar = true; TweenSettingsExtensions.OnComplete<Sequence>(TweenSettingsExtensions.Append(DOTween.Sequence(), (Tween)(object)DOTweenModuleUI.DOSizeDelta(extraBar, new Vector2(extraBar.sizeDelta.x, 0f), 0.2f, false)), new TweenCallback(DisableExtraBar)); } } } private void DisableExtraBar() { ((Component)extraBar).gameObject.SetActive(false); sequencingExtraBar = false; } private static void RemoveAllScriptsExcept<T1, T2>(GameObject go) { MonoBehaviour[] components = go.GetComponents<MonoBehaviour>(); foreach (MonoBehaviour val in components) { if (((object)val).GetType() != typeof(T1) && ((object)val).GetType() != typeof(T2)) { Object.DestroyImmediate((Object)(object)val); } } } internal void AddCharacterBarAffliction(CharacterBarAffliction aff) { characterBarAfflictions.Add(aff); } private void FixBarGroupPosition() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown //IL_0026: 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_0041: Unknown result type (might be due to invalid IL or missing references) RectTransform val = (RectTransform)((Component)this).transform.parent; if (!((Object)(object)val == (Object)null)) { val.sizeDelta = new Vector2(600f, 600f); val.anchoredPosition = new Vector2(val.anchoredPosition.x, 353f); VerticalLayoutGroup val2 = default(VerticalLayoutGroup); if (((Component)val).TryGetComponent<VerticalLayoutGroup>(ref val2)) { ((HorizontalOrVerticalLayoutGroup)val2).spacing = 25f; } } } private void CreateInventorySlots() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0063: 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_007c: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) GUIManager instance = GUIManager.instance; Sprite sprite = instance.items[0].selectedSlotIcon.sprite; Color color = ((Graphic)instance.items[0].selectedSlotIcon).color; Transform label = FindNicknameLabel(); float num = GetNicknameLabelWidth(label) + 115f; for (int i = 0; i < 3; i++) { InventorySlotUI item = CreateInventorySlot($"InvSlot_{i}", new Vector2(32f, 32f), new Vector2(num + (float)(i * 38), 43f), sprite, color); inventorySlots.Add(item); } heldItemSlot = CreateInventorySlot("HoldingItemSlot", new Vector2(38f, 38f), new Vector2(num + 114f - 5f, 43f), sprite, color); } private void UpdateInventorySlots() { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Expected O, but got Unknown Character? obj = observedCharacter; if (((obj == null) ? null : obj.player?.itemSlots) == null) { ClearInventorySlots(); return; } ItemSlot[] itemSlots = observedCharacter.player.itemSlots; Optionable<byte> currentSelectedSlot = observedCharacter.refs.items.currentSelectedSlot; for (int i = 0; i < inventorySlots.Count && i < itemSlots.Length; i++) { bool selected = currentSelectedSlot.IsSome && currentSelectedSlot.Value == i; inventorySlots[i].SetItem(itemSlots[i], selected); } Item currentItem = observedCharacter.data.currentItem; if ((Object)(object)heldItemSlot != (Object)null) { ItemSlot slot = new ItemSlot(byte.MaxValue) { prefab = currentItem }; heldItemSlot.SetItem(slot, selected: true); } } private void ClearInventorySlots() { foreach (InventorySlotUI inventorySlot in inventorySlots) { inventorySlot.Clear(); } heldItemSlot?.Clear(); } private InventorySlotUI CreateInventorySlot(string name, Vector2 size, Vector2 position, Sprite borderSprite, Color borderColor) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Expected O, but got Unknown //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0064: 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_007f: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject(name, new Type[1] { typeof(RectTransform) }); val.transform.SetParent(((Component)this).transform, false); RectTransform component = val.GetComponent<RectTransform>(); component.sizeDelta = size; Vector2 val2 = default(Vector2); ((Vector2)(ref val2))..ctor(0f, 0.5f); component.anchorMax = val2; component.anchorMin = val2; component.pivot = new Vector2(0f, 0.5f); component.anchoredPosition = position; InventorySlotUI inventorySlotUI = val.AddComponent<InventorySlotUI>(); inventorySlotUI.Initialize(borderSprite, borderColor); return inventorySlotUI; } private Transform? FindNicknameLabel() { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Expected O, but got Unknown foreach (Transform item in ((Component)this).transform) { Transform val = item; if (((Object)val).name.StartsWith("Label: ")) { return val; } } return null; } private float GetNicknameLabelWidth(Transform? label) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)label)) { return 100f; } return ((Component)label).GetComponent<RectTransform>().sizeDelta.x; } private void UpdateStaminaBar() { //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_0175: 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) //IL_01b6: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_0216: Unknown result type (might be due to invalid IL or missing references) //IL_0228: 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_0266: Unknown result type (might be due to invalid IL or missing references) //IL_028d: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)observedCharacter == (Object)null) { return; } foreach (CharacterBarAffliction characterBarAffliction in characterBarAfflictions) { characterBarAffliction.FetchDesiredSize(); characterBarAffliction.UpdateVisual(); } float num = Mathf.Max(0f, observedCharacter.data.currentStamina * fullBarRectTransform.sizeDelta.x + staminaBarOffset); if (observedCharacter.data.currentStamina <= 0.005f && !outOfStamina) { outOfStamina = true; OutOfStaminaPulse(); } else if (observedCharacter.data.currentStamina > 0.005f) { outOfStamina = false; } float num2 = Time.deltaTime * 10f; staminaBarRectTransform.sizeDelta = new Vector2(staminaBarRectTransform.sizeDelta.x.MathfLerp(num, num2), staminaBarRectTransform.sizeDelta.y); float num3 = Mathf.Clamp01((staminaBarRectTransform.sizeDelta.x - num) * 0.5f); sinTime += num2 * num3; Color color = ((Graphic)glowImage).color; color.a = num3 * 0.4f - Mathf.Abs(Mathf.Sin(sinTime)) * 0.2f; ((Graphic)glowImage).color = color; float to = Mathf.Max(0f, observedCharacter.GetMaxStamina() * fullBarRectTransform.sizeDelta.x + staminaBarOffset); maxStaminaBarRectTransform.sizeDelta = new Vector2(maxStaminaBarRectTransform.sizeDelta.x.MathfLerp(to, num2), maxStaminaBarRectTransform.sizeDelta.y); float statusSum = observedCharacter.refs.afflictions.statusSum; staminaBarOutlineRectTransform.sizeDelta = new Vector2(14f + Mathf.Max(1f, statusSum) * fullBarRectTransform.sizeDelta.x, staminaBarOutlineRectTransform.sizeDelta.y); ((Component)staminaBarOutlineOverflowBar).gameObject.SetActive(statusSum > 1.005f); ((Component)staminaBarRectTransform).gameObject.SetActive(staminaBarRectTransform.sizeDelta.x > 0f); ((Component)maxStaminaBarRectTransform).gameObject.SetActive(maxStaminaBarRectTransform.sizeDelta.x > 0f); if (sinTime > TAU) { sinTime -= TAU; } } private void OutOfStaminaPulse() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) ((Graphic)barImage).color = outOfStaminaColor; DOTweenModuleUI.DOColor(barImage, defaultBarColor, 0.5f); } private void Update() { if (!Object.op_Implicit((Object)(object)observedCharacter) || !((Component)observedCharacter).gameObject.activeSelf) { if (hadObservedCharacter) { Object.Destroy((Object)(object)((Component)this).gameObject); } } else { UpdateStaminaBar(); UpdateExtraStaminaBar(); UpdateInventorySlots(); } } } public class InventorySlotUI : MonoBehaviour { private RectTransform rectTransform; private RawImage icon; private Image fill; private GameObject? fuelBar; private Image? fuelBarFill; private TextMeshProUGUI? nameText; private Vector2 startingSizeDelta; private Item? currentItem; private ItemInstanceData? currentData; public void Initialize(Sprite selectedSprite, Color selectedColor) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_004e: 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) rectTransform = ((Component)this).GetComponent<RectTransform>(); startingSizeDelta = rectTransform.sizeDelta; CreateFuelBar(); icon = ((Component)this).gameObject.AddComponent<RawImage>(); ((Graphic)icon).color = new Color(1f, 1f, 1f, 0f); ((Graphic)icon).raycastTarget = false; fill = CreateFillImage("Fill", selectedSprite, selectedColor); ((Behaviour)fill).enabled = false; if (Plugin.showItemNames.Value) { CreateNameText(); } } public void SetItem(ItemSlot slot, bool selected) { //IL_0080: Unknown result type (might be due to invalid IL or missing references) if (!slot.IsEmpty() && slot.prefab?.UIData != null) { currentItem = slot.prefab; currentData = slot.data; if (currentItem?.UIData != null) { icon.texture = (Texture)(object)currentItem.UIData.GetIcon(); ((Behaviour)icon).enabled = true; ((Graphic)icon).color = Color.white; } UpdateCookedColor(); UpdateFuelBar(); if (Plugin.showItemNames.Value) { UpdateNameText(); } } else { Clear(); } SetSelected(selected); } public void Clear() { //IL_003e: Unknown result type (might be due to invalid IL or missing references) ((Behaviour)fill).enabled = false; ((Behaviour)icon).enabled = false; icon.texture = null; ((Graphic)icon).color = new Color(1f, 1f, 1f, 0f); currentItem = null; currentData = null; if (Object.op_Implicit((Object)(object)fuelBar)) { fuelBar.SetActive(false); } if (Object.op_Implicit((Object)(object)nameText)) { ((Behaviour)nameText).enabled = false; ((TMP_Text)nameText).text = ""; } } private void SetSelected(bool isSelected) { //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0037: 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) if ((Object)(object)currentItem != (Object)null || isSelected) { if (isSelected) { ShortcutExtensions.DOKill((Component)(object)rectTransform, false); TweenSettingsExtensions.SetEase<TweenerCore<Vector2, Vector2, VectorOptions>>(DOTweenModuleUI.DOSizeDelta(rectTransform, startingSizeDelta * 1.2f, 0.5f, false), (Ease)24); ((Behaviour)fill).enabled = true; ((Component)fill).transform.localScale = Vector3.zero; ShortcutExtensions.DOKill((Component)(object)((Component)fill).transform, false); TweenSettingsExtensions.SetEase<TweenerCore<Vector3, Vector3, VectorOptions>>(ShortcutExtensions.DOScale(((Component)fill).transform, 1f, 0.25f), (Ease)9); if (Plugin.showItemNames.Value && Object.op_Implicit((Object)(object)nameText)) { ((Behaviour)nameText).enabled = true; } } else { ShortcutExtensions.DOKill((Component)(object)rectTransform, false); TweenSettingsExtensions.SetEase<TweenerCore<Vector2, Vector2, VectorOptions>>(DOTweenModuleUI.DOSizeDelta(rectTransform, startingSizeDelta, 0.2f, false), (Ease)9); ((Behaviour)fill).enabled = false; if (Object.op_Implicit((Object)(object)nameText)) { ((Behaviour)nameText).enabled = false; } } } else if (isSelected) { ShortcutExtensions.DOKill((Component)(object)rectTransform, false); Sequence val = DOTween.Sequence(); TweenSettingsExtensions.Append(val, (Tween)(object)TweenSettingsExtensions.SetEase<TweenerCore<Vector2, Vector2, VectorOptions>>(DOTweenModuleUI.DOSizeDelta(rectTransform, startingSizeDelta * 1.2f, 0.075f, false), (Ease)9)); TweenSettingsExtensions.Append(val, (Tween)(object)TweenSettingsExtensions.SetEase<TweenerCore<Vector2, Vector2, VectorOptions>>(DOTweenModuleUI.DOSizeDelta(rectTransform, startingSizeDelta, 0.125f, false), (Ease)2)); } else { ShortcutExtensions.DOKill((Component)(object)rectTransform, false); rectTransform.sizeDelta = startingSizeDelta; } } private void UpdateCookedColor() { //IL_0023: Unknown result type (might be due to invalid IL or missing references) ItemInstanceData? obj = currentData; IntItemData val = default(IntItemData); if (obj != null && obj.TryGetDataEntry<IntItemData>((DataEntryKey)1, ref val)) { ((Graphic)icon).color = ItemCooking.GetCookColor(val.Value); } } private void UpdateFuelBar() { if ((Object)(object)fuelBar == (Object)null) { return; } if ((Object)(object)Character.observedCharacter != (Object)(object)Character.localCharacter) { fuelBar.SetActive(false); return; } ItemInstanceData? obj = currentData; FloatItemData val = default(FloatItemData); if (obj != null && obj.HasData((DataEntryKey)11) && currentData.TryGetDataEntry<FloatItemData>((DataEntryKey)11, ref val)) { fuelBar.SetActive(true); if ((Object)(object)fuelBarFill != (Object)null) { fuelBarFill.fillAmount = val.Value; } } else { fuelBar.SetActive(false); if ((Object)(object)fuelBarFill != (Object)null) { fuelBarFill.fillAmount = 1f; } } } private void UpdateNameText() { if (Object.op_Implicit((Object)(object)nameText) && Object.op_Implicit((Object)(object)currentItem)) { ((TMP_Text)nameText).text = currentItem.GetItemName(currentData); } } private Image CreateFillImage(string name, Sprite sprite, Color color) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Expected O, but got Unknown //IL_0034: 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) //IL_004a: 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_0075: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject(name, new Type[1] { typeof(RectTransform) }); val.transform.SetParent(((Component)this).transform, false); RectTransform component = val.GetComponent<RectTransform>(); component.anchorMin = Vector2.zero; component.anchorMax = Vector2.one; component.sizeDelta = Vector2.zero; component.anchoredPosition = Vector2.zero; Image val2 = val.AddComponent<Image>(); val2.sprite = sprite; val2.type = (Type)1; ((Graphic)val2).color = color; ((Graphic)val2).raycastTarget = false; return val2; } private void CreateFuelBar() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0077: 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_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Expected O, but got Unknown //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_0102: 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_011a: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("FuelBar", new Type[1] { typeof(RectTransform) }); val.transform.SetParent(((Component)this).transform, false); val.transform.SetAsFirstSibling(); RectTransform component = val.GetComponent<RectTransform>(); component.anchorMin = new Vector2(0f, 0f); component.anchorMax = new Vector2(1f, 0f); component.sizeDelta = new Vector2(0f, 4f); component.anchoredPosition = new Vector2(0f, 2f); Image val2 = val.AddComponent<Image>(); ((Graphic)val2).color = new Color(0f, 0f, 0f, 0.5f); GameObject val3 = new GameObject("Fill", new Type[1] { typeof(RectTransform) }); val3.transform.SetParent(val.transform, false); RectTransform component2 = val3.GetComponent<RectTransform>(); component2.anchorMin = Vector2.zero; component2.anchorMax = Vector2.one; component2.sizeDelta = Vector2.zero; component2.anchoredPosition = Vector2.zero; fuelBarFill = val3.AddComponent<Image>(); ((Graphic)fuelBarFill).color = Color.yellow; fuelBarFill.type = (Type)3; fuelBarFill.fillMethod = (FillMethod)0; fuelBar = val; fuelBar.SetActive(false); } private void CreateNameText() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0057: 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_0081: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("NameText", new Type[1] { typeof(RectTransform) }); val.transform.SetParent(((Component)this).transform, false); RectTransform component = val.GetComponent<RectTransform>(); component.anchorMin = new Vector2(0f, 1f); component.anchorMax = new Vector2(1f, 1f); component.sizeDelta = new Vector2(0f, 20f); component.anchoredPosition = new Vector2(0f, 10f); nameText = val.AddComponent<TextMeshProUGUI>(); ((TMP_Text)nameText).text = ""; ((TMP_Text)nameText).fontSize = 8f; ((Graphic)nameText).color = Color.white; ((TMP_Text)nameText).alignment = (TextAlignmentOptions)514; ((Behaviour)nameText).enabled = false; } private void OnDisable() { //IL_0045: Unknown result type (might be due to invalid IL or missing references) RectTransform obj = rectTransform; if (obj != null) { ShortcutExtensions.DOKill((Component)(object)obj, false); } Image obj2 = fill; if (obj2 != null) { Transform transform = ((Component)obj2).transform; if (transform != null) { ShortcutExtensions.DOKill((Component)(object)transform, false); } } if (Object.op_Implicit((Object)(object)rectTransform)) { rectTransform.sizeDelta = startingSizeDelta; } if (Object.op_Implicit((Object)(object)fill)) { ((Behaviour)fill).enabled = false; } if (Object.op_Implicit((Object)(object)nameText)) { ((Behaviour)nameText).enabled = false; ((TMP_Text)nameText).text = ""; } } } internal static class FloatExtensions { public static float MathfLerp(this float from, float to, float t) { return Mathf.Lerp(from, to, t); } } public static class PlayerInfoHelper { public static string GetPlayerName(Character character) { try { Player owner = character.refs.view.Owner; if (!string.IsNullOrEmpty(owner.NickName)) { return owner.NickName; } } catch { } try { string name = ((Object)((Component)character).gameObject).name; if (!string.IsNullOrEmpty(name)) { int num = name.IndexOf('['); int num2 = name.IndexOf(':'); if (num >= 0 && num2 > num) { return name.Substring(num + 1, num2 - num - 1).Trim(); } num2 = name.IndexOf(']'); if (num >= 0 && num2 > num) { string text = name.Substring(num + 1, num2 - num - 1).Trim(); string[] array = text.Split(' '); if (array.Length != 0) { return array[0]; } return text; } } return name ?? "Unknown"; } catch { return "Unknown"; } } public static string GetDetailedPlayerStatus(Character character) { //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) try { if (character.data.dead) { return "мертв"; } if (character.data.passedOut) { return "без сознания"; } CharacterClimbing component = ((Component)character).GetComponent<CharacterClimbing>(); if ((Object)(object)component != (Object)null) { Type type = ((object)component).GetType(); FieldInfo field = type.GetField("isClimbing", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null && (bool)field.GetValue(component)) { return "карабкается"; } } Rigidbody component2 = ((Component)character).GetComponent<Rigidbody>(); if ((Object)(object)component2 != (Object)null) { Vector3 linearVelocity = component2.linearVelocity; if (((Vector3)(ref linearVelocity)).magnitude > 1f) { return "движется"; } } return "стоит"; } catch { return "неизвестно"; } } public static string GetRelativeHeightArrow(Character character) { //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_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) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) try { if ((Object)(object)Character.localCharacter == (Object)null || (Object)(object)character == (Object)(object)Character.localCharacter) { return " "; } Vector3 position = ((Component)Character.localCharacter).transform.position; Vector3 position2 = ((Component)character).transform.position; float num = position2.y - position.y; if (num > 0.5f) { return "↑"; } if (num < -0.5f) { return "↓"; } return "→"; } catch { return " "; } } } [BepInPlugin("com.github.SniffRx.FriendsInfo", "FriendsInfo", "1.0.0")] public class Plugin : BaseUnityPlugin { public static ManualLogSource Logger { get; private set; } public static ConfigEntry<bool> displayTeammateStaminaBars { get; private set; } public static ConfigEntry<float> teammateStaminaBarProximity { get; private set; } public static ConfigEntry<bool> showItemNames { get; private set; } private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; Logger.LogInfo((object)"FriendsInfo mod loading..."); displayTeammateStaminaBars = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Display Teammate Stamina Bars", true, "Displays your teammates' stamina bars"); teammateStaminaBarProximity = ((BaseUnityPlugin)this).Config.Bind<float>("General", "Teammate Stamina Bar Proximity", 30f, "How close you need to be to your teammate to see their stamina bar"); showItemNames = ((BaseUnityPlugin)this).Config.Bind<bool>("Inventory", "Show Item Names", false, "Show item names when inventory slots are selected"); PlayerHandler.OnCharacterRegistered = (Action<Character>)Delegate.Combine(PlayerHandler.OnCharacterRegistered, new Action<Character>(OnCharacterRegistered)); Logger.LogInfo((object)"FriendsInfo mod initialized successfully!"); } private void OnCharacterRegistered(Character character) { //IL_000d: 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) if (((MonoBehaviourPun)character).photonView.IsMine) { Scene activeScene = SceneManager.GetActiveScene(); if (((Scene)(ref activeScene)).name != "Airport") { Logger.LogInfo((object)("Adding ProximityStaminaManager to local character: " + character.characterName)); ((Component)character).gameObject.AddComponent<ProximityStaminaManager>(); } } } } internal sealed class ProximityStaminaManager : MonoBehaviour { private readonly Dictionary<Character, CharacterStaminaBar> staminaBars = new Dictionary<Character, CharacterStaminaBar>(); private static CharacterStaminaBar CreateStaminaBar(Character observedCharacter) { //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Expected O, but got Unknown //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) Transform transform = ((Component)GUIManager.instance.bar).transform; Transform val = Object.Instantiate<Transform>(transform, transform.parent); val.SetAsFirstSibling(); Object.Destroy((Object)(object)((Component)val).GetComponent<StaminaBar>()); CharacterStaminaBar characterStaminaBar = ((Component)val).gameObject.AddComponent<CharacterStaminaBar>(); characterStaminaBar.observedCharacter = observedCharacter; BarAffliction[] componentsInChildren = ((Component)val).GetComponentsInChildren<BarAffliction>(true); foreach (BarAffliction val2 in componentsInChildren) { CharacterBarAffliction characterBarAffliction = ((Component)val2).gameObject.AddComponent<CharacterBarAffliction>(); characterBarAffliction.afflictionType = (AfflictionType)(object)val2.afflictionType; characterBarAffliction.FetchReferences(); Object.Destroy((Object)(object)val2); } RectTransform val3 = (RectTransform)Object.Instantiate<Transform>(((Component)((Component)GUIManager.instance).GetComponentInChildren<AscentUI>()).transform, val); AscentUI component = ((Component)val3).GetComponent<AscentUI>(); TextMeshProUGUI text = component.text; Object.Destroy((Object)(object)component); string text2 = (((TMP_Text)text).text = observedCharacter.characterName); ((Object)val3).name = "Label: " + text2; ((TMP_Text)text).textWrappingMode = (TextWrappingModes)0; ((TMP_Text)text).fontSize = 32f; ((TMP_Text)text).autoSizeTextContainer = true; ((Graphic)text).color = observedCharacter.refs.customization.PlayerColor; ((TMP_Text)text).outlineColor = new Color32((byte)0, (byte)0, (byte)0, byte.MaxValue); ((TMP_Text)text).outlineWidth = 0.055f; Vector2 val4 = default(Vector2); ((Vector2)(ref val4))..ctor(0f, 1f); val3.anchorMin = val4; val3.anchorMax = val4; val3.pivot = Vector2.zero; val3.anchoredPosition = Vector2.zero; return characterStaminaBar; } private void Update() { //IL_009c: 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) if (!Object.op_Implicit((Object)(object)Character.localCharacter) || !Plugin.displayTeammateStaminaBars.Value) { foreach (KeyValuePair<Character, CharacterStaminaBar> staminaBar in staminaBars) { staminaBar.Value.AnimateDisable(); } return; } foreach (Character allCharacter in Character.AllCharacters) { if (!allCharacter.IsLocal) { if (!staminaBars.TryGetValue(allCharacter, out CharacterStaminaBar value)) { staminaBars.TryAdd(allCharacter, value = CreateStaminaBar(allCharacter)); } if (Vector3.Distance(Character.localCharacter.Center, allCharacter.Center) < Plugin.teammateStaminaBarProximity.Value) { value.AnimateEnable(); } else { value.AnimateDisable(); } } } } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }