Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of VoidFiendBeam v2.7.0
BepInEx/plugins/Voidfiendbeam.dll
Decompiled 3 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) { } } }