Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of RarityWeightMod v1.1.0
RarityWeightMod.dll
Decompiled 2 weeks agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyCompany("RarityWeightMod")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("RarityWeightMod")] [assembly: AssemblyTitle("RarityWeightMod")] [assembly: AssemblyVersion("1.0.0.0")] [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.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace RarityWeightMod { public enum SpawnMode { Volume_Offline, All_Offline, AutoLevel_Online } public class ModConfig { public ConfigEntry<bool> Enabled; public ConfigEntry<string> Mode; public ConfigEntry<int> BoxCount; public ConfigEntry<bool> ShowHUD; public ConfigEntry<bool> ShowBoxMarkers; public ConfigEntry<KeyboardShortcut> OpenSettingsKey; public ConfigEntry<KeyboardShortcut> ToggleBoxMarkersKey; public ConfigEntry<int> CommonWeight; public ConfigEntry<int> UncommonWeight; public ConfigEntry<int> RareWeight; public ConfigEntry<int> UltraRareWeight; public SpawnMode ModeValue { get { SpawnMode result; return Enum.TryParse<SpawnMode>(Mode.Value, out result) ? result : SpawnMode.Volume_Offline; } } public ModConfig(ConfigFile cfg) { //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Expected O, but got Unknown //IL_00ed: 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_0110: Expected O, but got Unknown //IL_012b: 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_014e: Expected O, but got Unknown //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Expected O, but got Unknown //IL_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Expected O, but got Unknown //IL_01d1: Unknown result type (might be due to invalid IL or missing references) //IL_01db: Expected O, but got Unknown //IL_01ff: Unknown result type (might be due to invalid IL or missing references) //IL_0209: Expected O, but got Unknown Enabled = cfg.Bind<bool>("General", "Enabled", true, "เป\u0e34ด/ป\u0e34ด mod ท\u0e31\u0e49งหมด"); Mode = cfg.Bind<string>("General", "Mode", "Volume_Offline", new ConfigDescription("Volume_Offline = บ\u0e31งค\u0e31บ spawn ตาม BoxCount จำก\u0e31ดด\u0e49วย volume ในด\u0e48าน (ต\u0e49องลงท\u0e38กคน)\nAll_Offline = บ\u0e31งค\u0e31บ spawn ครบตาม BoxCount ด\u0e49วย compensation loop (ต\u0e49องลงท\u0e38กคน)\nAutoLevel_Online = spawn ตาม limit ของด\u0e48านน\u0e31\u0e49นๆ อ\u0e31ตโนม\u0e31ต\u0e34 (host ลงคนเด\u0e35ยวพอ)", (AcceptableValueBase)(object)new AcceptableValueList<string>(new string[3] { "Volume_Offline", "All_Offline", "AutoLevel_Online" }), Array.Empty<object>())); BoxCount = cfg.Bind<int>("General", "BoxCount", 3, new ConfigDescription("จำนวน Cosmetic Box ต\u0e48อด\u0e48าน — ใช\u0e49เฉพาะโหมด Volume_Offline และ All_Offline", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 20), Array.Empty<object>())); ShowHUD = cfg.Bind<bool>("Display", "ShowHUD", true, "เป\u0e34ด/ป\u0e34ด HUD แสดงข\u0e49อม\u0e39ล mod บนหน\u0e49าจอ (ม\u0e38มซ\u0e49ายบน)"); ShowBoxMarkers = cfg.Bind<bool>("Display", "ShowBoxMarkers", true, "เป\u0e34ด/ป\u0e34ด bracket ส\u0e35แสดงตำแหน\u0e48งกล\u0e48อง cosmetic บนหน\u0e49าจอ\n(สามารถกด hotkey หร\u0e37อเป\u0e34ดหน\u0e49า Settings เพ\u0e37\u0e48อ toggle ระหว\u0e48างเล\u0e48น)"); OpenSettingsKey = cfg.Bind<KeyboardShortcut>("Hotkeys", "OpenSettingsKey", new KeyboardShortcut((KeyCode)286, Array.Empty<KeyCode>()), new ConfigDescription("ค\u0e35ย\u0e4cล\u0e31ดสำหร\u0e31บเป\u0e34ด/ป\u0e34ดหน\u0e49าต\u0e48าง Settings ในเกม", (AcceptableValueBase)null, new object[1] { "HideFromREPOConfig" })); ToggleBoxMarkersKey = cfg.Bind<KeyboardShortcut>("Hotkeys", "ToggleBoxMarkersKey", new KeyboardShortcut((KeyCode)287, Array.Empty<KeyCode>()), new ConfigDescription("ค\u0e35ย\u0e4cล\u0e31ดสำหร\u0e31บซ\u0e48อน/แสดง bracket กล\u0e48อง cosmetic ระหว\u0e48างเล\u0e48น\n(เปล\u0e35\u0e48ยนค\u0e35ย\u0e4cได\u0e49จากหน\u0e49า Settings ในเกม)", (AcceptableValueBase)null, new object[1] { "HideFromREPOConfig" })); CommonWeight = cfg.Bind<int>("RarityWeights", "CommonWeight", 60, new ConfigDescription("Weight ของ Common (ค\u0e34ดจากส\u0e31ดส\u0e48วน เช\u0e48น 60:25:12:3)", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>())); UncommonWeight = cfg.Bind<int>("RarityWeights", "UncommonWeight", 25, new ConfigDescription("Weight ของ Uncommon", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>())); RareWeight = cfg.Bind<int>("RarityWeights", "RareWeight", 12, new ConfigDescription("Weight ของ Rare", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>())); UltraRareWeight = cfg.Bind<int>("RarityWeights", "UltraRareWeight", 3, new ConfigDescription("Weight ของ UltraRare", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>())); } public Rarity PickRarity() { //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_005d: 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_0083: 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_00a9: Unknown result type (might be due to invalid IL or missing references) int num = CommonWeight.Value + UncommonWeight.Value + RareWeight.Value + UltraRareWeight.Value; if (num <= 0) { return (Rarity)0; } int num2 = Random.Range(0, num); if (num2 < CommonWeight.Value) { return (Rarity)0; } num2 -= CommonWeight.Value; if (num2 < UncommonWeight.Value) { return (Rarity)1; } num2 -= UncommonWeight.Value; if (num2 < RareWeight.Value) { return (Rarity)2; } return (Rarity)3; } } [BepInPlugin("com.yourname.rarityweightmod", "RarityWeightMod", "1.0.1")] public class Plugin : BaseUnityPlugin { private enum RebindTarget { None, OpenSettings, ToggleMarkers } internal static ManualLogSource Log = null; internal static ModConfig Cfg = null; private readonly Harmony _harmony = new Harmony("com.yourname.rarityweightmod"); private static readonly Color ColorCommon = new Color(0.4f, 1f, 0.4f); private static readonly Color ColorUncommon = new Color(0.4f, 0.7f, 1f); private static readonly Color ColorRare = new Color(0.8f, 0.4f, 1f); private static readonly Color ColorUltraRare = new Color(1f, 0.6f, 0.2f); private static readonly Color ColorOn = new Color(0.3f, 1f, 0.3f); private static readonly Color ColorOff = new Color(1f, 0.5f, 0.1f); private GUIStyle _styleLabel = null; private GUIStyle _styleShadow = null; private GUIStyle _styleToast = null; private GUIStyle _styleShadowToast = null; private GUIStyle _styleWindow = null; private Texture2D _winBgTex = null; private Texture2D _sectionBgTex = null; private GUIStyle _styleToggle = null; private GUIStyle _styleBtn = null; private GUIStyle _styleBtnRebind = null; private GUIStyle _stylePanelLabel = null; private GUIStyle _styleSectionHeader = null; private bool _stylesInit = false; private float _toastTimer = 0f; private bool _toastIsOn = false; private const float ToastDuration = 2.5f; private bool _showSettings = false; private RebindTarget _rebindTarget = RebindTarget.None; private Rect _settingsRect = new Rect(0f, 0f, 500f, 575f); private bool _settingsRectInit = false; private CursorLockMode _savedLockMode; private bool _savedCursorVisible; private static readonly string[] ModeOptions = new string[3] { "Volume_Offline", "All_Offline", "AutoLevel_Online" }; private void Awake() { Log = ((BaseUnityPlugin)this).Logger; Cfg = new ModConfig(((BaseUnityPlugin)this).Config); _harmony.PatchAll(); Log.LogInfo((object)"RarityWeightMod loaded!"); Log.LogInfo((object)($"Mode={Cfg.ModeValue} | Common={Cfg.CommonWeight.Value} " + $"Uncommon={Cfg.UncommonWeight.Value} Rare={Cfg.RareWeight.Value} " + $"UltraRare={Cfg.UltraRareWeight.Value}")); } private void Update() { //IL_0096: 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_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) if (_toastTimer > 0f) { _toastTimer -= Time.deltaTime; } if (_showSettings) { Cursor.lockState = (CursorLockMode)0; Cursor.visible = true; if ((Object)(object)CameraAim.Instance != (Object)null) { CameraAim.Instance.OverrideAimStop(); } } if (_rebindTarget != 0) { return; } if (_showSettings && Input.GetKeyDown((KeyCode)27)) { ClosePanel(); return; } KeyboardShortcut value = Cfg.OpenSettingsKey.Value; if (((KeyboardShortcut)(ref value)).IsDown()) { if (_showSettings) { ClosePanel(); } else { OpenPanel(); } return; } value = Cfg.ToggleBoxMarkersKey.Value; if (((KeyboardShortcut)(ref value)).IsDown()) { ToggleMarkers(); } } private void OpenPanel() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) if (!_showSettings) { _savedLockMode = Cursor.lockState; _savedCursorVisible = Cursor.visible; } _showSettings = true; Cursor.lockState = (CursorLockMode)0; Cursor.visible = true; } private void ClosePanel() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) _showSettings = false; _rebindTarget = RebindTarget.None; Cursor.lockState = _savedLockMode; Cursor.visible = _savedCursorVisible; } private void InitStyles() { //IL_0011: 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) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown //IL_003f: 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 //IL_0066: 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_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Expected O, but got Unknown //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Expected O, but got Unknown //IL_00d4: 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_00ec: Expected O, but got Unknown //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Expected O, but got Unknown //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Expected O, but got Unknown //IL_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: Expected O, but got Unknown //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_0201: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_022d: Unknown result type (might be due to invalid IL or missing references) //IL_0243: Unknown result type (might be due to invalid IL or missing references) //IL_024d: Expected O, but got Unknown //IL_026f: Unknown result type (might be due to invalid IL or missing references) //IL_0279: Expected O, but got Unknown //IL_0293: Unknown result type (might be due to invalid IL or missing references) //IL_02b8: Unknown result type (might be due to invalid IL or missing references) //IL_02ce: Unknown result type (might be due to invalid IL or missing references) //IL_02d8: Expected O, but got Unknown //IL_0300: Unknown result type (might be due to invalid IL or missing references) //IL_0316: Unknown result type (might be due to invalid IL or missing references) //IL_0320: Expected O, but got Unknown //IL_0355: Unknown result type (might be due to invalid IL or missing references) if (!_stylesInit) { _styleLabel = new GUIStyle { fontSize = 20, fontStyle = (FontStyle)1, richText = true }; _styleLabel.normal.textColor = Color.white; _styleShadow = new GUIStyle(_styleLabel); _styleShadow.normal.textColor = Color.black; _styleToast = new GUIStyle { fontSize = 22, fontStyle = (FontStyle)1, richText = true }; _styleToast.normal.textColor = Color.white; _styleToast.alignment = (TextAnchor)4; _styleShadowToast = new GUIStyle(_styleToast); _styleShadowToast.normal.textColor = Color.black; _winBgTex = new Texture2D(1, 1); _winBgTex.SetPixel(0, 0, new Color(0.08f, 0.08f, 0.12f, 0.97f)); _winBgTex.Apply(); _sectionBgTex = new Texture2D(1, 1); _sectionBgTex.SetPixel(0, 0, new Color(0.05f, 0.05f, 0.09f, 1f)); _sectionBgTex.Apply(); _styleWindow = new GUIStyle(GUI.skin.window); _styleWindow.fontSize = 15; _styleWindow.fontStyle = (FontStyle)1; _styleWindow.normal.background = _winBgTex; _styleWindow.onNormal.background = _winBgTex; _styleToggle = new GUIStyle(GUI.skin.toggle); _styleToggle.fontSize = 15; _styleToggle.normal.textColor = Color.white; _styleToggle.hover.textColor = Color.white; _styleToggle.onNormal.textColor = Color.white; _styleToggle.onHover.textColor = Color.white; _styleBtn = new GUIStyle(GUI.skin.button); _styleBtn.fontSize = 14; _styleBtn.fontStyle = (FontStyle)1; _styleBtnRebind = new GUIStyle(_styleBtn); _styleBtnRebind.normal.textColor = new Color(1f, 0.9f, 0.2f); _styleBtnRebind.hover.textColor = new Color(1f, 0.9f, 0.2f); _stylePanelLabel = new GUIStyle(GUI.skin.label); _stylePanelLabel.fontSize = 14; _stylePanelLabel.normal.textColor = new Color(0.88f, 0.88f, 0.88f); _styleSectionHeader = new GUIStyle(GUI.skin.label); _styleSectionHeader.fontSize = 13; _styleSectionHeader.fontStyle = (FontStyle)1; _styleSectionHeader.normal.textColor = new Color(0.55f, 0.85f, 1f); _stylesInit = true; } } private void OnGUI() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Invalid comparison between Unknown and I4 //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Invalid comparison between Unknown and I4 //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Invalid comparison between Unknown and I4 //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: 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_02d1: Unknown result type (might be due to invalid IL or missing references) //IL_02dd: Unknown result type (might be due to invalid IL or missing references) //IL_02f2: Expected O, but got Unknown //IL_02ed: Unknown result type (might be due to invalid IL or missing references) //IL_02f2: Unknown result type (might be due to invalid IL or missing references) //IL_02bb: Unknown result type (might be due to invalid IL or missing references) //IL_02c0: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_021d: Unknown result type (might be due to invalid IL or missing references) //IL_0238: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_0425: Unknown result type (might be due to invalid IL or missing references) //IL_042a: Unknown result type (might be due to invalid IL or missing references) //IL_042e: Unknown result type (might be due to invalid IL or missing references) //IL_0433: Unknown result type (might be due to invalid IL or missing references) //IL_044e: Unknown result type (might be due to invalid IL or missing references) //IL_0453: Unknown result type (might be due to invalid IL or missing references) //IL_0457: Unknown result type (might be due to invalid IL or missing references) //IL_045c: Unknown result type (might be due to invalid IL or missing references) //IL_0511: Unknown result type (might be due to invalid IL or missing references) //IL_0534: Unknown result type (might be due to invalid IL or missing references) //IL_0557: Unknown result type (might be due to invalid IL or missing references) //IL_057a: Unknown result type (might be due to invalid IL or missing references) //IL_05b3: Unknown result type (might be due to invalid IL or missing references) //IL_05c8: Unknown result type (might be due to invalid IL or missing references) //IL_05de: Unknown result type (might be due to invalid IL or missing references) //IL_05f4: Unknown result type (might be due to invalid IL or missing references) //IL_0391: Unknown result type (might be due to invalid IL or missing references) //IL_0396: Unknown result type (might be due to invalid IL or missing references) //IL_0398: Unknown result type (might be due to invalid IL or missing references) //IL_039a: Unknown result type (might be due to invalid IL or missing references) //IL_039c: Unknown result type (might be due to invalid IL or missing references) //IL_03b3: Expected I4, but got Unknown InitStyles(); if (_rebindTarget != 0 && (int)Event.current.type == 4) { KeyCode keyCode = Event.current.keyCode; if ((int)keyCode == 27) { _rebindTarget = RebindTarget.None; } else if ((int)keyCode > 0) { KeyboardShortcut value = default(KeyboardShortcut); ((KeyboardShortcut)(ref value))..ctor(keyCode, Array.Empty<KeyCode>()); if (_rebindTarget == RebindTarget.OpenSettings) { Cfg.OpenSettingsKey.Value = value; } else if (_rebindTarget == RebindTarget.ToggleMarkers) { Cfg.ToggleBoxMarkersKey.Value = value; } _rebindTarget = RebindTarget.None; } Event.current.Use(); } if (_toastTimer > 0f) { float num = Mathf.Clamp01(_toastTimer); string text = (_toastIsOn ? ("<color=#" + ColorToHex(ColorOn) + ">ON</color>") : ("<color=#" + ColorToHex(ColorOff) + ">OFF</color>")); string text2 = "Box Markers : " + text; string text3 = Regex.Replace(text2, "<.*?>", ""); float num2 = 500f; float num3 = 36f; float num4 = ((float)Screen.width - num2) * 0.5f; float num5 = (float)Screen.height * 0.1f; Color color = GUI.color; GUI.color = new Color(1f, 1f, 1f, num); GUI.Label(new Rect(num4 - 1.5f, num5 - 1.5f, num2, num3), text3, _styleShadowToast); GUI.Label(new Rect(num4 + 1.5f, num5 - 1.5f, num2, num3), text3, _styleShadowToast); GUI.Label(new Rect(num4 - 1.5f, num5 + 1.5f, num2, num3), text3, _styleShadowToast); GUI.Label(new Rect(num4 + 1.5f, num5 + 1.5f, num2, num3), text3, _styleShadowToast); GUI.Label(new Rect(num4, num5, num2, num3), text2, _styleToast); GUI.color = color; } if (_showSettings) { if (!_settingsRectInit) { _settingsRect = new Rect(((float)Screen.width - ((Rect)(ref _settingsRect)).width) * 0.5f, ((float)Screen.height - ((Rect)(ref _settingsRect)).height) * 0.5f, ((Rect)(ref _settingsRect)).width, ((Rect)(ref _settingsRect)).height); _settingsRectInit = true; } _settingsRect = GUI.Window(42, _settingsRect, new WindowFunction(DrawSettingsWindow), " RarityWeightMod — Settings", _styleWindow); } if (!Cfg.ShowHUD.Value || !SemiFunc.RunIsLevel()) { return; } float x = (float)Screen.width * 0.05f; float num6 = (float)Screen.height * 0.2f; int num7 = 0; int num8 = 0; int num9 = 0; int num10 = 0; if ((Object)(object)RoundDirector.instance != (Object)null) { foreach (CosmeticWorldObject cosmeticWorldObject in RoundDirector.instance.cosmeticWorldObjects) { if (!((Object)(object)cosmeticWorldObject == (Object)null)) { Rarity rarity = cosmeticWorldObject.rarity; Rarity val = rarity; switch ((int)val) { case 0: num7++; break; case 1: num8++; break; case 2: num9++; break; case 3: num10++; break; } } } } string text4 = MakeOnOff(Cfg.Enabled.Value); string text5 = MakeOnOff(Cfg.ShowBoxMarkers.Value); KeyboardShortcut value2 = Cfg.OpenSettingsKey.Value; KeyCode mainKey = ((KeyboardShortcut)(ref value2)).MainKey; string text6 = ((object)(KeyCode)(ref mainKey)).ToString(); value2 = Cfg.ToggleBoxMarkersKey.Value; mainKey = ((KeyboardShortcut)(ref value2)).MainKey; string text7 = ((object)(KeyCode)(ref mainKey)).ToString(); string text8 = $"Mode : {Cfg.ModeValue}"; DrawLine("RarityWeightMod [Settings : " + text6 + "]", x, num6, 800f, 26f); DrawLine("MOD : " + text4, x, num6 + 26f, 800f, 26f); DrawLine(text8, x, num6 + 52f, 800f, 26f); DrawLine(BuildColorLine("Rate : ", $"{Cfg.CommonWeight.Value}", ColorCommon, $"{Cfg.UncommonWeight.Value}", ColorUncommon, $"{Cfg.RareWeight.Value}", ColorRare, $"{Cfg.UltraRareWeight.Value}", ColorUltraRare), x, num6 + 78f, 800f, 26f); DrawLine(BuildColorLine("Count : ", $"{num7}", ColorCommon, $"{num8}", ColorUncommon, $"{num9}", ColorRare, $"{num10}", ColorUltraRare), x, num6 + 104f, 800f, 26f); DrawLine("Markers : " + text5 + " [" + text7 + "]", x, num6 + 130f, 800f, 26f); } private void DrawSettingsWindow(int windowId) { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_01cb: Unknown result type (might be due to invalid IL or missing references) //IL_0346: Unknown result type (might be due to invalid IL or missing references) //IL_036a: Unknown result type (might be due to invalid IL or missing references) //IL_03a6: Unknown result type (might be due to invalid IL or missing references) float num = ((Rect)(ref _settingsRect)).width - 36f; float y = 35f; DrawSectionLabel("General", 18f, ref y, num); Cfg.Enabled.Value = GUI.Toggle(new Rect(18f, y, num, 28f), Cfg.Enabled.Value, " Mod Enabled", _styleToggle); y += 28f; GUI.Label(new Rect(18f, y + 5f, 115f, 20f), "Mode :", _stylePanelLabel); int num2 = Array.IndexOf(ModeOptions, Cfg.Mode.Value); if (num2 < 0) { num2 = 0; } if (GUI.Button(new Rect(136f, y, num - 118f, 28f), "◄ " + Cfg.Mode.Value + " ►", _styleBtn)) { num2 = (num2 + 1) % ModeOptions.Length; Cfg.Mode.Value = ModeOptions[num2]; } y += 32f; DrawIntSlider("Box Count", 18f, ref y, num, Cfg.BoxCount, 1, 20); y += 10f; DrawSectionLabel("Display", 18f, ref y, num); Cfg.ShowHUD.Value = GUI.Toggle(new Rect(18f, y, num, 28f), Cfg.ShowHUD.Value, " Show HUD", _styleToggle); y += 28f; bool flag = GUI.Toggle(new Rect(18f, y, num, 28f), Cfg.ShowBoxMarkers.Value, " Show Box Markers", _styleToggle); if (flag != Cfg.ShowBoxMarkers.Value) { Cfg.ShowBoxMarkers.Value = flag; _toastIsOn = flag; _toastTimer = 2.5f; } y += 28f; y += 10f; DrawSectionLabel("Rarity Weights", 18f, ref y, num); DrawIntSlider("Common", 18f, ref y, num, Cfg.CommonWeight, 0, 100); DrawIntSlider("Uncommon", 18f, ref y, num, Cfg.UncommonWeight, 0, 100); DrawIntSlider("Rare", 18f, ref y, num, Cfg.RareWeight, 0, 100); DrawIntSlider("Ultra Rare", 18f, ref y, num, Cfg.UltraRareWeight, 0, 100); y += 10f; DrawSectionLabel("Hotkeys", 18f, ref y, num); DrawRebindRow("Open Settings Key", 18f, ref y, num, Cfg.OpenSettingsKey, RebindTarget.OpenSettings); DrawRebindRow("Toggle Markers Key", 18f, ref y, num, Cfg.ToggleBoxMarkersKey, RebindTarget.ToggleMarkers); y += 8f; GUI.Box(new Rect(18f, y, num, 1f), GUIContent.none); y += 12f; if (GUI.Button(new Rect(18f, y, num, 30f), "Close", _styleBtn)) { ClosePanel(); } GUI.DragWindow(new Rect(0f, 0f, ((Rect)(ref _settingsRect)).width, 25f)); } private void DrawSectionLabel(string text, float pad, ref float y, float iw) { //IL_000b: 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) GUI.DrawTexture(new Rect(pad, y, iw, 20f), (Texture)(object)_sectionBgTex); GUI.Label(new Rect(pad + 4f, y + 1f, iw - 4f, 20f), text, _styleSectionHeader); y += 24f; } private void DrawIntSlider(string label, float pad, ref float y, float iw, ConfigEntry<int> entry, int min, int max) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) float num = iw - 120f - 44f - 8f; GUI.Label(new Rect(pad, y + 5f, 120f, 20f), label, _stylePanelLabel); float num2 = GUI.HorizontalSlider(new Rect(pad + 120f, y + 9f, num, 14f), (float)entry.Value, (float)min, (float)max); entry.Value = Mathf.Clamp(Mathf.RoundToInt(num2), min, max); GUI.Label(new Rect(pad + 120f + num + 6f, y + 5f, 44f, 20f), entry.Value.ToString(), _stylePanelLabel); y += 28f; } private void DrawRebindRow(string label, float pad, ref float y, float iw, ConfigEntry<KeyboardShortcut> entry, RebindTarget target) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) float num = iw - 160f - 5f; GUI.Label(new Rect(pad, y + 6f, 160f, 22f), label + " :", _stylePanelLabel); bool flag = _rebindTarget == target; object obj; if (!flag) { KeyboardShortcut value = entry.Value; obj = $"[ {((KeyboardShortcut)(ref value)).MainKey} ] Click to rebind"; } else { obj = "[ Press any key... (ESC = cancel) ]"; } string text = (string)obj; if (GUI.Button(new Rect(pad + 160f + 5f, y, num, 30f), text, flag ? _styleBtnRebind : _styleBtn)) { _rebindTarget = ((!flag) ? target : RebindTarget.None); } y += 32f; } private void ToggleMarkers() { Cfg.ShowBoxMarkers.Value = !Cfg.ShowBoxMarkers.Value; _toastIsOn = Cfg.ShowBoxMarkers.Value; _toastTimer = 2.5f; } private string MakeOnOff(bool value) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) return value ? ("<color=#" + ColorToHex(ColorOn) + ">ON</color>") : ("<color=#" + ColorToHex(ColorOff) + ">OFF</color>"); } private void DrawLine(string text, float x, float y, float w, float h) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0048: 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_0090: 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) string text2 = Regex.Replace(text, "<.*?>", ""); GUI.Label(new Rect(x - 1.5f, y - 1.5f, w, h), text2, _styleShadow); GUI.Label(new Rect(x + 1.5f, y - 1.5f, w, h), text2, _styleShadow); GUI.Label(new Rect(x - 1.5f, y + 1.5f, w, h), text2, _styleShadow); GUI.Label(new Rect(x + 1.5f, y + 1.5f, w, h), text2, _styleShadow); GUI.Label(new Rect(x, y, w, h), text, _styleLabel); } private string BuildColorLine(string prefix, string v1, Color c1, string v2, Color c2, string v3, Color c3, string v4, Color c4) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0035: 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_007b: Unknown result type (might be due to invalid IL or missing references) return prefix + "<color=#" + ColorToHex(c1) + ">" + v1 + "</color>/<color=#" + ColorToHex(c2) + ">" + v2 + "</color>/<color=#" + ColorToHex(c3) + ">" + v3 + "</color>/<color=#" + ColorToHex(c4) + ">" + v4 + "</color>"; } private string ColorToHex(Color c) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) return $"{ToByte(c.r):X2}{ToByte(c.g):X2}{ToByte(c.b):X2}"; } private int ToByte(float f) { return Mathf.Clamp(Mathf.RoundToInt(f * 255f), 0, 255); } } } namespace RarityWeightMod.Patches { [HarmonyPatch(typeof(CosmeticWorldObject), "Start")] public static class CosmeticWorldObjectStartPatch { public static void Postfix(CosmeticWorldObject __instance) { if (Plugin.Cfg.Enabled.Value && SemiFunc.RunIsLevel() && SemiFunc.IsMasterClientOrSingleplayer()) { CosmeticBoxTracker cosmeticBoxTracker = ((Component)__instance).gameObject.AddComponent<CosmeticBoxTracker>(); cosmeticBoxTracker.Setup(__instance); } } } public class CosmeticBoxTracker : MonoBehaviour { private CosmeticWorldObject _box; private PhysGrabObject _physGrab; private ValuableDiscoverGraphic _activeGraphic; private static readonly Color ColorCommon = new Color(0.4f, 1f, 0.4f); private static readonly Color ColorUncommon = new Color(0.4f, 0.7f, 1f); private static readonly Color ColorRare = new Color(0.8f, 0.4f, 1f); private static readonly Color ColorUltraRare = new Color(1f, 0.6f, 0.2f); public void Setup(CosmeticWorldObject box) { _box = box; ref PhysGrabObject physGrab = ref _physGrab; object? value = AccessTools.Field(typeof(CosmeticWorldObject), "physGrabObject").GetValue(box); physGrab = (PhysGrabObject)((value is PhysGrabObject) ? value : null); } private void Update() { if (!Plugin.Cfg.Enabled.Value || !Plugin.Cfg.ShowBoxMarkers.Value) { HideAllBoxGraphics(); } else if (SemiFunc.RunIsLevel() && !((Object)(object)ValuableDiscover.instance == (Object)null) && !((Object)(object)_physGrab == (Object)null) && (Object)(object)_activeGraphic == (Object)null) { SpawnGraphic(); } } private void HideAllBoxGraphics() { //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Expected O, but got Unknown if ((Object)(object)_activeGraphic != (Object)null) { ((Component)_activeGraphic).gameObject.SetActive(false); Object.Destroy((Object)(object)((Component)_activeGraphic).gameObject); _activeGraphic = null; } if ((Object)(object)ValuableDiscover.instance == (Object)null || (Object)(object)_physGrab == (Object)null) { return; } List<GameObject> list = new List<GameObject>(); foreach (Transform item in ((Component)ValuableDiscover.instance).transform) { Transform val = item; if (!((Object)(object)val == (Object)null)) { ValuableDiscoverGraphic component = ((Component)val).GetComponent<ValuableDiscoverGraphic>(); if ((Object)(object)component != (Object)null && (Object)(object)component.target == (Object)(object)_physGrab) { list.Add(((Component)val).gameObject); } } } foreach (GameObject item2 in list) { if (!((Object)(object)item2 == (Object)null)) { item2.SetActive(false); Object.Destroy((Object)(object)item2); } } } private void SpawnGraphic() { //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0087: 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) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: 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_00c3: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)ValuableDiscover.instance == (Object)null) && !((Object)(object)_physGrab == (Object)null)) { ValuableDiscoverCustom val = ((Component)_box).GetComponent<ValuableDiscoverCustom>(); if ((Object)(object)val == (Object)null) { val = ((Component)_box).gameObject.AddComponent<ValuableDiscoverCustom>(); } GetRarityColors(_box.rarity, out var corner, out var middle); float waitTime = val.waitTime; Color colorCorner = val.colorCorner; Color colorMiddle = val.colorMiddle; val.colorCorner = corner; val.colorMiddle = middle; val.waitTime = 99999f; ValuableDiscover.instance.New(_physGrab, (State)3, val); val.waitTime = waitTime; val.colorCorner = colorCorner; val.colorMiddle = colorMiddle; int childCount = ((Component)ValuableDiscover.instance).transform.childCount; if (childCount > 0) { _activeGraphic = ((Component)((Component)ValuableDiscover.instance).transform.GetChild(childCount - 1)).GetComponent<ValuableDiscoverGraphic>(); } } } private void GetRarityColors(Rarity rarity, out Color corner, out Color middle) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected I4, but got Unknown //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: 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_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0096: 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_00c4: 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_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) switch ((int)rarity) { case 0: corner = ColorCommon; middle = new Color(ColorCommon.r, ColorCommon.g, ColorCommon.b, 0.3f); break; case 1: corner = ColorUncommon; middle = new Color(ColorUncommon.r, ColorUncommon.g, ColorUncommon.b, 0.3f); break; case 2: corner = ColorRare; middle = new Color(ColorRare.r, ColorRare.g, ColorRare.b, 0.3f); break; default: corner = ColorUltraRare; middle = new Color(ColorUltraRare.r, ColorUltraRare.g, ColorUltraRare.b, 0.3f); break; } } } [HarmonyPatch(typeof(ValuableDirector), "SetupHost")] public static class SetupHostPatch { public static void Prefix() { if (Plugin.Cfg.Enabled.Value && SemiFunc.RunIsLevel()) { BoxSpawnTracker.Reset(); Plugin.Log.LogInfo((object)$"[RarityWeightMod] Level start | Mode={Plugin.Cfg.ModeValue} | BoxCount={Plugin.Cfg.BoxCount.Value}"); } } } [HarmonyPatch(typeof(ValuableDirector), "SpawnCosmeticWorldObject")] public static class SpawnCosmeticWorldObjectPatch { public static bool Prefix(ValuableDirector __instance, ref Rarity _cosmeticRarity, int[] _volumeIndex, List<ValuableVolume>[] _volumes) { //IL_0113: 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_0120: Expected I4, but got Unknown //IL_0134: Unknown result type (might be due to invalid IL or missing references) if (!Plugin.Cfg.Enabled.Value) { return true; } if (!SemiFunc.RunIsLevel()) { return true; } if (Plugin.Cfg.ModeValue == SpawnMode.Volume_Offline || Plugin.Cfg.ModeValue == SpawnMode.All_Offline) { if (BoxSpawnTracker.SpawnedCount >= Plugin.Cfg.BoxCount.Value) { Plugin.Log.LogInfo((object)$"[RarityWeightMod] Limit reached ({BoxSpawnTracker.SpawnedCount}/{Plugin.Cfg.BoxCount.Value}), skipping."); return false; } BoxSpawnTracker.SpawnedCount++; } else { int num = BoxSpawnTracker.AutoLevelLimit + 1; if (BoxSpawnTracker.SpawnedCount >= num) { Plugin.Log.LogInfo((object)$"[RarityWeightMod] AutoLevel limit reached ({BoxSpawnTracker.SpawnedCount}/{num}), skipping."); return false; } BoxSpawnTracker.SpawnedCount++; } Rarity val = _cosmeticRarity; _cosmeticRarity = (Rarity)(int)Plugin.Cfg.PickRarity(); Plugin.Log.LogInfo((object)$"[RarityWeightMod] Box {BoxSpawnTracker.SpawnedCount} | {val} → {_cosmeticRarity}"); return true; } } [HarmonyPatch(typeof(ValuableDirector), "CosmeticWorldObjectLevelLoopsClampedGet")] public static class LoopsClampedPatch { public static void Postfix(ref int __result) { if (!Plugin.Cfg.Enabled.Value) { return; } switch (Plugin.Cfg.ModeValue) { case SpawnMode.Volume_Offline: { int num3 = Plugin.Cfg.BoxCount.Value - 1; if (__result < num3) { __result = num3; } break; } case SpawnMode.All_Offline: { int num2 = Plugin.Cfg.BoxCount.Value * 3 - 1; if (__result < num2) { __result = num2; } break; } case SpawnMode.AutoLevel_Online: { BoxSpawnTracker.AutoLevelLimit = __result; int num = (__result + 1) * 3 - 1; if (num < 0) { num = 0; } if (__result < num) { __result = num; } int cosmeticWorldObjectsLevelLoop = ValuableDirector.instance.cosmeticWorldObjectsLevelLoop; int cosmeticWorldObjectsLevelLoopsMax = ValuableDirector.instance.cosmeticWorldObjectsLevelLoopsMax; int levelsCompleted = RunManager.instance.levelsCompleted; Plugin.Log.LogInfo((object)$"[RarityWeightMod] AutoLevel | levelsCompleted={levelsCompleted} | LevelLoop={cosmeticWorldObjectsLevelLoop} | LoopsMax={cosmeticWorldObjectsLevelLoopsMax} | limit={BoxSpawnTracker.AutoLevelLimit} | canSell={BoxSpawnTracker.AutoLevelLimit + 1} | loop→{__result}"); break; } } } } [HarmonyPatch(typeof(ValuableDirector), "CosmeticWorldObjectLevelLoopsGet")] public static class LoopsGetPatch { public static void Postfix(ref int __result) { if (!Plugin.Cfg.Enabled.Value || !SemiFunc.RunIsLevel()) { return; } if (Plugin.Cfg.ModeValue == SpawnMode.All_Offline) { if (BoxSpawnTracker.SpawnedCount < Plugin.Cfg.BoxCount.Value) { __result = 9999; } } else if (Plugin.Cfg.ModeValue == SpawnMode.AutoLevel_Online) { int num = BoxSpawnTracker.AutoLevelLimit + 1; if (BoxSpawnTracker.SpawnedCount < num) { __result = 9999; } } } } public static class BoxSpawnTracker { public static int SpawnedCount; public static int AutoLevelLimit; public static void Reset() { SpawnedCount = 0; AutoLevelLimit = 0; } } }