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 WeForgotBingBong v0.1.3
WeForgotBingBong.dll
Decompiled 2 weeks agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; 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.Configuration; using BepInEx.Logging; using ConfigSpace; using Curse; using Gui; using Microsoft.CodeAnalysis; using Photon.Pun; using TMPro; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; using WeForgotBingBong; using Zorro.Core; [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: AssemblyCompany("WeForgotBingBong")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("0.1.0.0")] [assembly: AssemblyInformationalVersion("0.1.0+b8b5abac810e691fc39b15a3c6c57d351cd7fbd4")] [assembly: AssemblyProduct("WeForgotBingBong")] [assembly: AssemblyTitle("WeForgotBingBong")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.1.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 Gui { public class UIManager : MonoBehaviour { [CompilerGenerated] private sealed class <TryFindFontUntilSuccess>d__14 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public UIManager <>4__this; private TMP_FontAsset <newFont>5__1; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <TryFindFontUntilSuccess>d__14(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <newFont>5__1 = null; <>1__state = -2; } private bool MoveNext() { //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; break; case 1: <>1__state = -1; <newFont>5__1 = null; break; } <newFont>5__1 = <>4__this.CacheGameFont(); if ((Object)(object)<newFont>5__1 != (Object)null) { if ((Object)(object)<newFont>5__1 != (Object)(object)gameFont) { gameFont = <newFont>5__1; <>4__this.ApplyFontToAllTexts(); Debug.Log((object)("[WeForgotBingBong] Apply game font: " + ((Object)gameFont).name)); } return false; } <>2__current = (object)new WaitForSeconds(1f); <>1__state = 1; return true; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public static UIManager instance; private bool isHeld; private float distance; private bool hasValidData = false; private string currentCurseType = "None"; private float curseTimer = 0f; private bool isInvincible = false; private float invincibleTimer = 0f; private Canvas canvas = null; private TextMeshProUGUI statusTextTMP = null; private TextMeshProUGUI timerTextTMP = null; private TextMeshProUGUI distanceTextTMP = null; private static TMP_FontAsset? gameFont; private void Awake() { if ((Object)(object)instance == (Object)null) { instance = this; Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); CreateUI(); ((MonoBehaviour)this).StartCoroutine(TryFindFontUntilSuccess()); } else { Object.Destroy((Object)(object)((Component)this).gameObject); } } [IteratorStateMachine(typeof(<TryFindFontUntilSuccess>d__14))] private IEnumerator TryFindFontUntilSuccess() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <TryFindFontUntilSuccess>d__14(0) { <>4__this = this }; } private TMP_FontAsset? CacheGameFont() { TMP_FontAsset[] array = Resources.FindObjectsOfTypeAll<TMP_FontAsset>(); if (array.Length == 0) { return null; } return ((IEnumerable<TMP_FontAsset>)array).FirstOrDefault((Func<TMP_FontAsset, bool>)((TMP_FontAsset f) => ((Object)f).name.Contains("DarumaDropOne-Regular", StringComparison.OrdinalIgnoreCase))); } private void ApplyFontToAllTexts() { if (!((Object)(object)gameFont == (Object)null)) { TMP_Text[] array = Resources.FindObjectsOfTypeAll<TMP_Text>(); foreach (TMP_Text val in array) { val.font = gameFont; val.fontMaterial = ((TMP_Asset)gameFont).material; } } } private void CreateUI() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown //IL_005e: 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_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("UIManagerCanvas"); val.transform.SetParent(((Component)this).transform); canvas = val.AddComponent<Canvas>(); canvas.renderMode = (RenderMode)0; canvas.pixelPerfect = true; CanvasScaler val2 = val.AddComponent<CanvasScaler>(); val2.uiScaleMode = (ScaleMode)1; val2.referenceResolution = new Vector2(1920f, 1080f); val.AddComponent<GraphicRaycaster>(); statusTextTMP = CreateTMPText("StatusText", new Vector2(0f, 20f), 22, (TextAlignmentOptions)514); timerTextTMP = CreateTMPText("TimerText", new Vector2(0f, 50f), 28, (TextAlignmentOptions)514); distanceTextTMP = CreateTMPText("DistanceText", new Vector2(0f, 70f), 18, (TextAlignmentOptions)514); } private TextMeshProUGUI CreateTMPText(string name, Vector2 anchoredPos, int fontSize, TextAlignmentOptions align) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_003d: 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_0091: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: 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) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject(name); val.transform.SetParent(((Component)canvas).transform, false); TextMeshProUGUI val2 = val.AddComponent<TextMeshProUGUI>(); ((TMP_Text)val2).text = ""; ((TMP_Text)val2).fontSize = fontSize; ((TMP_Text)val2).alignment = align; ((Graphic)val2).color = Color.white; if ((Object)(object)gameFont != (Object)null) { ((TMP_Text)val2).font = gameFont; ((TMP_Text)val2).fontMaterial = ((TMP_Asset)gameFont).material; } RectTransform rectTransform = ((TMP_Text)val2).rectTransform; rectTransform.anchorMin = new Vector2(0.5f, 0f); rectTransform.anchorMax = new Vector2(0.5f, 0f); rectTransform.pivot = new Vector2(0.5f, 0f); rectTransform.anchoredPosition = anchoredPos; rectTransform.sizeDelta = new Vector2(800f, 50f); return val2; } public void SetBingBongStatus(bool held, float dist) { isHeld = held; distance = Mathf.Max(0f, dist); hasValidData = true; UpdateUI(); } public void SetCurseInfo(string curseType, float timer) { currentCurseType = curseType; curseTimer = timer; UpdateUI(); } public void SetInvincibilityInfo(bool active, float remainingTime) { isInvincible = active; invincibleTimer = remainingTime; UpdateUI(); } private void UpdateUI() { //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_015e: 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) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Unknown result type (might be due to invalid IL or missing references) if (!hasValidData) { return; } if (isHeld) { ((TMP_Text)statusTextTMP).text = "<color=#5CB338>BingBong is being carried</color>"; } else { ((TMP_Text)statusTextTMP).text = "<color=#FB4141>BingBong has been forgotten</color>"; } if (isInvincible) { if (invincibleTimer > 3f) { ((Graphic)timerTextTMP).color = Color.gray; } else if (invincibleTimer > 1f) { ((Graphic)timerTextTMP).color = new Color(0.93f, 0.91f, 0.32f); } else { ((Graphic)timerTextTMP).color = new Color(0.98f, 0.26f, 0.25f); } ((TMP_Text)timerTextTMP).text = $"Invincible {invincibleTimer:F1}s"; ((TMP_Text)distanceTextTMP).text = ((distance > 0f) ? $"({distance:F1}m Away from BingBong)" : ""); } else if (!isHeld) { float num = Mathf.Max(0f, curseTimer); if (num > 3f) { ((Graphic)timerTextTMP).color = Color.gray; } else if (num > 1f) { ((Graphic)timerTextTMP).color = new Color(0.93f, 0.91f, 0.32f); } else { ((Graphic)timerTextTMP).color = new Color(0.98f, 0.26f, 0.25f); } ((TMP_Text)timerTextTMP).text = $"Curse in {num:F1}s"; ((TMP_Text)distanceTextTMP).text = ((distance > 0f) ? $"({distance:F1}m Away from BingBong)" : ""); } else { ((TMP_Text)timerTextTMP).text = ""; ((TMP_Text)distanceTextTMP).text = ""; } } } } namespace Curse { public class BingBongCurseLogic : MonoBehaviour { private ushort bingBongItemID; private float timer = 0f; private readonly Dictionary<Player, float> playerPickupTime = new Dictionary<Player, float>(); private Player[] cachedPlayers = Array.Empty<Player>(); private float lastPlayerUpdateTime = 0f; private const float PLAYER_UPDATE_INTERVAL = 1f; private bool lastCurseState = false; private Item[] cachedBingBongs = (Item[])(object)new Item[0]; private float lastBingBongUpdateTime = 0f; private const float BINGBONG_UPDATE_INTERVAL = 2f; private readonly Dictionary<Player, List<MonoBehaviour>> activeCurses = new Dictionary<Player, List<MonoBehaviour>>(); public void Setup(ushort itemID, float interval, bool displayUI) { bingBongItemID = itemID; } private void Update() { //IL_0270: Unknown result type (might be due to invalid IL or missing references) //IL_0275: Unknown result type (might be due to invalid IL or missing references) //IL_0340: Unknown result type (might be due to invalid IL or missing references) //IL_02d3: Unknown result type (might be due to invalid IL or missing references) //IL_0345: Unknown result type (might be due to invalid IL or missing references) //IL_0371: Unknown result type (might be due to invalid IL or missing references) //IL_0377: Invalid comparison between Unknown and I4 //IL_0313: Unknown result type (might be due to invalid IL or missing references) //IL_037b: Unknown result type (might be due to invalid IL or missing references) //IL_0381: Invalid comparison between Unknown and I4 //IL_0337: Unknown result type (might be due to invalid IL or missing references) //IL_032e: Unknown result type (might be due to invalid IL or missing references) //IL_038e: Unknown result type (might be due to invalid IL or missing references) //IL_0397: Unknown result type (might be due to invalid IL or missing references) if (LoadingScreenHandler.loading) { return; } if (Time.time - lastPlayerUpdateTime >= 1f) { cachedPlayers = Object.FindObjectsByType<Player>((FindObjectsSortMode)0); lastPlayerUpdateTime = Time.time; } if (cachedPlayers.Length == 0) { return; } if (Time.time - lastBingBongUpdateTime >= 2f) { List<Item> list = new List<Item>(); Item[] array = Object.FindObjectsByType<Item>((FindObjectsSortMode)0); foreach (Item val in array) { if ((Object)(object)val != (Object)null && (val.itemID == bingBongItemID || ((Object)val).name.Contains("BingBong")) && (Object)(object)((Component)val).transform.root == (Object)(object)((Component)val).transform) { list.Add(val); } } cachedBingBongs = list.ToArray(); lastBingBongUpdateTime = Time.time; } bool flag = false; Player val2 = null; List<string> list2 = new List<string>(); Player[] array2 = cachedPlayers; foreach (Player val3 in array2) { if (!((Object)(object)val3 == (Object)null)) { if (Plugin.CheckIfPlayerHasBingBong(val3, bingBongItemID)) { flag = true; string item = ((Object)val3).name ?? "Unknown Player"; list2.Add(item); } if (((MonoBehaviourPun)val3).photonView.IsMine) { val2 = val3; } } } bool flag2 = (Object)(object)RunManager.Instance != (Object)null && RunManager.Instance.timeSinceRunStarted < ConfigClass.invincibilityPeriod.Value; float remainingTime = 0f; if (flag2 && (Object)(object)RunManager.Instance != (Object)null) { remainingTime = ConfigClass.invincibilityPeriod.Value - RunManager.Instance.timeSinceRunStarted; } if (ConfigClass.showUI.Value && (Object)(object)val2 != (Object)null) { Vector3 val4; if ((Object)(object)val2.character != (Object)null && (Object)(object)val2.character.refs.head != (Object)null) { val4 = ((Component)val2.character.refs.head).transform.position; } else { Character character = val2.character; Vector3? obj; if (character == null) { obj = null; } else { CharacterRefs refs = character.refs; if (refs == null) { obj = null; } else { Bodypart head = refs.head; if (head == null) { obj = null; } else { Transform transform = ((Component)head).transform; obj = ((transform != null) ? new Vector3?(transform.position) : null); } } } Vector3? val5 = obj; ? val6; if (!val5.HasValue) { Character character2 = val2.character; Vector3? obj2; if (character2 == null) { obj2 = null; } else { Transform transform2 = ((Component)character2).transform; obj2 = ((transform2 != null) ? new Vector3?(transform2.position) : null); } val6 = ((??)obj2) ?? ((Component)val2).transform.position; } else { val6 = val5.GetValueOrDefault(); } val4 = (Vector3)val6; } float num = float.MaxValue; Item[] array3 = cachedBingBongs; foreach (Item val7 in array3) { if (!((Object)(object)val7 == (Object)null) && (int)val7.itemState != 1 && (int)val7.itemState != 2) { float num2 = Vector3.Distance(val4, ((Component)val7).transform.position); if (num2 < num) { num = num2; } } } if (num == float.MaxValue) { num = -1f; } UIManager.instance?.SetBingBongStatus(flag, num); if (flag2) { UIManager.instance?.SetInvincibilityInfo(active: true, remainingTime); UIManager.instance?.SetCurseInfo("", 0f); } else { UIManager.instance?.SetInvincibilityInfo(active: false, 0f); if (!flag) { float num3 = Mathf.Max(0f, ConfigClass.curseInterval.Value - timer); UIManager.instance?.SetCurseInfo(GetCurrentCurseTypeDisplay(), num3); } else { UIManager.instance?.SetCurseInfo("", 0f); } } } if (!flag2 && !flag) { timer += Time.deltaTime; if (timer >= ConfigClass.curseInterval.Value) { int num4 = 0; Player[] array4 = cachedPlayers; foreach (Player val8 in array4) { if ((Object)(object)val8 != (Object)null) { ApplyCurse(val8); num4++; } } timer = 0f; } } if (lastCurseState != flag) { lastCurseState = flag; } } private void ApplyCurse(Player player) { string playerName = ((Object)player).name ?? "Unknown Player"; if (!activeCurses.ContainsKey(player)) { activeCurses[player] = new List<MonoBehaviour>(); } ApplyCurseAlternative(player, playerName); } private void ApplyCurseAlternative(Player player, string playerName) { //IL_0067: 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_0072: Unknown result type (might be due to invalid IL or missing references) try { if (!((Object)(object)player.character != (Object)null) || player.character.refs == null || !((Object)(object)player.character.refs.afflictions != (Object)null)) { return; } List<STATUSTYPE> availableCurseTypes = GetAvailableCurseTypes(); if (availableCurseTypes.Count == 0) { return; } List<STATUSTYPE> list = SelectCurses(availableCurseTypes); foreach (STATUSTYPE item in list) { ApplySpecificCurse(player, playerName, item); } } catch (Exception) { } } private List<STATUSTYPE> GetAvailableCurseTypes() { List<STATUSTYPE> list = new List<STATUSTYPE>(); if (ConfigClass.enablePoison.Value) { list.Add((STATUSTYPE)3); } if (ConfigClass.enableInjury.Value) { list.Add((STATUSTYPE)0); } if (ConfigClass.enableHunger.Value) { list.Add((STATUSTYPE)1); } if (ConfigClass.enableDrowsy.Value) { list.Add((STATUSTYPE)6); } if (ConfigClass.enableCurse.Value) { list.Add((STATUSTYPE)5); } if (ConfigClass.enableCold.Value) { list.Add((STATUSTYPE)2); } if (ConfigClass.enableHot.Value) { list.Add((STATUSTYPE)8); } return list; } private List<STATUSTYPE> SelectCurses(List<STATUSTYPE> availableCurses) { //IL_00ab: 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_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_0199: 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) List<STATUSTYPE> list = new List<STATUSTYPE>(); if (ConfigClass.debugMode.Value) { Plugin.Logger.LogInfo((object)("[SelectCurses] Available curses: " + string.Join(", ", availableCurses))); Plugin.Logger.LogInfo((object)$"[SelectCurses] Selection mode: {ConfigClass.curseSelectionMode.Value}"); Plugin.Logger.LogInfo((object)("[SelectCurses] Single curse type setting: " + ConfigClass.singleCurseType.Value)); } switch (ConfigClass.curseSelectionMode.Value) { case Plugin.CurseSelectionMode.Single: { STATUSTYPE curseTypeFromString = GetCurseTypeFromString(ConfigClass.singleCurseType.Value); if (availableCurses.Contains(curseTypeFromString)) { list.Add(curseTypeFromString); if (ConfigClass.debugMode.Value) { Plugin.Logger.LogInfo((object)$"[SelectCurses] Selected single curse: {curseTypeFromString}"); } } else if (availableCurses.Count > 0) { list.Add(availableCurses[0]); if (ConfigClass.debugMode.Value) { Plugin.Logger.LogInfo((object)$"[SelectCurses] Single curse not available, fallback to: {availableCurses[0]}"); } } break; } case Plugin.CurseSelectionMode.Random: if (availableCurses.Count > 0) { int num = Random.Range(0, availableCurses.Count); list.Add(availableCurses[num]); if (ConfigClass.debugMode.Value) { Plugin.Logger.LogInfo((object)$"[SelectCurses] Random selection: {availableCurses[num]} (index {num} of {availableCurses.Count})"); } } break; case Plugin.CurseSelectionMode.Multiple: list.AddRange(availableCurses); if (ConfigClass.debugMode.Value) { Plugin.Logger.LogInfo((object)("[SelectCurses] Multiple curses selected: " + string.Join(", ", list))); } break; } if (ConfigClass.debugMode.Value) { Plugin.Logger.LogInfo((object)("[SelectCurses] Final selected curses: " + string.Join(", ", list))); } return list; } private STATUSTYPE GetCurseTypeFromString(string curseTypeString) { //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: 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_0103: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: 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_00eb: Unknown result type (might be due to invalid IL or missing references) string text = curseTypeString.ToLower(); if (1 == 0) { } STATUSTYPE result = (STATUSTYPE)(text switch { "poison" => 3, "injury" => 0, "hunger" => 1, "drowsy" => 6, "curse" => 5, "cold" => 2, "hot" => 8, _ => 3, }); if (1 == 0) { } return result; } private void ApplySpecificCurse(Player player, string playerName, STATUSTYPE curseType) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) float finalIntensityForCurseType = GetFinalIntensityForCurseType(curseType); if (ConfigClass.debugMode.Value) { Plugin.Logger.LogInfo((object)$"[ApplySpecificCurse] Applying {curseType} to {playerName} with intensity {finalIntensityForCurseType}"); } player.character.refs.afflictions.AddStatus(curseType, finalIntensityForCurseType, false); } private float GetFinalIntensityForCurseType(STATUSTYPE curseType) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Expected I4, but got Unknown if (1 == 0) { } float result = (int)curseType switch { 3 => ConfigClass.poisonIntensity.Value, 0 => ConfigClass.injuryIntensity.Value, 1 => ConfigClass.hungerIntensity.Value, 6 => ConfigClass.drowsyIntensity.Value, 5 => ConfigClass.curseStatusIntensity.Value, 2 => ConfigClass.coldIntensity.Value, 8 => ConfigClass.hotIntensity.Value, _ => 0.1f, }; if (1 == 0) { } return result; } private string GetCurrentCurseTypeDisplay() { //IL_004c: Unknown result type (might be due to invalid IL or missing references) List<STATUSTYPE> availableCurseTypes = GetAvailableCurseTypes(); if (availableCurseTypes.Count == 0) { return "No Curse"; } return ConfigClass.curseSelectionMode.Value switch { Plugin.CurseSelectionMode.Single => GetCurseTypeDisplayName(GetCurseTypeFromString(ConfigClass.singleCurseType.Value)), Plugin.CurseSelectionMode.Random => "Random Curse", Plugin.CurseSelectionMode.Multiple => "Multiple Curse", _ => "Unknown Mode", }; } private string GetCurseTypeDisplayName(STATUSTYPE curseType) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Expected I4, but got Unknown if (1 == 0) { } string result = (int)curseType switch { 3 => "Poison", 0 => "Injury", 1 => "Hunger", 6 => "Drowsy", 5 => "Curse", 2 => "Cold", 8 => "Hot", _ => "Unknown", }; if (1 == 0) { } return result; } } } namespace WeForgotBingBong { [BepInPlugin("com.yeci.weforgotbingbong", "WeForgotBingBong!", "1.0.0")] public class Plugin : BaseUnityPlugin { public enum CurseSelectionMode { Single, Random, Multiple } [CompilerGenerated] private sealed class <InitializeBingBongLogic>d__13 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public Plugin <>4__this; private ItemDatabase <db>5__1; private bool <foundBingBong>5__2; private Dictionary<ushort, Item>.Enumerator <>s__3; private KeyValuePair<ushort, Item> <kv>5__4; private BingBongCurseLogic <curseLogic>5__5; private BingBongCurseLogic <curseLogic>5__6; private GameObject <uiManagerGO>5__7; private UIManager <uiManager>5__8; private Player[] <players>5__9; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <InitializeBingBongLogic>d__13(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <db>5__1 = null; <>s__3 = default(Dictionary<ushort, Item>.Enumerator); <kv>5__4 = default(KeyValuePair<ushort, Item>); <curseLogic>5__5 = null; <curseLogic>5__6 = null; <uiManagerGO>5__7 = null; <uiManager>5__8 = null; <players>5__9 = null; <>1__state = -2; } private bool MoveNext() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_01a2: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(1f); <>1__state = 1; return true; case 1: <>1__state = -1; <db>5__1 = SingletonAsset<ItemDatabase>.Instance; if ((Object)(object)<db>5__1 == (Object)null) { return false; } <foundBingBong>5__2 = false; <>s__3 = <db>5__1.itemLookup.GetEnumerator(); try { while (<>s__3.MoveNext()) { <kv>5__4 = <>s__3.Current; if (((Object)<kv>5__4.Value).name == "BingBong") { <>4__this.bingBong = ((Component)<kv>5__4.Value).gameObject; <>4__this.bingBongItemID = <kv>5__4.Value.itemID; <foundBingBong>5__2 = true; <curseLogic>5__5 = <>4__this.bingBong.AddComponent<BingBongCurseLogic>(); <curseLogic>5__5.Setup(<>4__this.bingBongItemID, ConfigClass.curseInterval.Value, ConfigClass.showUI.Value); break; } <kv>5__4 = default(KeyValuePair<ushort, Item>); } } finally { ((IDisposable)<>s__3).Dispose(); } <>s__3 = default(Dictionary<ushort, Item>.Enumerator); if (<foundBingBong>5__2) { if (ConfigClass.showUI.Value) { <uiManagerGO>5__7 = new GameObject("BingBongUIManager"); <uiManager>5__8 = <uiManagerGO>5__7.AddComponent<UIManager>(); <uiManagerGO>5__7 = null; <uiManager>5__8 = null; } <curseLogic>5__6 = <>4__this.bingBong.GetComponent<BingBongCurseLogic>(); if ((Object)(object)<curseLogic>5__6 != (Object)null) { <players>5__9 = Object.FindObjectsByType<Player>((FindObjectsSortMode)0); <players>5__9 = null; } ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.StartLocalPlayerSetup()); ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.MonitorPlayerInventoryChanges()); ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.MonitorItemStateChanges()); ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.MonitorPlayerJoins()); <curseLogic>5__6 = 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 <MonitorItemStateChanges>d__14 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public Plugin <>4__this; private Item[] <allItems>5__1; private Item[] <>s__2; private int <>s__3; private Item <item>5__4; private Player <player>5__5; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <MonitorItemStateChanges>d__14(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <allItems>5__1 = null; <>s__2 = null; <item>5__4 = null; <player>5__5 = null; <>1__state = -2; } private bool MoveNext() { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Invalid comparison between Unknown and I4 switch (<>1__state) { default: return false; case 0: <>1__state = -1; break; case 1: <>1__state = -1; <allItems>5__1 = Object.FindObjectsByType<Item>((FindObjectsSortMode)0); <>s__2 = <allItems>5__1; for (<>s__3 = 0; <>s__3 < <>s__2.Length; <>s__3++) { <item>5__4 = <>s__2[<>s__3]; if ((<item>5__4.itemID == <>4__this.bingBongItemID || ((Object)<item>5__4).name.Contains("BingBong")) && (int)<item>5__4.itemState == 1) { <player>5__5 = ((Component)<item>5__4).GetComponentInParent<Player>(); if ((Object)(object)<player>5__5 != (Object)null) { } <player>5__5 = null; } <item>5__4 = null; } <>s__2 = null; <allItems>5__1 = null; break; } <>2__current = (object)new WaitForSeconds(3f); <>1__state = 1; return true; } 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 <MonitorPlayerInventoryChanges>d__15 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public Plugin <>4__this; private Player[] <players>5__1; private Player[] <>s__2; private int <>s__3; private Player <player>5__4; private bool <currentlyHolding>5__5; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <MonitorPlayerInventoryChanges>d__15(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <players>5__1 = null; <>s__2 = null; <player>5__4 = null; <>1__state = -2; } private bool MoveNext() { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; break; case 1: <>1__state = -1; <players>5__1 = Object.FindObjectsByType<Player>((FindObjectsSortMode)0); <>s__2 = <players>5__1; for (<>s__3 = 0; <>s__3 < <>s__2.Length; <>s__3++) { <player>5__4 = <>s__2[<>s__3]; if (((MonoBehaviourPun)<player>5__4).photonView.IsMine) { <currentlyHolding>5__5 = CheckIfPlayerHasBingBong(<player>5__4, <>4__this.bingBongItemID); if (!<currentlyHolding>5__5) { } } <player>5__4 = null; } <>s__2 = null; <players>5__1 = null; break; } <>2__current = (object)new WaitForSeconds(2f); <>1__state = 1; return true; } 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 <MonitorPlayerJoins>d__16 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public Plugin <>4__this; private HashSet<Player> <trackedPlayers>5__1; private Player[] <players>5__2; private Player[] <>s__3; private int <>s__4; private Player <player>5__5; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <MonitorPlayerJoins>d__16(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <trackedPlayers>5__1 = null; <players>5__2 = null; <>s__3 = null; <player>5__5 = null; <>1__state = -2; } private bool MoveNext() { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <trackedPlayers>5__1 = new HashSet<Player>(); break; case 1: <>1__state = -1; <players>5__2 = Object.FindObjectsByType<Player>((FindObjectsSortMode)0); <>s__3 = <players>5__2; for (<>s__4 = 0; <>s__4 < <>s__3.Length; <>s__4++) { <player>5__5 = <>s__3[<>s__4]; if ((Object)(object)<player>5__5 != (Object)null && (Object)(object)((MonoBehaviourPun)<player>5__5).photonView != (Object)null && !<trackedPlayers>5__1.Contains(<player>5__5)) { <trackedPlayers>5__1.Add(<player>5__5); if (ConfigClass.debugMode.Value) { Logger.LogInfo((object)("New player detected: " + ((Object)<player>5__5).name)); } } <player>5__5 = null; } <>s__3 = null; <trackedPlayers>5__1.RemoveWhere((Player p) => (Object)(object)p == (Object)null); <players>5__2 = null; break; } <>2__current = (object)new WaitForSeconds(1f); <>1__state = 1; return true; } 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 <StartLocalPlayerSetup>d__17 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public Plugin <>4__this; private Player[] <players>5__1; private Player <localPlayer>5__2; private Player[] <>s__3; private int <>s__4; private Player <player>5__5; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <StartLocalPlayerSetup>d__17(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <players>5__1 = null; <localPlayer>5__2 = null; <>s__3 = null; <player>5__5 = null; <>1__state = -2; } private bool MoveNext() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(1f); <>1__state = 1; return true; case 1: <>1__state = -1; <players>5__1 = Object.FindObjectsByType<Player>((FindObjectsSortMode)0); <localPlayer>5__2 = null; <>s__3 = <players>5__1; for (<>s__4 = 0; <>s__4 < <>s__3.Length; <>s__4++) { <player>5__5 = <>s__3[<>s__4]; if ((Object)(object)<player>5__5 != (Object)null && (Object)(object)((MonoBehaviourPun)<player>5__5).photonView != (Object)null && ((MonoBehaviourPun)<player>5__5).photonView.IsMine) { <localPlayer>5__2 = <player>5__5; break; } <player>5__5 = null; } <>s__3 = null; if ((Object)(object)<localPlayer>5__2 != (Object)null && ConfigClass.debugMode.Value) { Logger.LogInfo((object)("Local player ready: " + ((Object)<localPlayer>5__2).name)); } 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(); } } internal static ManualLogSource Logger; private bool alreadyLoaded = false; private GameObject bingBong = null; private ushort bingBongItemID; private static GameObject? uiManagerGO; public static Plugin Instance { get; private set; } private void Awake() { Instance = this; Logger = ((BaseUnityPlugin)this).Logger; SceneManager.sceneLoaded += OnSceneLoaded; ConfigClass.InitConfig(((BaseUnityPlugin)this).Config); } private void OnSceneLoaded(Scene scene, LoadSceneMode _) { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Expected O, but got Unknown if (!alreadyLoaded) { alreadyLoaded = true; ((MonoBehaviour)this).StartCoroutine(InitializeBingBongLogic()); } if (ConfigClass.showUI.Value) { if ((Object)(object)uiManagerGO == (Object)null) { uiManagerGO = new GameObject("BingBongUIManager"); uiManagerGO.AddComponent<UIManager>(); } } else if ((Object)(object)uiManagerGO != (Object)null) { Object.Destroy((Object)(object)uiManagerGO); uiManagerGO = null; } } private void OnDestroy() { if ((Object)(object)uiManagerGO != (Object)null) { Object.Destroy((Object)(object)uiManagerGO); uiManagerGO = null; } } [IteratorStateMachine(typeof(<InitializeBingBongLogic>d__13))] private IEnumerator InitializeBingBongLogic() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <InitializeBingBongLogic>d__13(0) { <>4__this = this }; } [IteratorStateMachine(typeof(<MonitorItemStateChanges>d__14))] private IEnumerator MonitorItemStateChanges() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <MonitorItemStateChanges>d__14(0) { <>4__this = this }; } [IteratorStateMachine(typeof(<MonitorPlayerInventoryChanges>d__15))] private IEnumerator MonitorPlayerInventoryChanges() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <MonitorPlayerInventoryChanges>d__15(0) { <>4__this = this }; } [IteratorStateMachine(typeof(<MonitorPlayerJoins>d__16))] private IEnumerator MonitorPlayerJoins() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <MonitorPlayerJoins>d__16(0) { <>4__this = this }; } [IteratorStateMachine(typeof(<StartLocalPlayerSetup>d__17))] private IEnumerator StartLocalPlayerSetup() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <StartLocalPlayerSetup>d__17(0) { <>4__this = this }; } public static bool CheckIfPlayerHasBingBong(Player player, ushort bingBongItemID) { //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)player == (Object)null || player.itemSlots == null) { return false; } for (int i = 0; i < player.itemSlots.Length; i++) { ItemSlot val = player.itemSlots[i]; if (!val.IsEmpty() && (Object)(object)val.prefab != (Object)null && (val.prefab.itemID == bingBongItemID || ((Object)val.prefab).name.Contains("BingBong"))) { return true; } } if (ConfigClass.countTempSlotAsCarrying.Value && !player.tempFullSlot.IsEmpty() && (Object)(object)player.tempFullSlot.prefab != (Object)null && (player.tempFullSlot.prefab.itemID == bingBongItemID || ((Object)player.tempFullSlot.prefab).name.Contains("BingBong"))) { return true; } if (ConfigClass.countBackpackAsCarrying.Value && player.backpackSlot.hasBackpack && !((ItemSlot)player.backpackSlot).IsEmpty()) { BackpackReference fromEquippedBackpack = BackpackReference.GetFromEquippedBackpack(player.character); BackpackData data = ((BackpackReference)(ref fromEquippedBackpack)).GetData(); if (data != null) { ItemSlot[] itemSlots = data.itemSlots; foreach (ItemSlot val2 in itemSlots) { if (!val2.IsEmpty() && (Object)(object)val2.prefab != (Object)null && (val2.prefab.itemID == bingBongItemID || ((Object)val2.prefab).name.Contains("BingBong"))) { Logger.LogInfo((object)("[BackpackCheck] Found BingBong inside backpack of " + ((Object)player).name)); return true; } } } } return false; } } } namespace ConfigSpace { public class ConfigClass { public static ConfigEntry<float> curseInterval; public static ConfigEntry<float> invincibilityPeriod; public static ConfigEntry<bool> showUI; public static ConfigEntry<bool> debugMode; public static ConfigEntry<Plugin.CurseSelectionMode> curseSelectionMode; public static ConfigEntry<string> singleCurseType; public static ConfigEntry<bool> enablePoison; public static ConfigEntry<bool> enableInjury; public static ConfigEntry<bool> enableHunger; public static ConfigEntry<bool> enableDrowsy; public static ConfigEntry<bool> enableCurse; public static ConfigEntry<bool> enableCold; public static ConfigEntry<bool> enableHot; public static ConfigEntry<bool> countBackpackAsCarrying; public static ConfigEntry<bool> countTempSlotAsCarrying; public static ConfigEntry<float> poisonIntensity; public static ConfigEntry<float> injuryIntensity; public static ConfigEntry<float> hungerIntensity; public static ConfigEntry<float> drowsyIntensity; public static ConfigEntry<float> curseStatusIntensity; public static ConfigEntry<float> coldIntensity; public static ConfigEntry<float> hotIntensity; public static void InitConfig(ConfigFile config) { curseInterval = config.Bind<float>("General", "CurseInterval", 5f, "Interval in seconds between curse applications (Min: 0.01, Max: 60.0)"); invincibilityPeriod = config.Bind<float>("General", "InvincibilityPeriod", 20f, "Duration in seconds for invincibility after curse application (Min: 0.0, Max: 60.0)"); showUI = config.Bind<bool>("UI", "ShowBingBongUI", true, "Whether to display BingBong status on screen"); debugMode = config.Bind<bool>("Debug", "EnableDebugMode", false, "Enable debug mode for detailed logging"); curseSelectionMode = config.Bind<Plugin.CurseSelectionMode>("CurseType", "SelectionMode", Plugin.CurseSelectionMode.Single, "Curse selection mode: Single(one type), Random(random selection), Multiple(multiple curses)"); singleCurseType = config.Bind<string>("CurseType", "SingleCurseType", "Poison", "Single curse type (effective when SelectionMode is set to Single)"); enablePoison = config.Bind<bool>("CurseType", "EnablePoison", true, "Enable poison curse"); enableInjury = config.Bind<bool>("CurseType", "EnableInjury", true, "Enable injury curse"); enableHunger = config.Bind<bool>("CurseType", "EnableHunger", true, "Enable hunger curse"); enableDrowsy = config.Bind<bool>("CurseType", "EnableDrowsy", true, "Enable drowsy curse"); enableCurse = config.Bind<bool>("CurseType", "EnableCurse", false, "Enable curse status"); enableCold = config.Bind<bool>("CurseType", "EnableCold", true, "Enable cold curse"); enableHot = config.Bind<bool>("CurseType", "EnableHot", true, "Enable hot curse"); countBackpackAsCarrying = config.Bind<bool>("CarryingDetection", "CountBackpackAsCarrying", true, "Whether BingBong in backpack counts as carrying (prevents curses)"); countTempSlotAsCarrying = config.Bind<bool>("CarryingDetection", "CountTempSlotAsCarrying", true, "Whether BingBong in temporary item slot counts as carrying"); poisonIntensity = config.Bind<float>("CurseIntensity", "PoisonIntensity", 0.1f, "Final poison curse intensity (0.01-10.0)"); injuryIntensity = config.Bind<float>("CurseIntensity", "InjuryIntensity", 0.1f, "Final injury curse intensity (0.01-10.0)"); hungerIntensity = config.Bind<float>("CurseIntensity", "HungerIntensity", 0.1f, "Final hunger curse intensity (0.01-10.0)"); drowsyIntensity = config.Bind<float>("CurseIntensity", "DrowsyIntensity", 0.1f, "Final drowsy curse intensity (0.01-10.0)"); curseStatusIntensity = config.Bind<float>("CurseIntensity", "CurseStatusIntensity", 0.1f, "Final curse status intensity (0.01-10.0)"); coldIntensity = config.Bind<float>("CurseIntensity", "ColdIntensity", 0.1f, "Final cold curse intensity (0.01-10.0)"); hotIntensity = config.Bind<float>("CurseIntensity", "HotIntensity", 0.1f, "Final hot curse intensity (0.01-10.0)"); SetupConfigConstraints(); } private static void SetupConfigConstraints() { curseInterval.SettingChanged += delegate { if (curseInterval.Value < 0.01f) { curseInterval.Value = 0.01f; } if (curseInterval.Value > 60f) { curseInterval.Value = 60f; } }; invincibilityPeriod.SettingChanged += delegate { if (invincibilityPeriod.Value < 0f) { invincibilityPeriod.Value = 0f; } if (invincibilityPeriod.Value > 60f) { invincibilityPeriod.Value = 60f; } }; poisonIntensity.SettingChanged += delegate { if (poisonIntensity.Value < 0.01f) { poisonIntensity.Value = 0.01f; } if (poisonIntensity.Value > 10f) { poisonIntensity.Value = 10f; } }; injuryIntensity.SettingChanged += delegate { if (injuryIntensity.Value < 0.01f) { injuryIntensity.Value = 0.01f; } if (injuryIntensity.Value > 10f) { injuryIntensity.Value = 10f; } }; hungerIntensity.SettingChanged += delegate { if (hungerIntensity.Value < 0.01f) { hungerIntensity.Value = 0.01f; } if (hungerIntensity.Value > 10f) { hungerIntensity.Value = 10f; } }; drowsyIntensity.SettingChanged += delegate { if (drowsyIntensity.Value < 0.01f) { drowsyIntensity.Value = 0.01f; } if (drowsyIntensity.Value > 10f) { drowsyIntensity.Value = 10f; } }; curseStatusIntensity.SettingChanged += delegate { if (curseStatusIntensity.Value < 0.01f) { curseStatusIntensity.Value = 0.01f; } if (curseStatusIntensity.Value > 10f) { curseStatusIntensity.Value = 10f; } }; coldIntensity.SettingChanged += delegate { if (coldIntensity.Value < 0.01f) { coldIntensity.Value = 0.01f; } if (coldIntensity.Value > 10f) { coldIntensity.Value = 10f; } }; hotIntensity.SettingChanged += delegate { if (hotIntensity.Value < 0.01f) { hotIntensity.Value = 0.01f; } if (hotIntensity.Value > 10f) { hotIntensity.Value = 10f; } }; } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }