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 WeaponEnhancer v2.0.0
Weapon Enhancer.dll
Decompiled 6 months agousing System; 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 HarmonyLib; using MenuLib; using MenuLib.MonoBehaviors; using REPOLib.Modules; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("Handgun Mod")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Handgun Mod")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("5dca9d7d-cc77-4ee6-9aec-237cd43472c9")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] namespace WeaponEnhancer; [BepInPlugin("com.Dileppy.WeaponEnhancer", "Weapon Enhancer", "2.0.0")] public class WeaponEnhancerMod : BaseUnityPlugin { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static Action <>9__34_0; public static Action <>9__34_1; public static ScrollViewBuilderDelegate <>9__35_0; public static Action<bool> <>9__35_1; public static Action<float> <>9__35_2; public static Action<bool> <>9__35_3; public static Action<float> <>9__35_4; public static Action<float> <>9__35_5; public static ScrollViewBuilderDelegate <>9__35_6; public static Action<bool> <>9__35_7; public static Action<int> <>9__35_8; public static ScrollViewBuilderDelegate <>9__35_9; public static Action<bool> <>9__35_10; public static Action<bool> <>9__35_11; public static Action<bool> <>9__35_12; public static Action<bool> <>9__35_13; public static Action<float> <>9__35_14; public static Action<float> <>9__35_15; public static ScrollViewBuilderDelegate <>9__36_0; public static ScrollViewBuilderDelegate <>9__36_1; public static Action <>9__36_8; public static ScrollViewBuilderDelegate <>9__36_2; public static Action <>9__36_9; public static ScrollViewBuilderDelegate <>9__36_3; public static Action <>9__36_10; public static ScrollViewBuilderDelegate <>9__36_4; public static Action <>9__36_11; public static ScrollViewBuilderDelegate <>9__36_5; public static Action <>9__36_12; public static ScrollViewBuilderDelegate <>9__36_6; public static ScrollViewBuilderDelegate <>9__36_7; public static Comparison<Item> <>9__37_0; public static ScrollViewBuilderDelegate <>9__39_0; public static ScrollViewBuilderDelegate <>9__39_1; public static Action <>9__39_8; public static ScrollViewBuilderDelegate <>9__39_2; public static Action <>9__39_9; public static ScrollViewBuilderDelegate <>9__39_3; public static Action <>9__39_10; public static ScrollViewBuilderDelegate <>9__39_4; public static Action <>9__39_11; public static ScrollViewBuilderDelegate <>9__39_5; public static Action <>9__39_12; public static ScrollViewBuilderDelegate <>9__39_6; public static ScrollViewBuilderDelegate <>9__39_7; internal void <AddMenuElements>b__34_0() { if ((Object)(object)_configPage == (Object)null) { _configPage = MenuAPI.CreateREPOPopupPage("Weapon Enhancer Settings", (PresetSide)0, true, true, 1.5f); BuildConfigPage(_configPage); } _configPage.OpenPage(false); } internal void <AddMenuElements>b__34_1() { if (SpawnerEnabled.Value) { if ((Object)(object)_spawnerPage == (Object)null) { _spawnerPage = MenuAPI.CreateREPOPopupPage("Weapon Logic (Guns Only)", (PresetSide)1, true, true, 1.5f); BuildSpawnerPage(_spawnerPage); _spawnerPageBuilt = true; } if (_spawnerPageBuilt) { RebuildSpawnerList(); } _spawnerPage.OpenPage(false); } } internal RectTransform <BuildConfigPage>b__35_0(Transform parent) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) REPOLabel val = MenuAPI.CreateREPOLabel("Weapon Enhancer Settings", parent, Vector2.zero); return ((REPOElement)val).repoScrollViewElement.rectTransform; } internal void <BuildConfigPage>b__35_1(bool v) { ApplyTuningToAllGuns(); ApplyLaserTuningToAllLasers(); } internal void <BuildConfigPage>b__35_2(float v) { ApplyTuningToAllGuns(); } internal void <BuildConfigPage>b__35_3(bool v) { ApplyTuningToAllGuns(); } internal void <BuildConfigPage>b__35_4(float v) { ApplyTuningToAllGuns(); } internal void <BuildConfigPage>b__35_5(float v) { ApplyTuningToAllGuns(); } internal RectTransform <BuildConfigPage>b__35_6(Transform parent) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) REPOLabel val = MenuAPI.CreateREPOLabel("Bullet Multiplier", parent, Vector2.zero); return ((REPOElement)val).repoScrollViewElement.rectTransform; } internal void <BuildConfigPage>b__35_7(bool v) { ApplyTuningToAllGuns(); } internal void <BuildConfigPage>b__35_8(int v) { ApplyTuningToAllGuns(); } internal RectTransform <BuildConfigPage>b__35_9(Transform parent) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) REPOLabel val = MenuAPI.CreateREPOLabel("Laser Settings (ItemGunLaser)", parent, Vector2.zero); return ((REPOElement)val).repoScrollViewElement.rectTransform; } internal void <BuildConfigPage>b__35_10(bool v) { ApplyLaserTuningToAllLasers(); } internal void <BuildConfigPage>b__35_11(bool v) { ApplyLaserTuningToAllLasers(); } internal void <BuildConfigPage>b__35_12(bool v) { ApplyLaserTuningToAllLasers(); } internal void <BuildConfigPage>b__35_13(bool v) { ApplyLaserTuningToAllLasers(); } internal void <BuildConfigPage>b__35_14(float v) { ApplyLaserTuningToAllLasers(); } internal void <BuildConfigPage>b__35_15(float v) { ApplyLaserTuningToAllLasers(); } internal RectTransform <BuildSpawnerPage>b__36_0(Transform parent) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) REPOLabel val = MenuAPI.CreateREPOLabel("Weapon Logic (Guns Only)", parent, Vector2.zero); return ((REPOElement)val).repoScrollViewElement.rectTransform; } internal RectTransform <BuildSpawnerPage>b__36_1(Transform parent) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) REPOLabel val = MenuAPI.CreateREPOLabel("Search filter is currently fixed to 'guns only'.", parent, Vector2.zero); return ((REPOElement)val).repoScrollViewElement.rectTransform; } internal RectTransform <BuildSpawnerPage>b__36_2(Transform parent) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) REPOButton val = MenuAPI.CreateREPOButton("Clear Search", (Action)delegate { _spawnSearch = ""; RebuildSpawnerList(); }, parent, Vector2.zero); return ((REPOElement)val).repoScrollViewElement.rectTransform; } internal void <BuildSpawnerPage>b__36_8() { _spawnSearch = ""; RebuildSpawnerList(); } internal RectTransform <BuildSpawnerPage>b__36_3(Transform parent) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) REPOButton val = MenuAPI.CreateREPOButton("Search: Laser", (Action)delegate { _spawnSearch = "laser"; RebuildSpawnerList(); }, parent, Vector2.zero); return ((REPOElement)val).repoScrollViewElement.rectTransform; } internal void <BuildSpawnerPage>b__36_9() { _spawnSearch = "laser"; RebuildSpawnerList(); } internal RectTransform <BuildSpawnerPage>b__36_4(Transform parent) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) REPOButton val = MenuAPI.CreateREPOButton("Search: Gun", (Action)delegate { _spawnSearch = "gun"; RebuildSpawnerList(); }, parent, Vector2.zero); return ((REPOElement)val).repoScrollViewElement.rectTransform; } internal void <BuildSpawnerPage>b__36_10() { _spawnSearch = "gun"; RebuildSpawnerList(); } internal RectTransform <BuildSpawnerPage>b__36_5(Transform parent) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) REPOButton val = MenuAPI.CreateREPOButton("Search: Cannon", (Action)delegate { _spawnSearch = "cannon"; RebuildSpawnerList(); }, parent, Vector2.zero); return ((REPOElement)val).repoScrollViewElement.rectTransform; } internal void <BuildSpawnerPage>b__36_11() { _spawnSearch = "cannon"; RebuildSpawnerList(); } internal RectTransform <BuildSpawnerPage>b__36_6(Transform parent) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) REPOButton val = MenuAPI.CreateREPOButton("Refresh List", (Action)delegate { RebuildSpawnerList(); }, parent, Vector2.zero); return ((REPOElement)val).repoScrollViewElement.rectTransform; } internal void <BuildSpawnerPage>b__36_12() { RebuildSpawnerList(); } internal RectTransform <BuildSpawnerPage>b__36_7(Transform parent) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) REPOLabel val = MenuAPI.CreateREPOLabel("Available Gun Items:", parent, Vector2.zero); return ((REPOElement)val).repoScrollViewElement.rectTransform; } internal int <CacheGunItems>b__37_0(Item a, Item b) { return string.Compare(a.itemName, b.itemName, StringComparison.OrdinalIgnoreCase); } internal RectTransform <BuildSpawnerPageCoreList>b__39_0(Transform parent) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) REPOLabel val = MenuAPI.CreateREPOLabel("Weapon Logic (Guns Only)", parent, Vector2.zero); return ((REPOElement)val).repoScrollViewElement.rectTransform; } internal RectTransform <BuildSpawnerPageCoreList>b__39_1(Transform parent) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) REPOLabel val = MenuAPI.CreateREPOLabel(string.IsNullOrEmpty(_spawnSearch) ? "Search: (none)" : ("Search: " + _spawnSearch), parent, Vector2.zero); return ((REPOElement)val).repoScrollViewElement.rectTransform; } internal RectTransform <BuildSpawnerPageCoreList>b__39_2(Transform parent) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) REPOButton val = MenuAPI.CreateREPOButton("Clear Search", (Action)delegate { _spawnSearch = ""; RebuildSpawnerList(); }, parent, Vector2.zero); return ((REPOElement)val).repoScrollViewElement.rectTransform; } internal void <BuildSpawnerPageCoreList>b__39_8() { _spawnSearch = ""; RebuildSpawnerList(); } internal RectTransform <BuildSpawnerPageCoreList>b__39_3(Transform parent) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) REPOButton val = MenuAPI.CreateREPOButton("Search: Laser", (Action)delegate { _spawnSearch = "laser"; RebuildSpawnerList(); }, parent, Vector2.zero); return ((REPOElement)val).repoScrollViewElement.rectTransform; } internal void <BuildSpawnerPageCoreList>b__39_9() { _spawnSearch = "laser"; RebuildSpawnerList(); } internal RectTransform <BuildSpawnerPageCoreList>b__39_4(Transform parent) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) REPOButton val = MenuAPI.CreateREPOButton("Search: Gun", (Action)delegate { _spawnSearch = "gun"; RebuildSpawnerList(); }, parent, Vector2.zero); return ((REPOElement)val).repoScrollViewElement.rectTransform; } internal void <BuildSpawnerPageCoreList>b__39_10() { _spawnSearch = "gun"; RebuildSpawnerList(); } internal RectTransform <BuildSpawnerPageCoreList>b__39_5(Transform parent) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) REPOButton val = MenuAPI.CreateREPOButton("Search: Cannon", (Action)delegate { _spawnSearch = "cannon"; RebuildSpawnerList(); }, parent, Vector2.zero); return ((REPOElement)val).repoScrollViewElement.rectTransform; } internal void <BuildSpawnerPageCoreList>b__39_11() { _spawnSearch = "cannon"; RebuildSpawnerList(); } internal RectTransform <BuildSpawnerPageCoreList>b__39_6(Transform parent) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) REPOButton val = MenuAPI.CreateREPOButton("Refresh List", (Action)delegate { RebuildSpawnerList(); }, parent, Vector2.zero); return ((REPOElement)val).repoScrollViewElement.rectTransform; } internal void <BuildSpawnerPageCoreList>b__39_12() { RebuildSpawnerList(); } internal RectTransform <BuildSpawnerPageCoreList>b__39_7(Transform parent) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) REPOLabel val = MenuAPI.CreateREPOLabel("Available Gun Items:", parent, Vector2.zero); return ((REPOElement)val).repoScrollViewElement.rectTransform; } } public const string ModGuid = "com.Dileppy.WeaponEnhancer"; public const string ModName = "Weapon Enhancer"; public const string ModVersion = "2.0.0"; private Harmony _harmony; private static REPOPopupPage _configPage; internal static ConfigEntry<bool> ModEnabled; internal static ConfigEntry<float> FireRateSeconds; internal static ConfigEntry<bool> InfiniteAmmoEnabled; internal static ConfigEntry<bool> PerfectAccuracyEnabled; internal static ConfigEntry<float> SpreadFactor; internal static ConfigEntry<float> RecoilMultiplier; internal static ConfigEntry<float> DamageMultiplier; internal static ConfigEntry<bool> ExplosiveBullets; internal static ConfigEntry<float> ExplosionRadius; internal static ConfigEntry<float> ExplosionForce; internal static ConfigEntry<bool> BulletMultiplierEnabled; internal static ConfigEntry<int> BulletsPerShot; internal static ConfigEntry<bool> SpawnerEnabled; internal static ConfigEntry<bool> LaserEnabled; internal static ConfigEntry<bool> LaserNoCooldown; internal static ConfigEntry<bool> LaserContinuousFire; internal static ConfigEntry<float> LaserReloadSpeedMultiplier; internal static ConfigEntry<bool> LaserStateLockEnabled; internal static ConfigEntry<float> LaserShootDurationSeconds; internal static Dictionary<ItemGun, float> originalSpread = new Dictionary<ItemGun, float>(); internal static Dictionary<ItemGun, float> originalRecoil = new Dictionary<ItemGun, float>(); internal static Dictionary<ItemGun, float> originalShake = new Dictionary<ItemGun, float>(); internal static Dictionary<ItemGun, int> originalNumberOfBullets = new Dictionary<ItemGun, int>(); private static bool _spawnerPageBuilt = false; private static REPOPopupPage _spawnerPage; private static string _spawnSearch = ""; private static List<Item> _cachedGunItems = new List<Item>(); private void Awake() { //IL_028d: Unknown result type (might be due to invalid IL or missing references) //IL_0297: Expected O, but got Unknown //IL_02aa: Unknown result type (might be due to invalid IL or missing references) //IL_02b4: Expected O, but got Unknown ModEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "ModEnabled", true, "Master enable switch."); FireRateSeconds = ((BaseUnityPlugin)this).Config.Bind<float>("Fire", "FireRateSeconds", 0.05f, "Seconds between shots."); InfiniteAmmoEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Fire", "InfiniteAmmoEnabled", true, "Keep all batteries full."); PerfectAccuracyEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Accuracy", "PerfectAccuracy", false, "Spread = 0."); SpreadFactor = ((BaseUnityPlugin)this).Config.Bind<float>("Accuracy", "SpreadFactor", 1f, "0–1 spread scaling."); RecoilMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Accuracy", "RecoilMultiplier", 1f, "0–5 recoil scaling."); DamageMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Damage", "DamageMultiplier", 1f, "1–100 damage multiplier."); ExplosiveBullets = ((BaseUnityPlugin)this).Config.Bind<bool>("Damage", "ExplosiveBulletsEnabled", false, "Enable explosive hits."); ExplosionRadius = ((BaseUnityPlugin)this).Config.Bind<float>("Damage", "ExplosionRadius", 5f, "Explosion radius."); ExplosionForce = ((BaseUnityPlugin)this).Config.Bind<float>("Damage", "ExplosionForce", 750f, "Explosion force."); BulletMultiplierEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Bullet Multiplier", "Enabled", false, "Override bullets fired per trigger pull (global)."); BulletsPerShot = ((BaseUnityPlugin)this).Config.Bind<int>("Bullet Multiplier", "BulletsPerShot", 1, "How many bullets are fired per shot (1–25)."); SpawnerEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Weapon Logic", "Connected", true, "Enable the Weapon Logic UI section."); LaserEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Laser", "LaserTweaks", true, "Enable laser-specific tweaks (ItemGunLaser)."); LaserNoCooldown = ((BaseUnityPlugin)this).Config.Bind<bool>("Laser", "LaserCooldownBetweenShots", false, "Minimize downtime states for the laser (very fast)."); LaserContinuousFire = ((BaseUnityPlugin)this).Config.Bind<bool>("Laser", "InflictDamage", true, "Allow the laser to sustain firing (see duration + state lock)."); LaserReloadSpeedMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Laser", "LaserReloadBetweenShotSpeed", 1f, "Reload/Buildup speed multiplier for laser downtime states."); LaserStateLockEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Laser", "ContinuousFire", true, "Prevents the laser from being forced into overheat/reload states while firing (host-only safe)."); LaserShootDurationSeconds = ((BaseUnityPlugin)this).Config.Bind<float>("Laser", "ShotDuration", 999f, "How long the laser can stay in Shooting state before timing out. Use a large value for effectively continuous fire."); ClampConfigValues(); _harmony = new Harmony("com.Dileppy.WeaponEnhancer"); _harmony.PatchAll(); MenuAPI.AddElementToMainMenu(new BuilderDelegate(AddMenuElements)); ((BaseUnityPlugin)this).Logger.LogInfo((object)"[WeaponEnhancer] Loaded."); } private static void ClampConfigValues() { FireRateSeconds.Value = Mathf.Clamp(FireRateSeconds.Value, 0.01f, 0.25f); SpreadFactor.Value = Mathf.Clamp01(SpreadFactor.Value); RecoilMultiplier.Value = Mathf.Clamp(RecoilMultiplier.Value, 0f, 5f); DamageMultiplier.Value = Mathf.Clamp(DamageMultiplier.Value, 1f, 100f); ExplosionRadius.Value = Mathf.Clamp(ExplosionRadius.Value, 0.1f, 20f); ExplosionForce.Value = Mathf.Clamp(ExplosionForce.Value, 0f, 2000f); BulletsPerShot.Value = Mathf.Clamp(BulletsPerShot.Value, 1, 25); LaserReloadSpeedMultiplier.Value = Mathf.Clamp(LaserReloadSpeedMultiplier.Value, 0.1f, 10f); LaserShootDurationSeconds.Value = Mathf.Clamp(LaserShootDurationSeconds.Value, 0.25f, 999f); } private void AddMenuElements(Transform parent) { //IL_0026: 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) MenuAPI.CreateREPOButton("Weapon Enhancer Settings", (Action)delegate { if ((Object)(object)_configPage == (Object)null) { _configPage = MenuAPI.CreateREPOPopupPage("Weapon Enhancer Settings", (PresetSide)0, true, true, 1.5f); BuildConfigPage(_configPage); } _configPage.OpenPage(false); }, parent, Vector2.zero); MenuAPI.CreateREPOButton("Weapon Logic", (Action)delegate { if (SpawnerEnabled.Value) { if ((Object)(object)_spawnerPage == (Object)null) { _spawnerPage = MenuAPI.CreateREPOPopupPage("Weapon Logic (Guns Only)", (PresetSide)1, true, true, 1.5f); BuildSpawnerPage(_spawnerPage); _spawnerPageBuilt = true; } if (_spawnerPageBuilt) { RebuildSpawnerList(); } _spawnerPage.OpenPage(false); } }, parent, Vector2.zero); } private static void BuildConfigPage(REPOPopupPage page) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown //IL_01cc: Unknown result type (might be due to invalid IL or missing references) //IL_01d1: Unknown result type (might be due to invalid IL or missing references) //IL_01d7: Expected O, but got Unknown //IL_025f: Unknown result type (might be due to invalid IL or missing references) //IL_0264: Unknown result type (might be due to invalid IL or missing references) //IL_026a: Expected O, but got Unknown object obj = <>c.<>9__35_0; if (obj == null) { ScrollViewBuilderDelegate val = delegate(Transform parent) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) REPOLabel val6 = MenuAPI.CreateREPOLabel("Weapon Enhancer Settings", parent, Vector2.zero); return ((REPOElement)val6).repoScrollViewElement.rectTransform; }; <>c.<>9__35_0 = val; obj = (object)val; } page.AddElementToScrollView((ScrollViewBuilderDelegate)obj, 0f, 0f); AddToggle(page, "Mod Enabled", ModEnabled, delegate { ApplyTuningToAllGuns(); ApplyLaserTuningToAllLasers(); }); AddSlider(page, "Fire Rate", 0.01f, 0.25f, FireRateSeconds, delegate { ApplyTuningToAllGuns(); }); AddToggle(page, "Infinite Ammo", InfiniteAmmoEnabled, null); AddToggle(page, "Perfect Accuracy", PerfectAccuracyEnabled, delegate { ApplyTuningToAllGuns(); }); AddSlider(page, "Spread Factor", 0f, 1f, SpreadFactor, delegate { ApplyTuningToAllGuns(); }); AddSlider(page, "Recoil Multiplier", 0f, 5f, RecoilMultiplier, delegate { ApplyTuningToAllGuns(); }); AddSlider(page, "Damage Multiplier", 1f, 100f, DamageMultiplier, null); AddToggle(page, "Explosive Bullets", ExplosiveBullets, null); AddSlider(page, "Explosion Radius", 0.1f, 20f, ExplosionRadius, null); AddSlider(page, "Explosion Force", 0f, 2000f, ExplosionForce, null); object obj2 = <>c.<>9__35_6; if (obj2 == null) { ScrollViewBuilderDelegate val2 = delegate(Transform parent) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) REPOLabel val5 = MenuAPI.CreateREPOLabel("Bullet Multiplier", parent, Vector2.zero); return ((REPOElement)val5).repoScrollViewElement.rectTransform; }; <>c.<>9__35_6 = val2; obj2 = (object)val2; } page.AddElementToScrollView((ScrollViewBuilderDelegate)obj2, 0f, 0f); AddToggle(page, "Enable Bullet Multiplier", BulletMultiplierEnabled, delegate { ApplyTuningToAllGuns(); }); AddSliderInt(page, "Bullets Per Shot", 1, 25, BulletsPerShot, delegate { ApplyTuningToAllGuns(); }); object obj3 = <>c.<>9__35_9; if (obj3 == null) { ScrollViewBuilderDelegate val3 = delegate(Transform parent) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) REPOLabel val4 = MenuAPI.CreateREPOLabel("Laser Settings (ItemGunLaser)", parent, Vector2.zero); return ((REPOElement)val4).repoScrollViewElement.rectTransform; }; <>c.<>9__35_9 = val3; obj3 = (object)val3; } page.AddElementToScrollView((ScrollViewBuilderDelegate)obj3, 0f, 0f); AddToggle(page, "Laser Tweaks", LaserEnabled, delegate { ApplyLaserTuningToAllLasers(); }); AddToggle(page, "Laser Cooldown Between Shots", LaserNoCooldown, delegate { ApplyLaserTuningToAllLasers(); }); AddToggle(page, "Inflict Damage", LaserContinuousFire, delegate { ApplyLaserTuningToAllLasers(); }); AddToggle(page, "Continuous Fire", LaserStateLockEnabled, delegate { ApplyLaserTuningToAllLasers(); }); AddSlider(page, "Shot Duration", 0.25f, 999f, LaserShootDurationSeconds, delegate { ApplyLaserTuningToAllLasers(); }); AddSlider(page, "Laser Reload Between Shot Speed", 0.1f, 10f, LaserReloadSpeedMultiplier, delegate { ApplyLaserTuningToAllLasers(); }); } private static void BuildSpawnerPage(REPOPopupPage page) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown //IL_0046: 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_0051: Expected O, but got Unknown //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Expected O, but got Unknown //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Expected O, but got Unknown //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Expected O, but got Unknown //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Expected O, but got Unknown //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Expected O, but got Unknown //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Expected O, but got Unknown object obj = <>c.<>9__36_0; if (obj == null) { ScrollViewBuilderDelegate val = delegate(Transform parent) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) REPOLabel val16 = MenuAPI.CreateREPOLabel("Weapon Logic (Guns Only)", parent, Vector2.zero); return ((REPOElement)val16).repoScrollViewElement.rectTransform; }; <>c.<>9__36_0 = val; obj = (object)val; } page.AddElementToScrollView((ScrollViewBuilderDelegate)obj, 0f, 0f); object obj2 = <>c.<>9__36_1; if (obj2 == null) { ScrollViewBuilderDelegate val2 = delegate(Transform parent) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) REPOLabel val15 = MenuAPI.CreateREPOLabel("Search filter is currently fixed to 'guns only'.", parent, Vector2.zero); return ((REPOElement)val15).repoScrollViewElement.rectTransform; }; <>c.<>9__36_1 = val2; obj2 = (object)val2; } page.AddElementToScrollView((ScrollViewBuilderDelegate)obj2, 0f, 0f); object obj3 = <>c.<>9__36_2; if (obj3 == null) { ScrollViewBuilderDelegate val3 = delegate(Transform parent) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) REPOButton val14 = MenuAPI.CreateREPOButton("Clear Search", (Action)delegate { _spawnSearch = ""; RebuildSpawnerList(); }, parent, Vector2.zero); return ((REPOElement)val14).repoScrollViewElement.rectTransform; }; <>c.<>9__36_2 = val3; obj3 = (object)val3; } page.AddElementToScrollView((ScrollViewBuilderDelegate)obj3, 0f, 0f); object obj4 = <>c.<>9__36_3; if (obj4 == null) { ScrollViewBuilderDelegate val4 = delegate(Transform parent) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) REPOButton val13 = MenuAPI.CreateREPOButton("Search: Laser", (Action)delegate { _spawnSearch = "laser"; RebuildSpawnerList(); }, parent, Vector2.zero); return ((REPOElement)val13).repoScrollViewElement.rectTransform; }; <>c.<>9__36_3 = val4; obj4 = (object)val4; } page.AddElementToScrollView((ScrollViewBuilderDelegate)obj4, 0f, 0f); object obj5 = <>c.<>9__36_4; if (obj5 == null) { ScrollViewBuilderDelegate val5 = delegate(Transform parent) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) REPOButton val12 = MenuAPI.CreateREPOButton("Search: Gun", (Action)delegate { _spawnSearch = "gun"; RebuildSpawnerList(); }, parent, Vector2.zero); return ((REPOElement)val12).repoScrollViewElement.rectTransform; }; <>c.<>9__36_4 = val5; obj5 = (object)val5; } page.AddElementToScrollView((ScrollViewBuilderDelegate)obj5, 0f, 0f); object obj6 = <>c.<>9__36_5; if (obj6 == null) { ScrollViewBuilderDelegate val6 = delegate(Transform parent) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) REPOButton val11 = MenuAPI.CreateREPOButton("Search: Cannon", (Action)delegate { _spawnSearch = "cannon"; RebuildSpawnerList(); }, parent, Vector2.zero); return ((REPOElement)val11).repoScrollViewElement.rectTransform; }; <>c.<>9__36_5 = val6; obj6 = (object)val6; } page.AddElementToScrollView((ScrollViewBuilderDelegate)obj6, 0f, 0f); object obj7 = <>c.<>9__36_6; if (obj7 == null) { ScrollViewBuilderDelegate val7 = delegate(Transform parent) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) REPOButton val10 = MenuAPI.CreateREPOButton("Refresh List", (Action)delegate { RebuildSpawnerList(); }, parent, Vector2.zero); return ((REPOElement)val10).repoScrollViewElement.rectTransform; }; <>c.<>9__36_6 = val7; obj7 = (object)val7; } page.AddElementToScrollView((ScrollViewBuilderDelegate)obj7, 0f, 0f); object obj8 = <>c.<>9__36_7; if (obj8 == null) { ScrollViewBuilderDelegate val8 = delegate(Transform parent) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) REPOLabel val9 = MenuAPI.CreateREPOLabel("Available Gun Items:", parent, Vector2.zero); return ((REPOElement)val9).repoScrollViewElement.rectTransform; }; <>c.<>9__36_7 = val8; obj8 = (object)val8; } page.AddElementToScrollView((ScrollViewBuilderDelegate)obj8, 0f, 0f); CacheGunItems(); RebuildSpawnerList(); } private static void CacheGunItems() { _cachedGunItems.Clear(); IReadOnlyList<Item> allItems = Items.AllItems; for (int i = 0; i < allItems.Count; i++) { Item val = allItems[i]; if (!((Object)(object)val == (Object)null) && !string.IsNullOrEmpty(val.itemName)) { string text = val.itemName.ToLowerInvariant(); if (text.Contains("gun") || text.Contains("laser") || text.Contains("c.a.r.t") || text.Contains("cart") || text.Contains("cannon") || text.Contains("grenade") || text.Contains("mine") || text.Contains("stun") || text.Contains("baton") || text.Contains("tracker") || text.Contains("shockwave") || text.Contains("sentry")) { _cachedGunItems.Add(val); } } } _cachedGunItems.Sort((Item a, Item b) => string.Compare(a.itemName, b.itemName, StringComparison.OrdinalIgnoreCase)); } private static void RebuildSpawnerList() { if (!((Object)(object)_spawnerPage == (Object)null)) { CacheGunItems(); bool flag = true; try { _spawnerPage.ClosePage(false); } catch { flag = false; } _spawnerPage = MenuAPI.CreateREPOPopupPage("Weapon Logic (Guns Only)", (PresetSide)1, true, true, 1.5f); BuildSpawnerPageCoreList(_spawnerPage); if (flag) { _spawnerPage.OpenPage(false); } } } private static void BuildSpawnerPageCoreList(REPOPopupPage page) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown //IL_0046: 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_0051: Expected O, but got Unknown //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Expected O, but got Unknown //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Expected O, but got Unknown //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Expected O, but got Unknown //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Expected O, but got Unknown //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Expected O, but got Unknown //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Expected O, but got Unknown //IL_021d: Unknown result type (might be due to invalid IL or missing references) //IL_0231: Expected O, but got Unknown object obj = <>c.<>9__39_0; if (obj == null) { ScrollViewBuilderDelegate val = delegate(Transform parent) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) REPOLabel val17 = MenuAPI.CreateREPOLabel("Weapon Logic (Guns Only)", parent, Vector2.zero); return ((REPOElement)val17).repoScrollViewElement.rectTransform; }; <>c.<>9__39_0 = val; obj = (object)val; } page.AddElementToScrollView((ScrollViewBuilderDelegate)obj, 0f, 0f); object obj2 = <>c.<>9__39_1; if (obj2 == null) { ScrollViewBuilderDelegate val2 = delegate(Transform parent) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) REPOLabel val16 = MenuAPI.CreateREPOLabel(string.IsNullOrEmpty(_spawnSearch) ? "Search: (none)" : ("Search: " + _spawnSearch), parent, Vector2.zero); return ((REPOElement)val16).repoScrollViewElement.rectTransform; }; <>c.<>9__39_1 = val2; obj2 = (object)val2; } page.AddElementToScrollView((ScrollViewBuilderDelegate)obj2, 0f, 0f); object obj3 = <>c.<>9__39_2; if (obj3 == null) { ScrollViewBuilderDelegate val3 = delegate(Transform parent) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) REPOButton val15 = MenuAPI.CreateREPOButton("Clear Search", (Action)delegate { _spawnSearch = ""; RebuildSpawnerList(); }, parent, Vector2.zero); return ((REPOElement)val15).repoScrollViewElement.rectTransform; }; <>c.<>9__39_2 = val3; obj3 = (object)val3; } page.AddElementToScrollView((ScrollViewBuilderDelegate)obj3, 0f, 0f); object obj4 = <>c.<>9__39_3; if (obj4 == null) { ScrollViewBuilderDelegate val4 = delegate(Transform parent) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) REPOButton val14 = MenuAPI.CreateREPOButton("Search: Laser", (Action)delegate { _spawnSearch = "laser"; RebuildSpawnerList(); }, parent, Vector2.zero); return ((REPOElement)val14).repoScrollViewElement.rectTransform; }; <>c.<>9__39_3 = val4; obj4 = (object)val4; } page.AddElementToScrollView((ScrollViewBuilderDelegate)obj4, 0f, 0f); object obj5 = <>c.<>9__39_4; if (obj5 == null) { ScrollViewBuilderDelegate val5 = delegate(Transform parent) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) REPOButton val13 = MenuAPI.CreateREPOButton("Search: Gun", (Action)delegate { _spawnSearch = "gun"; RebuildSpawnerList(); }, parent, Vector2.zero); return ((REPOElement)val13).repoScrollViewElement.rectTransform; }; <>c.<>9__39_4 = val5; obj5 = (object)val5; } page.AddElementToScrollView((ScrollViewBuilderDelegate)obj5, 0f, 0f); object obj6 = <>c.<>9__39_5; if (obj6 == null) { ScrollViewBuilderDelegate val6 = delegate(Transform parent) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) REPOButton val12 = MenuAPI.CreateREPOButton("Search: Cannon", (Action)delegate { _spawnSearch = "cannon"; RebuildSpawnerList(); }, parent, Vector2.zero); return ((REPOElement)val12).repoScrollViewElement.rectTransform; }; <>c.<>9__39_5 = val6; obj6 = (object)val6; } page.AddElementToScrollView((ScrollViewBuilderDelegate)obj6, 0f, 0f); object obj7 = <>c.<>9__39_6; if (obj7 == null) { ScrollViewBuilderDelegate val7 = delegate(Transform parent) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) REPOButton val11 = MenuAPI.CreateREPOButton("Refresh List", (Action)delegate { RebuildSpawnerList(); }, parent, Vector2.zero); return ((REPOElement)val11).repoScrollViewElement.rectTransform; }; <>c.<>9__39_6 = val7; obj7 = (object)val7; } page.AddElementToScrollView((ScrollViewBuilderDelegate)obj7, 0f, 0f); object obj8 = <>c.<>9__39_7; if (obj8 == null) { ScrollViewBuilderDelegate val8 = delegate(Transform parent) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) REPOLabel val10 = MenuAPI.CreateREPOLabel("Available Gun Items:", parent, Vector2.zero); return ((REPOElement)val10).repoScrollViewElement.rectTransform; }; <>c.<>9__39_7 = val8; obj8 = (object)val8; } page.AddElementToScrollView((ScrollViewBuilderDelegate)obj8, 0f, 0f); string value = (string.IsNullOrEmpty(_spawnSearch) ? "" : _spawnSearch.ToLowerInvariant()); for (int i = 0; i < _cachedGunItems.Count; i++) { Item item = _cachedGunItems[i]; if ((Object)(object)item == (Object)null) { continue; } string name = item.itemName ?? ""; string text = name.ToLowerInvariant(); if (!string.IsNullOrEmpty(value) && !text.Contains(value)) { continue; } page.AddElementToScrollView((ScrollViewBuilderDelegate)delegate(Transform parent) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) REPOButton val9 = MenuAPI.CreateREPOButton("Spawn: " + name, (Action)delegate { TrySpawnItemInFront(item); }, parent, Vector2.zero); return ((REPOElement)val9).repoScrollViewElement.rectTransform; }, 0f, 0f); } _spawnerPageBuilt = true; } private static void TrySpawnItemInFront(Item item) { //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0077: 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_0095: 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_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: 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_0069: 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) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: 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_00a8: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)item == (Object)null || !SemiFunc.IsMasterClientOrSingleplayer()) { return; } Transform val = null; try { if ((Object)(object)PlayerAvatar.instance != (Object)null) { val = ((Component)PlayerAvatar.instance).transform; } } catch { } Vector3 val2 = (((Object)(object)val != (Object)null) ? (val.position + val.forward * 2f + Vector3.up * 0.3f) : (Vector3.zero + Vector3.up * 1.5f)); Quaternion identity = Quaternion.identity; Items.SpawnItem(item, val2, identity); } private static void AddToggle(REPOPopupPage page, string label, ConfigEntry<bool> entry, Action<bool> onChanged) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown page.AddElementToScrollView((ScrollViewBuilderDelegate)delegate(Transform parent) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) REPOToggle val = MenuAPI.CreateREPOToggle(label, (Action<bool>)delegate(bool v) { entry.Value = v; onChanged?.Invoke(v); }, parent, Vector2.zero, "Off", "On", entry.Value); return ((REPOElement)val).repoScrollViewElement.rectTransform; }, 0f, 0f); } private static void AddSlider(REPOPopupPage page, string label, float min, float max, ConfigEntry<float> entry, Action<float> onChanged) { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown page.AddElementToScrollView((ScrollViewBuilderDelegate)delegate(Transform parent) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) REPOSlider val = MenuAPI.CreateREPOSlider(label, "", (Action<float>)delegate(float v) { entry.Value = Mathf.Clamp(v, min, max); onChanged?.Invoke(entry.Value); }, parent, Vector2.zero, min, max, 2, entry.Value, "", "", (BarBehavior)0); return ((REPOElement)val).repoScrollViewElement.rectTransform; }, 0f, 0f); } private static void AddSliderInt(REPOPopupPage page, string label, int min, int max, ConfigEntry<int> entry, Action<int> onChanged) { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown page.AddElementToScrollView((ScrollViewBuilderDelegate)delegate(Transform parent) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) REPOSlider val = MenuAPI.CreateREPOSlider(label, "", (Action<float>)delegate(float v) { int num = Mathf.Clamp(Mathf.RoundToInt(v), min, max); entry.Value = num; onChanged?.Invoke(num); }, parent, Vector2.zero, (float)min, (float)max, 0, (float)entry.Value, "", "", (BarBehavior)0); return ((REPOElement)val).repoScrollViewElement.rectTransform; }, 0f, 0f); } internal static void ApplyTuningToAllGuns() { ItemGun[] array = Object.FindObjectsOfType<ItemGun>(); for (int i = 0; i < array.Length; i++) { ApplyTuningToGun(array[i]); } } internal static void ApplyTuningToGun(ItemGun gun) { if ((Object)(object)gun == (Object)null) { return; } if (!ModEnabled.Value) { RestoreOriginalGunValues(gun); return; } if (!originalSpread.ContainsKey(gun)) { originalSpread[gun] = gun.gunRandomSpread; } if (!originalRecoil.ContainsKey(gun)) { originalRecoil[gun] = gun.gunRecoilForce; } if (!originalShake.ContainsKey(gun)) { originalShake[gun] = gun.cameraShakeMultiplier; } if (!originalNumberOfBullets.ContainsKey(gun)) { originalNumberOfBullets[gun] = gun.numberOfBullets; } if (PerfectAccuracyEnabled.Value) { gun.gunRandomSpread = 0f; } else { gun.gunRandomSpread = originalSpread[gun] * SpreadFactor.Value; } gun.gunRecoilForce = originalRecoil[gun] * RecoilMultiplier.Value; gun.cameraShakeMultiplier = originalShake[gun] * RecoilMultiplier.Value; gun.shootCooldown = FireRateSeconds.Value; if (BulletMultiplierEnabled.Value) { gun.numberOfBullets = BulletsPerShot.Value; } else { gun.numberOfBullets = originalNumberOfBullets[gun]; } } internal static void RestoreOriginalGunValues(ItemGun gun) { if (!((Object)(object)gun == (Object)null)) { if (originalSpread.ContainsKey(gun)) { gun.gunRandomSpread = originalSpread[gun]; } if (originalRecoil.ContainsKey(gun)) { gun.gunRecoilForce = originalRecoil[gun]; } if (originalShake.ContainsKey(gun)) { gun.cameraShakeMultiplier = originalShake[gun]; } if (originalNumberOfBullets.ContainsKey(gun)) { gun.numberOfBullets = originalNumberOfBullets[gun]; } } } internal static void ApplyLaserTuningToAllLasers() { try { ItemGunLaser[] array = Object.FindObjectsOfType<ItemGunLaser>(); for (int i = 0; i < array.Length; i++) { ItemGun component = ((Component)array[i]).GetComponent<ItemGun>(); if ((Object)(object)component != (Object)null) { ApplyLaserTuningToGun(component); } } } catch { } } internal static void ApplyLaserTuningToGun(ItemGun gun) { //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)gun == (Object)null) && ModEnabled.Value && LaserEnabled.Value && !((Object)(object)((Component)gun).GetComponent<ItemGunLaser>() == (Object)null)) { State stateCurrentSafe = LaserTuningHelpers.GetStateCurrentSafe(gun); LaserTuningHelpers.ApplyLaserStateTiming(gun, stateCurrentSafe); } } } [HarmonyPatch(typeof(ItemGun), "Start")] internal static class Patch_GunStart { private static void Postfix(ItemGun __instance) { WeaponEnhancerMod.ApplyTuningToGun(__instance); WeaponEnhancerMod.ApplyLaserTuningToGun(__instance); } } [HarmonyPatch(typeof(ItemGun), "StateSet")] internal static class Patch_ItemGun_StateSet_LaserOverride { private static bool Prefix(ItemGun __instance, ref State __0) { //IL_0065: 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_006c: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Invalid comparison between Unknown and I4 if ((Object)(object)__instance == (Object)null) { return true; } if (!WeaponEnhancerMod.ModEnabled.Value) { return true; } if (!WeaponEnhancerMod.LaserEnabled.Value) { return true; } if ((Object)(object)((Component)__instance).GetComponent<ItemGunLaser>() == (Object)null) { return true; } if (WeaponEnhancerMod.LaserStateLockEnabled.Value) { State stateCurrentSafe = LaserTuningHelpers.GetStateCurrentSafe(__instance); if ((int)stateCurrentSafe == 3 && ((int)__0 == 4 || (int)__0 == 2)) { __0 = (State)3; } } return true; } private static void Postfix(ItemGun __instance, State __0) { //IL_0047: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)__instance == (Object)null) && WeaponEnhancerMod.ModEnabled.Value && WeaponEnhancerMod.LaserEnabled.Value && !((Object)(object)((Component)__instance).GetComponent<ItemGunLaser>() == (Object)null)) { LaserTuningHelpers.ApplyLaserStateTiming(__instance, __0); } } } [HarmonyPatch(typeof(ItemGun), "StateSetRPC")] internal static class Patch_ItemGun_StateSetRPC_LaserOverride { private static bool Prefix(ItemGun __instance, ref int __0) { //IL_0070: 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_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Invalid comparison between Unknown and I4 //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Invalid comparison between Unknown and I4 //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Invalid comparison between Unknown and I4 if ((Object)(object)__instance == (Object)null) { return true; } if (!WeaponEnhancerMod.ModEnabled.Value) { return true; } if (!WeaponEnhancerMod.LaserEnabled.Value) { return true; } if ((Object)(object)((Component)__instance).GetComponent<ItemGunLaser>() == (Object)null) { return true; } if (!WeaponEnhancerMod.LaserStateLockEnabled.Value) { return true; } State val = (State)__0; State stateCurrentSafe = LaserTuningHelpers.GetStateCurrentSafe(__instance); if ((int)stateCurrentSafe == 3 && ((int)val == 4 || (int)val == 2)) { __0 = 3; } return true; } private static void Postfix(ItemGun __instance, int __0) { //IL_0049: 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) if (!((Object)(object)__instance == (Object)null) && WeaponEnhancerMod.ModEnabled.Value && WeaponEnhancerMod.LaserEnabled.Value && !((Object)(object)((Component)__instance).GetComponent<ItemGunLaser>() == (Object)null)) { State state = (State)__0; LaserTuningHelpers.ApplyLaserStateTiming(__instance, state); } } } [HarmonyPatch(typeof(ItemGun), "Update")] internal static class Patch_ItemGun_Update_LaserTimingEnforcer { private static void Postfix(ItemGun __instance) { //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)__instance == (Object)null) && WeaponEnhancerMod.ModEnabled.Value && WeaponEnhancerMod.LaserEnabled.Value && !((Object)(object)((Component)__instance).GetComponent<ItemGunLaser>() == (Object)null)) { State stateCurrentSafe = LaserTuningHelpers.GetStateCurrentSafe(__instance); LaserTuningHelpers.ApplyLaserStateTiming(__instance, stateCurrentSafe); } } } [HarmonyPatch(typeof(ItemBattery), "Update")] internal static class Patch_BatteryInfinite { private static void Postfix(ItemBattery __instance) { if (WeaponEnhancerMod.ModEnabled.Value && WeaponEnhancerMod.InfiniteAmmoEnabled.Value && SemiFunc.IsMasterClientOrSingleplayer()) { __instance.autoDrain = false; __instance.batteryDrainRate = 0f; __instance.batteryLife = 100f; } } } [HarmonyPatch(typeof(HurtCollider), "EnemyHurt")] internal static class Patch_EnemyDamage { private static void Prefix(HurtCollider __instance, Enemy _enemy, ref int __state) { __state = __instance.enemyDamage; if (WeaponEnhancerMod.ModEnabled.Value && (!((Object)(object)((Component)__instance).GetComponentInParent<ItemGunBullet>() == (Object)null) || !((Object)(object)((Component)__instance).GetComponentInParent<ItemGun>() == (Object)null))) { __instance.enemyDamage = Mathf.RoundToInt((float)__state * WeaponEnhancerMod.DamageMultiplier.Value); } } private static void Postfix(HurtCollider __instance, Enemy _enemy, int __state) { //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) __instance.enemyDamage = __state; if (!WeaponEnhancerMod.ModEnabled.Value || !WeaponEnhancerMod.ExplosiveBullets.Value || ((Object)(object)((Component)__instance).GetComponentInParent<ItemGunBullet>() == (Object)null && (Object)(object)((Component)__instance).GetComponentInParent<ItemGun>() == (Object)null) || (Object)(object)_enemy == (Object)null) { return; } Vector3 position = ((Component)_enemy).transform.position; Collider[] array = Physics.OverlapSphere(position, WeaponEnhancerMod.ExplosionRadius.Value); for (int i = 0; i < array.Length; i++) { Rigidbody attachedRigidbody = array[i].attachedRigidbody; if ((Object)(object)attachedRigidbody != (Object)null) { attachedRigidbody.AddExplosionForce(WeaponEnhancerMod.ExplosionForce.Value, position, WeaponEnhancerMod.ExplosionRadius.Value, 0f, (ForceMode)1); } } } } [HarmonyPatch(typeof(HurtCollider), "PlayerHurt")] internal static class Patch_PlayerDamage { private static void Prefix(HurtCollider __instance, PlayerAvatar _player, ref int __state) { __state = __instance.playerDamage; if (WeaponEnhancerMod.ModEnabled.Value && (!((Object)(object)((Component)__instance).GetComponentInParent<ItemGunBullet>() == (Object)null) || !((Object)(object)((Component)__instance).GetComponentInParent<ItemGun>() == (Object)null))) { __instance.playerDamage = Mathf.RoundToInt((float)__state * WeaponEnhancerMod.DamageMultiplier.Value); } } private static void Postfix(HurtCollider __instance, PlayerAvatar _player, int __state) { //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) __instance.playerDamage = __state; if (!WeaponEnhancerMod.ModEnabled.Value || !WeaponEnhancerMod.ExplosiveBullets.Value || ((Object)(object)((Component)__instance).GetComponentInParent<ItemGunBullet>() == (Object)null && (Object)(object)((Component)__instance).GetComponentInParent<ItemGun>() == (Object)null) || (Object)(object)_player == (Object)null) { return; } Vector3 position = ((Component)_player).transform.position; Collider[] array = Physics.OverlapSphere(position, WeaponEnhancerMod.ExplosionRadius.Value); for (int i = 0; i < array.Length; i++) { Rigidbody attachedRigidbody = array[i].attachedRigidbody; if ((Object)(object)attachedRigidbody != (Object)null) { attachedRigidbody.AddExplosionForce(WeaponEnhancerMod.ExplosionForce.Value, position, WeaponEnhancerMod.ExplosionRadius.Value, 0f, (ForceMode)1); } } } } internal static class LaserTuningHelpers { private static readonly FieldInfo Field_StateCurrent = AccessTools.Field(typeof(ItemGun), "stateCurrent"); private static readonly FieldInfo Field_StateTimeMax = AccessTools.Field(typeof(ItemGun), "stateTimeMax"); private static readonly Dictionary<int, float> OriginalStateTimeMax = new Dictionary<int, float>(); private static int MakeKey(ItemGun gun, State state) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected I4, but got Unknown return (((Object)gun).GetInstanceID() * 397) ^ state; } internal static State GetStateCurrentSafe(ItemGun gun) { //IL_0051: 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_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0040: 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) try { if ((Object)(object)gun == (Object)null) { return (State)0; } if (Field_StateCurrent == null) { return (State)0; } object value = Field_StateCurrent.GetValue(gun); if (value is State) { return (State)value; } } catch { } return (State)0; } internal static void ApplyLaserStateTiming(ItemGun gun, State state) { //IL_00a0: 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_00d8: Invalid comparison between Unknown and I4 //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Invalid comparison between Unknown and I4 //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Invalid comparison between Unknown and I4 if ((Object)(object)gun == (Object)null || !WeaponEnhancerMod.ModEnabled.Value || !WeaponEnhancerMod.LaserEnabled.Value || (Object)(object)((Component)gun).GetComponent<ItemGunLaser>() == (Object)null || Field_StateTimeMax == null) { return; } float num; try { object value = Field_StateTimeMax.GetValue(gun); num = ((value is float) ? ((float)value) : 0f); } catch { return; } int key = MakeKey(gun, state); if (!OriginalStateTimeMax.ContainsKey(key) && num > 0f) { OriginalStateTimeMax[key] = num; } float num2 = num; if ((int)state == 3) { float value2; if (WeaponEnhancerMod.LaserContinuousFire.Value) { num2 = Mathf.Clamp(WeaponEnhancerMod.LaserShootDurationSeconds.Value, 0.25f, 999f); } else if (OriginalStateTimeMax.TryGetValue(key, out value2) && value2 > 0f) { num2 = value2; } } else if ((int)state == 4 || (int)state == 2) { float value3; if (WeaponEnhancerMod.LaserNoCooldown.Value) { num2 = 0.01f; } else if (OriginalStateTimeMax.TryGetValue(key, out value3) && value3 > 0f) { float num3 = Mathf.Clamp(WeaponEnhancerMod.LaserReloadSpeedMultiplier.Value, 0.1f, 10f); num2 = Mathf.Max(0.05f, value3 / num3); } } try { Field_StateTimeMax.SetValue(gun, num2); } catch { } } }