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 BepInEx; using BepInEx.Configuration; using Landfall.TABS; using UnityEngine; using UnityEngine.Events; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("Tabs Poof Mod")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Tabs Poof Mod")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("8aad4f38-2ad4-4206-bf0b-7d28fb6d5c2e")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace zeronuke; [BepInPlugin("tabs.bayturtleking.zero", "Zero", "1.0.0")] public class thebigredbutton : BaseUnityPlugin { private ConfigEntry whichkeymakesboom; private ConfigEntry thefbiwillplayitoff; private ConfigEntry howbigisit; private ConfigEntry howhardhitter; private ConfigEntry howbigofpush; private ConfigEntry pauseeeeee; private ConfigEntry whereeventhedoshoulddie; private static GameObject stolengoodsfromthegame; private static readonly string[] explosivehints = new string[9] { "tnt", "explosive", "explosion_tnt", "bomb", "grenade", "dynamite", "barrel_explo", "powderkeg", "keg" }; private static readonly string[] notwhatwewant = new string[10] { "boulder", "cannonball", "cannon", "rock", "arrow", "spear", "ballista", "catapult", "projectile", "impact" }; private void Awake() { whichkeymakesboom = ((BaseUnityPlugin)this).Config.Bind("general", "nukekey", (KeyCode)112, "the key that triggers the nuke"); thefbiwillplayitoff = ((BaseUnityPlugin)this).Config.Bind("general", "maxexplosions", 40, "the max explosions per nuke"); howbigisit = ((BaseUnityPlugin)this).Config.Bind("boom", "explosionradius", 6f, "size of each explosion"); howhardhitter = ((BaseUnityPlugin)this).Config.Bind("boom", "explosiondamage", 150f, "damage done by each explosion"); howbigofpush = ((BaseUnityPlugin)this).Config.Bind("boom", "explosionforce", 40f, "knockback force of each explosion"); pauseeeeee = ((BaseUnityPlugin)this).Config.Bind("general", "delaybetweenexplosions", 0.08f, "seconds between each explosion"); whereeventhedoshoulddie = ((BaseUnityPlugin)this).Config.Bind("general", "fallbackspreadradius", 30f, "spread used if ZERO units are there"); } private void Update() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) if (Input.GetKeyDown(whichkeymakesboom.Value)) { ((MonoBehaviour)this).StartCoroutine(theywillwishtheydidntdothis()); } } private IEnumerator theywillwishtheydidntdothis() { List list = rounduptheunfortunatepeoples(); foreach (Vector3 item in list) { dosomearsonheree(item); if (pauseeeeee.Value > 0f) { yield return (object)new WaitForSeconds(pauseeeeee.Value); } } } private List rounduptheunfortunatepeoples() { //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) List list = new List(); Unit[] array = Object.FindObjectsOfType(); if (array.Length != 0) { int num = Mathf.Min(array.Length, thefbiwillplayitoff.Value); for (int i = 0; i < num; i++) { if (Object.op_Implicit((Object)(object)array[i])) { list.Add(((Component)array[i]).transform.position); } } } else { int num2 = Mathf.Min(12, thefbiwillplayitoff.Value); for (int j = 0; j < num2; j++) { list.Add(youarentveryluckyifyouarehere(whereeventhedoshoulddie.Value)); } } return list; } private Vector3 youarentveryluckyifyouarehere(float radius) { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: 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) Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(Random.Range(0f - radius, radius), 200f, Random.Range(0f - radius, radius)); int mask = LayerMask.GetMask(new string[1] { "Map" }); RaycastHit val2 = default(RaycastHit); if (Physics.Raycast(val, Vector3.down, ref val2, 1000f, mask)) { return ((RaycastHit)(ref val2)).point + Vector3.up; } return new Vector3(val.x, 1f, val.z); } private void dosomearsonheree(Vector3 spot) { //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Expected O, but got Unknown //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) GameObject val = letsjustguessiguess(); GameObject val2; Explosion val3; if ((Object)(object)val != (Object)null) { val2 = Object.Instantiate(val, spot, Quaternion.identity); ((Object)val2).name = "zeronukeexplosion"; val3 = val2.GetComponentInChildren(); if ((Object)(object)val3 == (Object)null) { val3 = val2.AddComponent(); } } else { val2 = new GameObject("zeronukeexplosion"); val2.transform.position = spot; val3 = val2.AddComponent(); } val3.damage = howhardhitter.Value; val3.radius = howbigisit.Value; val3.force = howbigofpush.Value; val3.forceDirection = (ForceDirection)0; val3.layerMask = LayerMask.op_Implicit(-1); val3.ignoreRoot = false; val3.ignoreTeamMates = false; explosivethingies(val3); val3.Explode(); Object.Destroy((Object)(object)val2, 2f); } private static GameObject letsjustguessiguess() { if ((Object)(object)stolengoodsfromthegame != (Object)null) { return stolengoodsfromthegame; } GameObject val = null; GameObject val2 = null; Explosion[] array = Resources.FindObjectsOfTypeAll(); foreach (Explosion val3 in array) { if ((Object)(object)val3 == (Object)null || (Object)(object)((Component)val3).gameObject == (Object)null || ((Object)((Component)val3).gameObject).name == "zeronukeexplosion" || (Object)(object)((Component)val3).GetComponentInParent() != (Object)null) { continue; } bool num = (Object)(object)((Component)val3).GetComponentInChildren(true) != (Object)null; bool flag = (Object)(object)((Component)val3).GetComponentInChildren(true) != (Object)null || (Object)(object)((Component)val3).GetComponentInChildren(true) != (Object)null; if (!num && !flag) { continue; } string text = ((Object)((Component)val3).gameObject).name.ToLowerInvariant(); bool flag2 = false; string[] array2 = notwhatwewant; foreach (string value in array2) { if (text.Contains(value)) { flag2 = true; break; } } if (flag2) { continue; } bool flag3 = false; array2 = explosivehints; foreach (string value2 in array2) { if (text.Contains(value2)) { flag3 = true; break; } } if (flag3 && (Object)(object)val == (Object)null) { val = ((Component)val3).gameObject; break; } if ((Object)(object)val2 == (Object)null) { val2 = ((Component)val3).gameObject; } } stolengoodsfromthegame = (((Object)(object)val != (Object)null) ? val : val2); return stolengoodsfromthegame; } private void explosivethingies(Explosion theexplod) { FieldInfo[] fields = typeof(Explosion).GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); foreach (FieldInfo fieldInfo in fields) { if (typeof(UnityEventBase).IsAssignableFrom(fieldInfo.FieldType) && fieldInfo.GetValue(theexplod) == null) { fieldInfo.SetValue(theexplod, Activator.CreateInstance(fieldInfo.FieldType)); } } } }