Decompiled source of PotionPlus v4.2.7
PotionsPlus.dll
Decompiled a week ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.IO; using System.IO.Compression; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using System.Threading; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using Groups; using HarmonyLib; using ItemManager; using JetBrains.Annotations; using LocalizationManager; using Microsoft.CodeAnalysis; using PieceManager; using ServerSync; using SkillManager; using TMPro; using UnityEngine; using UnityEngine.UI; using YamlDotNet.Core; using YamlDotNet.Core.Events; using YamlDotNet.Core.ObjectPool; using YamlDotNet.Core.Tokens; using YamlDotNet.Helpers; using YamlDotNet.Serialization; using YamlDotNet.Serialization.BufferedDeserialization; using YamlDotNet.Serialization.BufferedDeserialization.TypeDiscriminators; using YamlDotNet.Serialization.Callbacks; using YamlDotNet.Serialization.Converters; using YamlDotNet.Serialization.EventEmitters; using YamlDotNet.Serialization.NamingConventions; using YamlDotNet.Serialization.NodeDeserializers; using YamlDotNet.Serialization.NodeTypeResolvers; using YamlDotNet.Serialization.ObjectFactories; using YamlDotNet.Serialization.ObjectGraphTraversalStrategies; using YamlDotNet.Serialization.ObjectGraphVisitors; using YamlDotNet.Serialization.Schemas; using YamlDotNet.Serialization.TypeInspectors; using YamlDotNet.Serialization.TypeResolvers; using YamlDotNet.Serialization.Utilities; using YamlDotNet.Serialization.ValueDeserializers; [assembly: Guid("150BFDAF-FF35-4302-B7CC-BEDCE69118D5")] [assembly: ComVisible(false)] [assembly: AssemblyTrademark("")] [assembly: AssemblyCopyright("Copyright © 2022")] [assembly: AssemblyProduct("PotionsPlus")] [assembly: AssemblyCompany("")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyDescription("https://valheim.thunderstore.io/package/OdinPlus/PotionPlus")] [assembly: AssemblyTitle("PotionsPlus")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: CompilationRelaxations(8)] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyConfiguration("")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: <1b22b0cb-f7f6-4d46-b042-511940330c16>RefSafetyRules(11)] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [<adadef3a-3ca4-451c-878b-9e3ff316a092>Embedded] internal sealed class <adadef3a-3ca4-451c-878b-9e3ff316a092>EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [<adadef3a-3ca4-451c-878b-9e3ff316a092>Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class <8b278060-6ecb-4783-a64c-ced6d409cde1>NullableAttribute : Attribute { public readonly byte[] NullableFlags; public <8b278060-6ecb-4783-a64c-ced6d409cde1>NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public <8b278060-6ecb-4783-a64c-ced6d409cde1>NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] [<adadef3a-3ca4-451c-878b-9e3ff316a092>Embedded] [CompilerGenerated] internal sealed class <e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContextAttribute : Attribute { public readonly byte Flag; public <e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [<adadef3a-3ca4-451c-878b-9e3ff316a092>Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class <1b22b0cb-f7f6-4d46-b042-511940330c16>RefSafetyRulesAttribute : Attribute { public readonly int Version; public <1b22b0cb-f7f6-4d46-b042-511940330c16>RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace SkillManager { [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(1)] [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(0)] [PublicAPI] public class Skill { [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(0)] public static class LocalizationCache { private static readonly Dictionary<string, Localization> localizations = new Dictionary<string, Localization>(); internal static void LocalizationPostfix(Localization __instance, string language) { string key = localizations.FirstOrDefault([<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(0)] (KeyValuePair<string, Localization> l) => l.Value == __instance).Key; if (key != null) { localizations.Remove(key); } if (!localizations.ContainsKey(language)) { localizations.Add(language, __instance); } } public static Localization ForLanguage([<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(2)] string language = null) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown if (localizations.TryGetValue(language ?? PlayerPrefs.GetString("language", "English"), out var value)) { return value; } value = new Localization(); if (language != null) { value.SetupLanguage(language); } return value; } } [PublicAPI] [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(0)] public class LocalizeKey { private static readonly List<LocalizeKey> keys = new List<LocalizeKey>(); public readonly string Key; public readonly Dictionary<string, string> Localizations = new Dictionary<string, string>(); public LocalizeKey(string key) { Key = key.Replace("$", ""); keys.Add(this); } public void Alias(string alias) { Localizations.Clear(); if (!alias.Contains("$")) { alias = "$" + alias; } Localizations["alias"] = alias; if (Localization.m_instance != null) { Localization.instance.AddWord(Key, Localization.instance.Localize(alias)); } } public LocalizeKey English(string key) { return addForLang("English", key); } public LocalizeKey Swedish(string key) { return addForLang("Swedish", key); } public LocalizeKey French(string key) { return addForLang("French", key); } public LocalizeKey Italian(string key) { return addForLang("Italian", key); } public LocalizeKey German(string key) { return addForLang("German", key); } public LocalizeKey Spanish(string key) { return addForLang("Spanish", key); } public LocalizeKey Russian(string key) { return addForLang("Russian", key); } public LocalizeKey Romanian(string key) { return addForLang("Romanian", key); } public LocalizeKey Bulgarian(string key) { return addForLang("Bulgarian", key); } public LocalizeKey Macedonian(string key) { return addForLang("Macedonian", key); } public LocalizeKey Finnish(string key) { return addForLang("Finnish", key); } public LocalizeKey Danish(string key) { return addForLang("Danish", key); } public LocalizeKey Norwegian(string key) { return addForLang("Norwegian", key); } public LocalizeKey Icelandic(string key) { return addForLang("Icelandic", key); } public LocalizeKey Turkish(string key) { return addForLang("Turkish", key); } public LocalizeKey Lithuanian(string key) { return addForLang("Lithuanian", key); } public LocalizeKey Czech(string key) { return addForLang("Czech", key); } public LocalizeKey Hungarian(string key) { return addForLang("Hungarian", key); } public LocalizeKey Slovak(string key) { return addForLang("Slovak", key); } public LocalizeKey Polish(string key) { return addForLang("Polish", key); } public LocalizeKey Dutch(string key) { return addForLang("Dutch", key); } public LocalizeKey Portuguese_European(string key) { return addForLang("Portuguese_European", key); } public LocalizeKey Portuguese_Brazilian(string key) { return addForLang("Portuguese_Brazilian", key); } public LocalizeKey Chinese(string key) { return addForLang("Chinese", key); } public LocalizeKey Japanese(string key) { return addForLang("Japanese", key); } public LocalizeKey Korean(string key) { return addForLang("Korean", key); } public LocalizeKey Hindi(string key) { return addForLang("Hindi", key); } public LocalizeKey Thai(string key) { return addForLang("Thai", key); } public LocalizeKey Abenaki(string key) { return addForLang("Abenaki", key); } public LocalizeKey Croatian(string key) { return addForLang("Croatian", key); } public LocalizeKey Georgian(string key) { return addForLang("Georgian", key); } public LocalizeKey Greek(string key) { return addForLang("Greek", key); } public LocalizeKey Serbian(string key) { return addForLang("Serbian", key); } public LocalizeKey Ukrainian(string key) { return addForLang("Ukrainian", key); } private LocalizeKey addForLang(string lang, string value) { Localizations[lang] = value; if (Localization.m_instance != null) { if (Localization.instance.GetSelectedLanguage() == lang) { Localization.instance.AddWord(Key, value); } else if (lang == "English" && !Localization.instance.m_translations.ContainsKey(Key)) { Localization.instance.AddWord(Key, value); } } return this; } [HarmonyPriority(300)] internal static void AddLocalizedKeys(Localization __instance, string language) { foreach (LocalizeKey key in keys) { string value2; if (key.Localizations.TryGetValue(language, out var value) || key.Localizations.TryGetValue("English", out value)) { __instance.AddWord(key.Key, value); } else if (key.Localizations.TryGetValue("alias", out value2)) { __instance.AddWord(key.Key, Localization.instance.Localize(value2)); } } } } [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(0)] private class ConfigurationManagerAttributes { [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(2)] [UsedImplicitly] public string Category; } [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(0)] [HarmonyPatch(typeof(Skills), "IsSkillValid")] private static class Patch_Skills_IsSkillValid { private static void Postfix(SkillType type, ref bool __result) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) if (!__result && skills.ContainsKey(type)) { __result = true; } } } private static readonly Dictionary<SkillType, Skill> skills; internal static readonly Dictionary<string, Skill> skillByName; private readonly string skillName; private readonly string internalSkillName; private readonly SkillDef skillDef; public readonly LocalizeKey Name; public readonly LocalizeKey Description; private float skillEffectFactor = 1f; private int skillLoss = 5; public bool Configurable = false; private static bool InitializedTerminal; [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(2)] private static Localization _english; [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(2)] private static BaseUnityPlugin _plugin; private static bool hasConfigSync; [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(2)] private static object _configSync; public float SkillGainFactor { get { return skillDef.m_increseStep; } set { skillDef.m_increseStep = value; this.SkillGainFactorChanged?.Invoke(value); } } public float SkillEffectFactor { get { return skillEffectFactor; } set { skillEffectFactor = value; this.SkillEffectFactorChanged?.Invoke(value); } } public int SkillLoss { get { return skillLoss; } set { skillLoss = value; this.SkillLossChanged?.Invoke(value); } } private static Localization english => _english ?? (_english = LocalizationCache.ForLanguage("English")); private static BaseUnityPlugin plugin { get { //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Expected O, but got Unknown object obj = _plugin; if (obj == null) { BaseUnityPlugin val = (BaseUnityPlugin)Chainloader.ManagerObject.GetComponent((Type)Assembly.GetExecutingAssembly().DefinedTypes.First([<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(0)] (TypeInfo t) => t.IsClass && typeof(BaseUnityPlugin).IsAssignableFrom(t))); _plugin = val; obj = (object)val; } return (BaseUnityPlugin)obj; } } [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(2)] private static object configSync { [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(2)] get { if (_configSync == null && hasConfigSync) { Type type = Assembly.GetExecutingAssembly().GetType("ServerSync.ConfigSync"); if ((object)type != null) { _configSync = Activator.CreateInstance(type, plugin.Info.Metadata.GUID + " SkillManager"); type.GetField("CurrentVersion").SetValue(_configSync, plugin.Info.Metadata.Version.ToString()); type.GetProperty("IsLocked").SetValue(_configSync, true); } else { hasConfigSync = false; } } return _configSync; } } [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(2)] [method: <e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(2)] [field: <8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(2)] public event Action<float> SkillGainFactorChanged; [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(2)] [method: <e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(2)] [field: <8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(2)] public event Action<float> SkillEffectFactorChanged; [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(2)] [method: <e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(2)] [field: <8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(2)] public event Action<float> SkillLossChanged; public Skill(string englishName, string icon) : this(englishName, loadSprite(icon, 64, 64)) { } public Skill(string englishName, Sprite icon) { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0076: 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_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Expected O, but got Unknown SkillType val = fromName(englishName); string text = new Regex("[^a-zA-Z]").Replace(englishName, "_"); skills[val] = this; skillByName[englishName] = this; skillDef = new SkillDef { m_description = "$skilldesc_" + text, m_icon = icon, m_increseStep = 1f, m_skill = val }; internalSkillName = text; skillName = englishName; Name = new LocalizeKey("skill_" + ((object)(SkillType)(ref val)).ToString()).English(englishName); Description = new LocalizeKey("skilldesc_" + text); } public static SkillType fromName(string englishName) { return (SkillType)Math.Abs(StringExtensionMethods.GetStableHashCode(englishName)); } static Skill() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Expected O, but got Unknown //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Expected O, but got Unknown //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Expected O, but got Unknown //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Expected O, but got Unknown //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Expected O, but got Unknown //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Expected O, but got Unknown //IL_01ad: Expected O, but got Unknown //IL_01dc: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Expected O, but got Unknown //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_0234: Unknown result type (might be due to invalid IL or missing references) //IL_023f: Expected O, but got Unknown //IL_023f: Expected O, but got Unknown skills = new Dictionary<SkillType, Skill>(); skillByName = new Dictionary<string, Skill>(); InitializedTerminal = false; hasConfigSync = true; Harmony val = new Harmony("org.bepinex.helpers.skillmanager"); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(FejdStartup), "Awake", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_FejdStartup", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Skills), "GetSkillDef", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Skills_GetSkillDef", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Skills), "CheatRaiseSkill", (Type[])null, (Type[])null), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Skills_CheatRaiseskill", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Skills), "CheatResetSkill", (Type[])null, (Type[])null), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Skills_CheatResetSkill", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Localization), "LoadCSV", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(LocalizeKey), "AddLocalizedKeys", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Terminal), "InitTerminal", (Type[])null, (Type[])null), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Terminal_InitTerminal_Prefix", (Type[])null, (Type[])null)), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Terminal_InitTerminal", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Localization), "SetupLanguage", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(LocalizationCache), "LocalizationPostfix", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Skills), "OnDeath", (Type[])null, (Type[])null), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Skills_OnDeath_Prefix", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Skills_OnDeath_Finalizer", (Type[])null, (Type[])null)), (HarmonyMethod)null); } private static void Patch_FejdStartup() { //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Expected O, but got Unknown //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Expected O, but got Unknown //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Expected O, but got Unknown foreach (Skill skill in skills.Values) { if (skill.Configurable) { string key = skill.Name.Key; string group = new Regex("['[\"\\]]").Replace(english.Localize(key), "").Trim(); string category = Localization.instance.Localize(key).Trim(); ConfigEntry<float> skillGain = config(group, "Skill gain factor", skill.SkillGainFactor, new ConfigDescription("The rate at which you gain experience for the skill.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.01f, 5f), new object[1] { new ConfigurationManagerAttributes { Category = category } })); skill.SkillGainFactor = skillGain.Value; skillGain.SettingChanged += [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(0)] (object _, EventArgs _) => { skill.SkillGainFactor = skillGain.Value; }; ConfigEntry<float> skillEffect = config(group, "Skill effect factor", skill.SkillEffectFactor, new ConfigDescription("The power of the skill, based on the default power.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.01f, 5f), new object[1] { new ConfigurationManagerAttributes { Category = category } })); skill.SkillEffectFactor = skillEffect.Value; skillEffect.SettingChanged += [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(0)] (object _, EventArgs _) => { skill.SkillEffectFactor = skillEffect.Value; }; ConfigEntry<int> skillLoss = config(group, "Skill loss", skill.skillLoss, new ConfigDescription("How much experience to lose on death.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), new object[1] { new ConfigurationManagerAttributes { Category = category } })); skill.skillLoss = skillLoss.Value; skillLoss.SettingChanged += [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(0)] (object _, EventArgs _) => { skill.skillLoss = skillLoss.Value; }; } } } private static void Patch_Skills_GetSkillDef([<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(2)] ref SkillDef __result, List<SkillDef> ___m_skills, SkillType type) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) if (__result == null) { SkillDef val = GetSkillDef(type); if (val != null) { ___m_skills.Add(val); __result = val; } } } private static bool Patch_Skills_CheatRaiseskill(Skills __instance, string name, float value, Player ___m_player) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) foreach (SkillType key in skills.Keys) { SkillType current = key; Skill skill = skills[current]; if (string.Equals(skill.internalSkillName, name, StringComparison.CurrentCultureIgnoreCase)) { Skill skill2 = __instance.GetSkill(current); skill2.m_level += value; skill2.m_level = Mathf.Clamp(skill2.m_level, 0f, 100f); ((Character)___m_player).Message((MessageType)1, "Skill increased " + Localization.instance.Localize("$skill_" + ((object)(SkillType)(ref current)).ToString()) + ": " + (int)skill2.m_level, 0, skill2.m_info.m_icon); Console.instance.Print("Skill " + skill.internalSkillName + " = " + skill2.m_level); return false; } } return true; } private static bool Patch_Skills_CheatResetSkill(Skills __instance, string name) { //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_0022: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) foreach (SkillType key in skills.Keys) { Skill skill = skills[key]; if (string.Equals(skill.internalSkillName, name, StringComparison.CurrentCultureIgnoreCase)) { __instance.ResetSkill(key); Console.instance.Print("Skill " + skill.internalSkillName + " reset"); return false; } } return true; } private static void Patch_Skills_OnDeath_Prefix(Skills __instance, [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(new byte[] { 2, 1 })] ref Dictionary<SkillType, Skill> __state) { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: 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) if (__state == null) { __state = new Dictionary<SkillType, Skill>(); } foreach (KeyValuePair<SkillType, Skill> skill in skills) { if (__instance.m_skillData.TryGetValue(skill.Key, out var value)) { __state[skill.Key] = value; if (skill.Value.skillLoss > 0) { Skill obj = value; obj.m_level -= value.m_level * (float)skill.Value.SkillLoss / 100f; value.m_accumulator = 0f; } __instance.m_skillData.Remove(skill.Key); } } } private static void Patch_Skills_OnDeath_Finalizer(Skills __instance, [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(new byte[] { 2, 1 })] ref Dictionary<SkillType, Skill> __state) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) if (__state == null) { return; } foreach (KeyValuePair<SkillType, Skill> item in __state) { __instance.m_skillData[item.Key] = item.Value; } __state = null; } private static void Patch_Terminal_InitTerminal_Prefix() { InitializedTerminal = Terminal.m_terminalInitialized; } private static void Patch_Terminal_InitTerminal() { if (!InitializedTerminal) { AddSkill(Terminal.commands["raiseskill"]); AddSkill(Terminal.commands["resetskill"]); } static void AddSkill(ConsoleCommand command) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown ConsoleOptionsFetcher fetcher = command.m_tabOptionsFetcher; command.m_tabOptionsFetcher = (ConsoleOptionsFetcher)([<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(0)] () => { List<string> list = fetcher.Invoke(); list.AddRange(skills.Values.Select([<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(0)] (Skill skill) => skill.internalSkillName)); return list; }); } } [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(2)] private static SkillDef GetSkillDef(SkillType skillType) { //IL_0006: 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) if (!skills.ContainsKey(skillType)) { return null; } Skill skill = skills[skillType]; return skill.skillDef; } private static byte[] ReadEmbeddedFileBytes(string name) { using MemoryStream memoryStream = new MemoryStream(); Assembly.GetExecutingAssembly().GetManifestResourceStream(Assembly.GetExecutingAssembly().GetName().Name + "." + name).CopyTo(memoryStream); return memoryStream.ToArray(); } private static Texture2D loadTexture(string name) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Expected O, but got Unknown Texture2D val = new Texture2D(0, 0); ImageConversion.LoadImage(val, ReadEmbeddedFileBytes("icons." + name)); return val; } private static Sprite loadSprite(string name, int width, int height) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) return Sprite.Create(loadTexture(name), new Rect(0f, 0f, (float)width, (float)height), Vector2.zero); } private static ConfigEntry<T> config<[<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(2)] T>(string group, string name, T value, ConfigDescription description) { ConfigEntry<T> val = plugin.Config.Bind<T>(group, name, value, description); configSync?.GetType().GetMethod("AddConfigEntry").MakeGenericMethod(typeof(T)) .Invoke(configSync, new object[1] { val }); return val; } private static ConfigEntry<T> config<[<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(2)] T>(string group, string name, T value, string description) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown return config(group, name, value, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>())); } } public static class SkillManagerVersion { [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(1)] public const string Version = "1.7.0"; } [PublicAPI] [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(1)] [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(0)] public static class SkillExtensions { public static float GetSkillFactor(this Character character, string name) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) return character.GetSkillFactor(Skill.fromName(name)) * Skill.skillByName[name].SkillEffectFactor; } public static float GetSkillFactor(this Skills skills, string name) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) return skills.GetSkillFactor(Skill.fromName(name)) * Skill.skillByName[name].SkillEffectFactor; } public static void RaiseSkill(this Character character, string name, float value = 1f) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) character.RaiseSkill(Skill.fromName(name), value); } public static void RaiseSkill(this Skills skill, string name, float value = 1f) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) skill.RaiseSkill(Skill.fromName(name), value); } public static void LowerSkill(this Character character, string name, float factor = 1f) { character.GetSkills().LowerSkill(name, factor); } public static void LowerSkill(this Skills skills, string name, float factor) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) if (factor > 0f && skills.m_skillData.TryGetValue(Skill.fromName(name), out var value)) { Skill obj = value; obj.m_level -= value.m_level * factor; value.m_accumulator = 0f; } } } } namespace PotionsPlus { public static class FlaskEffects { [HarmonyPatch(typeof(Character), "RPC_Damage")] private class ReduceDamageTaken { [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(1)] private static void Prefix(Character __instance, HitData hit) { Player val = (Player)(object)((__instance is Player) ? __instance : null); if (val != null) { if (((Character)val).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("Flask_of_Elements"))) { hit.m_damage.m_fire *= 1f - (float)PotionsPlus.flaskOfElementsFireDamageTakenReduction.Value / 100f; hit.m_damage.m_lightning *= 1f - (float)PotionsPlus.flaskOfElementsLightningDamageTakenReduction.Value / 100f; } if (((Character)val).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("Flask_of_Fortification"))) { hit.m_damage.m_blunt *= 1f - (float)PotionsPlus.flaskOfFortificationBluntDamageTakenReduction.Value / 100f; hit.m_damage.m_slash *= 1f - (float)PotionsPlus.flaskOfFortificationSlashDamageTakenReduction.Value / 100f; hit.m_damage.m_pierce *= 1f - (float)PotionsPlus.flaskOfFortificationPierceDamageTakenReduction.Value / 100f; } } } } } [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(1)] [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(0)] public class GroupPotion : SE_Stats { public static bool effectApplied; public DamageType damageType; public int range; public override void Setup(Character character) { //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: 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_00e0: Unknown result type (might be due to invalid IL or missing references) ((SE_Stats)this).Setup(character); if ((Object)(object)character != (Object)(object)Player.m_localPlayer || effectApplied || !API.IsLoaded()) { return; } try { List<PlayerReference> list = API.GroupPlayers(); if (list == null) { return; } foreach (PlayerReference groupPlayer in list.Where((PlayerReference p) => p != PlayerReference.fromPlayer(Player.m_localPlayer))) { Player val = Player.s_players?.FirstOrDefault((Func<Player, bool>)([<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(0)] (Player p) => (Object)(object)p != (Object)null && p.GetPlayerID() == groupPlayer.peerId)); if (!((Object)(object)val == (Object)null)) { Vector3 position = ((Component)val).transform.position; if ((range == 0 || Utils.DistanceXZ(((Component)character).transform.position, position) < (float)range) && ZRoutedRpc.instance != null) { ZRoutedRpc.instance.InvokeRoutedRPC(groupPlayer.peerId, "PotionsPlus Potion Activated", new object[1] { ((Object)this).name }); } } } effectApplied = true; } catch (Exception ex) { Debug.LogError((object)("[PotionsPlus] Error in GroupPotion.Setup: " + ex.Message + "\n" + ex.StackTrace)); } } public override void ModifyAttack(SkillType skill, ref HitData hitData) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Invalid comparison between Unknown and I4 //IL_003e: 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_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Invalid comparison between Unknown and I4 //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Invalid comparison between Unknown and I4 //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Invalid comparison between Unknown and I4 //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Invalid comparison between Unknown and I4 //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Invalid comparison between Unknown and I4 //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Invalid comparison between Unknown and I4 if ((int)damageType == 0) { return; } float chop = hitData.m_damage.m_chop; float pickaxe = hitData.m_damage.m_pickaxe; float num = hitData.GetTotalDamage() - pickaxe - chop; hitData.m_damage = new DamageTypes { m_chop = chop, m_pickaxe = pickaxe }; DamageType val = damageType; DamageType val2 = val; if ((int)val2 <= 64) { if ((int)val2 != 32) { if ((int)val2 == 64) { hitData.m_damage.m_frost = num; } } else { hitData.m_damage.m_fire = num; } } else if ((int)val2 != 128) { if ((int)val2 != 256) { if ((int)val2 == 512) { hitData.m_damage.m_spirit = num; } } else { hitData.m_damage.m_poison = num; } } else { hitData.m_damage.m_lightning = num; } } } [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(1)] [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(0)] [BepInPlugin("com.odinplus.potionsplus", "PotionsPlus", "4.2.7")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class PotionsPlus : BaseUnityPlugin { [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(0)] private enum Toggle { On = 1, Off = 0 } [HarmonyPatch(typeof(ObjectDB), "Awake")] [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(0)] private static class RegisterAlchemySkill { private static void Postfix() { if (alchemy == null) { Sprite icon = potionAssets.LoadAsset<Sprite>("AlcSkill"); alchemy = new Skill("Alchemy", icon) { Configurable = false }; alchemy.Name.Alias("pp_potion_skill_name"); alchemy.Description.Alias("pp_potion_skill_description"); } } } [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(0)] [HarmonyPatch(typeof(Character), "SetHealth")] public static class PatchCharacterSetHealth { [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(1)] private static bool Prefix(ref Character __instance, float health) { if (!((Object)(object)__instance != (Object)(object)Player.m_localPlayer) && !(health > 0f)) { StatusEffect val = ((IEnumerable<StatusEffect>)((Character)Player.m_localPlayer).GetSEMan().GetStatusEffects()).FirstOrDefault((Func<StatusEffect, bool>)((StatusEffect se) => se.m_category == "pp_philstone")); if (val != null) { ((Character)Player.m_localPlayer).GetSEMan().RemoveStatusEffect(val, false); Inventory inventory = ((Humanoid)Player.m_localPlayer).GetInventory(); ItemData val2 = ((IEnumerable<ItemData>)inventory.GetAllItems()).FirstOrDefault((Func<ItemData, bool>)((ItemData i) => i.m_equipped && (int)i.m_shared.m_itemType == 18 && i.m_shared.m_equipStatusEffect.m_category == "pp_philstone")); if (val2 != null) { inventory.RemoveOneItem(val2); ((StatusEffect)CheatDeathStatusEffect).m_ttl = 6f; ((Character)Player.m_localPlayer).GetSEMan().AddStatusEffect((StatusEffect)(object)CheatDeathStatusEffect, false, 0, 0f); __instance.Heal(__instance.GetMaxHealth(), true); return false; } return true; } } return true; } } [HarmonyPatch(typeof(ZNet), "Awake")] [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(0)] private static class RegisterRPCPatch { private static void Postfix() { ZRoutedRpc.instance.Register<float>("PotionsPlus Raise Alchemy", (Action<long, float>)delegate(long _, float num) { ((Character)(object)Player.m_localPlayer).RaiseSkill("Alchemy", num); }); ZRoutedRpc.instance.Register<int>("PotionsPlus Alchemy Level", (Action<long, int>)delegate(long sender, int num) { SubmitAlchemyLevel.playerAlchemyLevels[sender] = num; }); ZRoutedRpc.instance.Register("PotionsPlus Alchemy Proc", (Action<long>)delegate { ((Character)Player.m_localPlayer).GetSEMan().AddStatusEffect((StatusEffect)(object)AlchemySkillProcStatusEffect, false, 0, 0f); }); ZRoutedRpc.instance.Register<string>("PotionsPlus Potion Activated", (Action<long, string>)onGroupPotionActivated); } } [HarmonyPatch(typeof(Incinerator), "OnIncinerate")] [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(0)] private static class SubmitAlchemyLevel { public static readonly Dictionary<long, int> playerAlchemyLevels = new Dictionary<long, int>(); private static void Postfix(Incinerator __instance) { ZRoutedRpc.instance.InvokeRoutedRPC(__instance.m_nview.GetZDO().GetOwner(), "PotionsPlus Alchemy Level", new object[1] { Mathf.RoundToInt(((Character)(object)Player.m_localPlayer).GetSkillFactor("Alchemy") * 100f) }); } } [HarmonyPatch] [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(0)] private static class SaveCauldronUsingPlayer { [CompilerGenerated] private sealed class <Transpiler>d__3 : IEnumerable<CodeInstruction>, IEnumerable, IEnumerator<CodeInstruction>, IDisposable, IEnumerator { private int <>1__state; private CodeInstruction <>2__current; private int <>l__initialThreadId; [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(new byte[] { 0, 1 })] private IEnumerable<CodeInstruction> instructions; [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(new byte[] { 0, 1 })] public IEnumerable<CodeInstruction> <>3__instructions; [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(0)] private Type <Incinerate>5__1; [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(0)] private MethodInfo <invoke>5__2; [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(new byte[] { 0, 1 })] private IEnumerator<CodeInstruction> <>s__3; [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(0)] private CodeInstruction <instruction>5__4; CodeInstruction IEnumerator<CodeInstruction>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] [return: <8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(0)] get { return <>2__current; } } [DebuggerHidden] public <Transpiler>d__3(int <>1__state) { this.<>1__state = <>1__state; <>l__initialThreadId = Environment.CurrentManagedThreadId; } [DebuggerHidden] void IDisposable.Dispose() { int num = <>1__state; if (num == -3 || (uint)(num - 1) <= 9u) { try { } finally { <>m__Finally1(); } } <Incinerate>5__1 = null; <invoke>5__2 = null; <>s__3 = null; <instruction>5__4 = null; <>1__state = -2; } private bool MoveNext() { //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Expected O, but got Unknown //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Expected O, but got Unknown //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Expected O, but got Unknown //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Expected O, but got Unknown //IL_025f: Unknown result type (might be due to invalid IL or missing references) //IL_0269: Expected O, but got Unknown //IL_028c: Unknown result type (might be due to invalid IL or missing references) //IL_0296: Expected O, but got Unknown //IL_02c8: Unknown result type (might be due to invalid IL or missing references) //IL_02d2: Expected O, but got Unknown //IL_0229: Unknown result type (might be due to invalid IL or missing references) //IL_0233: Expected O, but got Unknown //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Expected O, but got Unknown try { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <Incinerate>5__1 = TargetMethod().DeclaringType; <invoke>5__2 = AccessTools.DeclaredMethod(typeof(MonoBehaviour), "Invoke", (Type[])null, (Type[])null); <>s__3 = instructions.GetEnumerator(); <>1__state = -3; goto IL_030f; case 1: <>1__state = -3; <>2__current = new CodeInstruction(OpCodes.Ldfld, (object)AccessTools.DeclaredField(<Incinerate>5__1, "<>4__this")); <>1__state = 2; return true; case 2: <>1__state = -3; <>2__current = new CodeInstruction(OpCodes.Ldarg_0, (object)null); <>1__state = 3; return true; case 3: <>1__state = -3; <>2__current = new CodeInstruction(OpCodes.Ldfld, (object)AccessTools.DeclaredField(<Incinerate>5__1, "uid")); <>1__state = 4; return true; case 4: <>1__state = -3; <>2__current = new CodeInstruction(OpCodes.Call, (object)AccessTools.DeclaredMethod(typeof(SaveCauldronUsingPlayer), "SetUid", (Type[])null, (Type[])null)); <>1__state = 5; return true; case 5: <>1__state = -3; goto IL_0205; case 6: <>1__state = -3; <>2__current = new CodeInstruction(OpCodes.Ldfld, (object)AccessTools.DeclaredField(<Incinerate>5__1, "<>4__this")); <>1__state = 7; return true; case 7: <>1__state = -3; <>2__current = new CodeInstruction(OpCodes.Ldc_I8, (object)0L); <>1__state = 8; return true; case 8: <>1__state = -3; <>2__current = new CodeInstruction(OpCodes.Call, (object)AccessTools.DeclaredMethod(typeof(SaveCauldronUsingPlayer), "SetUid", (Type[])null, (Type[])null)); <>1__state = 9; return true; case 9: <>1__state = -3; goto IL_02e7; case 10: { <>1__state = -3; <instruction>5__4 = null; goto IL_030f; } IL_030f: if (<>s__3.MoveNext()) { <instruction>5__4 = <>s__3.Current; if (<instruction>5__4.opcode == OpCodes.Call && CodeInstructionExtensions.OperandIs(<instruction>5__4, (MemberInfo)<invoke>5__2)) { <>2__current = new CodeInstruction(OpCodes.Ldarg_0, (object)null); <>1__state = 1; return true; } goto IL_0205; } <>m__Finally1(); <>s__3 = null; return false; IL_02e7: <>2__current = <instruction>5__4; <>1__state = 10; return true; IL_0205: if (<instruction>5__4.opcode == OpCodes.Ret) { <>2__current = new CodeInstruction(OpCodes.Ldarg_0, (object)null); <>1__state = 6; return true; } goto IL_02e7; } } catch { //try-fault ((IDisposable)this).Dispose(); throw; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } private void <>m__Finally1() { <>1__state = -1; if (<>s__3 != null) { <>s__3.Dispose(); } } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } [DebuggerHidden] [return: <8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(0)] IEnumerator<CodeInstruction> IEnumerable<CodeInstruction>.GetEnumerator() { <Transpiler>d__3 <Transpiler>d__; if (<>1__state == -2 && <>l__initialThreadId == Environment.CurrentManagedThreadId) { <>1__state = 0; <Transpiler>d__ = this; } else { <Transpiler>d__ = new <Transpiler>d__3(0); } <Transpiler>d__.instructions = <>3__instructions; return <Transpiler>d__; } [DebuggerHidden] [return: <8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(0)] IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable<CodeInstruction>)this).GetEnumerator(); } } public static long uid; private static void SetUid(Incinerator incinerator, long sender) { if (((Object)incinerator).name.StartsWith("opcauldron", StringComparison.Ordinal)) { uid = sender; } } private static MethodInfo TargetMethod() { return (from t in typeof(Incinerator).GetNestedTypes(BindingFlags.Instance | BindingFlags.NonPublic) where t.Name.Contains("Incinerate") select t).SelectMany([<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(0)] (Type t) => from m in t.GetMethods(BindingFlags.Instance | BindingFlags.NonPublic) where m.Name == "MoveNext" select m).First(); } [IteratorStateMachine(typeof(<Transpiler>d__3))] private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <Transpiler>d__3(-2) { <>3__instructions = instructions }; } } [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(0)] [HarmonyPatch(typeof(IncineratorConversion), "AttemptCraft")] private static class ApplyAlchemySkillOnCauldronUsage { private static void Prefix(List<ItemDrop> toAdd, out int __state) { __state = toAdd.Count; } private static void Postfix(List<ItemDrop> toAdd, int __state, ref int __result) { if (SaveCauldronUsingPlayer.uid == 0L || toAdd.Count == __state) { return; } for (int num = toAdd.Count - 1; num >= __state; num--) { SubmitAlchemyLevel.playerAlchemyLevels.TryGetValue(SaveCauldronUsingPlayer.uid, out var value); for (int num2 = DetermineExtraItems(value, SaveCauldronUsingPlayer.uid); num2 > 0; num2--) { toAdd.Add(toAdd[num]); __result++; } } if (alchemySkillEnabled.Value == Toggle.On) { ZRoutedRpc.instance.InvokeRoutedRPC(SaveCauldronUsingPlayer.uid, "PotionsPlus Raise Alchemy", new object[1] { (float)toAdd.Count }); } } } [HarmonyPatch(typeof(InventoryGui), "DoCrafting")] [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(0)] private static class ApplyAlchemySkillOnAlchemyTableCrafting { private static void Prefix(out int __state) { __state = (int)Game.instance.GetPlayerProfile().m_playerStats[(PlayerStatType)13]; } [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(1)] private static void Postfix(InventoryGui __instance, Player player, int __state) { if ((int)Game.instance.GetPlayerProfile().m_playerStats[(PlayerStatType)13] <= __state) { return; } CraftingStation currentCraftingStation = Player.m_localPlayer.GetCurrentCraftingStation(); if (currentCraftingStation != null && ((Object)currentCraftingStation).name.StartsWith("opalchemy") && __instance.m_craftUpgradeItem == null) { for (int num = DetermineExtraItems(Mathf.RoundToInt(((Character)(object)player).GetSkillFactor("Alchemy") * 100f), ZDOMan.instance.m_sessionID); num > 0; num--) { int num2 = ((__instance.m_craftUpgradeItem == null) ? 1 : (__instance.m_craftUpgradeItem.m_quality + 1)); ((Humanoid)player).GetInventory().AddItem(((Object)((Component)__instance.m_craftRecipe.m_item).gameObject).name, __instance.m_craftRecipe.m_amount, num2, __instance.m_craftVariant, player.GetPlayerID(), player.GetPlayerName(), false); } ((Character)(object)player).RaiseSkill("Alchemy"); } } } [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(0)] [HarmonyPatch(typeof(RandomSpeak), "Start")] private class PreventGhostFromTalking { [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(1)] private static bool Prefix(RandomSpeak __instance) { return ((Component)__instance).gameObject.layer != Piece.s_ghostLayer; } } [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(0)] [HarmonyPatch(typeof(Attack), "Start")] private class BypassAmmoCheck { private static void Prefix(Attack __instance, ItemData weapon, ref string __state) { GameObject dropPrefab = weapon.m_dropPrefab; if (((dropPrefab != null) ? ((Object)dropPrefab).name : null) == "Odins_Dragon_Staff") { GameObject spawnOnTrigger = __instance.m_spawnOnTrigger; if (((spawnOnTrigger != null) ? ((Object)spawnOnTrigger).name : null) == "Staff_Smoke_Cloud") { __state = weapon.m_shared.m_ammoType; weapon.m_shared.m_ammoType = ""; } } } private static void Finalizer(ItemData weapon, ref string __state) { if (__state != null) { weapon.m_shared.m_ammoType = __state; } } } [HarmonyPatch(typeof(Attack), "UseAmmo")] [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(0)] private class ReduceAmmoUsage { [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(1)] private static bool Prefix(Attack __instance, ref bool __result) { GameObject dropPrefab = __instance.m_weapon.m_dropPrefab; string text = ((dropPrefab != null) ? ((Object)dropPrefab).name : null); string text2 = text; if (!(text2 == "Odins_Dragon_Staff")) { if (!(text2 == "Odins_Alchemy_Wand")) { goto IL_00f8; } } else { GameObject spawnOnTrigger = __instance.m_spawnOnTrigger; if (((spawnOnTrigger != null) ? ((Object)spawnOnTrigger).name : null) == "Staff_Smoke_Cloud") { __result = true; return false; } } ItemData helmetItem = __instance.m_character.m_helmetItem; object obj; if (helmetItem == null) { obj = null; } else { GameObject dropPrefab2 = helmetItem.m_dropPrefab; obj = ((dropPrefab2 != null) ? ((Object)dropPrefab2).name : null); } if ((string?)obj == "Odins_Wizard_Hat") { ItemData ammoItem = __instance.m_character.GetInventory().GetAmmoItem(__instance.m_weapon.m_shared.m_ammoType, (string)null); if (ammoItem == null) { return true; } if (Random.value < wizardHatConsumeChargeReduction.Value / 100f) { __instance.m_ammoItem = ammoItem; __result = true; return false; } } goto IL_00f8; IL_00f8: return true; } } [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(0)] public class HealingAoe : MonoBehaviour { private float nextHealTime = 0f; [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(1)] private HashSet<int> healedThisTick = new HashSet<int>(); private float radius => hellbrothOfEternalLifeRadius.Value; private float healInterval => hellbrothOfEternalLifeTickInterval.Value; private void Start() { nextHealTime = Time.time; } private void Update() { if (Time.time >= nextHealTime) { healedThisTick.Clear(); HealNearbyCharacters(); nextHealTime = Time.time + healInterval; } } private void HealNearbyCharacters() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) Vector3 position = ((Component)this).transform.position; int mask = LayerMask.GetMask(new string[3] { "character", "character_noenv", "character_ghost" }); Collider[] array = Physics.OverlapSphere(position, radius, mask); int num = 0; Collider[] array2 = array; foreach (Collider val in array2) { Character val2 = ((Component)val).GetComponentInParent<Character>(); if ((Object)(object)val2 == (Object)null) { val2 = ((Component)val).GetComponent<Character>(); } if ((Object)(object)val2 == (Object)null || val2.IsDead()) { continue; } int instanceID = ((Object)val2).GetInstanceID(); if (healedThisTick.Contains(instanceID)) { continue; } healedThisTick.Add(instanceID); if (val2 is Player || val2.IsTamed()) { float maxHealth = val2.GetMaxHealth(); float num2 = maxHealth * hellbrothOfEternalLifeHealing.Value / 100f; val2.Heal(num2, true); num++; Player val3 = (Player)(object)((val2 is Player) ? val2 : null); if (val3 != null && Random.value < 0.3f) { ((Character)val3).Message((MessageType)2, $"+{Mathf.RoundToInt(num2)} HP", 0, (Sprite)null); } } } } } [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(0)] public class SmokescreenOwner : MonoBehaviour, IProjectile { [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(1)] public void Setup(Character owner, Vector3 velocity, float hitNoise, HitData hitData, ItemData item, ItemData ammo) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) ZDO zdo = ((Component)this).GetComponent<ZNetView>().m_zdo; zdo.Set("PotionsPlus SmokeCloud Owner", owner.GetZDOID()); zdo.Set("PotionsPlus SmokeCloud HatBonus", ((Component)owner).GetComponent<VisEquipment>().m_currentHelmetItemHash == StringExtensionMethods.GetStableHashCode("Odins_Warlock_Hat")); } public void Start() { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) if (((Component)this).GetComponent<ZNetView>().m_zdo.GetBool("PotionsPlus SmokeCloud HatBonus", false)) { ParticleSystem[] componentsInChildren = ((Component)this).GetComponentsInChildren<ParticleSystem>(); foreach (ParticleSystem val in componentsInChildren) { ShapeModule shape = val.shape; ((ShapeModule)(ref shape)).radius = ((ShapeModule)(ref shape)).radius + warlockHatSmokeScreenSizeIncrease.Value; } SphereCollider componentInChildren = ((Component)this).GetComponentInChildren<SphereCollider>(); componentInChildren.radius += warlockHatSmokeScreenSizeIncrease.Value; TimedDestruction component = ((Component)this).GetComponent<TimedDestruction>(); ((MonoBehaviour)component).CancelInvoke("DestroyNow"); component.Trigger(smokeScreenTTL.Value + (float)warlockHatSmokeScreenDurationIncrease.Value); } } [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(1)] public string GetTooltipString(int itemQuality) { return ""; } } [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(0)] [HarmonyPatch(typeof(Projectile), "FixedUpdate")] private class SmokescreenHitBarrier { [CompilerGenerated] private sealed class <Transpiler>d__1 : IEnumerable<CodeInstruction>, IEnumerable, IEnumerator<CodeInstruction>, IDisposable, IEnumerator { private int <>1__state; [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(1)] private CodeInstruction <>2__current; private int <>l__initialThreadId; [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(new byte[] { 0, 1 })] private IEnumerable<CodeInstruction> instructions; [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(new byte[] { 0, 1 })] public IEnumerable<CodeInstruction> <>3__instructions; private FieldInfo <maskField>5__1; [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(new byte[] { 0, 1 })] private IEnumerator<CodeInstruction> <>s__2; private CodeInstruction <instruction>5__3; CodeInstruction IEnumerator<CodeInstruction>.Current { [DebuggerHidden] [return: <8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(1)] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <Transpiler>d__1(int <>1__state) { this.<>1__state = <>1__state; <>l__initialThreadId = Environment.CurrentManagedThreadId; } [DebuggerHidden] void IDisposable.Dispose() { int num = <>1__state; if (num == -3 || (uint)(num - 1) <= 1u) { try { } finally { <>m__Finally1(); } } <maskField>5__1 = null; <>s__2 = null; <instruction>5__3 = null; <>1__state = -2; } private bool MoveNext() { //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Expected O, but got Unknown try { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <maskField>5__1 = AccessTools.DeclaredField(typeof(Projectile), "s_rayMaskSolids"); <>s__2 = instructions.GetEnumerator(); <>1__state = -3; break; case 1: <>1__state = -3; if (<instruction>5__3.opcode == OpCodes.Ldsfld && CodeInstructionExtensions.OperandIs(<instruction>5__3, (MemberInfo)<maskField>5__1)) { <>2__current = new CodeInstruction(OpCodes.Call, (object)AccessTools.DeclaredMethod(typeof(SmokescreenHitBarrier), "ProjectileBlocker", (Type[])null, (Type[])null)); <>1__state = 2; return true; } goto IL_010a; case 2: { <>1__state = -3; goto IL_010a; } IL_010a: <instruction>5__3 = null; break; } if (<>s__2.MoveNext()) { <instruction>5__3 = <>s__2.Current; <>2__current = <instruction>5__3; <>1__state = 1; return true; } <>m__Finally1(); <>s__2 = null; return false; } catch { //try-fault ((IDisposable)this).Dispose(); throw; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } private void <>m__Finally1() { <>1__state = -1; if (<>s__2 != null) { <>s__2.Dispose(); } } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } [DebuggerHidden] IEnumerator<CodeInstruction> IEnumerable<CodeInstruction>.GetEnumerator() { <Transpiler>d__1 <Transpiler>d__; if (<>1__state == -2 && <>l__initialThreadId == Environment.CurrentManagedThreadId) { <>1__state = 0; <Transpiler>d__ = this; } else { <Transpiler>d__ = new <Transpiler>d__1(0); } <Transpiler>d__.instructions = <>3__instructions; return <Transpiler>d__; } [DebuggerHidden] IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable<CodeInstruction>)this).GetEnumerator(); } } private static int ProjectileBlocker(int mask) { return mask | (1 << LayerMask.NameToLayer("blocker")); } [IteratorStateMachine(typeof(<Transpiler>d__1))] [<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(1)] private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <Transpiler>d__1(-2) { <>3__instructions = instructions }; } } [HarmonyPatch(typeof(Projectile), "OnHit")] [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(0)] private class DestroyBlockedProjectile { private static bool Prefix(Projectile __instance, Collider collider, ref bool __state) { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)collider) && ((Component)collider).gameObject.layer == LayerMask.NameToLayer("blocker")) { Transform parent = ((Component)collider).transform.parent; ZDO val = ((parent == null) ? null : ((Component)parent).GetComponent<ZNetView>()?.m_zdo); if (val != null) { GameObject obj = ZNetScene.instance.FindInstance(val.GetZDOID("PotionsPlus SmokeCloud Owner")); Character val2 = ((obj != null) ? obj.GetComponent<Character>() : null); if (val2 != null && !__instance.IsValidTarget((IDestructible)(object)val2)) { return false; } __state = true; Random.InitState((int)((ZDOID)(ref __instance.m_nview.m_zdo.m_uid)).ID); State state = Random.state; bool result = Random.value < (float)(smokeScreenChanceToBlock.Value + (val.GetBool("PotionsPlus SmokeCloud HatBonus", false) ? warlockHatSmokeScreenBlockIncrease.Value : 0)) / 100f; Random.state = state; return result; } } return true; } [HarmonyPriority(200)] private static void Postfix(Projectile __instance, Collider collider, bool __state) { if (__state && __instance != null && __instance.m_didHit && __instance.m_stayAfterHitStatic) { ZNetScene.instance.Destroy(((Component)__instance).gameObject); } } } [HarmonyPatch(typeof(Projectile), "SpawnOnHit")] [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(0)] private class TransferDamageToAoeProjectile { [CompilerGenerated] private sealed class <Transpiler>d__1 : IEnumerable<CodeInstruction>, IEnumerable, IEnumerator<CodeInstruction>, IDisposable, IEnumerator { private int <>1__state; private CodeInstruction <>2__current; private int <>l__initialThreadId; [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(new byte[] { 0, 1 })] private IEnumerable<CodeInstruction> instructions; [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(new byte[] { 0, 1 })] public IEnumerable<CodeInstruction> <>3__instructions; [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(0)] private MethodInfo <projectile>5__1; [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(new byte[] { 0, 1 })] private IEnumerator<CodeInstruction> <>s__2; [<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(0)] private CodeInstruction <instruction>5__3; CodeInstruction IEnumerator<CodeInstruction>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] [return: <8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(0)] get { return <>2__current; } } [DebuggerHidden] public <Transpiler>d__1(int <>1__state) { this.<>1__state = <>1__state; <>l__initialThreadId = Environment.CurrentManagedThreadId; } [DebuggerHidden] void IDisposable.Dispose() { int num = <>1__state; if (num == -3 || (uint)(num - 1) <= 2u) { try { } finally { <>m__Finally1(); } } <projectile>5__1 = null; <>s__2 = null; <instruction>5__3 = null; <>1__state = -2; } private bool MoveNext() { //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Expected O, but got Unknown //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Expected O, but got Unknown try { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <projectile>5__1 = AccessTools.DeclaredMethod(typeof(GameObject), "GetComponent", Array.Empty<Type>(), new Type[1] { typeof(IProjectile) }); <>s__2 = instructions.GetEnumerator(); <>1__state = -3; break; case 1: <>1__state = -3; if (<instruction>5__3.opcode == OpCodes.Callvirt && CodeInstructionExtensions.OperandIs(<instruction>5__3, (MemberInfo)<projectile>5__1)) { <>2__current = new CodeInstruction(OpCodes.Ldarg_0, (object)null); <>1__state = 2; return true; } goto IL_0152; case 2: <>1__state = -3; <>2__current = new CodeInstruction(OpCodes.Call, (object)AccessTools.DeclaredMethod(typeof(TransferDamageToAoeProjectile), "UpdateAoeProjectileDamage", (Type[])null, (Type[])null)); <>1__state = 3; return true; case 3: { <>1__state = -3; goto IL_0152; } IL_0152: <instruction>5__3 = null; break; } if (<>s__2.MoveNext()) { <instruction>5__3 = <>s__2.Current; <>2__current = <instruction>5__3; <>1__state = 1; return true; } <>m__Finally1(); <>s__2 = null; return false; } catch { //try-fault ((IDisposable)this).Dispose(); throw; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } private void <>m__Finally1() { <>1__state = -1; if (<>s__2 != null) { <>s__2.Dispose(); } } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } [DebuggerHidden] [return: <8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(0)] IEnumerator<CodeInstruction> IEnumerable<CodeInstruction>.GetEnumerator() { <Transpiler>d__1 <Transpiler>d__; if (<>1__state == -2 && <>l__initialThreadId == Environment.CurrentManagedThreadId) { <>1__state = 0; <Transpiler>d__ = this; } else { <Transpiler>d__ = new <Transpiler>d__1(0); } <Transpiler>d__.instructions = <>3__instructions; return <Transpiler>d__; } [DebuggerHidden] [return: <8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(0)] IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable<CodeInstruction>)this).GetEnumerator(); } } private static IProjectile UpdateAoeProjectileDamage(IProjectile newProjectile, IProjectile spawning) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Expected O, but got Unknown //IL_0048: Unknown result type (might be due to invalid IL or missing references) string projectileName = ((Object)(Component)spawning).name; if (wandProjectiles.Any([<e831a3ff-85c3-4a11-bbb7-622ea748f277>NullableContext(0)] (string p) => projectileName.StartsWith(p, StringComparison.Ordinal))) { Aoe val = (Aoe)newProjectile; Projectile val2 = (Projectile)spawning; ((DamageTypes)(ref val.m_damage)).Add(val2.m_damage, 1); val.m_attackForce += val2.m_attackForce; val.m_backstabBonus += val2.m_backstabBonus; val.m_statusEffect += val2.m_statusEffect; } return newProjectile; } [IteratorStateMachine(typeof(<Transpiler>d__1))] private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <Transpiler>d__1(-2) { <>3__instructions = instructions }; } } private const string ModName = "PotionsPlus"; private const string ModVersion = "4.2.7"; private const string ModGUID = "com.odinplus.potionsplus"; private static readonly ConfigSync configSync = new ConfigSync("PotionsPlus") { DisplayName = "PotionsPlus", CurrentVersion = "4.2.7", MinimumRequiredVersion = "4.2.7" }; private static AssetBundle potionAssets; public static readonly HashSet<string> wandProjectiles = new HashSet<string>(); private static ConfigEntry<Toggle> serverConfigLocked = null; public static ConfigEntry<float> philosophersStoneXpGainFactor = null; private static ConfigEntry<Toggle> alchemySkillEnabled = null; private static ConfigEntry<Toggle> alchemySkillBonusWhenCraftingEnabled = null; public static ConfigEntry<int> flaskOfElementsFireDamageTakenReduction = null; public static ConfigEntry<int> flaskOfElementsLightningDamageTakenReduction = null; public static ConfigEntry<int> flaskOfElementsTTL = null; public static ConfigEntry<int> flaskOfFortificationBluntDamageTakenReduction = null; public static ConfigEntry<int> flaskOfFortificationSlashDamageTakenReduction = null; public static ConfigEntry<int> flaskOfFortificationPierceDamageTakenReduction = null; public static ConfigEntry<int> flaskOfFortificationTTL = null; public static ConfigEntry<float> flaskOfMagelightIntensity = null; public static ConfigEntry<Color> flaskOfMagelightColor = null; public static ConfigEntry<int> flaskOfMagelightTTL = null; public static ConfigEntry<float> flaskOfGodsHealing = null; public static ConfigEntry<float> flaskOfGodsRegenMultiplier = null; public static ConfigEntry<int> flaskOfGodsTTL = null; public static ConfigEntry<float> flaskOfSecondWindJumpStaminaFactor = null; public static ConfigEntry<float> flaskOfSecondWindRunStaminaFactor = null; public static ConfigEntry<float> flaskOfSecondWindStaminaRegenMultiplier = null; public static ConfigEntry<int> flaskOfSecondWindTTL = null; public static ConfigEntry<float> grandHealingTidePotionHealthOverTime = null; public static ConfigEntry<float> grandHealingTidePotionTickInterval = null; public static ConfigEntry<float> grandHealingTidePotionTTL = null; public static ConfigEntry<int> grandHealingTidePotionCooldown = null; public static ConfigEntry<float> grandSpiritualHealingPotionHealthOverTime = null; public static ConfigEntry<int> grandSpiritualHealingPotionCooldown = null; public static ConfigEntry<float> grandStaminaElixirStaminaOverTime = null; public static ConfigEntry<float> grandStaminaElixirTTL = null; public static ConfigEntry<int> grandStaminaElixirCooldown = null; public static ConfigEntry<int> grandStealthElixirNoiseReduction = null; public static ConfigEntry<int> grandStealthElixirVisibilityReduction = null; public static ConfigEntry<int> grandStealthElixirTTL = null; public static ConfigEntry<float> mediumHealingTideFlaskHealthOverTime = null; public static ConfigEntry<float> mediumHealingTideFlaskTickInterval = null; public static ConfigEntry<float> mediumHealingTideFlaskTTL = null; public static ConfigEntry<int> mediumHealingTideFlaskCooldown = null; public static ConfigEntry<float> mediumSpiritualHealingFlaskHealthOverTime = null; public static ConfigEntry<int> mediumSpiritualHealingFlaskCooldown = null; public static ConfigEntry<float> mediumStaminaFlaskStaminaOverTime = null; public static ConfigEntry<int> mediumStaminaFlaskCooldown = null; public static ConfigEntry<float> lesserHealingTideVialHealthOverTime = null; public static ConfigEntry<float> lesserHealingTideVialTickInterval = null; public static ConfigEntry<float> lesserHealingTideVialTTL = null; public static ConfigEntry<int> lesserHealingTideVialCooldown = null; public static ConfigEntry<float> lesserSpiritualHealingVialHealthOverTime = null; public static ConfigEntry<int> lesserSpiritualHealingVialCooldown = null; public static ConfigEntry<float> lesserStaminaVialStaminaOverTime = null; public static ConfigEntry<int> lesserStaminaVialCooldown = null; public static ConfigEntry<float> hellbrothOfFlamesDamage = null; public static ConfigEntry<float> hellbrothOfFrostDamage = null; public static ConfigEntry<float> hellbrothOfThorsFuryDamage = null; public static ConfigEntry<float> hellbrothOfEternalLifeHealing = null; public static ConfigEntry<float> hellbrothOfEternalLifeTTL = null; public static ConfigEntry<float> hellbrothOfEternalLifeRadius = null; public static ConfigEntry<float> hellbrothOfEternalLifeTickInterval = null; public static ConfigEntry<float> brewOfFaintGroupHealingHealthOverTime = null; public static ConfigEntry<int> brewOfFaintGroupHealingCooldown = null; private static ConfigEntry<int> brewOfFaintGroupHealingRange = null; public static ConfigEntry<float> brewOfGroupHealingHealthOverTime = null; public static ConfigEntry<int> brewOfGroupHealingCooldown = null; private static ConfigEntry<int> brewOfGroupHealingRange = null; public static ConfigEntry<float> brewOfGrandGroupHealingHealthOverTime = null; public static ConfigEntry<int> brewOfGrandGroupHealingCooldown = null; private static ConfigEntry<int> brewOfGrandGroupHealingRange = null; public static ConfigEntry<float> brewOfFieryRevengeTTL = null; public static ConfigEntry<int> brewOfFieryRevengeRange = null; public static ConfigEntry<float> brewOfIcyTouchTTL = null; public static ConfigEntry<int> brewOfIcyTouchRange = null; public static ConfigEntry<float> brewOfCunningToxicityTTL = null; public static ConfigEntry<int> brewOfCunningToxicityRange = null; public static ConfigEntry<float> brewOfSpiritualDeathTTL = null; public static ConfigEntry<int> brewOfSpiritualDeathRange = null; public static ConfigEntry<float> brewOfThunderousWordsTTL = null; public static ConfigEntry<int> brewOfThunderousWordsRange = null; private static ConfigEntry<float> wizardHatConsumeChargeReduction = null; private static ConfigEntry<float> warlockHatSmokeScreenSizeIncrease = null; private static ConfigEntry<int> warlockHatSmokeScreenBlockIncrease = null; private static ConfigEntry<int> warlockHatSmokeScreenDurationIncrease = null; public static ConfigEntry<int> weaponOilDamageIncrease = null; public static ConfigEntry<float> weaponOilTTL = null; private static ConfigEntry<int> smokeScreenChanceToBlock = null; public static ConfigEntry<float> smokeScreenTTL = null; private static Skill alchemy = null; private bool _placeholdersRegistered = false; private static SE_Stats CheatDeathStatusEffect = null; private static SE_Stats AlchemySkillProcStatusEffect = null; private ConfigEntry<T> config<[<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(2)] T>(string group, string name, T value, ConfigDescription description, bool synchronizedSetting = true) { ConfigEntry<T> val = ((BaseUnityPlugin)this).Config.Bind<T>(group, name, value, description); SyncedConfigEntry<T> syncedConfigEntry = configSync.AddConfigEntry<T>(val); syncedConfigEntry.SynchronizedConfig = synchronizedSetting; return val; } private ConfigEntry<T> config<[<8b278060-6ecb-4783-a64c-ced6d409cde1>Nullable(2)] T>(string group, string name, T value, string description, bool synchronizedSetting = true) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown return config(group, name, value, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>()), synchronizedSetting); } public void Awake() { //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Expected O, but got Unknown //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Expected O, but got Unknown //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Expected O, but got Unknown //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Expected O, but got Unknown //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Expected O, but got Unknown //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Expected O, but got Unknown //IL_01cb: Unknown result type (might be due to invalid IL or missing references) //IL_01d6: Expected O, but got Unknown //IL_01fd: Unknown result type (might be due to invalid IL or missing references) //IL_0208: Expected O, but got Unknown //IL_0227: Unknown result type (might be due to invalid IL or missing references) //IL_0237: Unknown result type (might be due to invalid IL or missing references) //IL_0242: Expected O, but got Unknown //IL_0270: Unknown result type (might be due to invalid IL or missing references) //IL_027b: Expected O, but got Unknown //IL_02a5: Unknown result type (might be due to invalid IL or missing references) //IL_02b0: Expected O, but got Unknown //IL_02d0: Unknown result type (might be due to invalid IL or missing references) //IL_02db: Expected O, but got Unknown //IL_0309: Unknown result type (might be due to invalid IL or missing references) //IL_0314: Expected O, but got Unknown //IL_033e: Unknown result type (might be due to invalid IL or missing references) //IL_0349: Expected O, but got Unknown //IL_0377: Unknown result type (might be due to invalid IL or missing references) //IL_0382: Expected O, but got Unknown //IL_03b0: Unknown result type (might be due to invalid IL or missing references) //IL_03bb: Expected O, but got Unknown //IL_03e9: Unknown result type (might be due to invalid IL or missing references) //IL_03f4: Expected O, but got Unknown //IL_041b: Unknown result type (might be due to invalid IL or missing references) //IL_0426: Expected O, but got Unknown //IL_0446: Unknown result type (might be due to invalid IL or missing references) //IL_0451: Expected O, but got Unknown //IL_047f: Unknown result type (might be due to invalid IL or missing references) //IL_048a: Expected O, but got Unknown //IL_04b8: Unknown result type (might be due to invalid IL or missing references) //IL_04c3: Expected O, but got Unknown //IL_04ed: Unknown result type (might be due to invalid IL or missing references) //IL_04f8: Expected O, but got Unknown //IL_0518: Unknown result type (might be due to invalid IL or missing references) //IL_0523: Expected O, but got Unknown //IL_0551: Unknown result type (might be due to invalid IL or missing references) //IL_055c: Expected O, but got Unknown //IL_0586: Unknown result type (might be due to invalid IL or missing references) //IL_0591: Expected O, but got Unknown //IL_05b1: Unknown result type (might be due to invalid IL or missing references) //IL_05bc: Expected O, but got Unknown //IL_05e6: Unknown result type (might be due to invalid IL or missing references) //IL_05f1: Expected O, but got Unknown //IL_0615: Unknown result type (might be due to invalid IL or missing references) //IL_0620: Expected O, but got Unknown //IL_0644: Unknown result type (might be due to invalid IL or missing references) //IL_064f: Expected O, but got Unknown //IL_0676: Unknown result type (might be due to invalid IL or missing references) //IL_0681: Expected O, but got Unknown //IL_06a1: Unknown result type (might be due to invalid IL or missing references) //IL_06ac: Expected O, but got Unknown //IL_06da: Unknown result type (might be due to invalid IL or missing references) //IL_06e5: Expected O, but got Unknown //IL_0713: Unknown result type (might be due to invalid IL or missing references) //IL_071e: Expected O, but got Unknown //IL_0748: Unknown result type (might be due to invalid IL or missing references) //IL_0753: Expected O, but got Unknown //IL_0773: Unknown result type (might be due to invalid IL or missing references) //IL_077e: Expected O, but got Unknown //IL_07a8: Unknown result type (might be due to invalid IL or missing references) //IL_07b3: Expected O, but got Unknown //IL_07d3: Unknown result type (might be due to invalid IL or missing references) //IL_07de: Expected O, but got Unknown //IL_0808: Unknown result type (might be due to invalid IL or missing references) //IL_0813: Expected O, but got Unknown //IL_0833: Unknown result type (might be due to invalid IL or missing references) //IL_083e: Expected O, but got Unknown //IL_086c: Unknown result type (might be due to invalid IL or missing references) //IL_0877: Expected O, but got Unknown //IL_08a5: Unknown result type (might be due to invalid IL or missing references) //IL_08b0: Expected O, but got Unknown //IL_08da: Unknown result type (might be due to invalid IL or missing references) //IL_08e5: Expected O, but got Unknown //IL_0905: Unknown result type (might be due to invalid IL or missing references) //IL_0910: Expected O, but got Unknown //IL_093a: Unknown result type (might be due to invalid IL or missing references) //IL_0945: Expected O, but got Unknown //IL_0965: Unknown result type (might be due to invalid IL or missing references) //IL_0970: Expected O, but got Unknown //IL_099a: Unknown result type (might be due to invalid IL or missing references) //IL_09a5: Expected O, but got Unknown //IL_09c5: Unknown result type (might be due to invalid IL or missing references) //IL_09d0: Expected O, but got Unknown //IL_09f0: Unknown result type (might be due to invalid IL or missing references) //IL_09fb: Expected O, but got Unknown //IL_0a1b: Unknown result type (might be due to invalid IL or missing references) //IL_0a26: Expected O, but got Unknown //IL_0a54: Unknown result type (might be due to invalid IL or missing references) //IL_0a5f: Expected O, but got Unknown //IL_0a8d: Unknown result type (might be due to invalid IL or missing references) //IL_0a98: Expected O, but got Unknown //IL_0ac6: Unknown result type (might be due to invalid IL or missing references) //IL_0ad1: Expected O, but got Unknown //IL_0aff: Unknown result type (might be due to invalid IL or missing references) //IL_0b0a: Expected O, but got Unknown //IL_0b2a: Unknown result type (might be due to invalid IL or missing references) //IL_0b35: Expected O, but got Unknown //IL_0b5f: Unknown result type (might be due to invalid IL or missing references) //IL_0b6a: Expected O, but got Unknown //IL_0b91: Unknown result type (might be due to invalid IL or missing references) //IL_0b9c: Expected O, but got Unknown //IL_0bbc: Unknown result type (might be due to invalid IL or missing references) //IL_0bc7: Expected O, but got Unknown //IL_0bf1: Unknown result type (might be due to invalid IL or missing references) //IL_0bfc: Expected O, but got Unknown //IL_0c23: Unknown result type (might be due to invalid IL or missing references) //IL_0c2e: Expected O, but got Unknown //IL_0c4e: Unknown result type (might be due to invalid IL or missing references) //IL_0c59: Expected O, but got Unknown //IL_0c83: Unknown result type (might be due to invalid IL or missing references) //IL_0c8e: Expected O, but got Unknown //IL_0cb5: Unknown result type (might be due to invalid IL or missing references) //IL_0cc0: Expected O, but got Unknown //IL_0cee: Unknown result type (might be due to invalid IL or missing references) //IL_0cf9: Expected O, but got Unknown //IL_0d20: Unknown result type (might be due to invalid IL or missing references) //IL_0d2b: Expected O, but got Unknown //IL_0d59: Unknown result type (might be due to invalid IL or missing references) //IL_0d64: Expected O, but got Unknown //IL_0d8b: Unknown result type (might be due to invalid IL or missing references) //IL_0d96: Expected O, but got Unknown //IL_0dc4: Unknown result type (might be due to invalid IL or missing references) //IL_0dcf: Expected O, but got Unknown //IL_0df6: Unknown result type (might be due to invalid IL or missing references) //IL_0e01: Expected O, but got Unknown //IL_0e2f: Unknown result type (might be due to invalid IL or missing references) //IL_0e3a: Expected O, but got Unknown //IL_0e61: Unknown result type (might be due to invalid IL or missing references) //IL_0e6c: Expected O, but got Unknown //IL_0e9a: Unknown result type (might be due to invalid IL or missing references) //IL_0ea5: Expected O, but got Unknown //IL_0ecc: Unknown result type (might be due to invalid IL or missing references) //IL_0ed7: Expected O, but got Unknown //IL_0f05: Unknown result type (might be due to invalid IL or missing references) //IL_0f10: Expected O, but got Unknown //IL_0f3e: Unknown result type (might be due to invalid IL or missing references) //IL_0f49: Expected O, but got Unknown //IL_0f6c: Unknown result type (might be due to invalid IL or missing references) //IL_0f77: Expected O, but got Unknown //IL_0f9b: Unknown result type (might be due to invalid IL or missing references) //IL_0fa6: Expected O, but got Unknown //IL_0fca: Unknown result type (might be due to invalid IL or missing references) //IL_0fd5: Expected O, but got Unknown //IL_1003: Unknown result type (might be due to invalid IL or missing references) //IL_100e: Expected O, but got Unknown //IL_1031: Unknown result type (might be due to invalid IL or missing references) //IL_103c: Expected O, but got Unknown //IL_106a: Unknown result type (might be due to invalid IL or missing references) //IL_1075: Expected O, but got Unknown //IL_10af: Unknown result type (might be due to invalid IL or missing references) //IL_10b5: Expected O, but got Unknown Localizer.Load(); potionAssets = PrefabManager.RegisterAssetBundle("potions"); AssetBundle val = potionAssets; serverConfigLocked = config("1 - General", "Lock Configuration", Toggle.On, "If on, the configuration is locked and can be changed by server admins only."); configSync.AddLockingConfigEntry<Toggle>(serverConfigLocked); alchemySkillEnabled = config("1 - General", "Alchemy Skill", Toggle.On, "Enables the Alchemy skill."); alchemySkillBonusWhenCraftingEnabled = config("1 - General", "Alchemy Crafting Bonus", Toggle.On, "Enable Alchemy Bonus when crafting."); philosophersStoneXpGainFactor = config("2 - Philosophers Stone", "Philosophers Stone XP Gain Factor", 1.25f, new ConfigDescription("Factor for Alchemy XP gain, when a Philosophers Stone is equipped.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 3f), Array.Empty<object>())); flaskOfElementsFireDamageTakenReduction = config("Flask of Elements", "Fire damage reduction", 66, new ConfigDescription("Fire damage reduction during Flask of Elements effect.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>())); flaskOfElementsLightningDamageTakenReduction = config("Flask of Elements", "Lightning damage reduction", 66, new ConfigDescription("Lightning damage reduction during Flask of Elements effect.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>())); flaskOfElementsTTL = config("Flask of Elements", "Effect Duration", 120, new ConfigDescription("Effect duration of the Flask of Elements in seconds.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(5, 900), Array.Empty<object>())); flaskOfFortificationBluntDamageTakenReduction = config("Flask of Fortification", "Blunt damage reduction", 66, new ConfigDescription("Blunt damage reduction during Flask of Fortification effect.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>())); flaskOfFortificationSlashDamageTakenReduction = config("Flask of Fortification", "Slash damage reduction", 66, new ConfigDescription("Slash damage reduction during Flask of Fortification effect.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>())); flaskOfFortificationPierceDamageTakenReduction = config("Flask of Fortification", "Pierce damage reduction", 66, new ConfigDescription("Pierce damage reduction during Flask of Fortification effect.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>())); flaskOfFortificationTTL = config("Flask of Fortification", "Effect Duration", 120, new ConfigDescription("Effect duration of the Flask of Fortification in seconds.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(5, 900), Array.Empty<object>())); flaskOfMagelightColor = config<Color>("Flask of Magelight", "Effect Color", new Color(0.75f, 0.75f, 1f), new ConfigDescription("Color of the Flask of Magelight effect.", (AcceptableValueBase)null, Array.Empty<object>())); flaskOfMagelightIntensity = config("Flask of Magelight", "Effect Intensity", 3f, new ConfigDescription("Intensity of the Flask of Magelight effect.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.01f, 5f), Array.Empty<object>())); flaskOfMagelightTTL = config("Flask of Magelight", "Effect Duration", 300, new ConfigDescription("Effect duration of the Flask of Magelight in seconds.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(5, 900), Array.Empty<object>())); flaskOfGodsHealing = config("Flask of the Gods", "Healing Effect", 250f, new ConfigDescription("Healing from the Flask of the Gods effect.", (AcceptableValueBase)null, Array.Empty<object>())); flaskOfGodsRegenMultiplier = config("Flask of the Gods", "Health Regen Factor", 1.05f, new ConfigDescription("Health regen factor from the Flask of the Gods effect.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 5f), Array.Empty<object>())); flaskOfGodsTTL = config("Flask of the Gods", "Effect Duration", 300, new ConfigDescription("Effect duration of the Flask of the Gods in seconds.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(5, 900), Array.Empty<object>())); flaskOfSecondWindJumpStaminaFactor = config("Flask of Second Wind", "Jump Stamina Usage Factor", 0.75f, new ConfigDescription("Jump stamina usage factor the Flask of Second Wind effect.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>())); flaskOfSecondWindRunStaminaFactor = config("Flask of Second Wind", "Run Stamina Usage Factor", 0.75f, new ConfigDescription("Run stamina usage factor from the Flask of Second Wind effect.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>())); flaskOfSecondWindStaminaRegenMultiplier = config("Flask of Second Wind", "Stamina Regen Factor", 1.05f, new ConfigDescription("Stamina regeneration factor from the Flask of Second Wind effect.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 5f), Array.Empty<object>())); flaskOfSecondWindTTL = config("Flask of Second Wind", "Effect Duration", 120, new ConfigDescription("Effect duration of the Flask of Second Wind in seconds.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(5, 900), Array.Empty<object>())); grandHealingTidePotionHealthOverTime = config("Grand Healing Tide Potion", "Healing Effect", 95f, new ConfigDescription("Healing from the Grand Healing Tide Potion effect.", (AcceptableValueBase)null, Array.Empty<object>())); grandHealingTidePotionTickInterval = config("Grand Healing Tide Potion", "Tick Interval", 1f, new ConfigDescription("Tick interval for the Grand Healing Tide Potion effect.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 10f), Array.Empty<object>())); grandHealingTidePotionTTL = config("Grand Healing Tide Potion", "Effect Duration", 10f, new ConfigDescription("Effect duration of the Grand Healing Tide Potion in seconds.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 30f), Array.Empty<object>())); grandHealingTidePotionCooldown = config("Grand Healing Tide Potion", "Cooldown Duration", 240, new ConfigDescription("Cooldown of the Grand Healing Tide Potion in seconds.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 600), Array.Empty<object>())); grandStaminaElixirStaminaOverTime = config("Grand Stamina Elixir", "Stamina Regeneration", 150f, new ConfigDescription("Stamina regeneration from the Grand Stamina Elixir effect.", (AcceptableValueBase)null, Array.Empty<object>())); grandStaminaElixirTTL = config("Grand Stamina Elixir", "Effect Duration", 15f, new ConfigDescription("Effect duration of the Grand Stamina Elixir effect in seconds.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 30f), Array.Empty<object>())); grandStaminaElixirCooldown = config("Grand Stamina Elixir", "Cooldown Duration", 300, new ConfigDescription("Cooldown duration of the Grand Stamina Elixir in seconds.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(5, 900), Array.Empty<object>())); grandSpiritualHealingPotionHealthOverTime = config("Grand Spiritual Healing Potion", "Healing Effect", 100f, new ConfigDescription("Healing from the Grand Spiritual Healing Potion effect.", (AcceptableValueBase)null, Array.Empty<object>())); grandSpiritualHealingPotionCooldown = config("Grand Spiritual Healing Potion", "Cooldown Duration", 240, new ConfigDescription("Cooldown of the Grand Spiritual Healing Potion in seconds.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 600), Array.Empty<object>())); grandStealthElixirVisibilityReduction = config("Grand Stealth Elixir", "Visibility Reduction", 100, new ConfigDescription("Visibility reduction while sneaking during the Grand Stealth Elixir effect.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>())); grandStealthElixirNoiseReduction = config("Grand Stealth Elixir", "Noise Reduction", 100, new ConfigDescription("Noise reduction while sneaking during the Grand Stealth Elixir effect.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>())); grandStealthElixirTTL = config("Grand Stealth Elixir", "Effect Duration", 60, new ConfigDescription("Effect duration of the Grand Stealth Elixir effect in seconds.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(5, 900), Array.Empty<object>())); mediumHealingTideFlaskHealthOverTime = config("Medium Healing Tide Flask", "Healing Effect", 45f, new ConfigDescription("Healing from the Medium Healing Tide Flask effect.", (AcceptableValueBase)null, Array.Empty<object>())); mediumHealingTideFlaskTickInterval = config("Medium Healing Tide Flask", "Tick Interval", 1f, new ConfigDescription("Tick interval for the Medium Healing Tide Flask effect.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 10f), Array.Empty<object>())); mediumHealingTideFlaskTTL = config("Medium Healing Tide Flask", "Effect Duration", 10f, new ConfigDescription("Effect duration of the Medium Healing Tide Flask in seconds.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 30f), Array.Empty<object>())); mediumHealingTideFlaskCooldown = config("Medium Healing Tide Flask", "Cooldown Duration", 240, new ConfigDescription("Cooldown of the Medium Healing Tide Flask in seconds.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 600), Array.Empty<object>())); mediumSpiritualHealingFlaskHealthOverTime = config("Medium Spiritual Healing Flask", "Healing Effect", 50f, new ConfigDescription("Healing from the Medium Spiritual Healing Flask effect.", (AcceptableValueBase)null, Array.Empty<object>())); mediumSpiritualHealingFlaskCooldown = config("Medium Spiritual Healing Flask", "Cooldown Duration", 240, new ConfigDescription("Cooldown of the Medium Spiritual Healing Flask in seconds.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(5, 900), Array.Empty<object>())); mediumStaminaFlaskStaminaOverTime = config("Medium Stamina Flask", "Stamina Regeneration", 90f, new ConfigDescription("Stamina regeneration from the Medium Stamina Flask effect.", (AcceptableValueBase)null, Array.Empty<object>())); mediumStaminaFlaskCooldown = config("Medium Stamina Flask", "Cooldown Duration", 240, new ConfigDescription("Cooldown duration of the Medium Stamina Flask in seconds.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(5, 900), Array.Empty<object>())); lesserHealingTideVialHealthOverTime = config("Lesser Healing Tide Vial", "Healing Effect", 25f, new ConfigDescription("Healing from the Lesser Healing Tide Vial effect.", (AcceptableValueBase)null, Array.Empty<object>())); lesserHealingTideVialTickInterval = config("Lesser Healing Tide Vial", "Tick Interval", 1f, new ConfigDescription("Tick interval for the Lesser Healing Tide Vial effect.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 10f), Array.Empty<object>())); lesserHealingTideVialTTL = config("Lesser Healing Tide Vial", "Effect Duration", 10f, new ConfigDescription("Effect duration of the Lesser Healing Tide Vial in seconds.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 30f), Array.Empty<object>())); lesserHealingTideVialCooldown = config("Lesser Healing Tide Vial", "Cooldown Duration", 240, new ConfigDescription("Cooldown duration of the Lesser Healing Tide Vial in seconds.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(5, 900), Array.Empty<object>())); lesserSpiritualHe