using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BoneLib; using BoneLib.BoneMenu; using BoneLib.Notifications; using FistShooterNS; using Il2CppInterop.Runtime.InteropTypes; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Il2CppSLZ.Marrow; using Il2CppSLZ.Marrow.Data; using Il2CppSLZ.Marrow.Pool; using Il2CppSLZ.Marrow.Warehouse; using Il2CppSystem.Collections.Generic; using LabFusion.Marrow.Pool; using LabFusion.Network; using LabFusion.RPC; using MelonLoader; using MelonLoader.Preferences; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: MelonInfo(typeof(FistShooterMod), "Fireball", "1.0.0", "Dave", null)] [assembly: MelonGame("Stress Level Zero", "BONELAB")] [assembly: AssemblyTitle("Fireball")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Fireball")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("75ea7173-a6e0-4232-b83b-d0a7217605e7")] [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 FistShooterNS; public class FistShooterMod : MelonMod { private const string BARCODE_FIREBALL = "c1534c5a-355a-4734-8103-5ded46697265"; private const string BARCODE_VOIDBALL = "SLZ.BONELAB.Content.Spawnable.ProjectileVoidBall"; private static readonly string[] PROJECTILE_NAMES = new string[2] { "Fireball", "Void Ball" }; private static readonly string[] PROJECTILE_BARCODES = new string[2] { "c1534c5a-355a-4734-8103-5ded46697265", "SLZ.BONELAB.Content.Spawnable.ProjectileVoidBall" }; private static bool _enabled = false; private static float _shootSpeed = 20f; private static float _fireRate = 0.3f; private static int _handMode = 0; private static int _leftProjectile = 0; private static int _rightProjectile = 0; private static float _projectileSize = 1f; private static bool _orbitActive = false; private static float _orbitRadius = 1.5f; private static float _orbitSpeed = 3f; private static int _orbitCount = 5; private static float _orbitHeight = 0.3f; private static string _orbitBarcode = "c1534c5a-355a-4734-8103-5ded46697265"; private static List _orbitObjects = new List(); private static FunctionElement _orbitElement = null; private static float _lastYTime = -999f; private static bool _yWasPressed = false; private const float DOUBLE_CLICK_WINDOW = 0.35f; private static float _leftCooldown = 0f; private static float _rightCooldown = 0f; private static FunctionElement _statusElement = null; private static FunctionElement _handElement = null; private static FunctionElement _leftProjElement = null; private static FunctionElement _rightProjElement = null; private static readonly string[] HAND_LABELS = new string[3] { "Left Hand", "Right Hand", "Both Hands" }; private static bool _fusionChecked = false; private static bool _fusionReady = false; private static bool _debugOpen = false; private static string _searchText = ""; private static string _lastSearch = "\0"; private static Vector2 _scroll = Vector2.zero; private static List _allCrates = new List(); private static List _filtered = new List(); private static bool _cratesLoaded = false; private static int _pageIndex = 0; private const int PER_PAGE = 9; private static string _copiedMsg = ""; private static float _copiedTimer = 0f; private static MelonPreferences_Category _cat; private static MelonPreferences_Entry _prefSpeed; private static MelonPreferences_Entry _prefRate; private static Vector3 _flingDir = Vector3.forward; public override void OnInitializeMelon() { //IL_0075: 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_00bb: 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_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Unknown result type (might be due to invalid IL or missing references) //IL_01ff: Unknown result type (might be due to invalid IL or missing references) //IL_0242: Unknown result type (might be due to invalid IL or missing references) //IL_0254: Unknown result type (might be due to invalid IL or missing references) //IL_0288: Unknown result type (might be due to invalid IL or missing references) //IL_02cc: Unknown result type (might be due to invalid IL or missing references) //IL_0310: Unknown result type (might be due to invalid IL or missing references) //IL_0355: Unknown result type (might be due to invalid IL or missing references) //IL_0399: Unknown result type (might be due to invalid IL or missing references) //IL_03cd: Unknown result type (might be due to invalid IL or missing references) _cat = MelonPreferences.CreateCategory("Fireball"); _prefSpeed = _cat.CreateEntry("ShootSpeed", 20f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null); _prefRate = _cat.CreateEntry("FireRate", 0.3f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null); _shootSpeed = _prefSpeed.Value; _fireRate = _prefRate.Value; Page obj = Page.Root.CreatePage("Fireball", Color.red, 0, true); _statusElement = obj.CreateFunction("Status: OFF", Color.red, (Action)delegate { }); _handElement = obj.CreateFunction("Hand: Left Hand", Color.cyan, (Action)delegate { _handMode = (_handMode + 1) % 3; ((Element)_handElement).ElementName = "Hand: " + HAND_LABELS[_handMode]; }); _leftProjElement = obj.CreateFunction("Left: " + PROJECTILE_NAMES[_leftProjectile], Color.yellow, (Action)delegate { _leftProjectile = (_leftProjectile + 1) % PROJECTILE_NAMES.Length; ((Element)_leftProjElement).ElementName = "Left: " + PROJECTILE_NAMES[_leftProjectile]; }); _rightProjElement = obj.CreateFunction("Right: " + PROJECTILE_NAMES[_rightProjectile], Color.magenta, (Action)delegate { _rightProjectile = (_rightProjectile + 1) % PROJECTILE_NAMES.Length; ((Element)_rightProjElement).ElementName = "Right: " + PROJECTILE_NAMES[_rightProjectile]; }); obj.CreateFloat("Shoot Speed", Color.yellow, _shootSpeed, 5f, 5f, 200f, (Action)delegate(float v) { _shootSpeed = v; _prefSpeed.Value = v; MelonPreferences.Save(); }); obj.CreateFloat("Fire Rate", Color.white, _fireRate, 0.05f, 0.05f, 2f, (Action)delegate(float v) { _fireRate = v; _prefRate.Value = v; MelonPreferences.Save(); }); obj.CreateFloat("Projectile Size", Color.white, _projectileSize, 0.5f, 0.5f, 10f, (Action)delegate(float v) { _projectileSize = v; }); Page obj2 = obj.CreatePage("Orbit Mode", Color.cyan, 0, true); _orbitElement = obj2.CreateFunction("Orbit: OFF", Color.red, (Action)delegate { //IL_003d: 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) _orbitActive = !_orbitActive; ((Element)_orbitElement).ElementName = (_orbitActive ? "Orbit: ON" : "Orbit: OFF"); ((Element)_orbitElement).ElementColor = (_orbitActive ? Color.green : Color.red); if (_orbitActive) { SpawnOrbit(); } else { DespawnOrbit(); } }); obj2.CreateFloat("Radius", Color.cyan, _orbitRadius, 0.25f, 0.5f, 5f, (Action)delegate(float v) { _orbitRadius = v; }); obj2.CreateFloat("Speed", Color.white, _orbitSpeed, 0.5f, 0.5f, 10f, (Action)delegate(float v) { _orbitSpeed = v; }); obj2.CreateFloat("Count", Color.yellow, (float)_orbitCount, 1f, 1f, 20f, (Action)delegate(float v) { _orbitCount = (int)v; }); obj2.CreateFloat("Height Offset", Color.white, _orbitHeight, 0.1f, -1f, 2f, (Action)delegate(float v) { _orbitHeight = v; }); obj2.CreateString("Custom Barcode", Color.green, _orbitBarcode, (Action)delegate(string v) { if (!string.IsNullOrEmpty(v)) { _orbitBarcode = v; } MelonLogger.Msg("[Fireball] Orbit barcode: " + _orbitBarcode); }); obj2.CreateFunction("Respawn Orbit", Color.yellow, (Action)delegate { DespawnOrbit(); if (_orbitActive) { SpawnOrbit(); } }); MelonLogger.Msg("[Fireball] Loaded — double-tap Y to toggle"); } public override void OnLateInitializeMelon() { try { CacheFusion(); } catch { } } public override void OnUpdate() { //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_012d: 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) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Expected O, but got Unknown //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) if (Input.GetKeyDown((KeyCode)120)) { _debugOpen = !_debugOpen; if (_debugOpen && !_cratesLoaded) { LoadAllCrates(); } } if (_copiedTimer > 0f) { _copiedTimer -= Time.deltaTime; } if (_leftCooldown > 0f) { _leftCooldown -= Time.deltaTime; } if (_rightCooldown > 0f) { _rightCooldown -= Time.deltaTime; } bool flag = false; try { Hand leftHand = Player.LeftHand; if ((Object)(object)leftHand != (Object)null && (Object)(object)leftHand.Controller != (Object)null) { flag = leftHand.Controller._bButtonDown; } } catch { } if (flag && !_yWasPressed) { float time = Time.time; if (time - _lastYTime < 0.35f) { _enabled = !_enabled; if (_statusElement != null) { ((Element)_statusElement).ElementName = (_enabled ? "Status: ON" : "Status: OFF"); ((Element)_statusElement).ElementColor = (_enabled ? Color.green : Color.red); } Notifier.Send(new Notification { Title = NotificationText.op_Implicit("Fireball"), Message = NotificationText.op_Implicit(_enabled ? "ENABLED" : "DISABLED"), PopupLength = 1.5f, ShowTitleOnPopup = true }); MelonLogger.Msg("[Fireball] " + (_enabled ? "ON" : "OFF")); _lastYTime = -999f; } else { _lastYTime = time; } } _yWasPressed = flag; if (!_enabled) { return; } if (_orbitActive) { UpdateOrbit(); } try { if (_handMode == 0 || _handMode == 2) { ProcessHand(Player.LeftHand, ref _leftCooldown, PROJECTILE_BARCODES[_leftProjectile]); } if (_handMode == 1 || _handMode == 2) { ProcessHand(Player.RightHand, ref _rightCooldown, PROJECTILE_BARCODES[_rightProjectile]); } } catch { } } private static void ProcessHand(Hand hand, ref float cooldown, string barcode) { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006f: 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_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: 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_0085: 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) if ((Object)(object)hand == (Object)null || (Object)(object)hand.m_CurrentAttachedGO != (Object)null || cooldown > 0f) { return; } float num = 0f; try { if ((Object)(object)hand.Controller != (Object)null) { num = hand.Controller._primaryAxis; } } catch { return; } if (!(num < 0.7f)) { cooldown = _fireRate; Vector3 forward = ((Component)hand).transform.forward; Vector3 pos = ((Component)hand).transform.position + forward * 0.5f; Quaternion rot = Quaternion.LookRotation(forward); SpawnAndFling(pos, rot, forward, barcode); } } private static void SpawnAndFling(Vector3 pos, Quaternion rot, Vector3 dir, string barcode) { //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_001e: 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_0020: Unknown result type (might be due to invalid IL or missing references) bool flag = false; if (_fusionReady) { try { flag = HasServer(); } catch { } } if (flag && _fusionReady) { try { NetworkSpawn(pos, rot, dir, barcode); return; } catch (Exception ex) { MelonLogger.Warning("[Fireball] Net spawn fail: " + ex.Message); return; } } LocalSpawn(pos, rot, dir, barcode); } [MethodImpl(MethodImplOptions.NoInlining)] private static void LocalSpawn(Vector3 pos, Quaternion rot, Vector3 dir, string barcode) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown try { Spawnable val = new Spawnable { crateRef = new SpawnableCrateReference(barcode) }; LocalAssetSpawner.Register(val); LocalAssetSpawner.Spawn(val, pos, rot, (Action)delegate(Poolee poolee) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)poolee == (Object)null)) { FlingObject(((Component)poolee).gameObject, dir); } }); } catch (Exception ex) { MelonLogger.Warning("[Fireball] Local spawn: " + ex.Message); } } [MethodImpl(MethodImplOptions.NoInlining)] private static void NetworkSpawn(Vector3 pos, Quaternion rot, Vector3 dir, string barcode) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) Spawnable val = new Spawnable(); val.crateRef = new SpawnableCrateReference(barcode); _flingDir = dir; SpawnRequestInfo val2 = default(SpawnRequestInfo); val2.Spawnable = val; val2.Position = pos; val2.Rotation = rot; val2.SpawnEffect = false; val2.SpawnCallback = delegate(SpawnCallbackInfo info) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)info.Spawned != (Object)null) { FlingObject(info.Spawned, _flingDir); } }; NetworkAssetSpawner.Spawn(val2); } private static void FlingObject(GameObject go, Vector3 dir) { //IL_0012: 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) //IL_0045: 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_0056: Unknown result type (might be due to invalid IL or missing references) if (_projectileSize != 1f) { go.transform.localScale = Vector3.one * _projectileSize; } Rigidbody componentInChildren = go.GetComponentInChildren(); if ((Object)(object)componentInChildren != (Object)null) { componentInChildren.isKinematic = false; componentInChildren.useGravity = false; componentInChildren.velocity = dir * _shootSpeed; componentInChildren.angularVelocity = Vector3.zero; } try { PhysicsRig physicsRig = Player.RigManager.physicsRig; if (!((Object)(object)physicsRig != (Object)null)) { return; } Il2CppArrayBase componentsInChildren = go.GetComponentsInChildren(); Il2CppArrayBase componentsInChildren2 = ((Component)physicsRig).GetComponentsInChildren(); foreach (Collider item in componentsInChildren) { foreach (Collider item2 in componentsInChildren2) { Physics.IgnoreCollision(item, item2, true); } } } catch { } } [MethodImpl(MethodImplOptions.NoInlining)] private static void CacheFusion() { if (!_fusionChecked) { _fusionChecked = true; if (typeof(NetworkAssetSpawner) != null) { _fusionReady = true; } MelonLogger.Msg(_fusionReady ? "[Fireball] Fusion ready — networked spawning enabled" : "[Fireball] Fusion not found — local only"); } } [MethodImpl(MethodImplOptions.NoInlining)] private static bool HasServer() { return NetworkInfo.HasServer; } private static void LoadAllCrates() { _allCrates.Clear(); try { AssetWarehouse instance = AssetWarehouse.Instance; if (instance == null) { MelonLogger.Warning("[Fireball] Warehouse null"); return; } List crates = instance.GetCrates(); if (crates == null) { return; } int count = crates.Count; for (int i = 0; i < count; i++) { try { Crate val = crates[i]; if ((Object)(object)val == (Object)null || (Object)(object)((Il2CppObjectBase)val).TryCast() == (Object)null) { continue; } string text = ((Scannable)val).Title ?? "Unknown"; string text2 = ((((Scannable)val).Barcode != (Barcode)null) ? ((Scannable)val).Barcode.ID : ""); string text3 = "Unknown"; try { if ((Object)(object)val.Pallet != (Object)null) { text3 = val.Pallet.Author ?? "Unknown"; } } catch { } if (!string.IsNullOrEmpty(text2)) { _allCrates.Add(new string[3] { text, text3, text2 }); } } catch { } } _allCrates.Sort((string[] a, string[] b) => string.Compare(a[0], b[0], StringComparison.OrdinalIgnoreCase)); _cratesLoaded = true; _lastSearch = "\0"; MelonLogger.Msg($"[Fireball] Loaded {_allCrates.Count} crates"); } catch (Exception ex) { MelonLogger.Error("[Fireball] LoadCrates: " + ex.Message); } } private static void RefilterCrates() { _filtered.Clear(); string text = (_searchText ?? "").ToLower().Trim(); foreach (string[] allCrate in _allCrates) { if (text.Length == 0 || allCrate[0].ToLower().Contains(text) || allCrate[1].ToLower().Contains(text) || allCrate[2].ToLower().Contains(text)) { _filtered.Add(allCrate); } } _lastSearch = _searchText; _pageIndex = 0; } public override void OnGUI() { //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_009d: 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) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Unknown result type (might be due to invalid IL or missing references) //IL_024f: Unknown result type (might be due to invalid IL or missing references) //IL_02d4: Unknown result type (might be due to invalid IL or missing references) //IL_02f8: Unknown result type (might be due to invalid IL or missing references) //IL_0307: Unknown result type (might be due to invalid IL or missing references) //IL_0283: Unknown result type (might be due to invalid IL or missing references) //IL_02a7: Unknown result type (might be due to invalid IL or missing references) //IL_02b6: Unknown result type (might be due to invalid IL or missing references) //IL_039d: Unknown result type (might be due to invalid IL or missing references) //IL_03c2: Unknown result type (might be due to invalid IL or missing references) //IL_03d1: Unknown result type (might be due to invalid IL or missing references) //IL_041c: Unknown result type (might be due to invalid IL or missing references) //IL_0445: Unknown result type (might be due to invalid IL or missing references) //IL_0465: Unknown result type (might be due to invalid IL or missing references) //IL_047d: Unknown result type (might be due to invalid IL or missing references) //IL_04c6: Unknown result type (might be due to invalid IL or missing references) //IL_04ec: Unknown result type (might be due to invalid IL or missing references) //IL_04f8: Unknown result type (might be due to invalid IL or missing references) //IL_0516: Unknown result type (might be due to invalid IL or missing references) //IL_055e: Unknown result type (might be due to invalid IL or missing references) if (!_debugOpen) { return; } if (_searchText != _lastSearch) { RefilterCrates(); } float num = 660f; float num2 = 600f; float num3 = ((float)Screen.width - num) / 2f; float num4 = ((float)Screen.height - num2) / 2f; GUI.color = new Color(0.08f, 0.08f, 0.1f, 0.92f); GUI.Box(new Rect(num3, num4, num, num2), ""); GUI.color = Color.white; GUI.Label(new Rect(num3 + 20f, num4 + 12f, num - 40f, 25f), $"BARCODE BROWSER — {_filtered.Count} results (press X to close)"); GUI.Label(new Rect(num3 + 20f, num4 + 44f, 60f, 25f), "Search:"); _searchText = GUI.TextField(new Rect(num3 + 85f, num4 + 44f, num - 290f, 26f), _searchText ?? ""); if (GUI.Button(new Rect(num3 + num - 195f, num4 + 44f, 80f, 26f), "Clear")) { _searchText = ""; } if (GUI.Button(new Rect(num3 + num - 105f, num4 + 44f, 85f, 26f), "Reload")) { _cratesLoaded = false; LoadAllCrates(); } int num5 = Mathf.Max(1, Mathf.CeilToInt((float)_filtered.Count / 9f)); _pageIndex = Mathf.Clamp(_pageIndex, 0, num5 - 1); if (GUI.Button(new Rect(num3 + 20f, num4 + 78f, 70f, 26f), "< Prev") && _pageIndex > 0) { _pageIndex--; } GUI.Label(new Rect(num3 + 98f, num4 + 80f, 130f, 24f), $"Page {_pageIndex + 1} / {num5}"); if (GUI.Button(new Rect(num3 + 215f, num4 + 78f, 70f, 26f), "Next >") && _pageIndex < num5 - 1) { _pageIndex++; } if (_copiedTimer > 0f) { GUI.color = Color.green; GUI.Label(new Rect(num3 + 300f, num4 + 80f, num - 320f, 24f), _copiedMsg); GUI.color = Color.white; } GUI.color = new Color(1f, 1f, 1f, 0.15f); GUI.Box(new Rect(num3 + 20f, num4 + 112f, num - 40f, 1f), ""); GUI.color = Color.white; float num6 = num4 + 122f; float num7 = num3 + num - 200f; float num8 = num7 - (num3 + 20f) - 10f; int num9 = _pageIndex * 9; int num10 = Mathf.Min(num9 + 9, _filtered.Count); for (int i = num9; i < num10; i++) { string[] array = _filtered[i]; int num11 = i - num9; float num12 = num6 + (float)num11 * 48f; if (num11 % 2 == 0) { GUI.color = new Color(1f, 1f, 1f, 0.04f); GUI.Box(new Rect(num3 + 12f, num12 - 2f, num - 24f, 44f), ""); GUI.color = Color.white; } string text = ((array[0].Length > 42) ? (array[0].Substring(0, 40) + "..") : array[0]); GUI.Label(new Rect(num3 + 20f, num12 + 4f, num8, 20f), text ?? ""); GUI.color = new Color(0.6f, 0.85f, 1f, 1f); GUI.Label(new Rect(num3 + 20f, num12 + 22f, num8, 18f), "by " + array[1]); GUI.color = Color.white; string text2 = ((array[2].Length > 48) ? (array[2].Substring(0, 46) + "..") : array[2]); GUI.color = new Color(0.55f, 0.55f, 0.58f, 1f); GUI.Label(new Rect(num3 + num8 - 240f, num12 + 22f, 250f, 18f), text2); GUI.color = Color.white; if (GUI.Button(new Rect(num7, num12 + 8f, 88f, 30f), "Copy")) { GUIUtility.systemCopyBuffer = array[2]; _copiedMsg = "Copied to clipboard!"; _copiedTimer = 2f; } if (GUI.Button(new Rect(num7 + 92f, num12 + 8f, 88f, 30f), "Use Orbit")) { _orbitBarcode = array[2]; _copiedMsg = "Orbit set: " + array[0]; _copiedTimer = 2f; } } } [MethodImpl(MethodImplOptions.NoInlining)] private static void SpawnOrbit() { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: 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) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0067: 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_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: 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_00e0: Expected O, but got Unknown //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Expected O, but got Unknown //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: 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_0110: Expected O, but got Unknown DespawnOrbit(); Vector3 val = Player.Head.position + Player.Head.forward * 2f; bool flag = false; if (_fusionReady) { try { flag = HasServer(); } catch { } } for (int i = 0; i < _orbitCount; i++) { if (flag) { try { Spawnable spawnable = LocalAssetSpawner.CreateSpawnable(_orbitBarcode); SpawnRequestInfo val2 = default(SpawnRequestInfo); val2.Spawnable = spawnable; val2.Position = val; val2.Rotation = Quaternion.identity; val2.SpawnEffect = false; val2.SpawnCallback = delegate(SpawnCallbackInfo cb) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001e: 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_0067: 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_007c: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)cb.Spawned != (Object)null) { _orbitObjects.Add(cb.Spawned); Rigidbody component2 = cb.Spawned.GetComponent(); if ((Object)(object)component2 != (Object)null) { component2.useGravity = false; component2.drag = 5f; component2.angularDrag = 5f; component2.velocity = Vector3.zero; } if (_projectileSize != 1f) { cb.Spawned.transform.localScale = Vector3.one * _projectileSize; } } }; NetworkAssetSpawner.Spawn(val2); } catch (Exception ex) { MelonLogger.Warning("[Fireball] Orbit net spawn: " + ex.Message); } continue; } try { Spawnable val3 = new Spawnable { crateRef = new SpawnableCrateReference(_orbitBarcode) }; LocalAssetSpawner.Register(val3); LocalAssetSpawner.Spawn(val3, val, Quaternion.identity, (Action)delegate(Poolee poolee) { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)poolee == (Object)null)) { _orbitObjects.Add(((Component)poolee).gameObject); Rigidbody component = ((Component)poolee).GetComponent(); if ((Object)(object)component != (Object)null) { component.useGravity = false; component.drag = 5f; component.angularDrag = 5f; component.velocity = Vector3.zero; } if (_projectileSize != 1f) { ((Component)poolee).transform.localScale = Vector3.one * _projectileSize; } } }); } catch (Exception ex2) { MelonLogger.Warning("[Fireball] Orbit local spawn: " + ex2.Message); } } MelonLogger.Msg($"[Fireball] Orbit spawning {_orbitCount} fireballs, radius {_orbitRadius}"); } private static void DespawnOrbit() { foreach (GameObject orbitObject in _orbitObjects) { try { if ((Object)(object)orbitObject != (Object)null) { Poolee component = orbitObject.GetComponent(); if ((Object)(object)component != (Object)null) { component.Despawn(); } } } catch { } } _orbitObjects.Clear(); } private static void UpdateOrbit() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0061: 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_0086: 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_00b0: 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) if (_orbitObjects.Count == 0) { return; } Vector3 position; try { position = Player.Head.position; } catch { return; } int num = 0; for (int i = 0; i < _orbitObjects.Count; i++) { GameObject val = _orbitObjects[i]; if (!((Object)(object)val == (Object)null)) { float num2 = Time.time * _orbitSpeed + (float)num * ((float)Math.PI * 2f / (float)_orbitObjects.Count); Vector3 val2 = position + new Vector3(Mathf.Cos(num2) * _orbitRadius, _orbitHeight, Mathf.Sin(num2) * _orbitRadius); Rigidbody component = val.GetComponent(); if ((Object)(object)component != (Object)null) { component.MovePosition(val2); } else { val.transform.position = val2; } num++; } } } }