Please disclose if your mod was created primarily 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 ConfigurableWeapons v1.0.0
ConfigurableWeapons.dll
Decompiled 11 months agousing System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using HarmonyLib; 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("ConfigurableWeapons")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ConfigurableWeapons")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("ccc8d4ac-533d-4a1b-ba99-81a3bd3a54b7")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace ConfigurableWeapons; [BepInPlugin("GitMCP.ConfigurableWeapons", "Configurable Weapons", "0.0.1")] public class ConfigurableWeapons : BaseUnityPlugin { [HarmonyPatch(typeof(ObjectDB), "CopyOtherDB")] public static class ObjectDB_CopyOtherDB_Patch { public static void Postfix() { if (modEnabled.Value) { ApplyOneHandedWeaponConfigs(); ApplyTwoHandedWeaponConfigs(); ApplyBowWeaponConfigs(); ApplyOtherWeaponConfigs(); } } } public static ConfigurableWeapons context; public static ConfigEntry<bool> modEnabled; public static ConfigEntry<float> oneHandedDamageMultiplier; public static ConfigEntry<float> oneHandedBackstabBonusMultiplier; public static ConfigEntry<float> oneHandedAttackStaminaUseMultiplier; public static ConfigEntry<float> twoHandedDamageMultiplier; public static ConfigEntry<float> twoHandedBackstabBonusMultiplier; public static ConfigEntry<float> twoHandedAttackStaminaUseMultiplier; public static ConfigEntry<float> bowDamageMultiplier; public static ConfigEntry<float> bowBackstabBonusMultiplier; public static ConfigEntry<float> bowAttackStaminaUseMultiplier; public static ConfigEntry<float> otherDamageMultiplier; public static ConfigEntry<float> otherBackstabBonusMultiplier; public static ConfigEntry<float> otherAttackStaminaUseMultiplier; public static List<WeaponData> weaponDatas; public static string assetPath; public void Awake() { context = this; modEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("1. General", "Enabled", true, "Enable this mod"); oneHandedDamageMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("2. One Handed", "OneHandedDamageMultiplier", 1f, "One Handed damage multiplier for all weapons"); oneHandedBackstabBonusMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("2. One Handed", "OneHandedBackstabBonusMultiplier", 1f, "One Handed backstab bonus multiplier for all weapons"); oneHandedAttackStaminaUseMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("2. One Handed", "OneHandedAttackStaminaUseMultiplier", 1f, "One Handed attack stamina use multiplier for all weapons"); twoHandedDamageMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("3. Two Handed", "TwoHandedDamageMultiplier", 1f, "Two Handed damage multiplier for all weapons"); twoHandedBackstabBonusMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("3. Two Handed", "TwoHandedBackstabBonusMultiplier", 1f, "Two Handed backstab bonus multiplier for all weapons"); twoHandedAttackStaminaUseMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("3. Two Handed", "TwoHandedAttackStaminaUseMultiplier", 1f, "Two Handed attack stamina use multiplier for all weapons"); bowDamageMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("4. Bow", "BowDamageMultiplier", 1f, "Bow damage multiplier for all weapons"); bowBackstabBonusMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("4. Bow", "BowBackstabBonusMultiplier", 1f, "Bow backstab bonus multiplier for all weapons"); bowAttackStaminaUseMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("4. Bow", "BowAttackStaminaUseMultiplier", 1f, "Bow attack stamina use multiplier for all weapons"); otherDamageMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("5. Other Weapons", "OtherWeaponsDamageMultiplier", 1f, "Other Weapons damage multiplier for all weapons"); otherBackstabBonusMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("5. Other Weapons", "OtherWeaponsBackstabBonusMultiplier", 1f, "Other Weapons backstab bonus multiplier for all weapons"); otherAttackStaminaUseMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("5. Other Weapons", "OtherWeaponsAttackStaminaUseMultiplier", 1f, "Other Weapons attack stamina use multiplier for all weapons"); assetPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "CustomWeaponStats"); Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), (string)null); } public static List<ItemDrop> GetOneHandeds() { //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Invalid comparison between Unknown and I4 List<ItemDrop> list = new List<ItemDrop>(); foreach (GameObject item in ObjectDB.instance.m_items) { ItemDrop component = item.GetComponent<ItemDrop>(); if ((int)component.m_itemData.m_shared.m_itemType == 3 && component.m_itemData.IsWeapon()) { list.Add(component); } } return list; } public static List<ItemDrop> GetTwoHandeds() { //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Invalid comparison between Unknown and I4 List<ItemDrop> list = new List<ItemDrop>(); foreach (GameObject item in ObjectDB.instance.m_items) { ItemDrop component = item.GetComponent<ItemDrop>(); if ((int)component.m_itemData.m_shared.m_itemType == 14 && component.m_itemData.IsWeapon()) { list.Add(component); } } return list; } public static List<ItemDrop> GetBows() { //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Invalid comparison between Unknown and I4 List<ItemDrop> list = new List<ItemDrop>(); foreach (GameObject item in ObjectDB.instance.m_items) { ItemDrop component = item.GetComponent<ItemDrop>(); if ((int)component.m_itemData.m_shared.m_itemType == 4 && component.m_itemData.IsWeapon()) { list.Add(component); } } return list; } public static List<ItemDrop> GetOthers() { //IL_0057: Unknown result type (might be due to invalid IL or missing references) List<ItemDrop> list = new List<ItemDrop>(); List<ItemType> list2 = new List<ItemType> { (ItemType)3, (ItemType)14, (ItemType)4 }; foreach (GameObject item in ObjectDB.instance.m_items) { ItemDrop component = item.GetComponent<ItemDrop>(); if (!list2.Contains(component.m_itemData.m_shared.m_itemType) && component.m_itemData.IsWeapon()) { list.Add(component); } } return list; } public static void ApplyOneHandedWeaponConfigs() { if ((Object)(object)ObjectDB.instance == (Object)null || ObjectDB.instance.m_items.Count == 0) { return; } List<ItemDrop> oneHandeds = GetOneHandeds(); foreach (ItemDrop item in oneHandeds) { ((DamageTypes)(ref item.m_itemData.m_shared.m_damages)).Modify(oneHandedDamageMultiplier.Value); SharedData shared = item.m_itemData.m_shared; shared.m_backstabBonus *= oneHandedBackstabBonusMultiplier.Value; Attack attack = item.m_itemData.m_shared.m_attack; attack.m_attackStamina *= oneHandedAttackStaminaUseMultiplier.Value; } } public static void ApplyTwoHandedWeaponConfigs() { if ((Object)(object)ObjectDB.instance == (Object)null || ObjectDB.instance.m_items.Count == 0) { return; } List<ItemDrop> twoHandeds = GetTwoHandeds(); foreach (ItemDrop item in twoHandeds) { ((DamageTypes)(ref item.m_itemData.m_shared.m_damages)).Modify(twoHandedDamageMultiplier.Value); SharedData shared = item.m_itemData.m_shared; shared.m_backstabBonus *= twoHandedBackstabBonusMultiplier.Value; Attack attack = item.m_itemData.m_shared.m_attack; attack.m_attackStamina *= twoHandedAttackStaminaUseMultiplier.Value; } } public static void ApplyBowWeaponConfigs() { if ((Object)(object)ObjectDB.instance == (Object)null || ObjectDB.instance.m_items.Count == 0) { return; } List<ItemDrop> bows = GetBows(); foreach (ItemDrop item in bows) { ((DamageTypes)(ref item.m_itemData.m_shared.m_damages)).Modify(bowDamageMultiplier.Value); SharedData shared = item.m_itemData.m_shared; shared.m_backstabBonus *= bowBackstabBonusMultiplier.Value; Attack attack = item.m_itemData.m_shared.m_attack; attack.m_attackStamina *= bowAttackStaminaUseMultiplier.Value; } } public static void ApplyOtherWeaponConfigs() { if ((Object)(object)ObjectDB.instance == (Object)null || ObjectDB.instance.m_items.Count == 0) { return; } List<ItemDrop> others = GetOthers(); foreach (ItemDrop item in others) { ((DamageTypes)(ref item.m_itemData.m_shared.m_damages)).Modify(otherDamageMultiplier.Value); SharedData shared = item.m_itemData.m_shared; shared.m_backstabBonus *= otherBackstabBonusMultiplier.Value; Attack attack = item.m_itemData.m_shared.m_attack; attack.m_attackStamina *= otherAttackStaminaUseMultiplier.Value; } } } public class WeaponData { public string name; public bool useDurability; public bool blockable; public bool dodgeable; public SkillType skillType; public float useDurabilityDrain; public float durabilityPerLevel; public float holdDurationMin; public float holdStaminaDrain; public int toolTier; public string ammoType; public string attackStatusEffect; public string equipStatusEffect; public string statusEffect; public float backStabBonus; public float blockPower; public float deflectionForce; public float attackForce; public float blunt; public float damage; public float pierce; public float slash; public float chop; public float pickaxe; public float fire; public float frost; public float lightning; public float poison; public float spirit; public float blockPowerPerLevel; public float deflectionForcePerLevel; public float bluntPerLevel; public float damagePerLevel; public float piercePerLevel; public float slashPerLevel; public float chopPerLevel; public float pickaxePerLevel; public float firePerLevel; public float frostPerLevel; public float lightningPerLevel; public float poisonPerLevel; public float spiritPerLevel; public bool hitTerrain; public bool hitTerrainSecondary; } public class WeaponState : SharedData { public float useDurabilityDrain; public float holdDurationMin; public float holdStaminaDrain; public float attackForce; public float backstabBonus; public float damage; public float blunt; public float slash; public float pierce; public float chop; public float pickaxe; public float fire; public float frost; public float lightning; public float poison; public float spirit; public bool hitTerrain; public bool hitTerrainSecondary; public WeaponState(ItemData weapon) { useDurabilityDrain = weapon.m_shared.m_useDurabilityDrain; attackForce = weapon.m_shared.m_attackForce; backstabBonus = weapon.m_shared.m_backstabBonus; damage = weapon.m_shared.m_damages.m_damage; blunt = weapon.m_shared.m_damages.m_blunt; slash = weapon.m_shared.m_damages.m_slash; pierce = weapon.m_shared.m_damages.m_pierce; chop = weapon.m_shared.m_damages.m_chop; pickaxe = weapon.m_shared.m_damages.m_pickaxe; fire = weapon.m_shared.m_damages.m_fire; frost = weapon.m_shared.m_damages.m_frost; lightning = weapon.m_shared.m_damages.m_lightning; poison = weapon.m_shared.m_damages.m_poison; spirit = weapon.m_shared.m_damages.m_spirit; hitTerrain = weapon.m_shared.m_attack?.m_hitTerrain ?? false; hitTerrainSecondary = weapon.m_shared.m_secondaryAttack?.m_hitTerrain ?? false; } }