using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using Jotunn.Configs;
using Jotunn.Entities;
using Jotunn.Managers;
using Jotunn.Utils;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("Valheim HealingBottles Mod")]
[assembly: AssemblyDescription("Addsfour different healing potions to the game")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("HearthStone")]
[assembly: AssemblyCopyright("Copyright © 2022")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("E7550497-2C76-44FE-A5B9-9E85080E8BB0")]
[assembly: AssemblyFileVersion("1.0.4.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.6.2", FrameworkDisplayName = ".NET Framework 4.6.2")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.4.0")]
[module: UnverifiableCode]
namespace Hearthstone;
[BepInPlugin("mennowar.mods.HealingBottles", "HealingBottles", "1.0.4")]
[BepInDependency("com.jotunn.jotunn", "2.23.2")]
public class HealingBottles : BaseUnityPlugin
{
[HarmonyPatch(typeof(ItemStand), "CanAttach")]
public static class AttachPatch
{
[HarmonyPostfix]
private static void Postfix(ItemStand __instance, ItemData item, ref bool __result)
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
if (!__result)
{
__result = __instance.m_supportedTypes.Contains(item.m_shared.m_itemType) && IsBottle(item);
}
}
}
[HarmonyPatch(typeof(Player), "ConsumeItem")]
public static class ConsumePatch
{
private static bool Prefix(ItemData item)
{
if (item != null && item.m_shared != null && (Object)(object)item.m_dropPrefab != (Object)null && (Object)(object)item.m_dropPrefab.gameObject != (Object)null && bottleNames.Contains(((Object)item.m_dropPrefab.gameObject).name))
{
string name = ((Object)item.m_dropPrefab.gameObject).name;
if (name.ToUpper().StartsWith("HEAL"))
{
if (name.EndsWith("00"))
{
return FillHealth(25f);
}
if (name.EndsWith("01"))
{
return FillHealth(50f);
}
if (name.EndsWith("02"))
{
return FillHealth(75f);
}
if (name.EndsWith("03"))
{
return FillHealth(100f);
}
}
else if (name.ToUpper().StartsWith("STAM"))
{
if (name.EndsWith("00"))
{
return FillStamina(25f);
}
if (name.EndsWith("01"))
{
return FillStamina(50f);
}
if (name.EndsWith("02"))
{
return FillStamina(75f);
}
if (name.EndsWith("03"))
{
return FillStamina(100f);
}
}
else if (name.ToUpper().StartsWith("MANA"))
{
if (name.EndsWith("00"))
{
return FillMana(25f);
}
if (name.EndsWith("01"))
{
return FillMana(50f);
}
if (name.EndsWith("02"))
{
return FillMana(75f);
}
if (name.EndsWith("03"))
{
return FillMana(100f);
}
}
if (Debugger.IsAttached)
{
Debugger.Break();
}
}
return true;
}
}
public const string PluginGUID = "mennowar.mods.HealingBottles";
private Harmony harmony = new Harmony("mennowar.mods.HealingBottles");
private static List<string> bottleNames = new List<string>();
private static DateTime lastHealDateTime = DateTime.MinValue;
private static DateTime lastStaminaDateTime = DateTime.MinValue;
private static DateTime lastEitrDateTime = DateTime.MinValue;
private AssetBundle assetBundle;
private const string healingBottleAssetNameBase = "HealingBottle";
private string healingBottleAssetName0 = "Assets/_Custom/HealingBottle00.prefab";
private string healingBottleAssetName1 = "Assets/_Custom/HealingBottle01.prefab";
private string healingBottleAssetName2 = "Assets/_Custom/HealingBottle02.prefab";
private string healingBottleAssetName3 = "Assets/_Custom/HealingBottle03.prefab";
private const string staminaBottleAssetNameBase = "StaminaBottle";
private string staminaBottleAssetName0 = "Assets/_Custom/StaminaBottle00.prefab";
private string staminaBottleAssetName1 = "Assets/_Custom/StaminaBottle01.prefab";
private string staminaBottleAssetName2 = "Assets/_Custom/StaminaBottle02.prefab";
private string staminaBottleAssetName3 = "Assets/_Custom/StaminaBottle03.prefab";
private const string manaBottleAssetNameBase = "ManaBottle";
private string manaBottleAssetName0 = "Assets/_Custom/ManaBottle00.prefab";
private string manaBottleAssetName1 = "Assets/_Custom/ManaBottle01.prefab";
private string manaBottleAssetName2 = "Assets/_Custom/ManaBottle02.prefab";
private string manaBottleAssetName3 = "Assets/_Custom/ManaBottle03.prefab";
private ConfigEntry<string> craftingStationItemName;
private ConfigEntry<string> baseItemName;
private ConfigEntry<int> baseItemAmount;
private ConfigEntry<string> smallPotionQualityItemName;
private ConfigEntry<int> smallPotionQualityItemAmount;
private ConfigEntry<int> smallPotionCraftingStationLevel;
private ConfigEntry<string> mediumPotionQualityItemName;
private ConfigEntry<int> mediumPotionQualityItemAmount;
private ConfigEntry<int> mediumPotionCraftingStationLevel;
private ConfigEntry<string> hugePotionQualityItemName;
private ConfigEntry<int> hugePotionQualityItemAmount;
private ConfigEntry<int> hugePotionCraftingStationLevel;
private ConfigEntry<string> godlyPotionQualityItemName;
private ConfigEntry<int> godlyPotionQualityItemAmount;
private ConfigEntry<int> godlyPotionCraftingStationLevel;
private ConfigEntry<string> healingPotionTypeItemName;
private ConfigEntry<int> healingPotionTypeItemAmount;
private static ConfigEntry<int> healingPotionTimeOut;
private ConfigEntry<string> staminaPotionTypeItemName;
private ConfigEntry<int> staminaPotionTypeItemAmount;
private static ConfigEntry<int> staminaPotionTimeOut;
private ConfigEntry<string> manaPotionTypeItemName;
private ConfigEntry<int> manaPotionTypeItemAmount;
private static ConfigEntry<int> manaPotionTimeOut;
private ConfigEntry<bool> healingPotionsEnabled;
private ConfigEntry<bool> staminaPotionsEnabled;
private ConfigEntry<bool> manaPotionsEnabled;
private static string drinkNotPossibleMessage = "You can't drink this potion right now";
private void Awake()
{
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Expected O, but got Unknown
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Expected O, but got Unknown
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_0084: Expected O, but got Unknown
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Expected O, but got Unknown
//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
//IL_00c0: Expected O, but got Unknown
//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
//IL_00ca: Expected O, but got Unknown
//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Expected O, but got Unknown
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
//IL_0106: Expected O, but got Unknown
//IL_012f: Unknown result type (might be due to invalid IL or missing references)
//IL_0134: Unknown result type (might be due to invalid IL or missing references)
//IL_013c: Expected O, but got Unknown
//IL_013c: Unknown result type (might be due to invalid IL or missing references)
//IL_0146: Expected O, but got Unknown
//IL_016b: Unknown result type (might be due to invalid IL or missing references)
//IL_0170: Unknown result type (might be due to invalid IL or missing references)
//IL_0178: Expected O, but got Unknown
//IL_0178: Unknown result type (might be due to invalid IL or missing references)
//IL_0182: Expected O, but got Unknown
//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
//IL_01b3: Expected O, but got Unknown
//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
//IL_01bd: Expected O, but got Unknown
//IL_01e1: Unknown result type (might be due to invalid IL or missing references)
//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
//IL_01ee: Expected O, but got Unknown
//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
//IL_01f8: Expected O, but got Unknown
//IL_021c: Unknown result type (might be due to invalid IL or missing references)
//IL_0221: Unknown result type (might be due to invalid IL or missing references)
//IL_0229: 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_0258: Unknown result type (might be due to invalid IL or missing references)
//IL_025d: Unknown result type (might be due to invalid IL or missing references)
//IL_0265: Expected O, but got Unknown
//IL_0265: Unknown result type (might be due to invalid IL or missing references)
//IL_026f: Expected O, but got Unknown
//IL_0294: Unknown result type (might be due to invalid IL or missing references)
//IL_0299: Unknown result type (might be due to invalid IL or missing references)
//IL_02a1: Expected O, but got Unknown
//IL_02a1: Unknown result type (might be due to invalid IL or missing references)
//IL_02ab: Expected O, but got Unknown
//IL_02d0: Unknown result type (might be due to invalid IL or missing references)
//IL_02d5: Unknown result type (might be due to invalid IL or missing references)
//IL_02dd: Expected O, but got Unknown
//IL_02dd: Unknown result type (might be due to invalid IL or missing references)
//IL_02e7: Expected O, but got Unknown
//IL_030c: Unknown result type (might be due to invalid IL or missing references)
//IL_0311: Unknown result type (might be due to invalid IL or missing references)
//IL_0319: Expected O, but got Unknown
//IL_0319: Unknown result type (might be due to invalid IL or missing references)
//IL_0323: Expected O, but got Unknown
//IL_034c: Unknown result type (might be due to invalid IL or missing references)
//IL_0351: Unknown result type (might be due to invalid IL or missing references)
//IL_0359: Expected O, but got Unknown
//IL_0359: Unknown result type (might be due to invalid IL or missing references)
//IL_0363: Expected O, but got Unknown
//IL_0388: Unknown result type (might be due to invalid IL or missing references)
//IL_038d: Unknown result type (might be due to invalid IL or missing references)
//IL_0395: Expected O, but got Unknown
//IL_0395: Unknown result type (might be due to invalid IL or missing references)
//IL_039f: Expected O, but got Unknown
//IL_03c8: Unknown result type (might be due to invalid IL or missing references)
//IL_03cd: Unknown result type (might be due to invalid IL or missing references)
//IL_03d5: Expected O, but got Unknown
//IL_03d5: Unknown result type (might be due to invalid IL or missing references)
//IL_03df: Expected O, but got Unknown
//IL_0404: Unknown result type (might be due to invalid IL or missing references)
//IL_0409: Unknown result type (might be due to invalid IL or missing references)
//IL_0411: Expected O, but got Unknown
//IL_0411: Unknown result type (might be due to invalid IL or missing references)
//IL_041b: Expected O, but got Unknown
//IL_0444: Unknown result type (might be due to invalid IL or missing references)
//IL_0449: Unknown result type (might be due to invalid IL or missing references)
//IL_0451: Expected O, but got Unknown
//IL_0451: Unknown result type (might be due to invalid IL or missing references)
//IL_045b: Expected O, but got Unknown
//IL_0480: Unknown result type (might be due to invalid IL or missing references)
//IL_0485: Unknown result type (might be due to invalid IL or missing references)
//IL_048d: Expected O, but got Unknown
//IL_048d: Unknown result type (might be due to invalid IL or missing references)
//IL_0497: Expected O, but got Unknown
//IL_04c0: Unknown result type (might be due to invalid IL or missing references)
//IL_04c5: Unknown result type (might be due to invalid IL or missing references)
//IL_04cd: Expected O, but got Unknown
//IL_04cd: Unknown result type (might be due to invalid IL or missing references)
//IL_04d7: Expected O, but got Unknown
//IL_04fc: Unknown result type (might be due to invalid IL or missing references)
//IL_0501: Unknown result type (might be due to invalid IL or missing references)
//IL_0509: Expected O, but got Unknown
//IL_0509: Unknown result type (might be due to invalid IL or missing references)
//IL_0513: Expected O, but got Unknown
//IL_053c: Unknown result type (might be due to invalid IL or missing references)
//IL_0541: Unknown result type (might be due to invalid IL or missing references)
//IL_0549: Expected O, but got Unknown
//IL_0549: Unknown result type (might be due to invalid IL or missing references)
//IL_0553: Expected O, but got Unknown
//IL_0578: Unknown result type (might be due to invalid IL or missing references)
//IL_057d: Unknown result type (might be due to invalid IL or missing references)
//IL_0585: Expected O, but got Unknown
//IL_0585: Unknown result type (might be due to invalid IL or missing references)
//IL_058f: Expected O, but got Unknown
//IL_05b8: Unknown result type (might be due to invalid IL or missing references)
//IL_05bd: Unknown result type (might be due to invalid IL or missing references)
//IL_05c5: Expected O, but got Unknown
//IL_05c5: Unknown result type (might be due to invalid IL or missing references)
//IL_05cf: Expected O, but got Unknown
//IL_05f4: Unknown result type (might be due to invalid IL or missing references)
//IL_05f9: Unknown result type (might be due to invalid IL or missing references)
//IL_0601: Expected O, but got Unknown
//IL_0601: Unknown result type (might be due to invalid IL or missing references)
//IL_060b: Expected O, but got Unknown
//IL_0634: Unknown result type (might be due to invalid IL or missing references)
//IL_0639: Unknown result type (might be due to invalid IL or missing references)
//IL_0641: Expected O, but got Unknown
//IL_0641: Unknown result type (might be due to invalid IL or missing references)
//IL_064b: Expected O, but got Unknown
//IL_0670: Unknown result type (might be due to invalid IL or missing references)
//IL_0675: Unknown result type (might be due to invalid IL or missing references)
//IL_067d: Expected O, but got Unknown
//IL_067d: Unknown result type (might be due to invalid IL or missing references)
//IL_0687: Expected O, but got Unknown
harmony.PatchAll();
((BaseUnityPlugin)this).Config.SaveOnConfigSet = true;
craftingStationItemName = ((BaseUnityPlugin)this).Config.Bind<string>("General", "CraftingStationID", "piece_cauldron", new ConfigDescription("The id of the crafting station.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
healingPotionsEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "HealingPotionsEnabled", true, new ConfigDescription("Indicates whether healing potions are craftable.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
staminaPotionsEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "StaminaPotionsEnabled", true, new ConfigDescription("Indicates whether stamina potions are craftable.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
manaPotionsEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "ManaPotionsEnabled", true, new ConfigDescription("Indicates whether Eitr/Mana potions are craftable.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
baseItemName = ((BaseUnityPlugin)this).Config.Bind<string>("Base", "BaseItemName", "Dandelion", new ConfigDescription("Base Item, required for all Potions.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
baseItemAmount = ((BaseUnityPlugin)this).Config.Bind<int>("Base", "BaseItemAmount", 5, new ConfigDescription("Amount of Base Item required.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
healingPotionTimeOut = ((BaseUnityPlugin)this).Config.Bind<int>("Base", "HealingPotionTimeout", 3, new ConfigDescription("Wait time in seconds before the next healing potion may be consumed.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
staminaPotionTimeOut = ((BaseUnityPlugin)this).Config.Bind<int>("Base", "StaminaPotionTimeout", 3, new ConfigDescription("Wait time in seconds before the next stamina potion may be consumed.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
manaPotionTimeOut = ((BaseUnityPlugin)this).Config.Bind<int>("Base", "EitrPotionTimeout", 3, new ConfigDescription("Wait time in seconds before the next MANA/EITR potion may be consumed.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
smallPotionCraftingStationLevel = ((BaseUnityPlugin)this).Config.Bind<int>("Quality", "SmallPotionCraftingStationLevel", 0, new ConfigDescription("The Crafting-Station Level needed to craft small potions.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
mediumPotionCraftingStationLevel = ((BaseUnityPlugin)this).Config.Bind<int>("Quality", "MediumPotionCraftingStationLevel", 1, new ConfigDescription("The Crafting-Station Level needed to craft medium potions.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
hugePotionCraftingStationLevel = ((BaseUnityPlugin)this).Config.Bind<int>("Quality", "HugePotionCraftingStationLevel", 2, new ConfigDescription("The Crafting-Station Level needed to craft Huge potions.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
godlyPotionCraftingStationLevel = ((BaseUnityPlugin)this).Config.Bind<int>("Quality", "GodlyPotionCraftingStationLevel", 3, new ConfigDescription("The Crafting-Station Level needed to craft Godly potions.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
smallPotionQualityItemName = ((BaseUnityPlugin)this).Config.Bind<string>("Quality", "SmallPotionQualityItemName", "Mushroom", new ConfigDescription("Name of the Item for identifying a potion as small quality.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
smallPotionQualityItemAmount = ((BaseUnityPlugin)this).Config.Bind<int>("Quality", "SmallPotionQualityItemAmount", 5, new ConfigDescription("Amount of small quality item required.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
mediumPotionQualityItemName = ((BaseUnityPlugin)this).Config.Bind<string>("Quality", "MediumPotionQualityItemName", "Thistle", new ConfigDescription("Name of the Item for identifying a potion as medium quality.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
mediumPotionQualityItemAmount = ((BaseUnityPlugin)this).Config.Bind<int>("Quality", "MediumPotionQualityItemAmount", 5, new ConfigDescription("Amount of medium quality item required.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
hugePotionQualityItemName = ((BaseUnityPlugin)this).Config.Bind<string>("Quality", "HugePotionQualityItemName", "Obsidian", new ConfigDescription("Name of the Item for identifying a potion as huge quality.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
hugePotionQualityItemAmount = ((BaseUnityPlugin)this).Config.Bind<int>("Quality", "HugePotionQualityItemAmount", 5, new ConfigDescription("Amount of huge quality item required.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
godlyPotionQualityItemName = ((BaseUnityPlugin)this).Config.Bind<string>("Quality", "GodlyPotionQualityItemName", "Flax", new ConfigDescription("Name of the Item for identifying a potion as godly quality.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
godlyPotionQualityItemAmount = ((BaseUnityPlugin)this).Config.Bind<int>("Quality", "GodlyPotionQualityItemAmount", 5, new ConfigDescription("Amount of godly quality item required.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
healingPotionTypeItemName = ((BaseUnityPlugin)this).Config.Bind<string>("Type", "HealthTypeItemName", "Raspberry", new ConfigDescription("Name of the Item for identifying a potion as HEALING type.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
healingPotionTypeItemAmount = ((BaseUnityPlugin)this).Config.Bind<int>("Type", "HealthTypeItemAmount", 5, new ConfigDescription("Amount of Item for identifying a potion as HEALING type.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
staminaPotionTypeItemName = ((BaseUnityPlugin)this).Config.Bind<string>("Type", "StaminaTypeItemName", "Blueberries", new ConfigDescription("Name of the Item for identifying a potion as STAMINA type.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
staminaPotionTypeItemAmount = ((BaseUnityPlugin)this).Config.Bind<int>("Type", "StaminaTypeItemAmount", 5, new ConfigDescription("Amount of Item for identifying a potion as STAMINA type.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
manaPotionTypeItemName = ((BaseUnityPlugin)this).Config.Bind<string>("Type", "ManaTypeItemName", "MushroomYellow", new ConfigDescription("Name of the Item for identifying a potion as MANA/EITR type.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
manaPotionTypeItemAmount = ((BaseUnityPlugin)this).Config.Bind<int>("Type", "ManaTypeItemAmount", 5, new ConfigDescription("Amount of Item for identifying a potion as MANA/EITR type.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
{
IsAdminOnly = true
} }));
PrefabManager.OnVanillaPrefabsAvailable += VanillaPrefabsAvailable;
((BaseUnityPlugin)this).Config.SettingChanged += delegate
{
((BaseUnityPlugin)this).Logger.LogInfo((object)"Config changed, reloading recipes");
ConfigChangeRecipeUpdate("HealingBottle", healingPotionTypeItemName, healingPotionTypeItemAmount);
ConfigChangeRecipeUpdate("StaminaBottle", staminaPotionTypeItemName, staminaPotionTypeItemAmount);
ConfigChangeRecipeUpdate("ManaBottle", manaPotionTypeItemName, manaPotionTypeItemAmount);
};
}
private void ConfigChangeRecipeUpdate(string bottleAssetName, ConfigEntry<string> typeItemName, ConfigEntry<int> typeItemAmount)
{
string text = ExtractBottleName(bottleAssetName).Split(new char[1] { '0' })[0];
UpdateExistingRecipe(text + "00", smallPotionQualityItemName, smallPotionQualityItemAmount, typeItemName, typeItemAmount, smallPotionCraftingStationLevel);
UpdateExistingRecipe(text + "01", mediumPotionQualityItemName, mediumPotionQualityItemAmount, typeItemName, typeItemAmount, mediumPotionCraftingStationLevel);
UpdateExistingRecipe(text + "02", hugePotionQualityItemName, hugePotionQualityItemAmount, typeItemName, typeItemAmount, hugePotionCraftingStationLevel);
UpdateExistingRecipe(text + "03", godlyPotionQualityItemName, godlyPotionQualityItemAmount, typeItemName, typeItemAmount, godlyPotionCraftingStationLevel);
}
private void UpdateExistingRecipe(string bottleName, ConfigEntry<string> qualityItemName, ConfigEntry<int> qualityItemAmount, ConfigEntry<string> typeItemName, ConfigEntry<int> typeItemAmount, ConfigEntry<int> stationLevel)
{
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_0062: Expected O, but got Unknown
CustomItem item2 = ItemManager.Instance.GetItem(bottleName);
List<Requirement> rqs;
if (item2 != null && ObjectDB.instance.m_items.Any())
{
if (item2.Recipe == null)
{
Recipe obj = ScriptableObject.CreateInstance<Recipe>();
((Object)obj).name = "Recipe_" + bottleName;
obj.m_item = item2.ItemDrop;
CustomRecipe val2 = (item2.Recipe = new CustomRecipe(obj, true, true)
{
FixRequirementReferences = true
});
val2.Recipe.m_minStationLevel = stationLevel.Value;
}
rqs = new List<Requirement>();
AddRq(baseItemName, baseItemAmount);
AddRq(qualityItemName, qualityItemAmount);
AddRq(typeItemName, typeItemAmount);
if (((item2 != null) ? item2.Recipe : null) != null && (Object)(object)item2.Recipe.Recipe != (Object)null)
{
item2.Recipe.Recipe.m_resources = rqs.ToArray();
item2.Recipe.Recipe.m_minStationLevel = stationLevel.Value;
}
}
void AddRq(ConfigEntry<string> item, ConfigEntry<int> amount)
{
//IL_003e: 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_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Expected O, but got Unknown
try
{
if (item != null && !string.IsNullOrEmpty(item.Value) && amount.Value > 0)
{
ItemDrop component = ObjectDB.instance.GetItemPrefab(item.Value).GetComponent<ItemDrop>();
if ((Object)(object)component != (Object)null)
{
rqs.Add(new Requirement
{
m_amount = amount.Value,
m_resItem = component
});
}
}
}
catch (Exception ex)
{
((BaseUnityPlugin)this).Logger.LogError((object)ex.Message);
}
}
}
private string ExtractBottleName(string assetName)
{
return assetName.Replace(".prefab", "").Split(new char[1] { '/' }).Last();
}
private void VanillaPrefabsAvailable()
{
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Expected O, but got Unknown
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Expected O, but got Unknown
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Expected O, but got Unknown
//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
//IL_00b6: Expected O, but got Unknown
//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
//IL_00d5: Expected O, but got Unknown
//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
//IL_0104: Expected O, but got Unknown
//IL_01d5: Unknown result type (might be due to invalid IL or missing references)
//IL_01dc: Expected O, but got Unknown
//IL_02ad: Unknown result type (might be due to invalid IL or missing references)
//IL_02b4: Expected O, but got Unknown
PrefabManager.OnVanillaPrefabsAvailable -= VanillaPrefabsAvailable;
if ((Object)(object)assetBundle == (Object)null)
{
assetBundle = AssetUtils.LoadAssetBundleFromResources("bottles", typeof(HealingBottles).Assembly);
}
RequirementConfig val = new RequirementConfig(baseItemName.Value, baseItemAmount.Value, 0, false);
RequirementConfig val2 = new RequirementConfig(smallPotionQualityItemName.Value, smallPotionQualityItemAmount.Value, 0, false);
RequirementConfig val3 = new RequirementConfig(mediumPotionQualityItemName.Value, mediumPotionQualityItemAmount.Value, 0, false);
RequirementConfig val4 = new RequirementConfig(hugePotionQualityItemName.Value, hugePotionQualityItemAmount.Value, 0, false);
RequirementConfig val5 = new RequirementConfig(godlyPotionQualityItemName.Value, godlyPotionQualityItemAmount.Value, 0, false);
if (healingPotionsEnabled.Value)
{
RequirementConfig val6 = new RequirementConfig(healingPotionTypeItemName.Value, healingPotionTypeItemAmount.Value, 0, false);
AddItem(healingBottleAssetName0, smallPotionCraftingStationLevel.Value, (RequirementConfig[])(object)new RequirementConfig[3] { val, val2, val6 });
AddItem(healingBottleAssetName1, mediumPotionCraftingStationLevel.Value, (RequirementConfig[])(object)new RequirementConfig[3] { val, val3, val6 });
AddItem(healingBottleAssetName2, hugePotionCraftingStationLevel.Value, (RequirementConfig[])(object)new RequirementConfig[3] { val, val4, val6 });
AddItem(healingBottleAssetName3, godlyPotionCraftingStationLevel.Value, (RequirementConfig[])(object)new RequirementConfig[3] { val, val5, val6 });
}
if (staminaPotionsEnabled.Value)
{
RequirementConfig val7 = new RequirementConfig(staminaPotionTypeItemName.Value, staminaPotionTypeItemAmount.Value, 0, false);
AddItem(staminaBottleAssetName0, smallPotionCraftingStationLevel.Value, (RequirementConfig[])(object)new RequirementConfig[3] { val, val2, val7 });
AddItem(staminaBottleAssetName1, mediumPotionCraftingStationLevel.Value, (RequirementConfig[])(object)new RequirementConfig[3] { val, val3, val7 });
AddItem(staminaBottleAssetName2, hugePotionCraftingStationLevel.Value, (RequirementConfig[])(object)new RequirementConfig[3] { val, val4, val7 });
AddItem(staminaBottleAssetName3, godlyPotionCraftingStationLevel.Value, (RequirementConfig[])(object)new RequirementConfig[3] { val, val5, val7 });
}
if (manaPotionsEnabled.Value)
{
RequirementConfig val8 = new RequirementConfig(manaPotionTypeItemName.Value, manaPotionTypeItemAmount.Value, 0, false);
AddItem(manaBottleAssetName0, smallPotionCraftingStationLevel.Value, (RequirementConfig[])(object)new RequirementConfig[3] { val, val2, val8 });
AddItem(manaBottleAssetName1, mediumPotionCraftingStationLevel.Value, (RequirementConfig[])(object)new RequirementConfig[3] { val, val3, val8 });
AddItem(manaBottleAssetName2, hugePotionCraftingStationLevel.Value, (RequirementConfig[])(object)new RequirementConfig[3] { val, val4, val8 });
AddItem(manaBottleAssetName3, godlyPotionCraftingStationLevel.Value, (RequirementConfig[])(object)new RequirementConfig[3] { val, val5, val8 });
}
void AddItem(string assetName, int craftingStationLevel, RequirementConfig[] requirements)
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Expected O, but got Unknown
string text = ExtractBottleName(assetName);
ItemConfig val9 = LoadCustomItemFromPrefab(assetName, craftingStationLevel, requirements);
CustomItem item = ItemManager.Instance.GetItem(text);
if (item == null)
{
item = new CustomItem(assetBundle, assetName, true, val9);
object obj;
if (item == null)
{
obj = null;
}
else
{
CustomRecipe recipe = item.Recipe;
obj = ((recipe != null) ? recipe.Recipe : null);
}
if ((Object)obj != (Object)null)
{
item.Recipe.Recipe.m_minStationLevel = craftingStationLevel;
}
ItemManager.Instance.AddItem(item);
}
}
ItemConfig LoadCustomItemFromPrefab(string prefabName, int craftingStationLevel, RequirementConfig[] requirements)
{
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: 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_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_008b: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Expected O, but got Unknown
ItemDrop component = assetBundle.LoadAsset<GameObject>(prefabName).GetComponent<ItemDrop>();
SharedData shared = component.m_itemData.m_shared;
if (!bottleNames.Contains(((Object)((Component)component).gameObject).name))
{
bottleNames.Add(((Object)((Component)component).gameObject).name);
}
return new ItemConfig
{
Name = shared.m_name,
Icons = shared.m_icons,
Description = shared.m_description,
CraftingStation = craftingStationItemName.Value,
MinStationLevel = craftingStationLevel,
Requirements = requirements
};
}
}
public static bool FillHealth(float amount)
{
if ((Object)(object)Player.m_localPlayer == (Object)null)
{
return false;
}
if ((DateTime.Now - lastHealDateTime).TotalSeconds <= (double)healingPotionTimeOut.Value)
{
((Character)Player.m_localPlayer).Message((MessageType)2, drinkNotPossibleMessage, 0, (Sprite)null);
return false;
}
float maxHealth = ((Character)Player.m_localPlayer).GetMaxHealth();
float num = maxHealth / 100f * amount;
float num2 = ((Character)Player.m_localPlayer).GetHealth() + num;
if (num2 < 0f)
{
num2 = 20f;
}
else if (num2 > maxHealth)
{
num2 = maxHealth;
}
((Character)Player.m_localPlayer).SetHealth(num2);
lastHealDateTime = DateTime.Now;
return true;
}
public static bool FillMana(float amount)
{
if ((Object)(object)Player.m_localPlayer == (Object)null)
{
return false;
}
if ((DateTime.Now - lastEitrDateTime).TotalSeconds <= (double)manaPotionTimeOut.Value)
{
((Character)Player.m_localPlayer).Message((MessageType)2, drinkNotPossibleMessage, 0, (Sprite)null);
return false;
}
float num = ((Character)Player.m_localPlayer).GetMaxEitr();
if (num == 0f)
{
num = 1f;
}
float num2 = num / 100f * amount;
if (num2 > num)
{
num2 = num - num2;
}
((Character)Player.m_localPlayer).AddEitr(num2);
lastEitrDateTime = DateTime.Now;
return true;
}
public static bool FillStamina(float amount)
{
if ((Object)(object)Player.m_localPlayer == (Object)null)
{
return false;
}
if ((DateTime.Now - lastStaminaDateTime).TotalSeconds <= (double)staminaPotionTimeOut.Value)
{
((Character)Player.m_localPlayer).Message((MessageType)2, drinkNotPossibleMessage, 0, (Sprite)null);
return false;
}
float num = ((Character)Player.m_localPlayer).GetMaxStamina() / 100f * amount;
((Character)Player.m_localPlayer).AddStamina(num);
lastStaminaDateTime = DateTime.Now;
return true;
}
private static bool IsBottle(ItemData item)
{
if (item != null && item.m_shared != null && (Object)(object)item.m_dropPrefab != (Object)null)
{
return bottleNames.Contains(((Object)item.m_dropPrefab.gameObject).name);
}
return false;
}
}