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 VoidFiendBeam v2.7.0
BepInEx/plugins/Voidfiendbeam.dll
Decompiled 8 months agousing System; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using EntityStates; using EntityStates.VoidSurvivor.Weapon; using On.EntityStates.VoidSurvivor.Weapon; using On.RoR2; using RiskOfOptions; using RiskOfOptions.OptionConfigs; using RiskOfOptions.Options; using RoR2; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("Voidfiendbeam")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+07c57040e7551eda6266b0f316bc07be753b02d5")] [assembly: AssemblyProduct("Voidfiendbeam")] [assembly: AssemblyTitle("Voidfiendbeam")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace VoidFiendBeam { [BepInPlugin("com.YourName.VoidFiendBeam", "Void Fiend Beam", "2.3.6")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class VoidFiendBeam : BaseUnityPlugin { public static ConfigEntry<float> BeamRange; public static ConfigEntry<float> BeamVfxXScale; public static ConfigEntry<float> BeamVfxYScale; public static ConfigEntry<float> BeamVfxZScale; public static ConfigEntry<bool> LazerBeamModeRegular; public static ConfigEntry<bool> LazerBeamModeCorrupt; public static ConfigEntry<bool> EnableDebugLogging; public static ConfigEntry<float> VfxSurfaceOffset; public static ManualLogSource StaticLogger; public static bool isCorruptHandBeamActive; public static bool isRegularHandBeamActive; private static bool LaserModeEnabledForRegular => LazerBeamModeRegular.Value; private static bool LaserModeEnabledForCorrupt => LazerBeamModeCorrupt.Value; public void Awake() { //IL_0125: 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_0135: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Expected O, but got Unknown //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Expected O, but got Unknown //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_016c: 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_0188: Expected O, but got Unknown //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Expected O, but got Unknown //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Expected O, but got Unknown //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Expected O, but got Unknown //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_01e5: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Expected O, but got Unknown //IL_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Expected O, but got Unknown //IL_0201: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Expected O, but got Unknown //IL_0211: Unknown result type (might be due to invalid IL or missing references) //IL_021b: Expected O, but got Unknown //IL_0221: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Expected O, but got Unknown //IL_0231: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_0241: Unknown result type (might be due to invalid IL or missing references) //IL_024c: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Expected O, but got Unknown //IL_0258: Unknown result type (might be due to invalid IL or missing references) //IL_0262: Expected O, but got Unknown StaticLogger = ((BaseUnityPlugin)this).Logger; BeamRange = ((BaseUnityPlugin)this).Config.Bind<float>("Beam Settings", "Beam Range", 75f, "The effective range of the Corrupt Hand Beam. Base game default is 40."); BeamVfxXScale = ((BaseUnityPlugin)this).Config.Bind<float>("Beam Settings", "Beam VFX Width Scale", 1f, "The scale of the beam's visual effects (VFX) on the X-axis. Base game default is 1."); BeamVfxYScale = ((BaseUnityPlugin)this).Config.Bind<float>("Beam Settings", "Beam VFX Height Scale", 1f, "The scale of the beam's visual effects (VFX) on the Y-axis. Base game default is 1."); BeamVfxZScale = ((BaseUnityPlugin)this).Config.Bind<float>("Beam Settings", "Beam VFX Length Scale", 3.25f, "The scale of the beam's visual effects (VFX) on the Z-axis. Base game default is 1."); LazerBeamModeRegular = ((BaseUnityPlugin)this).Config.Bind<bool>("Laser Mode", "Enable Laser Mode (Regular Beam)", false, "Eliminates randomization for the regular hand beam, making it behave like a precise laser."); LazerBeamModeCorrupt = ((BaseUnityPlugin)this).Config.Bind<bool>("Laser Mode", "Enable Laser Mode (Corrupt Beam)", false, "Eliminates randomization for the corrupt hand beam, making it behave like a precise laser."); EnableDebugLogging = ((BaseUnityPlugin)this).Config.Bind<bool>("Debug", "Enable Debug Logging", false, "Enable detailed logging for troubleshooting."); VfxSurfaceOffset = ((BaseUnityPlugin)this).Config.Bind<float>("VFX Settings", "Surface Offset", 0.2f, "How far to push VFX out from terrain surfaces to prevent clipping. Base: 0.2"); ModSettingsManager.AddOption((BaseOption)new SliderOption(BeamVfxXScale, new SliderConfig { min = 0.1f, max = 20f, FormatString = "{0:0.0}" })); ModSettingsManager.AddOption((BaseOption)new SliderOption(BeamVfxYScale, new SliderConfig { min = 0.1f, max = 20f, FormatString = "{0:0.0}" })); ModSettingsManager.AddOption((BaseOption)new SliderOption(BeamVfxZScale, new SliderConfig { min = 0.1f, max = 20f, FormatString = "{0:0.0}" })); ModSettingsManager.AddOption((BaseOption)new SliderOption(BeamRange, new SliderConfig { min = 10f, max = 300f, FormatString = "{0:0}" })); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(LazerBeamModeRegular)); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(LazerBeamModeCorrupt)); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(EnableDebugLogging)); ModSettingsManager.AddOption((BaseOption)new SliderOption(VfxSurfaceOffset, new SliderConfig { min = 0f, max = 1f, FormatString = "{0:0.00}" })); SetModIcon(); ApplyMMHookPatches(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Void Fiend Beam has awakened with Enhanced Laser Mode (MMHook version)!"); } private void SetModIcon() { //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Expected O, but got Unknown //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) try { Assembly executingAssembly = Assembly.GetExecutingAssembly(); string text = null; string[] manifestResourceNames = executingAssembly.GetManifestResourceNames(); foreach (string text2 in manifestResourceNames) { if (text2.EndsWith("icon.png", StringComparison.OrdinalIgnoreCase)) { text = text2; break; } } if (text == null) { return; } using Stream stream = executingAssembly.GetManifestResourceStream(text); if (stream == null) { return; } byte[] array = new byte[stream.Length]; stream.Read(array, 0, array.Length); Texture2D val = new Texture2D(2, 2, (TextureFormat)4, false); if (!ImageConversion.LoadImage(val, array)) { return; } Sprite modIcon = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f)); try { ModSettingsManager.SetModIcon(modIcon); ((BaseUnityPlugin)this).Logger.LogInfo((object)"VoidFiendBeam: Mod icon set successfully via SetModIcon()."); } catch (Exception ex) { ((BaseUnityPlugin)this).Logger.LogWarning((object)("VoidFiendBeam: ModSettingsManager.SetModIcon failed: " + ex.Message)); } } catch (Exception ex2) { ((BaseUnityPlugin)this).Logger.LogWarning((object)("VoidFiendBeam: failed to load mod icon: " + ex2.Message)); } } private void ApplyMMHookPatches() { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Expected O, but got Unknown //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Expected O, but got Unknown //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Expected O, but got Unknown //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Expected O, but got Unknown //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Expected O, but got Unknown //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Expected O, but got Unknown //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Expected O, but got Unknown try { CharacterBody.AddSpreadBloom += new hook_AddSpreadBloom(DisableBloomAccumulation_Hook); ((BaseUnityPlugin)this).Logger.LogInfo((object)"✅ Bloom elimination hook applied"); CameraTargetParams.AddRecoil += new hook_AddRecoil(DisableRecoil_Hook); ((BaseUnityPlugin)this).Logger.LogInfo((object)"✅ Recoil elimination hook applied"); BulletAttack.Fire += new hook_Fire(BulletAttack_Fire_Hook); ((BaseUnityPlugin)this).Logger.LogInfo((object)"✅ BulletAttack Fire hook applied"); FireCorruptHandBeam.OnEnter += new hook_OnEnter(FireCorruptHandBeam_OnEnter_Tracking); FireCorruptHandBeam.OnExit += new hook_OnExit(FireCorruptHandBeam_OnExit_Tracking); ((BaseUnityPlugin)this).Logger.LogInfo((object)"✅ Corrupt hand beam tracking hooks applied"); FireHandBeam.OnEnter += new hook_OnEnter(FireHandBeam_OnEnter_Tracking); FireHandBeam.OnExit += new hook_OnExit(FireHandBeam_OnExit_Tracking); ((BaseUnityPlugin)this).Logger.LogInfo((object)"✅ Regular hand beam tracking hooks applied"); FireCorruptHandBeam.OnEnter += new hook_OnEnter(FireCorruptHandBeam_OnEnter_Modifications); FireCorruptHandBeam.FireBullet += new hook_FireBullet(FireCorruptHandBeam_FireBullet_Hook); ((BaseUnityPlugin)this).Logger.LogInfo((object)"✅ Corrupt hand beam modification hooks applied"); ((BaseUnityPlugin)this).Logger.LogInfo((object)"\ud83c\udfaf All MMHook patches applied successfully!"); } catch (Exception arg) { ((BaseUnityPlugin)this).Logger.LogError((object)$"❌ Failed to apply MMHook patches: {arg}"); } } private void DisableBloomAccumulation_Hook(orig_AddSpreadBloom orig, CharacterBody self, float bloom) { //IL_0027: 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) if (((LaserModeEnabledForCorrupt && isCorruptHandBeamActive) || (LaserModeEnabledForRegular && isRegularHandBeamActive)) && self.bodyIndex == BodyCatalog.FindBodyIndex("VoidSurvivorBody")) { if (EnableDebugLogging.Value) { StaticLogger.LogInfo((object)$"\ud83c\udfaf BLOCKING bloom during active HandBeam ({bloom})"); } } else { orig.Invoke(self, bloom); } } private static void DisableRecoil_Hook(orig_AddRecoil orig, CameraTargetParams self, float verticalMin, float verticalMax, float horizontalMin, float horizontalMax) { //IL_003a: 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) CharacterBody component = ((Component)self).GetComponent<CharacterBody>(); if ((Object)(object)component != (Object)null && ((LaserModeEnabledForCorrupt && isCorruptHandBeamActive) || (LaserModeEnabledForRegular && isRegularHandBeamActive)) && component.bodyIndex == BodyCatalog.FindBodyIndex("VoidSurvivorBody")) { if (EnableDebugLogging.Value) { StaticLogger.LogInfo((object)$"\ud83c\udfaf BLOCKING recoil during active HandBeam (v[{verticalMin}-{verticalMax}], h[{horizontalMin}-{horizontalMax}])"); } } else { orig.Invoke(self, verticalMin, verticalMax, horizontalMin, horizontalMax); } } private void BulletAttack_Fire_Hook(orig_Fire orig, BulletAttack self) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0035: 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_006b: Expected O, but got Unknown //IL_006d: 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_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)self.owner != (Object)null) { CharacterBody component = self.owner.GetComponent<CharacterBody>(); if ((Object)(object)component != (Object)null && component.bodyIndex == BodyCatalog.FindBodyIndex("VoidSurvivorBody")) { HitCallback originalCallback = self.hitCallback; self.hitCallback = (HitCallback)delegate(BulletAttack attack, ref BulletHit hitInfo) { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0060: 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_0079: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)hitInfo.collider == (Object)null) { HitCallback obj = originalCallback; return obj == null || obj.Invoke(attack, ref hitInfo); } bool flag = (LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask) & (1 << ((Component)hitInfo.collider).gameObject.layer)) != 0; Vector3 val = hitInfo.point + hitInfo.surfaceNormal * VfxSurfaceOffset.Value; if (flag) { if ((Object)(object)attack.hitEffectPrefab != (Object)null) { EffectManager.SimpleEffect(attack.hitEffectPrefab, val, Quaternion.LookRotation(hitInfo.surfaceNormal), true); } return false; } HitCallback obj2 = originalCallback; return obj2 == null || obj2.Invoke(attack, ref hitInfo); }; self.hitMask = LayerMask.op_Implicit(LayerMask.op_Implicit(self.hitMask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask)); if ((LaserModeEnabledForCorrupt && isCorruptHandBeamActive) || (LaserModeEnabledForRegular && isRegularHandBeamActive)) { self.minSpread = 0f; self.maxSpread = 0f; } } } orig.Invoke(self); } private void FireCorruptHandBeam_OnEnter_Tracking(orig_OnEnter orig, FireCorruptHandBeam self) { //IL_0028: 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) orig.Invoke(self); if (!LaserModeEnabledForCorrupt) { return; } CharacterBody characterBody = ((EntityState)self).characterBody; if (!((Object)(object)characterBody != (Object)null) || characterBody.bodyIndex != BodyCatalog.FindBodyIndex("VoidSurvivorBody")) { return; } VoidSurvivorController component = ((Component)characterBody).GetComponent<VoidSurvivorController>(); if ((Object)(object)component != (Object)null && component.isCorrupted) { isCorruptHandBeamActive = true; if (EnableDebugLogging.Value) { StaticLogger.LogInfo((object)"\ud83d\udfe2 Corrupt FireHandBeam STARTED"); } } } private void FireCorruptHandBeam_OnExit_Tracking(orig_OnExit orig, FireCorruptHandBeam self) { orig.Invoke(self); if (isCorruptHandBeamActive) { isCorruptHandBeamActive = false; if (EnableDebugLogging.Value) { StaticLogger.LogInfo((object)"\ud83d\udd34 Corrupt FireHandBeam ENDED"); } } } private void FireHandBeam_OnEnter_Tracking(orig_OnEnter orig, FireHandBeam self) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) if (LaserModeEnabledForRegular) { CharacterBody characterBody = ((EntityState)self).characterBody; if ((Object)(object)characterBody != (Object)null && characterBody.bodyIndex == BodyCatalog.FindBodyIndex("VoidSurvivorBody")) { VoidSurvivorController component = ((Component)characterBody).GetComponent<VoidSurvivorController>(); if ((Object)(object)component != (Object)null && !component.isCorrupted && !isRegularHandBeamActive) { isRegularHandBeamActive = true; if (EnableDebugLogging.Value) { StaticLogger.LogInfo((object)"\ud83d\udfe2 Regular FireHandBeam STARTED (Pre-Bloom)"); } } } } orig.Invoke(self); } private void FireHandBeam_OnExit_Tracking(orig_OnExit orig, FireHandBeam self) { orig.Invoke(self); if (LaserModeEnabledForRegular && isRegularHandBeamActive) { isRegularHandBeamActive = false; if (EnableDebugLogging.Value) { StaticLogger.LogInfo((object)"\ud83d\udd34 Regular FireHandBeam ENDED"); } } } private void FireCorruptHandBeam_OnEnter_Modifications(orig_OnEnter orig, FireCorruptHandBeam self) { //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) CharacterBody characterBody = ((EntityState)self).characterBody; if ((Object)(object)characterBody != (Object)null && characterBody.bodyIndex == BodyCatalog.FindBodyIndex("VoidSurvivorBody")) { VoidSurvivorController component = ((Component)characterBody).GetComponent<VoidSurvivorController>(); if ((Object)(object)component != (Object)null && component.isCorrupted) { self.maxDistance = BeamRange.Value; if ((Object)(object)self.beamVfxPrefab != (Object)null) { VoidFiendVFXBeam.ScaleBeamVFX(self.beamVfxPrefab, BeamVfxXScale.Value, BeamVfxYScale.Value, BeamVfxZScale.Value); } } } orig.Invoke(self); } private void FireCorruptHandBeam_FireBullet_Hook(orig_FireBullet orig, FireCorruptHandBeam self) { //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) CharacterBody characterBody = ((EntityState)self).characterBody; if ((Object)(object)characterBody != (Object)null && characterBody.bodyIndex == BodyCatalog.FindBodyIndex("VoidSurvivorBody")) { VoidSurvivorController component = ((Component)characterBody).GetComponent<VoidSurvivorController>(); if ((Object)(object)component != (Object)null && component.isCorrupted) { self.minDistance = self.maxDistance; } } orig.Invoke(self); } } public static class VoidFiendVFXBeam { public static void ScaleBeamVFX(GameObject beamVfxPrefab, float newVfxXScale, float newVfxYScale, float newVfxZScale) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)beamVfxPrefab == (Object)null)) { beamVfxPrefab.transform.localScale = new Vector3(newVfxXScale, newVfxYScale, newVfxZScale); } } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }