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 WeedheimArmor v1.0.2
plugins/WeedheimArmor.dll
Decompiled 9 months agousing System; using 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 System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using Jotunn; using Jotunn.Configs; using Jotunn.Entities; using Jotunn.Extensions; using Jotunn.Managers; using Jotunn.Utils; using Microsoft.CodeAnalysis; using UnityEngine; using UnityEngine.SceneManagement; using WeedheimArmor.Effects; using WeedheimArmor.Updates; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("WeedheimArmor")] [assembly: AssemblyDescription("https://discord.gg/zRucjV8rqc")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("MagicMike")] [assembly: AssemblyProduct("WeedheimArmor")] [assembly: AssemblyCopyright("Copyright © MagicMike 2025WeedheimArmor")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("e3243d22-4307-4008-ba36-9f326008cde5")] [assembly: AssemblyFileVersion("1.0.2")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.2.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace WeedheimArmor { internal class TradersPatch { [HarmonyPatch(typeof(Trader), "GetAvailableItems")] public static class GetAvailableItemsPatch { [HarmonyPriority(200)] private static void Postfix(Trader __instance, ref List<TradeItem> __result) { if (__instance.m_name.Equals("Loki")) { string name = ((Object)Cache.GetPrefab<GameObject>("ArmorHempCape")).name; __result.Add(CreateCustomItem(name, 1, 200, "defeated_eikthyr")); string name2 = ((Object)Cache.GetPrefab<GameObject>("ArmorHempChest")).name; __result.Add(CreateCustomItem(name2, 1, 200, "defeated_eikthyr")); string name3 = ((Object)Cache.GetPrefab<GameObject>("ArmorHempHelmet")).name; __result.Add(CreateCustomItem(name3, 1, 200, "defeated_eikthyr")); string name4 = ((Object)Cache.GetPrefab<GameObject>("ArmorHempLegs")).name; __result.Add(CreateCustomItem(name4, 1, 200, "defeated_eikthyr")); } } private static TradeItem CreateCustomItem(string itemName, int stackSize, int price, string key) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown ItemDrop component = ObjectDB.instance.GetItemPrefab(itemName).GetComponent<ItemDrop>(); return new TradeItem { m_prefab = component, m_stack = stackSize, m_price = price, m_requiredGlobalKey = key }; } } } internal class FileWatcher { public static void WatchFileChanges(string path, Action onChanged) { FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(); string directoryName = Path.GetDirectoryName(path); string fileName = Path.GetFileName(path); fileSystemWatcher.Path = directoryName; fileSystemWatcher.Filter = fileName; fileSystemWatcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite; fileSystemWatcher.Changed += delegate { onChanged?.Invoke(); }; fileSystemWatcher.Deleted += delegate { onChanged?.Invoke(); }; fileSystemWatcher.Created += delegate { onChanged?.Invoke(); }; fileSystemWatcher.Renamed += delegate { onChanged?.Invoke(); }; fileSystemWatcher.EnableRaisingEvents = true; } public static void WatchTranslationChanges(string path, Action onChanged) { if (!Directory.Exists(WeedheimArmorMod.TranslationFilePath)) { return; } try { WatchFileChanges(Path.Combine(path, "*.*"), onChanged); } catch { Logger.LogError((object)"There was an issue loading Translation files!"); } } } internal static class LocalisedText { public static CustomLocalization Localization = LocalizationManager.Instance.GetLocalization(); public static void AddLocalisations() { CustomLocalization localization = Localization; string text = "English"; localization.AddTranslation(ref text, new Dictionary<string, string> { { "item_hemparmor_chest", "Hemp Armor Chest" }, { "item_hemparmor_chest_desc", "These artfully layered robes have rock burns and ash marks in every seam and fold." }, { "item_hemparmor_legs", "Hemp Armor Leg" }, { "item_hemparmor_legs_desc", "These trousers are tight tight tight!" }, { "item_hemparmor_cape", "Hemp Armor Cape" }, { "item_hemparmor_cape_desc", "Donning this cape makes you feel closer to Jah!" }, { "item_hemparmor_helmet", "Hemp Armor Helmet" }, { "item_hemparmor_helmet_desc", "Loki wishes they made these for his head size." }, { "item_hemparmor_banded", "Cool Banded Shield" }, { "item_hemparmor_banded_desc", "Reinforced with a mix of hemp and iron, a true stoner's companion!" }, { "item_hemparmor_tower", "Cool Tower Shield" }, { "item_hemparmor_tower_desc", "Reinforced with a mix of hemp and iron, a true stoner's companion!" } }); CustomLocalization localization2 = Localization; text = "English"; localization2.AddTranslation(ref text, new Dictionary<string, string> { { "armor_hemp_effect_name", "Awesome Armor" }, { "armor_hemp_effect_tooltip", "Makes you more awesome!" }, { "armor_hemp_effect_start", "You feel awesome! :)" }, { "armor_hemp_effect_stop", "You don't feel so awesome! :(" }, { "cape_hemp_effect_name", "Floating High!" }, { "cape_hemp_effect_tooltip", "Makes jumping more fun!" }, { "cape_hemp_effect_start", "Float like a butterfly!" }, { "cape_hemp_effect_stop", "No more floating!" } }); } } internal class MainConfig { internal const string GeneralSection = "General_Settings"; internal static ConfigEntry<bool> enablePlugin; internal const string LegsHempArmor = "Legs_Hemp_Armor"; internal static ConfigEntry<float> legsDurability; internal static ConfigEntry<float> legsMaxDurability; internal static ConfigEntry<float> legsDurabilityPerLevel; internal static ConfigEntry<float> legsArmor; internal static ConfigEntry<float> legsArmorPerLevel; internal static ConfigEntry<float> legsEitrRegen; internal static ConfigEntry<float> legsMovement; internal static ConfigEntry<float> legsHeat; internal static ConfigEntry<float> legsJump; internal static ConfigEntry<float> legsRun; internal const string ChestHempArmor = "Chest_Hemp_Armor"; internal static ConfigEntry<float> chestDurability; internal static ConfigEntry<float> chestMaxDurability; internal static ConfigEntry<float> chestDurabilityPerLevel; internal static ConfigEntry<float> chestArmor; internal static ConfigEntry<float> chestArmorPerLevel; internal static ConfigEntry<float> chestEitrRegen; internal static ConfigEntry<float> chestMovement; internal static ConfigEntry<float> chestHeat; internal const string HelmetHempArmor = "Helmet_Hemp_Armor"; internal static ConfigEntry<float> helmetDurability; internal static ConfigEntry<float> helmetMaxDurability; internal static ConfigEntry<float> helmetDurabilityPerLevel; internal static ConfigEntry<float> helmetArmor; internal static ConfigEntry<float> helmetArmorPerLevel; internal static ConfigEntry<float> helmetEitrRegen; internal static ConfigEntry<float> helmetHeat; internal const string CapeHempArmor = "Cape_Hemp_Armor"; internal static ConfigEntry<float> capeDurability; internal static ConfigEntry<float> capeMaxDurability; internal static ConfigEntry<float> capeDurabilityPerLevel; internal static ConfigEntry<float> capeArmor; internal static ConfigEntry<float> capeArmorPerLevel; internal static ConfigEntry<float> capeRun; internal const string BandedHempShield = "Banded_Hemp_Shield"; internal static ConfigEntry<float> bandedDurability; internal static ConfigEntry<float> bandedMaxDurability; internal static ConfigEntry<float> bandedDurabilityPerLevel; internal static ConfigEntry<float> bandedArmor; internal static ConfigEntry<float> bandedArmorPerLevel; internal static ConfigEntry<float> bandedBlockPower; internal static ConfigEntry<float> bandedPowerPerLevel; internal static ConfigEntry<float> bandedDeflectionForce; internal static ConfigEntry<float> bandedForcePerLevel; internal static ConfigEntry<float> bandedBlockedBonus; internal static ConfigEntry<float> bandedMovement; internal const string TowerHempShield = "Tower_Hemp_Shield"; internal static ConfigEntry<float> towerDurability; internal static ConfigEntry<float> towerMaxDurability; internal static ConfigEntry<float> towerDurabilityPerLevel; internal static ConfigEntry<float> towerArmor; internal static ConfigEntry<float> towerArmorPerLevel; internal static ConfigEntry<float> towerBlockPower; internal static ConfigEntry<float> towerPowerPerLevel; internal static ConfigEntry<float> towerDeflectionForce; internal static ConfigEntry<float> towerForcePerLevel; internal static ConfigEntry<float> towerBlockedBonus; internal static ConfigEntry<float> towerMovement; internal const string EffectHempArmor = "Effect_Hemp_Armor"; internal static ConfigEntry<float> armorStaminaRunVal; internal static ConfigEntry<float> armorStaminaJumpVal; internal static ConfigEntry<float> armorStaminaAttackVal; internal static ConfigEntry<float> armorHealthRegenVal; internal static ConfigEntry<float> armorStaminaRegenVal; internal static ConfigEntry<float> armorEitrRegenVal; internal const string EffectHempCape = "Effect_Hemp_Cape"; internal static ConfigEntry<float> capeSpeedVal; internal static ConfigEntry<bool> capeDoubleJump; internal static ConfigEntry<float> capeJumpVal; internal static ConfigEntry<float> capeFallSpeed; internal static ConfigEntry<float> capeFallDamage; internal static ConfigEntry<float> capeWindMovement; internal static ConfigEntry<float> capeWindStamina; public static void InitConfigs(ConfigFile config) { enablePlugin = ConfigFileExtensions.BindConfigInOrder<bool>(config, "General_Settings", "EnableWeedheim", true, "Enable the Weedheim plugin.\n", true, true, true, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); legsDurability = ConfigFileExtensions.BindConfigInOrder<float>(config, "Legs_Hemp_Armor", "LegsDurability", 100f, "Durability of leg armor.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(100f, 1200f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); legsDurability.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; legsMaxDurability = ConfigFileExtensions.BindConfigInOrder<float>(config, "Legs_Hemp_Armor", "LegsMaxDurability", 1000f, "Maximum durability of leg armor.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(100f, 1200f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); legsMaxDurability.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; legsDurabilityPerLevel = ConfigFileExtensions.BindConfigInOrder<float>(config, "Legs_Hemp_Armor", "LegsDurabilityPerLevel", 200f, "Durability per level for leg armor.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(100f, 500f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); legsDurabilityPerLevel.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; legsArmor = ConfigFileExtensions.BindConfigInOrder<float>(config, "Legs_Hemp_Armor", "LegsArmor", 38f, "Legs armor amount.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(10f, 50f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); legsArmor.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; legsArmorPerLevel = ConfigFileExtensions.BindConfigInOrder<float>(config, "Legs_Hemp_Armor", "LegsArmorPerLevel", 2f, "Legs armor per level amount.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 10f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); legsArmorPerLevel.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; legsEitrRegen = ConfigFileExtensions.BindConfigInOrder<float>(config, "Legs_Hemp_Armor", "LegsEitrRegen", 0.4f, "Legs eitr regen modifier.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); legsEitrRegen.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; legsMovement = ConfigFileExtensions.BindConfigInOrder<float>(config, "Legs_Hemp_Armor", "LegsMovementModifier", -0.02f, "Legs movement modifier.\n", true, true, true, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); legsMovement.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; legsHeat = ConfigFileExtensions.BindConfigInOrder<float>(config, "Legs_Hemp_Armor", "LegsHeatResistance", 0.2f, "Legs heat resistance modifier.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); legsHeat.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; legsJump = ConfigFileExtensions.BindConfigInOrder<float>(config, "Legs_Hemp_Armor", "LegsJumpStamina", 0.02f, "Legs jump stamina modifier.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); legsJump.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; legsRun = ConfigFileExtensions.BindConfigInOrder<float>(config, "Legs_Hemp_Armor", "LegsRunStamina", 0.05f, "Legs run stamina modifier.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); legsRun.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; chestDurability = ConfigFileExtensions.BindConfigInOrder<float>(config, "Chest_Hemp_Armor", "ChestDurability", 100f, "Durability of chest armor.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(100f, 1200f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); chestDurability.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; chestMaxDurability = ConfigFileExtensions.BindConfigInOrder<float>(config, "Chest_Hemp_Armor", "ChestMaxDurability", 1000f, "Maximum durability of chest armor.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(100f, 1200f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); chestMaxDurability.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; chestDurabilityPerLevel = ConfigFileExtensions.BindConfigInOrder<float>(config, "Chest_Hemp_Armor", "ChestDurabilityPerLevel", 200f, "Durability per level for chest armor.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(100f, 500f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); chestDurabilityPerLevel.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; chestArmor = ConfigFileExtensions.BindConfigInOrder<float>(config, "Chest_Hemp_Armor", "ChestArmor", 38f, "Chest armor amount.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(10f, 50f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); chestArmor.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; chestArmorPerLevel = ConfigFileExtensions.BindConfigInOrder<float>(config, "Chest_Hemp_Armor", "ChestArmorPerLevel", 2f, "Chest armor per level.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 10f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); chestArmorPerLevel.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; chestEitrRegen = ConfigFileExtensions.BindConfigInOrder<float>(config, "Chest_Hemp_Armor", "ChestEitrRegen", 0.4f, "Chest eitr regen modifier.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); chestEitrRegen.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; chestMovement = ConfigFileExtensions.BindConfigInOrder<float>(config, "Chest_Hemp_Armor", "ChestMovementModifier", -0.02f, "Chest movement modifier.\n", true, true, true, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); chestMovement.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; chestHeat = ConfigFileExtensions.BindConfigInOrder<float>(config, "Chest_Hemp_Armor", "ChestHeatResistance", 0.2f, "Chest heat resistance modifier.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); chestHeat.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; helmetDurability = ConfigFileExtensions.BindConfigInOrder<float>(config, "Helmet_Hemp_Armor", "HelmetDurability", 800f, "Durability of helmet.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(100f, 1200f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); helmetDurability.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; helmetMaxDurability = ConfigFileExtensions.BindConfigInOrder<float>(config, "Helmet_Hemp_Armor", "HelmetMaxDurability", 800f, "Maximum durability of helmet.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(100f, 1200f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); helmetMaxDurability.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; helmetDurabilityPerLevel = ConfigFileExtensions.BindConfigInOrder<float>(config, "Helmet_Hemp_Armor", "HelmetDurabilityPerLevel", 200f, "Durability per level for helmet armor.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(100f, 500f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); helmetDurabilityPerLevel.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; helmetArmor = ConfigFileExtensions.BindConfigInOrder<float>(config, "Helmet_Hemp_Armor", "HelmetArmor", 38f, "Helmet armor amount.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(100f, 500f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); helmetArmor.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; helmetArmorPerLevel = ConfigFileExtensions.BindConfigInOrder<float>(config, "Helmet_Hemp_Armor", "HelmetArmorPerLevel", 2f, "Helmet armor per level.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 10f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); helmetArmorPerLevel.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; helmetEitrRegen = ConfigFileExtensions.BindConfigInOrder<float>(config, "Helmet_Hemp_Armor", "HelmetEitrRegen", 0.2f, "Helmet eitr regen modifier.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); helmetEitrRegen.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; helmetHeat = ConfigFileExtensions.BindConfigInOrder<float>(config, "Helmet_Hemp_Armor", "HelmetHeatResistance", 0.2f, "Helmet heat resistance modifier.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); helmetHeat.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; capeDurability = ConfigFileExtensions.BindConfigInOrder<float>(config, "Cape_Hemp_Armor", "CapeDurability", 400f, "Durability of cape.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(100f, 1200f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); capeDurability.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; capeMaxDurability = ConfigFileExtensions.BindConfigInOrder<float>(config, "Cape_Hemp_Armor", "CapeMaxDurability", 1200f, "Maximum durability of cape.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(100f, 1200f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); capeMaxDurability.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; capeDurabilityPerLevel = ConfigFileExtensions.BindConfigInOrder<float>(config, "Cape_Hemp_Armor", "CapeDurabilityPerLevel", 100f, "Durability per level for cape armor.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(100f, 500f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); capeDurabilityPerLevel.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; capeArmor = ConfigFileExtensions.BindConfigInOrder<float>(config, "Cape_Hemp_Armor", "CapeArmor", 12f, "Cape armor amount.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(100f, 500f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); capeArmor.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; capeArmorPerLevel = ConfigFileExtensions.BindConfigInOrder<float>(config, "Cape_Hemp_Armor", "CapeArmorPerLevel", 2f, "Cape armor per level.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 10f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); capeArmorPerLevel.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; capeRun = ConfigFileExtensions.BindConfigInOrder<float>(config, "Cape_Hemp_Armor", "CapeRunStamina", 0.05f, "Cape run stamina modifier.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); capeRun.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; bandedDurability = ConfigFileExtensions.BindConfigInOrder<float>(config, "Banded_Hemp_Shield", "BandedDurability", 100f, "Durability of banded Shield.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(100f, 1200f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); bandedDurability.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; bandedMaxDurability = ConfigFileExtensions.BindConfigInOrder<float>(config, "Banded_Hemp_Shield", "BandedMaxDurability", 200f, "Maximum durability of banded Shield.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(100f, 1200f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); bandedMaxDurability.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; bandedDurabilityPerLevel = ConfigFileExtensions.BindConfigInOrder<float>(config, "Banded_Hemp_Shield", "BandedDurabilityPerLevel", 50f, "Durability per level for banded Shield armor.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(50f, 200f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); bandedDurabilityPerLevel.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; bandedArmor = ConfigFileExtensions.BindConfigInOrder<float>(config, "Banded_Hemp_Shield", "BandedArmor", 200f, "Banded shield armor amount.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(100f, 500f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); bandedArmor.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; bandedArmorPerLevel = ConfigFileExtensions.BindConfigInOrder<float>(config, "Banded_Hemp_Shield", "BandedArmorPerLevel", 1f, "Banded shield armor per level.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 10f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); bandedArmorPerLevel.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; bandedBlockPower = ConfigFileExtensions.BindConfigInOrder<float>(config, "Banded_Hemp_Shield", "BandedBlockPower", 114f, "Banded shield block power.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(50f, 200f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); bandedBlockPower.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; bandedPowerPerLevel = ConfigFileExtensions.BindConfigInOrder<float>(config, "Banded_Hemp_Shield", "BandedPowerPerLevel", 6f, "Banded shield block power per level.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 10f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); bandedPowerPerLevel.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; bandedDeflectionForce = ConfigFileExtensions.BindConfigInOrder<float>(config, "Banded_Hemp_Shield", "BandedDeflectionForce", 80f, "Banded shield deflection force.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(50f, 100f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); bandedDeflectionForce.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; bandedForcePerLevel = ConfigFileExtensions.BindConfigInOrder<float>(config, "Banded_Hemp_Shield", "BandedForcePerLevel", 5f, "Banded shield deflection force per level.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 10f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); bandedForcePerLevel.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; bandedBlockedBonus = ConfigFileExtensions.BindConfigInOrder<float>(config, "Banded_Hemp_Shield", "BandedBlockBonus", 1.5f, "Banded shield timed block bonus.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 2.5f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); bandedBlockedBonus.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; bandedMovement = ConfigFileExtensions.BindConfigInOrder<float>(config, "Banded_Hemp_Shield", "BandedMovementModifier", -0.05f, "Banded shield movement modifier.\n", true, true, true, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); bandedMovement.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; towerDurability = ConfigFileExtensions.BindConfigInOrder<float>(config, "Tower_Hemp_Shield", "TowerDurability", 100f, "Durability of tower Shield.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(100f, 1200f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); towerDurability.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; towerMaxDurability = ConfigFileExtensions.BindConfigInOrder<float>(config, "Tower_Hemp_Shield", "TowerMaxDurability", 200f, "Maximum durability of tower Shield.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(100f, 1200f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); towerMaxDurability.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; towerDurabilityPerLevel = ConfigFileExtensions.BindConfigInOrder<float>(config, "Tower_Hemp_Shield", "TowerDurabilityPerLevel", 50f, "Durability per level for tower Shield armor.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(50f, 200f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); towerDurabilityPerLevel.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; towerArmor = ConfigFileExtensions.BindConfigInOrder<float>(config, "Tower_Hemp_Shield", "TowerArmor", 200f, "Tower shield armor amount.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(100f, 500f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); towerArmor.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; towerArmorPerLevel = ConfigFileExtensions.BindConfigInOrder<float>(config, "Tower_Hemp_Shield", "TowerArmorPerLevel", 1f, "Tower shield armor per level.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 10f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); towerArmorPerLevel.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; towerBlockPower = ConfigFileExtensions.BindConfigInOrder<float>(config, "Tower_Hemp_Shield", "TowerBlockPower", 140f, "Tower shield block power.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(50f, 200f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); towerBlockPower.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; towerPowerPerLevel = ConfigFileExtensions.BindConfigInOrder<float>(config, "Tower_Hemp_Shield", "TowerPowerPerLevel", 6f, "Tower shield block power per level.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 10f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); towerPowerPerLevel.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; towerDeflectionForce = ConfigFileExtensions.BindConfigInOrder<float>(config, "Tower_Hemp_Shield", "TowerDeflectionForce", 150f, "Tower shield deflection force.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(50f, 100f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); towerDeflectionForce.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; towerForcePerLevel = ConfigFileExtensions.BindConfigInOrder<float>(config, "Tower_Hemp_Shield", "TowerForcePerLevel", 5f, "Tower shield deflection force per level.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 10f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); towerForcePerLevel.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; towerBlockedBonus = ConfigFileExtensions.BindConfigInOrder<float>(config, "Tower_Hemp_Shield", "TowerBlockBonus", 1.5f, "Tower shield timed block bonus.\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 2.5f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); towerBlockedBonus.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; towerMovement = ConfigFileExtensions.BindConfigInOrder<float>(config, "Tower_Hemp_Shield", "TowerMovementModifier", -0.05f, "Tower shield movement modifier.\n", true, true, true, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); towerMovement.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; armorStaminaRunVal = ConfigFileExtensions.BindConfigInOrder<float>(config, "Effect_Hemp_Armor", "ArmorRunStamina", -0.1f, "Percentage amount for run stamina usage. (Default 0).\n", true, true, true, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); armorStaminaRunVal.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; armorStaminaJumpVal = ConfigFileExtensions.BindConfigInOrder<float>(config, "Effect_Hemp_Armor", "ArmorJumpStamina", -0.1f, "Percentage amount for jump stamina usage. (Default 0).\n", true, true, true, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); armorStaminaJumpVal.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; armorStaminaAttackVal = ConfigFileExtensions.BindConfigInOrder<float>(config, "Effect_Hemp_Armor", "ArmorAttackStamina", -0.2f, "Percentage amount for attack stamina usage. (Default 0).\n", true, true, true, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); armorStaminaAttackVal.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; armorHealthRegenVal = ConfigFileExtensions.BindConfigInOrder<float>(config, "Effect_Hemp_Armor", "ArmorHealthRegen", 1.2f, "Percentage amount for health regeneration. (Default 1).\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 2f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); armorHealthRegenVal.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; armorStaminaRegenVal = ConfigFileExtensions.BindConfigInOrder<float>(config, "Effect_Hemp_Armor", "ArmorStaminaRegen", 1.2f, "Percentage amount for stamina regeneration. (Default 1).\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 2f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); armorStaminaRegenVal.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; armorEitrRegenVal = ConfigFileExtensions.BindConfigInOrder<float>(config, "Effect_Hemp_Armor", "ArmorEitrRegen", 1.2f, "Percentage amount for eitr regeneration. (Default 1).\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 2f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); armorEitrRegenVal.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; capeSpeedVal = ConfigFileExtensions.BindConfigInOrder<float>(config, "Effect_Hemp_Cape", "CapeSpeedModifier", 0f, "Speed modifier from cape. (Default 0).\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); capeSpeedVal.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; capeDoubleJump = ConfigFileExtensions.BindConfigInOrder<bool>(config, "Effect_Hemp_Cape", "CapeDoubleJump", true, "Allow double jump with cape. Full Hemp Armor set is needed for this to be activated.\n", true, true, true, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); capeJumpVal = ConfigFileExtensions.BindConfigInOrder<float>(config, "Effect_Hemp_Cape", "CapeJumpModifier", 0.2f, "Jump modifier from cape. (Default 0).\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); capeJumpVal.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; capeFallSpeed = ConfigFileExtensions.BindConfigInOrder<float>(config, "Effect_Hemp_Cape", "CapeFallSpeed", 5f, "Fall speed modifier from cape. (Default 5).\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 10f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); capeFallSpeed.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; capeFallDamage = ConfigFileExtensions.BindConfigInOrder<float>(config, "Effect_Hemp_Cape", "CapeFallDamage", -1f, "Fall damage modifier from cape. (Default -1).\n", true, true, true, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); capeFallDamage.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; capeWindMovement = ConfigFileExtensions.BindConfigInOrder<float>(config, "Effect_Hemp_Cape", "CapeWindMovement", 0.25f, "Wind movement modifier from cape. (Default 0).\n", true, true, true, (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 10f), (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); capeWindMovement.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; capeWindStamina = ConfigFileExtensions.BindConfigInOrder<float>(config, "Effect_Hemp_Cape", "CapeWindStamina", -1f, "Wind stamina modifier from cape. (Default 0).\n", true, true, true, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null); capeWindStamina.SettingChanged += WeedheimArmorMod.OnArmorConfigChanged; } } [BepInPlugin("MagicMike.WeedheimArmor", "WeedheimArmor", "1.0.2")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] public class WeedheimArmorMod : BaseUnityPlugin { internal const string PluginName = "WeedheimArmor"; internal const string PluginVersion = "1.0.2"; internal const string PluginAuthor = "MagicMike"; internal const string PluginGUID = "MagicMike.WeedheimArmor"; internal const string PluginCopy = "Copyright © MagicMike 2025WeedheimArmor"; public const string PluginLink = "https://discord.gg/zRucjV8rqc"; private static char pds = Path.DirectorySeparatorChar; public static readonly string _basePath = Paths.ConfigPath + pds + "Weedheim"; public static readonly string TranslationFilePath = _basePath + pds + "Translations"; private CustomLocalization Localization = LocalizationManager.Instance.GetLocalization(); public static WeedheimArmorMod plugininstance; public static AssetBundle armoritems; public static string armorBundle = "wharmorbundle"; private Harmony harmony = new Harmony("MagicMike.WeedheimArmor"); internal static ConfigFile ConfigFile; internal static ConfigFileWatcher ConfigFileWatcher; public static bool ArmorConfigChanged = false; public void Awake() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Expected O, but got Unknown plugininstance = this; ConfigFile = ((BaseUnityPlugin)this).Config; ConfigFileWatcher = new ConfigFileWatcher(((BaseUnityPlugin)this).Config, 1000L); ((BaseUnityPlugin)this).Config.SaveOnConfigSet = false; MainConfig.InitConfigs(((BaseUnityPlugin)this).Config); UpdatePlugin(saveConfig: true, initialUpdate: true); if (MainConfig.enablePlugin.Value) { LoadAssetBundles(); CheckForFolders(); LocalisedText.AddLocalisations(); LoadLocalisationData(TranslationFilePath); FileWatcher.WatchTranslationChanges(TranslationFilePath, delegate { LoadLocalisationData(TranslationFilePath); }); PrefabManager.OnVanillaPrefabsAvailable += AddWeedheimEffects; PrefabManager.OnVanillaPrefabsAvailable += AddWHItems; harmony = Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "MagicMike.WeedheimArmor"); ConfigFileWatcher.OnConfigFileReloaded += delegate { UpdatePlugin(saveConfig: false); }; SynchronizationManager.OnConfigurationWindowClosed += delegate { UpdatePlugin(); }; SynchronizationManager.OnConfigurationSynchronized += delegate { UpdatePlugin(); }; Game.isModded = true; } } public void OnDestroy() { ((BaseUnityPlugin)this).Config.Save(); } public static void LoadAssetBundles() { armoritems = AssetUtils.LoadAssetBundleFromResources(armorBundle, Assembly.GetExecutingAssembly()); if ((Object)(object)armoritems == (Object)null) { Logger.LogError((object)("Failed to load asset bundle with name: " + armorBundle)); } } public static void CheckForFolders() { if (!Directory.Exists(_basePath)) { Logger.LogInfo((object)"Creating Weedheim Directory"); Directory.CreateDirectory(_basePath); } if (!Directory.Exists(TranslationFilePath)) { Logger.LogInfo((object)"Creating Translations folder"); Directory.CreateDirectory(TranslationFilePath); } } public void LoadLocalisationData(string directory) { string[] fileSystemEntries = Directory.GetFileSystemEntries(directory, "*.json", SearchOption.AllDirectories); foreach (string path in fileSystemEntries) { string name = new DirectoryInfo(Path.GetDirectoryName(path)).Name; Path.GetFileNameWithoutExtension(path); Localization.AddJsonFile(name, File.ReadAllText(path)); } } public static void AddWeedheimEffects() { try { WH_StatusEffects.LoadWeedheimEffects(); } catch (Exception ex) { Logger.LogError((object)("Exception caught while adding Weedheim Armor Effects: " + ex.Message)); } finally { PrefabManager.OnVanillaPrefabsAvailable -= AddWeedheimEffects; } } public static void AddWHItems() { try { WH_Items.AddItems(); } catch (Exception ex) { Logger.LogError((object)("Exception caught while adding Weedheim Armor Items: " + ex.Message)); } finally { PrefabManager.OnVanillaPrefabsAvailable -= AddWHItems; } } public static void OnArmorConfigChanged(object obj, EventArgs args) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) if (!ArmorConfigChanged) { ArmorConfigChanged = true; } Scene activeScene = SceneManager.GetActiveScene(); if (((Scene)(ref activeScene)).name.Equals("main")) { UpdateArmorSettings.ArmorSettingsChanged(); } } private void UpdatePlugin(bool saveConfig = true, bool initialUpdate = false) { if (ArmorConfigChanged || initialUpdate) { ArmorConfigChanged = false; } if (saveConfig) { ((BaseUnityPlugin)this).Config.Save(); } } } internal class WH_Items { public static EffectList startShield; public static EffectList hitShield; public static EffectList blockShield; public static void AddItems() { LoadFX(); AddLokisItems(); AddBandedShield(); AddTowerShield(); } public static void LoadFX() { //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Expected O, but got Unknown //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_0062: Expected O, but got Unknown //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_0071: Expected O, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Expected O, but got Unknown //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Expected O, but got Unknown //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Expected O, but got Unknown //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Expected O, but got Unknown //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Expected O, but got Unknown //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Expected O, but got Unknown GameObject prefab = Cache.GetPrefab<GameObject>("vfx_clubhit"); GameObject prefab2 = Cache.GetPrefab<GameObject>("sfx_club_hit"); GameObject prefab3 = Cache.GetPrefab<GameObject>("vfx_blocked"); GameObject prefab4 = Cache.GetPrefab<GameObject>("sfx_wood_blocked"); GameObject prefab5 = Cache.GetPrefab<GameObject>("fx_block_camshake"); GameObject prefab6 = Cache.GetPrefab<GameObject>("sfx_club_swing"); EffectList val = new EffectList(); val.m_effectPrefabs = (EffectData[])(object)new EffectData[2] { new EffectData { m_prefab = prefab }, new EffectData { m_prefab = prefab2 } }; hitShield = val; val = new EffectList(); val.m_effectPrefabs = (EffectData[])(object)new EffectData[3] { new EffectData { m_prefab = prefab3 }, new EffectData { m_prefab = prefab4 }, new EffectData { m_prefab = prefab5 } }; blockShield = val; val = new EffectList(); val.m_effectPrefabs = (EffectData[])(object)new EffectData[1] { new EffectData { m_prefab = prefab6 } }; startShield = val; } public static void AddLokisItems() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Expected O, but got Unknown //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Expected O, but got Unknown CustomItem val = new CustomItem(WeedheimArmorMod.armoritems.LoadAsset<GameObject>("ArmorHempLegs"), true); CustomItem val2 = new CustomItem(WeedheimArmorMod.armoritems.LoadAsset<GameObject>("ArmorHempChest"), true); CustomItem val3 = new CustomItem(WeedheimArmorMod.armoritems.LoadAsset<GameObject>("ArmorHempCape"), true); CustomItem val4 = new CustomItem(WeedheimArmorMod.armoritems.LoadAsset<GameObject>("ArmorHempHelmet"), false); ItemManager.Instance.AddItem(val); ItemManager.Instance.AddItem(val2); ItemManager.Instance.AddItem(val3); ItemManager.Instance.AddItem(val4); } public static void AddBandedShield() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Expected O, but got Unknown //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Expected O, but got Unknown //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Expected O, but got Unknown GameObject val = WeedheimArmorMod.armoritems.LoadAsset<GameObject>("ArmorBandedSheild"); ItemConfig val2 = new ItemConfig(); val2.Amount = 1; val2.CraftingStation = CraftingStations.Forge; val2.MinStationLevel = 2; val2.Requirements = (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig { Item = "FineWood", Amount = 10, AmountPerLevel = 10 }, new RequirementConfig { Item = "Iron", Amount = 6, AmountPerLevel = 6 } }; CustomItem val3 = new CustomItem(val, true, val2); ItemDrop component = val.GetComponent<ItemDrop>(); component.m_itemData.m_shared.m_hitEffect = hitShield; component.m_itemData.m_shared.m_startEffect = startShield; component.m_itemData.m_shared.m_blockEffect = blockShield; ItemManager.Instance.AddItem(val3); } public static void AddTowerShield() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Expected O, but got Unknown //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Expected O, but got Unknown //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Expected O, but got Unknown GameObject val = WeedheimArmorMod.armoritems.LoadAsset<GameObject>("ArmorTowerSheild"); ItemConfig val2 = new ItemConfig(); val2.Amount = 1; val2.CraftingStation = CraftingStations.Forge; val2.MinStationLevel = 2; val2.Requirements = (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig { Item = "FineWood", Amount = 15, AmountPerLevel = 15 }, new RequirementConfig { Item = "Iron", Amount = 8, AmountPerLevel = 8 } }; CustomItem val3 = new CustomItem(val, true, val2); ItemDrop component = val.GetComponent<ItemDrop>(); component.m_itemData.m_shared.m_hitEffect = hitShield; component.m_itemData.m_shared.m_startEffect = startShield; component.m_itemData.m_shared.m_blockEffect = blockShield; ItemManager.Instance.AddItem(val3); } } public class GamePatches { [HarmonyPatch(typeof(Character), "Jump")] public static class Character_Jump_Patch { public static bool Prefix(Character __instance) { if (__instance.IsPlayer()) { IsJumping = true; IsDoubleJumping = false; FirstCallToIsOnGround = false; } return true; } public static void Postfix(Character __instance) { if (__instance.IsPlayer()) { IsJumping = false; IsDoubleJumping = false; } } } [HarmonyPatch(typeof(Character), "IsOnGround")] public static class Character_IsOnGround_Patch { public static void Postfix(Character __instance, ref bool __result) { if (!FirstCallToIsOnGround && __instance.IsPlayer() && !__result && IsJumping && HasDoubleJumpCharge(__instance)) { FirstCallToIsOnGround = true; __result = true; IsDoubleJumping = true; } } } [HarmonyPatch(typeof(Player), "OnJump")] public static class Player_OnJump_Patch { public static void Postfix(Player __instance) { if (IsJumping && IsDoubleJumping) { UseDoubleJumpCharge((Character)(object)__instance); } } } [HarmonyPatch(typeof(Character), "ResetGroundContact")] public static class Character_ResetGroundContact_Patch { public static bool Prefix(Character __instance) { if (!__instance.IsPlayer()) { return true; } GroundContactTracker.TryGetValue(__instance, out var value); if (__instance.m_groundContact && value != __instance.m_groundContact) { ResetDoubleJumpCharges(__instance); } GroundContactTracker[__instance] = __instance.m_groundContact; return true; } } [HarmonyPatch(typeof(Humanoid), "EquipItem")] public static class Humanoid_EquipItem_Patch { public static void Postfix(Humanoid __instance) { ResetDoubleJumpCharges((Character)(object)__instance); } } [HarmonyPatch(typeof(Humanoid), "UnequipItem")] public static class Humanoid_UnequipItem_Patch { public static void Postfix(Humanoid __instance) { ResetDoubleJumpCharges((Character)(object)__instance); } } [HarmonyPatch(typeof(Debug), "Log", new Type[] { typeof(object) })] public static class DebugLogPatch { private static bool Prefix(ref object message) { return !(message?.ToString() ?? string.Empty).Contains("PlatformUserID"); } } public const string DoubleJumpChargeKey = "DoubleJump"; public static bool IsJumping; public static bool IsDoubleJumping; public static bool FirstCallToIsOnGround; public static readonly Dictionary<Character, bool> GroundContactTracker = new Dictionary<Character, bool>(); public static bool HasDoubleJumpCharge(Character character) { return character.m_nview.GetZDO().GetInt("DoubleJump", 0) > 0; } public static void UseDoubleJumpCharge(Character character) { int @int = character.m_nview.GetZDO().GetInt("DoubleJump", 0); character.m_nview.GetZDO().Set("DoubleJump", @int - 1); } public static void ResetDoubleJumpCharges(Character character) { if ((Object)(object)character == (Object)null || (Object)(object)character.m_nview == (Object)null || !character.m_nview.IsValid()) { return; } Character obj = (character.IsPlayer() ? ((character is Player) ? character : null) : null); bool flag = false; if (!((Object)(object)obj != (Object)null)) { return; } foreach (StatusEffect statusEffect in ((Character)Player.m_localPlayer).GetSEMan().GetStatusEffects()) { if (((Object)statusEffect).name.StartsWith("HempArmorStatusEffect")) { flag = true; } } if (flag && MainConfig.capeDoubleJump.Value) { character.m_nview.GetZDO().Set("DoubleJump", 1); } else { character.m_nview.GetZDO().Set("DoubleJump", 0); } } } } namespace WeedheimArmor.Updates { internal class UpdateArmorSettings { public static void ArmorSettingsChanged() { //IL_06c9: Unknown result type (might be due to invalid IL or missing references) //IL_06ce: Unknown result type (might be due to invalid IL or missing references) GameObject prefab = PrefabManager.Instance.GetPrefab("ArmorHempLegs"); if ((Object)(object)prefab != (Object)null) { ItemDrop component = prefab.GetComponent<ItemDrop>(); component.m_itemData.m_durability = MainConfig.legsDurability.Value; component.m_itemData.m_shared.m_maxDurability = MainConfig.legsMaxDurability.Value; component.m_itemData.m_shared.m_durabilityPerLevel = MainConfig.legsDurabilityPerLevel.Value; component.m_itemData.m_shared.m_armor = MainConfig.legsArmor.Value; component.m_itemData.m_shared.m_armorPerLevel = MainConfig.legsArmorPerLevel.Value; component.m_itemData.m_shared.m_eitrRegenModifier = MainConfig.legsEitrRegen.Value; component.m_itemData.m_shared.m_movementModifier = MainConfig.legsMovement.Value; component.m_itemData.m_shared.m_heatResistanceModifier = MainConfig.legsHeat.Value; component.m_itemData.m_shared.m_jumpStaminaModifier = MainConfig.legsJump.Value; component.m_itemData.m_shared.m_runStaminaModifier = MainConfig.legsRun.Value; } GameObject prefab2 = PrefabManager.Instance.GetPrefab("ArmorHempChest"); if ((Object)(object)prefab2 != (Object)null) { ItemDrop component2 = prefab2.GetComponent<ItemDrop>(); component2.m_itemData.m_durability = MainConfig.chestDurability.Value; component2.m_itemData.m_shared.m_maxDurability = MainConfig.chestMaxDurability.Value; component2.m_itemData.m_shared.m_durabilityPerLevel = MainConfig.chestDurabilityPerLevel.Value; component2.m_itemData.m_shared.m_armor = MainConfig.chestArmor.Value; component2.m_itemData.m_shared.m_armorPerLevel = MainConfig.chestArmorPerLevel.Value; component2.m_itemData.m_shared.m_eitrRegenModifier = MainConfig.chestEitrRegen.Value; component2.m_itemData.m_shared.m_movementModifier = MainConfig.chestMovement.Value; component2.m_itemData.m_shared.m_heatResistanceModifier = MainConfig.chestHeat.Value; } GameObject prefab3 = PrefabManager.Instance.GetPrefab("ArmorHempHelmet"); if ((Object)(object)prefab3 != (Object)null) { ItemDrop component3 = prefab3.GetComponent<ItemDrop>(); component3.m_itemData.m_durability = MainConfig.helmetDurability.Value; component3.m_itemData.m_shared.m_maxDurability = MainConfig.helmetMaxDurability.Value; component3.m_itemData.m_shared.m_durabilityPerLevel = MainConfig.helmetDurabilityPerLevel.Value; component3.m_itemData.m_shared.m_armor = MainConfig.helmetArmor.Value; component3.m_itemData.m_shared.m_armorPerLevel = MainConfig.helmetArmorPerLevel.Value; component3.m_itemData.m_shared.m_eitrRegenModifier = MainConfig.helmetEitrRegen.Value; component3.m_itemData.m_shared.m_heatResistanceModifier = MainConfig.helmetHeat.Value; } GameObject prefab4 = PrefabManager.Instance.GetPrefab("ArmorHempCape"); if ((Object)(object)prefab4 != (Object)null) { ItemDrop component4 = prefab4.GetComponent<ItemDrop>(); component4.m_itemData.m_durability = MainConfig.capeDurability.Value; component4.m_itemData.m_shared.m_maxDurability = MainConfig.capeMaxDurability.Value; component4.m_itemData.m_shared.m_durabilityPerLevel = MainConfig.capeDurabilityPerLevel.Value; component4.m_itemData.m_shared.m_armor = MainConfig.capeArmor.Value; component4.m_itemData.m_shared.m_armorPerLevel = MainConfig.capeArmorPerLevel.Value; component4.m_itemData.m_shared.m_runStaminaModifier = MainConfig.capeRun.Value; } GameObject prefab5 = PrefabManager.Instance.GetPrefab("ArmorBandedSheild"); if ((Object)(object)prefab5 != (Object)null) { ItemDrop component5 = prefab5.GetComponent<ItemDrop>(); component5.m_itemData.m_durability = MainConfig.bandedDurability.Value; component5.m_itemData.m_shared.m_maxDurability = MainConfig.bandedMaxDurability.Value; component5.m_itemData.m_shared.m_durabilityPerLevel = MainConfig.bandedDurabilityPerLevel.Value; component5.m_itemData.m_shared.m_armor = MainConfig.bandedArmor.Value; component5.m_itemData.m_shared.m_armorPerLevel = MainConfig.bandedArmorPerLevel.Value; component5.m_itemData.m_shared.m_blockPower = MainConfig.bandedBlockPower.Value; component5.m_itemData.m_shared.m_blockPowerPerLevel = MainConfig.bandedPowerPerLevel.Value; component5.m_itemData.m_shared.m_deflectionForce = MainConfig.bandedDeflectionForce.Value; component5.m_itemData.m_shared.m_deflectionForcePerLevel = MainConfig.bandedForcePerLevel.Value; component5.m_itemData.m_shared.m_timedBlockBonus = MainConfig.bandedBlockedBonus.Value; component5.m_itemData.m_shared.m_movementModifier = MainConfig.bandedMovement.Value; } GameObject prefab6 = PrefabManager.Instance.GetPrefab("ArmorTowerSheild"); if ((Object)(object)prefab6 != (Object)null) { ItemDrop component6 = prefab6.GetComponent<ItemDrop>(); component6.m_itemData.m_durability = MainConfig.towerDurability.Value; component6.m_itemData.m_shared.m_maxDurability = MainConfig.towerMaxDurability.Value; component6.m_itemData.m_shared.m_durabilityPerLevel = MainConfig.towerDurabilityPerLevel.Value; component6.m_itemData.m_shared.m_armor = MainConfig.towerArmor.Value; component6.m_itemData.m_shared.m_armorPerLevel = MainConfig.towerArmorPerLevel.Value; component6.m_itemData.m_shared.m_blockPower = MainConfig.towerBlockPower.Value; component6.m_itemData.m_shared.m_blockPowerPerLevel = MainConfig.towerPowerPerLevel.Value; component6.m_itemData.m_shared.m_deflectionForce = MainConfig.towerDeflectionForce.Value; component6.m_itemData.m_shared.m_deflectionForcePerLevel = MainConfig.towerForcePerLevel.Value; component6.m_itemData.m_shared.m_timedBlockBonus = MainConfig.towerBlockedBonus.Value; component6.m_itemData.m_shared.m_movementModifier = MainConfig.towerMovement.Value; } SE_Stats prefab7 = Cache.GetPrefab<SE_Stats>("WH_Hemp_Armor"); if ((Object)(object)prefab7 != (Object)null) { prefab7.m_runStaminaDrainModifier = MainConfig.armorStaminaRunVal.Value; prefab7.m_jumpStaminaUseModifier = MainConfig.armorStaminaJumpVal.Value; prefab7.m_attackStaminaUseModifier = MainConfig.armorStaminaAttackVal.Value; prefab7.m_healthRegenMultiplier = MainConfig.armorHealthRegenVal.Value; prefab7.m_staminaRegenMultiplier = MainConfig.armorStaminaRegenVal.Value; prefab7.m_eitrRegenMultiplier = MainConfig.armorEitrRegenVal.Value; } SE_Stats prefab8 = Cache.GetPrefab<SE_Stats>("WH_Cape_Effect"); if ((Object)(object)prefab8 != (Object)null) { prefab8.m_speedModifier = MainConfig.capeSpeedVal.Value; prefab8.m_jumpModifier = new Vector3(0f, MainConfig.capeJumpVal.Value, 0f); prefab8.m_maxMaxFallSpeed = MainConfig.capeFallSpeed.Value; prefab8.m_fallDamageModifier = MainConfig.capeFallDamage.Value; prefab8.m_windMovementModifier = MainConfig.capeWindMovement.Value; prefab8.m_windRunStaminaModifier = MainConfig.capeWindStamina.Value; } } } } namespace WeedheimArmor.Effects { internal class WH_StatusEffects { public static CustomStatusEffect armorStatusEffect; public static CustomStatusEffect capeStatusEffect; public static void LoadWeedheimEffects() { //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Expected O, but got Unknown //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Expected O, but got Unknown SE_Stats obj = WeedheimArmorMod.armoritems.LoadAsset<SE_Stats>("WH_Hemp_Armor"); ((Object)obj).name = "HempArmorStatusEffect"; obj.m_runStaminaDrainModifier = MainConfig.armorStaminaRunVal.Value; obj.m_jumpStaminaUseModifier = MainConfig.armorStaminaJumpVal.Value; obj.m_attackStaminaUseModifier = MainConfig.armorStaminaAttackVal.Value; obj.m_healthRegenMultiplier = MainConfig.armorHealthRegenVal.Value; obj.m_staminaRegenMultiplier = MainConfig.armorStaminaRegenVal.Value; obj.m_eitrRegenMultiplier = MainConfig.armorEitrRegenVal.Value; armorStatusEffect = new CustomStatusEffect((StatusEffect)(object)obj, false); ItemManager.Instance.AddStatusEffect(armorStatusEffect); SE_Stats obj2 = WeedheimArmorMod.armoritems.LoadAsset<SE_Stats>("WH_Cape_Effect"); ((Object)obj2).name = "HempCapeStatusEffect"; obj2.m_speedModifier = MainConfig.capeSpeedVal.Value; obj2.m_jumpModifier = new Vector3(0f, MainConfig.capeJumpVal.Value, 0f); obj2.m_maxMaxFallSpeed = MainConfig.capeFallSpeed.Value; obj2.m_fallDamageModifier = MainConfig.capeFallDamage.Value; obj2.m_windMovementModifier = MainConfig.capeWindMovement.Value; obj2.m_windRunStaminaModifier = MainConfig.capeWindStamina.Value; capeStatusEffect = new CustomStatusEffect((StatusEffect)(object)obj2, false); ItemManager.Instance.AddStatusEffect(capeStatusEffect); } } }