using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Logging; using CheatsAPI; using HarmonyLib; using Notiffy.API; using SillyCheats; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Events; using UnityEngine.ResourceManagement.AsyncOperations; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("UKMod template")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("UKMod template")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("3d018c2f-f5bc-47be-a844-3e9888579d1f")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] public class ExplodeOnShot : ICheat { public static bool Active; public string LongName => "Explode Enemies on Hit"; public string Identifier => "sillycheats.explodeonhit"; public string ButtonEnabledOverride => null; public string ButtonDisabledOverride => null; public string Icon => "death"; public bool IsActive => Active; public bool DefaultState => false; public StatePersistenceMode PersistenceMode => (StatePersistenceMode)0; public IEnumerator Coroutine(CheatsManager manager) { yield break; } public void Enable(CheatsManager manager) { Active = true; } public void Disable() { Active = false; } } public class FullestAutoCheat : ICheat { public static bool Active; public string LongName => "Fullest Auto"; public string Identifier => "sillycheats.fullestauto"; public string ButtonEnabledOverride => null; public string ButtonDisabledOverride => null; public string Icon => "no-weapon-cooldown"; public bool IsActive => Active; public bool DefaultState => false; public StatePersistenceMode PersistenceMode => (StatePersistenceMode)0; public IEnumerator Coroutine(CheatsManager manager) { yield break; } public void Enable(CheatsManager manager) { Active = true; } public void Disable() { Active = false; } } [HarmonyPatch(typeof(EnemyIdentifier), "DeliverDamage")] public static class Patches { private static GameObject explosionPrefab; private static bool loadStarted; public static void PreloadExplosionPrefab() { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) if (!loadStarted) { loadStarted = true; AsyncOperationHandle val = Addressables.LoadAssetAsync((object)"Assets/Prefabs/Attacks and Projectiles/Explosions/Explosion Super.prefab"); val.Completed += delegate(AsyncOperationHandle h) { explosionPrefab = h.Result; }; } } [HarmonyPostfix] private static void Postfix(Vector3 hitPoint, bool fromExplosion, GameObject sourceWeapon) { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) if (ExplodeOnShot.Active && !fromExplosion && !((Object)(object)sourceWeapon == (Object)null)) { if ((Object)(object)explosionPrefab == (Object)null) { PreloadExplosionPrefab(); } else { Object.Instantiate(explosionPrefab, hitPoint, Quaternion.identity); } } } } [HarmonyPatch("Update")] public class FullestAutoPatches { [HarmonyPatch(typeof(Revolver))] [HarmonyPrefix] public static bool RevolverPrefix(Revolver __instance) { if (!FullestAutoCheat.Active) { return true; } __instance.gunReady = true; __instance.shootReady = true; __instance.pierceShotCharge = 100f; __instance.coinCharge = 500f; __instance.anim.speed = 999f; return true; } [HarmonyPatch(typeof(Shotgun))] [HarmonyPrefix] public static bool ShotgunPrefix(Shotgun __instance) { if (!FullestAutoCheat.Active) { return true; } __instance.gunReady = true; __instance.anim.speed = 999f; return true; } [HarmonyPatch(typeof(Nailgun))] [HarmonyPrefix] public static bool NailgunPrefix(Nailgun __instance) { if (!FullestAutoCheat.Active) { return true; } __instance.fireCooldown = 0f; __instance.anim.speed = 999f; return true; } [HarmonyPatch(typeof(Railcannon))] [HarmonyPrefix] public static bool RailcannonPrefix(Railcannon __instance) { if (!FullestAutoCheat.Active) { return true; } __instance.wc.raicharge = 5f; __instance.anim.speed = 999f; return true; } [HarmonyPatch(typeof(RocketLauncher))] [HarmonyPrefix] public static bool RocketLauncherPrefix(RocketLauncher __instance) { if (!FullestAutoCheat.Active) { return true; } __instance.rateOfFire = 0f; __instance.anim.speed = 999f; __instance.cooldown = 0f; __instance.napalmProjectileCooldown = 0f; MonoSingleton.Instance.rocketCannonballCharge = 1f; MonoSingleton.Instance.rocketFreezeTime = 1f; MonoSingleton.Instance.rocketNapalmFuel = 1f; return true; } [HarmonyPatch(typeof(ShotgunHammer))] [HarmonyPrefix] public static bool ShotgunHammerPrefix(ShotgunHammer __instance) { if (!FullestAutoCheat.Active) { return true; } __instance.gunReady = true; __instance.anim.speed = 999f; return true; } } [HarmonyPatch(typeof(EnemyIdentifier), "Start")] public static class SplitOnKillPatch { private static readonly Dictionary templates = new Dictionary(); [HarmonyPostfix] private static void Postfix(EnemyIdentifier __instance) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Expected O, but got Unknown //IL_0056: Unknown result type (might be due to invalid IL or missing references) if (!templates.ContainsKey(__instance.enemyType)) { GameObject val = Object.Instantiate(((Component)__instance).gameObject); val.SetActive(false); Object.DontDestroyOnLoad((Object)(object)val); templates[__instance.enemyType] = val; } __instance.onDeath.AddListener((UnityAction)delegate { SplitOnKillLogic.TrySplit(__instance); }); } public static bool TryGetTemplate(EnemyType type, out GameObject template) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) return templates.TryGetValue(type, out template); } } public static class SplitOnKillLogic { private class SplitCounter { public int Count; } private const float SplitChance = 0.5f; private const int SplitAmount = 2; private const int MaxSplitsPerLineage = 50; private static readonly ConditionalWeakTable lineageCounters = new ConditionalWeakTable(); private static SplitCounter GetOrCreateCounter(EnemyIdentifier instance) { if (lineageCounters.TryGetValue(instance, out var value)) { return value; } SplitCounter splitCounter = new SplitCounter(); lineageCounters.Add(instance, splitCounter); return splitCounter; } public static void TrySplit(EnemyIdentifier instance) { //IL_0047: 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_0091: Unknown result type (might be due to invalid IL or missing references) if (!SplitOnKill.Active || Random.value > 0.5f) { return; } SplitCounter orCreateCounter = GetOrCreateCounter(instance); if (orCreateCounter.Count >= 50 || !SplitOnKillPatch.TryGetTemplate(instance.enemyType, out var template)) { return; } for (int i = 0; i < 2; i++) { if (orCreateCounter.Count >= 50) { break; } GameObject val = Object.Instantiate(template, ((Component)instance).transform.position, ((Component)instance).transform.rotation); val.SetActive(true); EnemyIdentifier component = val.GetComponent(); if ((Object)(object)component != (Object)null) { component.dontCountAsKills = true; lineageCounters.Add(component, orCreateCounter); } orCreateCounter.Count++; } } private static string GetPrefabPath(EnemyIdentifier instance) { string text = Regex.Replace(((Object)((Component)instance).gameObject).name, "[1-9]", ""); text = text.Replace(" ", "").Replace("(Clone)", "").Replace("()", ""); return "Assets/Prefabs/Enemies/" + text + ".prefab"; } } public class SuperSpeed : ICheat { public string LongName => "Super Speed"; public string Identifier => "sillycheats.superspeed"; public string ButtonEnabledOverride => null; public string ButtonDisabledOverride => null; public string Icon => "clash"; public bool IsActive { get; private set; } public bool DefaultState => false; public StatePersistenceMode PersistenceMode => (StatePersistenceMode)0; public void Enable(CheatsManager manager) { IsActive = true; } public void Disable() { IsActive = false; Time.timeScale = 1f; } public IEnumerator Coroutine(CheatsManager manager) { while (IsActive) { Time.timeScale = 5f; yield return null; } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { internal IgnoresAccessChecksToAttribute(string assemblyName) { } } } namespace SillyCheats { public class SplitOnKill : ICheat { public static bool Active; public string LongName => "Split On Kill"; public string Identifier => "sillycheats.splitkill"; public string ButtonEnabledOverride => null; public string ButtonDisabledOverride => null; public string Icon => null; public bool IsActive => Active; public bool DefaultState => false; public StatePersistenceMode PersistenceMode => (StatePersistenceMode)0; public IEnumerator Coroutine(CheatsManager manager) { yield break; } public void Enable(CheatsManager manager) { Active = true; } public void Disable() { Active = false; } } public static class RandomizerEvents { private static readonly List<(string message, Action action)> events = new List<(string, Action)> { ("Have another :3", DoDualWield), ("Mind if i borrow that for a moment?", DoRandomizeWeapon), ("An enemy has been executed!", DoKillRandomEnemy), ("Health my beloved", DoOverheal), ("I sure hope you like speed :^)", DoFullestAutoOn) }; public static void TriggerRandomEvent() { (string, Action) tuple = events[Random.Range(0, events.Count)]; tuple.Item2(); NotificationSystem.NotifySend("Chaos Mode", tuple.Item1, (Sprite)null, "", (Urgency)1, "NotifySend", 0u, (Dictionary)null, -1); } private static void DoDualWield() { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) GunControl instance = MonoSingleton.Instance; if (!((Object)(object)instance == (Object)null)) { GameObject val = new GameObject(); val.transform.SetParent(((Component)instance).transform, true); val.transform.localRotation = Quaternion.identity; val.transform.localPosition = Vector3.zero; DualWield val2 = val.AddComponent(); val2.delay = 0.05f; val2.juiceAmount = 30f; } } private static void DoRandomizeWeapon() { GunControl instance = MonoSingleton.Instance; if ((Object)(object)instance == (Object)null || instance.slots.Count == 0) { return; } List list = new List(); for (int i = 0; i < instance.slots.Count; i++) { if (instance.slots[i].Count > 0) { list.Add(i); } } if (list.Count != 0) { int num = list[Random.Range(0, list.Count)] + 1; int count = instance.slots[num - 1].Count; int value = Random.Range(0, count); instance.SwitchWeapon(num, (int?)value, false, false, false); } } private static void DoKillRandomEnemy() { List currentEnemies = MonoSingleton.Instance.GetCurrentEnemies(); if (currentEnemies == null) { return; } List list = new List(); foreach (EnemyIdentifier item in currentEnemies) { if ((Object)(object)item != (Object)null && !item.dead) { list.Add(item); } } if (list.Count != 0) { EnemyIdentifier val = list[Random.Range(0, list.Count)]; val.InstaKill(); } } private static void DoOverheal() { NewMovement instance = MonoSingleton.Instance; if (!((Object)(object)instance == (Object)null)) { instance.hp += 50; } } private static void DoFullestAutoOn() { FullestAutoCheat.Active = true; } } [BepInPlugin("com.nico.sillycheats", "Silly Cheats", "0.1.0")] public class Plugin : BaseUnityPlugin { public const string PluginGuid = "com.nico.sillycheats"; public const string PluginName = "Silly Cheats"; public const string PluginVersion = "0.1.0"; internal static ManualLogSource Log; private void Awake() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Expected O, but got Unknown Log = ((BaseUnityPlugin)this).Logger; Log.LogInfo((object)"Silly Cheats loaded!"); Harmony val = new Harmony("com.nico.sillycheats"); val.PatchAll(); CheatInjector.RegisterCheats((ICheat[])(object)new ICheat[4] { new ExplodeOnShot(), new SuperSpeed(), new FullestAutoCheat(), new SplitOnKill() }, "silly cheats"); } } public class Randomizer : ICheat { public string LongName => "Randomizer"; public string Identifier => "sillycheats.randomizer"; public string ButtonEnabledOverride => null; public string ButtonDisabledOverride => null; public string Icon => null; public bool IsActive { get; private set; } public bool DefaultState => false; public StatePersistenceMode PersistenceMode => (StatePersistenceMode)0; public void Enable(CheatsManager manager) { IsActive = true; } public void Disable() { IsActive = false; } public IEnumerator Coroutine(CheatsManager manager) { while (IsActive) { float wait = Random.Range(10f, 15f); yield return (object)new WaitForSeconds(wait); if (!IsActive) { break; } RandomizerEvents.TriggerRandomEvent(); } } } }