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 StartWithRandomWeapon v1.1.0
StartWithRandomWeapon.dll
Decompiled 5 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using StartWithRandomWeapon; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("StartWithRandomWeapon")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("StartWithRandomWeapon")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("53d41deb-9a66-4104-ad33-67b001526273")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] [BepInPlugin("com.osmarbriones.startwithrandomweapon", "StartWithRandomWeapon", "1.1.0")] public class StartWithRandomWeaponPlugin : BaseUnityPlugin { public static StartWithRandomWeaponPlugin Instance { get; set; } private void Awake() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown Instance = this; Log("StartWithRandomWeaponPlugin initializing..."); StartWithRandomWeaponConfig.BindConfig(); Harmony val = new Harmony("com.osmarbriones.startwithrandomweapon"); val.PatchAll(); Log("StartWithRandomWeaponPlugin initialized."); } public static void Log(string Message) { ((BaseUnityPlugin)Instance).Logger.LogInfo((object)Message); } } namespace StartWithRandomWeapon; [HarmonyPatch(typeof(RunManager), "SetRunLevel")] public class RunManager_SetRunLevel_Patch { private static void Postfix(RunManager __instance) { if (CanSpawn(__instance)) { StartWithRandomWeaponConfig.ReloadConfig(); StatsManager instance = StatsManager.instance; List<string> list = BuildAvailableList(instance); if (list.Count == 0) { StartWithRandomWeaponPlugin.Log("No configured starting items are valid/present."); return; } int spawnCount = GetSpawnCount(list.Count); List<string> list2 = SelectItems(list, spawnCount); PurchaseItems(instance, list2); StartWithRandomWeaponPlugin.Log(string.Format("Spawned {0} unique starting item(s): {1}", list2.Count, string.Join(", ", list2))); } } private static bool CanSpawn(RunManager runManager) { if (runManager.levelsCompleted != 0) { return false; } return (Object)(object)StatsManager.instance != (Object)null; } private static List<string> BuildAvailableList(StatsManager stats) { return (from k in StartWithRandomWeaponConfig.GetEnabledWeaponKeys() where stats.itemDictionary.ContainsKey(k) select k).Where(delegate(string k) { Item val = stats.itemDictionary[k]; if ((Object)(object)val == (Object)null) { return false; } if (!val.physicalItem) { return false; } if (val.disabled) { return false; } return (!stats.itemsPurchased.ContainsKey(k) || stats.itemsPurchased[k] <= 0) ? true : false; }).Distinct().ToList(); } private static int GetSpawnCount(int availableCount) { if (StartWithRandomWeaponConfig.SpawnOnePerPlayer != null && StartWithRandomWeaponConfig.SpawnOnePerPlayer.Value) { int num = 1; if ((Object)(object)GameDirector.instance != (Object)null && GameDirector.instance.PlayerList != null) { num = GameDirector.instance.PlayerList.Count; } if (num < 1) { num = 1; } if (num > availableCount) { num = availableCount; } return num; } int num2 = StartWithRandomWeaponConfig.WeaponsToSpawn?.Value ?? 1; if (num2 < 1) { num2 = 1; } if (num2 > 50) { num2 = 50; } if (num2 > availableCount) { num2 = availableCount; } return num2; } private static List<string> SelectItems(List<string> available, int count) { Shuffle(available); return available.Take(count).ToList(); } private static void PurchaseItems(StatsManager statsManager, List<string> selectedItems) { foreach (string selectedItem in selectedItems) { statsManager.ItemPurchase(selectedItem); } } private static void Shuffle(List<string> list) { for (int num = list.Count - 1; num > 0; num--) { int num2 = Random.Range(0, num + 1); if (num2 != num) { string value = list[num]; list[num] = list[num2]; list[num2] = value; } } } } internal static class StartWithRandomWeaponConfig { public static ConfigEntry<int> WeaponsToSpawn; public static ConfigEntry<bool> SpawnOnePerPlayer; public static Dictionary<string, ConfigEntry<bool>> WeaponToggles = new Dictionary<string, ConfigEntry<bool>>(); public static StartWithRandomWeaponPlugin Plugin => StartWithRandomWeaponPlugin.Instance; public static Dictionary<string, bool> WeaponDefaults { get; } = new Dictionary<string, bool> { { "Item Rubber Duck", true }, { "Item Melee Inflatable Hammer", true }, { "Item Melee Frying Pan", true }, { "Item Melee Sword", true }, { "Item Melee Stun Baton", true }, { "Item Melee Baseball Bat", true }, { "Item Melee Sledge Hammer", false }, { "Item Gun Shockwave", false }, { "Item Gun Stun", false }, { "Item Gun Handgun", false }, { "Item Gun Tranq", false }, { "Item Gun Laser", false }, { "Item Gun Shotgun", false }, { "Item Cart Cannon", false }, { "Item Cart Laser", false } }; public static void BindConfig() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Expected O, but got Unknown //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Expected O, but got Unknown WeaponsToSpawn = ((BaseUnityPlugin)Plugin).Config.Bind<int>("General", "WeaponsToSpawn", 3, new ConfigDescription("Number of starting weapons to spawn (ignored if SpawnOnePerPlayer is true).", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 50), Array.Empty<object>())); SpawnOnePerPlayer = ((BaseUnityPlugin)Plugin).Config.Bind<bool>("General", "SpawnOnePerPlayer", true, new ConfigDescription("If true, ignore WeaponsToSpawn and spawn one starting weapon per current player.", (AcceptableValueBase)null, Array.Empty<object>())); BindWeaponToggles(); StartWithRandomWeaponPlugin.Log($"Config loaded: WeaponsToSpawn = {WeaponsToSpawn.Value}, " + $"SpawnOnePerPlayer = {SpawnOnePerPlayer.Value}, " + "WeaponToggles = " + string.Join(", ", WeaponToggles.Select((KeyValuePair<string, ConfigEntry<bool>> kvp) => $"{kvp.Key} = {kvp.Value.Value}"))); } public static void BindWeaponToggles() { //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Expected O, but got Unknown foreach (KeyValuePair<string, bool> weaponDefault in WeaponDefaults) { string key = weaponDefault.Key; bool value = weaponDefault.Value; ConfigEntry<bool> value2 = ((BaseUnityPlugin)Plugin).Config.Bind<bool>("Weapons", key, value, new ConfigDescription("Enable spawning " + key + " weapon at start.", (AcceptableValueBase)null, Array.Empty<object>())); WeaponToggles[key] = value2; } } public static void ReloadConfig() { ((BaseUnityPlugin)Plugin).Config.Reload(); } public static List<string> GetEnabledWeaponKeys() { return (from kvp in WeaponToggles where kvp.Value.Value select kvp.Key).ToList(); } }