using System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BoneLib; using BoneLib.BoneMenu; using LaserEyes; using MelonLoader; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: MelonInfo(typeof(LaserEyesMod), "LaserEyes", "1.0.9", "YourName", "https://github.com/yourname/lasereyes")] [assembly: MelonGame("Stress Level Zero", "BONELAB")] [assembly: MelonPriority(10)] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = "")] [assembly: AssemblyVersion("0.0.0.0")] namespace LaserEyes; public class LaserEyesMod : MelonMod { private enum BindButton { A, B, X, Y, LeftGrip, RightGrip, LeftStick, RightStick } private GameObject laserObject; private LineRenderer lineRenderer; private bool modEnabled = true; private float maxDistance = 60f; private float laserWidth = 0.04f; private float damageAmount = 10f; private bool dealDamage = true; private Color laserColor = Color.red; private Transform headTransform; private int layerMask; private float tickTimer; private const float DAMAGE_TICK_RATE = 0.15f; private GameObject hitEffect; private bool ready; private int frameDelay = 30; private static Page menuPage; private bool menuReady; private int menuDelay = 10; private bool controllerToggle = true; private bool prevBindDown; private KeyCode toggleKey = (KeyCode)330; private BindButton currentBind; public override void OnInitializeMelon() { layerMask = LayerMask.GetMask(new string[6] { "Default", "NPC", "EnemyColliders", "Player", "Environment", "Dynamic" }); } private void SetupMenu() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0055: 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_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) if (menuReady) { return; } menuPage = Page.Root.CreatePage("Laser Eyes", Color.red, 0, true); menuPage.CreateBool("Enabled", Color.green, modEnabled, (Action)delegate(bool v) { modEnabled = v; if ((Object)(object)laserObject != (Object)null) { laserObject.SetActive(v); } }); menuPage.CreateFloat("Damage", Color.red, damageAmount, 0f, 100f, 1f, (Action)delegate(float v) { damageAmount = v; }); menuPage.CreateBool("Deal Damage", Color.red, dealDamage, (Action)delegate(bool v) { dealDamage = v; }); menuPage.CreateFloat("Beam Width", Color.cyan, laserWidth, 0.01f, 0.2f, 0.01f, (Action)delegate(float v) { laserWidth = v; if ((Object)(object)lineRenderer != (Object)null) { lineRenderer.startWidth = laserWidth; lineRenderer.endWidth = laserWidth; } }); menuPage.CreateFloat("Range", Color.blue, maxDistance, 10f, 200f, 5f, (Action)delegate(float v) { maxDistance = v; }); menuPage.CreateBool("Controller Toggle", Color.white, controllerToggle, (Action)delegate(bool v) { controllerToggle = v; }); menuPage.CreateEnum("Toggle Button", Color.white, (Enum)currentBind, (Action)delegate(Enum v) { //IL_0040: 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_0058: 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_0070: 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) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) currentBind = (BindButton)(object)v; switch ((BindButton)(object)v) { case BindButton.A: toggleKey = (KeyCode)330; break; case BindButton.B: toggleKey = (KeyCode)331; break; case BindButton.X: toggleKey = (KeyCode)332; break; case BindButton.Y: toggleKey = (KeyCode)333; break; case BindButton.LeftGrip: toggleKey = (KeyCode)334; break; case BindButton.RightGrip: toggleKey = (KeyCode)335; break; case BindButton.LeftStick: toggleKey = (KeyCode)338; break; case BindButton.RightStick: toggleKey = (KeyCode)339; break; } }); menuReady = true; } private Material MakeMat(Color c) { //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Expected O, but got Unknown //IL_0051: 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) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Expected O, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) Shader val = Shader.Find("Universal Render Pipeline/Unlit"); if ((Object)(object)val == (Object)null) { val = Shader.Find("UniversalRenderPipeline/Unlit"); } if ((Object)(object)val == (Object)null) { val = Shader.Find("Universal Render Pipeline/Lit"); } if ((Object)(object)val == (Object)null) { val = Shader.Find("Legacy Shaders/Particles/Additive"); } if ((Object)(object)val != (Object)null) { return new Material(val) { color = c }; } Material val2 = new Material(Shader.Find("Standard")); if ((Object)(object)val2.shader != (Object)null) { val2.color = c; return val2; } return null; } private void BuildLaser() { //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: 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_0149: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Expected O, but got Unknown if (ready) { return; } headTransform = null; try { object obj = Player.Head; if (obj == null) { Camera obj2 = Object.FindObjectOfType(); obj = ((obj2 != null) ? ((Component)obj2).transform : null); } headTransform = (Transform)obj; } catch { } if ((Object)(object)headTransform == (Object)null) { try { Camera main = Camera.main; headTransform = ((main != null) ? ((Component)main).transform : null); } catch { } } if (!((Object)(object)headTransform == (Object)null)) { laserObject = new GameObject("LaserEyes_Beam"); laserObject.SetActive(modEnabled); hitEffect = GameObject.CreatePrimitive((PrimitiveType)0); ((Object)hitEffect).name = "LaserEyes_Impact"; hitEffect.transform.localScale = Vector3.one * 0.06f; hitEffect.SetActive(false); Object.Destroy((Object)(object)hitEffect.GetComponent()); MeshRenderer component = hitEffect.GetComponent(); lineRenderer = laserObject.AddComponent(); lineRenderer.positionCount = 2; lineRenderer.startWidth = laserWidth; lineRenderer.endWidth = laserWidth; lineRenderer.startColor = laserColor; lineRenderer.endColor = laserColor; ((Renderer)lineRenderer).sharedMaterial = ((Renderer)component).sharedMaterial; ((Renderer)component).sharedMaterial = MakeMat(Color.yellow); if ((Object)(object)((Renderer)component).sharedMaterial == (Object)null) { ((Renderer)component).sharedMaterial = new Material(((Renderer)lineRenderer).sharedMaterial); } hitEffect.transform.SetParent(laserObject.transform); ready = true; MelonLogger.Msg("Laser Eyes ready"); } } public override void OnUpdate() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_012b: 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_013c: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_0163: 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_0245: Unknown result type (might be due to invalid IL or missing references) //IL_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: Unknown result type (might be due to invalid IL or missing references) if (!menuReady) { if (menuDelay > 0) { menuDelay--; return; } SetupMenu(); } if (!ready) { if (frameDelay > 0) { frameDelay--; } else { BuildLaser(); } return; } if (controllerToggle && ready) { bool key = Input.GetKey(toggleKey); if (key && !prevBindDown) { modEnabled = !modEnabled; if ((Object)(object)laserObject != (Object)null) { laserObject.SetActive(modEnabled); } } prevBindDown = key; } if (!modEnabled || (Object)(object)lineRenderer == (Object)null || (Object)(object)headTransform == (Object)null) { if ((Object)(object)hitEffect != (Object)null && hitEffect.activeSelf) { hitEffect.SetActive(false); } return; } Vector3 val = headTransform.position + headTransform.forward * 0.08f; Vector3 forward = headTransform.forward; Vector3 val2 = val + forward * maxDistance; RaycastHit val3 = default(RaycastHit); if (Physics.Raycast(new Ray(val, forward), ref val3, maxDistance, layerMask)) { val2 = ((RaycastHit)(ref val3)).point; if (dealDamage && damageAmount > 0f) { tickTimer += Time.deltaTime; if (tickTimer >= 0.15f) { tickTimer = 0f; DoDamage(((RaycastHit)(ref val3)).collider); } } if ((Object)(object)hitEffect != (Object)null) { hitEffect.SetActive(true); hitEffect.transform.position = ((RaycastHit)(ref val3)).point; hitEffect.transform.rotation = Quaternion.LookRotation(((RaycastHit)(ref val3)).normal); } } else { tickTimer = 0f; if ((Object)(object)hitEffect != (Object)null && hitEffect.activeSelf) { hitEffect.SetActive(false); } } lineRenderer.SetPosition(0, val); lineRenderer.SetPosition(1, val2); } private void DoDamage(Collider c) { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) try { GameObject gameObject = ((Component)c).gameObject; gameObject.SendMessage("Damage", (object)damageAmount, (SendMessageOptions)1); gameObject.SendMessage("TakeDamage", (object)damageAmount, (SendMessageOptions)1); Rigidbody component = gameObject.GetComponent(); if ((Object)(object)component != (Object)null) { component.AddForce(headTransform.forward * damageAmount * 0.5f, (ForceMode)1); } } catch { } } }