using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using 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
{
}
}
}