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.Cryptography;
using System.Security.Permissions;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using ItemManager;
using JetBrains.Annotations;
using LocalizationManager;
using Microsoft.CodeAnalysis;
using ServerSync;
using TMPro;
using UnityEngine;
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: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("RavenwoodPotions")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("JamesJonesTV")]
[assembly: AssemblyProduct("RavenwoodPotions")]
[assembly: AssemblyCopyright("Copyright © 2021")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("4358610B-F3F4-4843-B7AF-98B7BC60DCDE")]
[assembly: AssemblyFileVersion("1.0.1")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.1.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class NullableContextAttribute : Attribute
{
public readonly byte Flag;
public NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class ExtensionMarkerAttribute : Attribute
{
private readonly string <Name>k__BackingField;
public string Name => <Name>k__BackingField;
public ExtensionMarkerAttribute(string name)
{
<Name>k__BackingField = name;
}
}
}
namespace RavenWoodPotions
{
[BepInPlugin("JamesJonesTV.RavenwoodPotions", "RavenwoodPotions", "1.0.1")]
public class RavenWoodPotionsPlugin : BaseUnityPlugin
{
public enum Toggle
{
On = 1,
Off = 0
}
private class ConfigurationManagerAttributes
{
[UsedImplicitly]
public int? Order;
[UsedImplicitly]
public bool? Browsable;
[UsedImplicitly]
public string? Category;
[UsedImplicitly]
public Action<ConfigEntryBase>? CustomDrawer;
}
internal const string ModName = "RavenwoodPotions";
internal const string ModVersion = "1.0.1";
internal const string Author = "JamesJonesTV";
private const string ModGUID = "JamesJonesTV.RavenwoodPotions";
private static string ConfigFileName = "JamesJonesTV.RavenwoodPotions.cfg";
private static string ConfigFileFullPath;
internal static string ConnectionError;
private readonly Harmony _harmony = new Harmony("JamesJonesTV.RavenwoodPotions");
public static readonly ManualLogSource RavenwoodPotionsLogger;
private static readonly ConfigSync ConfigSync;
private static ConfigEntry<Toggle> _serverConfigLocked;
private static ConfigEntry<Toggle> _recipeIsActiveConfig;
public void Awake()
{
//IL_0212: Unknown result type (might be due to invalid IL or missing references)
//IL_0455: Unknown result type (might be due to invalid IL or missing references)
//IL_069f: Unknown result type (might be due to invalid IL or missing references)
//IL_08ee: Unknown result type (might be due to invalid IL or missing references)
//IL_0b41: Unknown result type (might be due to invalid IL or missing references)
//IL_0d90: Unknown result type (might be due to invalid IL or missing references)
//IL_0fdf: Unknown result type (might be due to invalid IL or missing references)
//IL_122e: Unknown result type (might be due to invalid IL or missing references)
//IL_1481: Unknown result type (might be due to invalid IL or missing references)
//IL_16d0: Unknown result type (might be due to invalid IL or missing references)
//IL_191f: Unknown result type (might be due to invalid IL or missing references)
//IL_1b6e: Unknown result type (might be due to invalid IL or missing references)
//IL_1dc1: Unknown result type (might be due to invalid IL or missing references)
//IL_2010: Unknown result type (might be due to invalid IL or missing references)
//IL_225f: Unknown result type (might be due to invalid IL or missing references)
//IL_24ae: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: Unknown result type (might be due to invalid IL or missing references)
//IL_00e6: Expected O, but got Unknown
//IL_0111: Unknown result type (might be due to invalid IL or missing references)
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
//IL_031d: Unknown result type (might be due to invalid IL or missing references)
//IL_0324: Expected O, but got Unknown
//IL_034f: Unknown result type (might be due to invalid IL or missing references)
//IL_035e: Unknown result type (might be due to invalid IL or missing references)
//IL_0560: Unknown result type (might be due to invalid IL or missing references)
//IL_0567: Expected O, but got Unknown
//IL_0592: Unknown result type (might be due to invalid IL or missing references)
//IL_05a1: Unknown result type (might be due to invalid IL or missing references)
//IL_07af: Unknown result type (might be due to invalid IL or missing references)
//IL_07b6: Expected O, but got Unknown
//IL_07e1: Unknown result type (might be due to invalid IL or missing references)
//IL_07f0: Unknown result type (might be due to invalid IL or missing references)
//IL_0a02: Unknown result type (might be due to invalid IL or missing references)
//IL_0a09: Expected O, but got Unknown
//IL_0a34: Unknown result type (might be due to invalid IL or missing references)
//IL_0a43: Unknown result type (might be due to invalid IL or missing references)
//IL_0c51: Unknown result type (might be due to invalid IL or missing references)
//IL_0c58: Expected O, but got Unknown
//IL_0c83: Unknown result type (might be due to invalid IL or missing references)
//IL_0c92: Unknown result type (might be due to invalid IL or missing references)
//IL_0ea0: Unknown result type (might be due to invalid IL or missing references)
//IL_0ea7: Expected O, but got Unknown
//IL_0ed2: Unknown result type (might be due to invalid IL or missing references)
//IL_0ee1: Unknown result type (might be due to invalid IL or missing references)
//IL_10ef: Unknown result type (might be due to invalid IL or missing references)
//IL_10f6: Expected O, but got Unknown
//IL_1121: Unknown result type (might be due to invalid IL or missing references)
//IL_1130: Unknown result type (might be due to invalid IL or missing references)
//IL_1342: Unknown result type (might be due to invalid IL or missing references)
//IL_1349: Expected O, but got Unknown
//IL_1374: Unknown result type (might be due to invalid IL or missing references)
//IL_1383: Unknown result type (might be due to invalid IL or missing references)
//IL_1591: Unknown result type (might be due to invalid IL or missing references)
//IL_1598: Expected O, but got Unknown
//IL_15c3: Unknown result type (might be due to invalid IL or missing references)
//IL_15d2: Unknown result type (might be due to invalid IL or missing references)
//IL_17e0: Unknown result type (might be due to invalid IL or missing references)
//IL_17e7: Expected O, but got Unknown
//IL_1812: Unknown result type (might be due to invalid IL or missing references)
//IL_1821: Unknown result type (might be due to invalid IL or missing references)
//IL_1a2f: Unknown result type (might be due to invalid IL or missing references)
//IL_1a36: Expected O, but got Unknown
//IL_1a61: Unknown result type (might be due to invalid IL or missing references)
//IL_1a70: Unknown result type (might be due to invalid IL or missing references)
//IL_1c82: Unknown result type (might be due to invalid IL or missing references)
//IL_1c89: Expected O, but got Unknown
//IL_1cb4: Unknown result type (might be due to invalid IL or missing references)
//IL_1cc3: Unknown result type (might be due to invalid IL or missing references)
//IL_1ed1: Unknown result type (might be due to invalid IL or missing references)
//IL_1ed8: Expected O, but got Unknown
//IL_1f03: Unknown result type (might be due to invalid IL or missing references)
//IL_1f12: Unknown result type (might be due to invalid IL or missing references)
//IL_2120: Unknown result type (might be due to invalid IL or missing references)
//IL_2127: Expected O, but got Unknown
//IL_2152: Unknown result type (might be due to invalid IL or missing references)
//IL_2161: Unknown result type (might be due to invalid IL or missing references)
//IL_236f: Unknown result type (might be due to invalid IL or missing references)
//IL_2376: Expected O, but got Unknown
//IL_23a1: Unknown result type (might be due to invalid IL or missing references)
//IL_23b0: Unknown result type (might be due to invalid IL or missing references)
Localizer.Load();
_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);
RavenPotionEffectRegister.minorDefenseEffect = ScriptableObject.CreateInstance<RavenPotionSe_Stats>();
((Object)RavenPotionEffectRegister.minorDefenseEffect).name = "SE_MinorDefense";
((StatusEffect)RavenPotionEffectRegister.minorDefenseEffect).m_name = "$se_minordefense_name";
((StatusEffect)RavenPotionEffectRegister.minorDefenseEffect).m_tooltip = "$se_minordefense_tooltip";
RavenPotionEffectRegister.minorDefenseEffect.potionCategory = PotionCategory.Armor;
RavenPotionEffectRegister.minorDefenseEffect.armorExtra = 5f;
((StatusEffect)RavenPotionEffectRegister.minorDefenseEffect).m_ttl = 600f;
try
{
string text = "RavenwoodPotions.Icons.MinorDefenseIcon.png";
Assembly executingAssembly = Assembly.GetExecutingAssembly();
using Stream stream = executingAssembly.GetManifestResourceStream(text);
if (stream != null)
{
byte[] array = new byte[stream.Length];
stream.Read(array, 0, (int)stream.Length);
Texture2D val = new Texture2D(2, 2);
ImageConversion.LoadImage(val, array);
((StatusEffect)RavenPotionEffectRegister.minorDefenseEffect).m_icon = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f));
}
else
{
Debug.LogWarning((object)("No se encontró el recurso incrustado en el DLL: " + text));
}
}
catch (Exception ex)
{
Debug.LogError((object)("Error cargando el icono desde el DLL: " + ex.Message));
}
Item item = new Item("ravenwoodpotions", "RP_PotionMinorDefense");
item.Name.English("Minor Defense Potion");
item.Name.Spanish("Poción de Defensa Menor");
item.Description.English("Grants a minor boost to your armor for 10 minutes.");
item.Description.Spanish("Otorga +5 de armadura durante 10 minutos.");
ConfigEntry<Toggle> recipeIsActive = config("RP_PotionMinorDefense", "IsRecipeEnabled", Toggle.On, "Enable recipe for Minor Defense potion");
item.RecipeIsActive = (ConfigEntryBase?)(object)recipeIsActive;
SharedData shared = item.Prefab.GetComponent<ItemDrop>().m_itemData.m_shared;
shared.m_consumeStatusEffect = (StatusEffect)(object)RavenPotionEffectRegister.minorDefenseEffect;
shared.m_itemType = (ItemType)2;
item.Crafting.Add(CraftingTable.Cauldron, 1);
item.RequiredItems.Add("Essence_Poison", 3);
item.RequiredItems.Add("Mushroom", 3);
item.RequiredItems.Add("Raspberry", 3);
item.RequiredItems.Add("Coal", 3);
RavenPotionEffectRegister.mediumDefenseEffect = ScriptableObject.CreateInstance<RavenPotionSe_Stats>();
((Object)RavenPotionEffectRegister.mediumDefenseEffect).name = "SE_MediumDefense";
((StatusEffect)RavenPotionEffectRegister.mediumDefenseEffect).m_name = "$se_mediumdefense_name";
((StatusEffect)RavenPotionEffectRegister.mediumDefenseEffect).m_tooltip = "$se_mediumdefense_tooltip";
RavenPotionEffectRegister.mediumDefenseEffect.potionCategory = PotionCategory.Armor;
RavenPotionEffectRegister.mediumDefenseEffect.armorExtra = 10f;
((StatusEffect)RavenPotionEffectRegister.mediumDefenseEffect).m_ttl = 1200f;
try
{
string text2 = "RavenwoodPotions.Icons.MediumDefenseIcon.png";
Assembly executingAssembly2 = Assembly.GetExecutingAssembly();
using Stream stream2 = executingAssembly2.GetManifestResourceStream(text2);
if (stream2 != null)
{
byte[] array2 = new byte[stream2.Length];
stream2.Read(array2, 0, (int)stream2.Length);
Texture2D val2 = new Texture2D(2, 2);
ImageConversion.LoadImage(val2, array2);
((StatusEffect)RavenPotionEffectRegister.mediumDefenseEffect).m_icon = Sprite.Create(val2, new Rect(0f, 0f, (float)((Texture)val2).width, (float)((Texture)val2).height), new Vector2(0.5f, 0.5f));
}
else
{
Debug.LogWarning((object)("No se encontró el recurso incrustado en el DLL: " + text2));
}
}
catch (Exception ex2)
{
Debug.LogError((object)("Error cargando el icono de Medium Defense desde el DLL: " + ex2.Message));
}
Item item2 = new Item("ravenwoodpotions", "RP_PotionMediumDefense");
item2.Name.English("Medium Defense Potion");
item2.Name.Spanish("Poción de Defensa Media");
item2.Description.English("Grants a medium boost to your armor for 20 minutes.");
item2.Description.Spanish("Otorga +10 de armadura durante 20 minutos.");
ConfigEntry<Toggle> recipeIsActive2 = config("RP_PotionMediumDefense", "IsRecipeEnabled", Toggle.On, "Enable recipe for Medium Defense potion");
item2.RecipeIsActive = (ConfigEntryBase?)(object)recipeIsActive2;
SharedData shared2 = item2.Prefab.GetComponent<ItemDrop>().m_itemData.m_shared;
shared2.m_consumeStatusEffect = (StatusEffect)(object)RavenPotionEffectRegister.mediumDefenseEffect;
shared2.m_itemType = (ItemType)2;
item2.Crafting.Add(CraftingTable.Cauldron, 2);
item2.RequiredItems.Add("Essence_Poison", 5);
item2.RequiredItems.Add("MushroomYellow", 5);
item2.RequiredItems.Add("Blueberries", 5);
item2.RequiredItems.Add("Guck", 5);
RavenPotionEffectRegister.majorDefenseEffect = ScriptableObject.CreateInstance<RavenPotionSe_Stats>();
((Object)RavenPotionEffectRegister.majorDefenseEffect).name = "SE_MajorDefense";
((StatusEffect)RavenPotionEffectRegister.majorDefenseEffect).m_name = "$se_majordefense_name";
((StatusEffect)RavenPotionEffectRegister.majorDefenseEffect).m_tooltip = "$se_majordefense_tooltip";
RavenPotionEffectRegister.majorDefenseEffect.potionCategory = PotionCategory.Armor;
RavenPotionEffectRegister.majorDefenseEffect.armorExtra = 15f;
((StatusEffect)RavenPotionEffectRegister.majorDefenseEffect).m_ttl = 1800f;
try
{
string text3 = "RavenwoodPotions.Icons.MajorDefenseIcon.png";
Assembly executingAssembly3 = Assembly.GetExecutingAssembly();
using Stream stream3 = executingAssembly3.GetManifestResourceStream(text3);
if (stream3 != null)
{
byte[] array3 = new byte[stream3.Length];
stream3.Read(array3, 0, (int)stream3.Length);
Texture2D val3 = new Texture2D(2, 2);
ImageConversion.LoadImage(val3, array3);
((StatusEffect)RavenPotionEffectRegister.majorDefenseEffect).m_icon = Sprite.Create(val3, new Rect(0f, 0f, (float)((Texture)val3).width, (float)((Texture)val3).height), new Vector2(0.5f, 0.5f));
}
else
{
Debug.LogWarning((object)("No se encontró el recurso incrustado en el DLL: " + text3));
}
}
catch (Exception ex3)
{
Debug.LogError((object)("Error cargando el icono de Major Defense desde el DLL: " + ex3.Message));
}
Item item3 = new Item("ravenwoodpotions", "RP_PotionMajorDefense");
item3.Name.English("Major Defense Potion");
item3.Name.Spanish("Poción de Defensa Mayor");
item3.Description.English("Grants a major boost to your armor for 30 minutes.");
item3.Description.Spanish("Otorga +15 de armadura durante 30 minutos.");
ConfigEntry<Toggle> recipeIsActive3 = config("RP_PotionMajorDefense", "IsRecipeEnabled", Toggle.On, "Enable recipe for Major Defense potion");
item3.RecipeIsActive = (ConfigEntryBase?)(object)recipeIsActive3;
SharedData shared3 = item3.Prefab.GetComponent<ItemDrop>().m_itemData.m_shared;
shared3.m_consumeStatusEffect = (StatusEffect)(object)RavenPotionEffectRegister.majorDefenseEffect;
shared3.m_itemType = (ItemType)2;
item3.Crafting.Add(CraftingTable.Cauldron, 3);
item3.RequiredItems.Add("Essence_Poison", 8);
item3.RequiredItems.Add("MushroomBlue", 8);
item3.RequiredItems.Add("Cloudberry", 8);
item3.RequiredItems.Add("Tar", 8);
RavenPotionEffectRegister.mythicDefenseEffect = ScriptableObject.CreateInstance<RavenPotionSe_Stats>();
((Object)RavenPotionEffectRegister.mythicDefenseEffect).name = "SE_MythicDefense";
((StatusEffect)RavenPotionEffectRegister.mythicDefenseEffect).m_name = "$se_mythicdefense_name";
((StatusEffect)RavenPotionEffectRegister.mythicDefenseEffect).m_tooltip = "$se_mythicdefense_tooltip";
RavenPotionEffectRegister.mythicDefenseEffect.potionCategory = PotionCategory.Armor;
RavenPotionEffectRegister.mythicDefenseEffect.armorExtra = 20f;
((StatusEffect)RavenPotionEffectRegister.mythicDefenseEffect).m_ttl = 3600f;
try
{
string text4 = "RavenwoodPotions.Icons.MythicDefenseIcon.png";
Assembly executingAssembly4 = Assembly.GetExecutingAssembly();
using Stream stream4 = executingAssembly4.GetManifestResourceStream(text4);
if (stream4 != null)
{
byte[] array4 = new byte[stream4.Length];
stream4.Read(array4, 0, (int)stream4.Length);
Texture2D val4 = new Texture2D(2, 2);
ImageConversion.LoadImage(val4, array4);
((StatusEffect)RavenPotionEffectRegister.mythicDefenseEffect).m_icon = Sprite.Create(val4, new Rect(0f, 0f, (float)((Texture)val4).width, (float)((Texture)val4).height), new Vector2(0.5f, 0.5f));
}
else
{
Debug.LogWarning((object)("No se encontró el recurso incrustado en el DLL: " + text4));
}
}
catch (Exception ex4)
{
Debug.LogError((object)("Error cargando el icono de Mythic Defense desde el DLL: " + ex4.Message));
}
Item item4 = new Item("ravenwoodpotions", "RP_PotionMythicDefense");
item4.Name.English("Mythic Defense Potion");
item4.Name.Spanish("Poción de Defensa Mítica");
item4.Description.English("Grants a mythic boost to your armor for 1 hour.");
item4.Description.Spanish("Otorga +20 de armadura durante 1 hora.");
ConfigEntry<Toggle> recipeIsActive4 = config("RP_PotionMythicDefense", "IsRecipeEnabled", Toggle.On, "Enable recipe for Mythic Defense potion");
item4.RecipeIsActive = (ConfigEntryBase?)(object)recipeIsActive4;
SharedData shared4 = item4.Prefab.GetComponent<ItemDrop>().m_itemData.m_shared;
shared4.m_consumeStatusEffect = (StatusEffect)(object)RavenPotionEffectRegister.mythicDefenseEffect;
shared4.m_itemType = (ItemType)2;
item4.Crafting.Add(CraftingTable.Cauldron, 4);
item4.RequiredItems.Add("Essence_Poison", 10);
item4.RequiredItems.Add("MushroomSmokePuff", 10);
item4.RequiredItems.Add("Vineberry", 10);
item4.RequiredItems.Add("Sap", 10);
RavenPotionEffectRegister.minorFortitudeEffect = ScriptableObject.CreateInstance<RavenPotionSe_Stats>();
((Object)RavenPotionEffectRegister.minorFortitudeEffect).name = "SE_MinorFortitude";
((StatusEffect)RavenPotionEffectRegister.minorFortitudeEffect).m_name = "$se_minorfortitude_name";
((StatusEffect)RavenPotionEffectRegister.minorFortitudeEffect).m_tooltip = "$se_minorfortitude_tooltip";
RavenPotionEffectRegister.minorFortitudeEffect.potionCategory = PotionCategory.Heal;
RavenPotionEffectRegister.minorFortitudeEffect.healthExtra = 10f;
((StatusEffect)RavenPotionEffectRegister.minorFortitudeEffect).m_ttl = 600f;
try
{
string text5 = "RavenwoodPotions.Icons.MinorFortitudeIcon.png";
Assembly executingAssembly5 = Assembly.GetExecutingAssembly();
using Stream stream5 = executingAssembly5.GetManifestResourceStream(text5);
if (stream5 != null)
{
byte[] array5 = new byte[stream5.Length];
stream5.Read(array5, 0, (int)stream5.Length);
Texture2D val5 = new Texture2D(2, 2);
ImageConversion.LoadImage(val5, array5);
((StatusEffect)RavenPotionEffectRegister.minorFortitudeEffect).m_icon = Sprite.Create(val5, new Rect(0f, 0f, (float)((Texture)val5).width, (float)((Texture)val5).height), new Vector2(0.5f, 0.5f));
}
else
{
Debug.LogWarning((object)("No se encontró el recurso incrustado en el DLL: " + text5));
}
}
catch (Exception ex5)
{
Debug.LogError((object)("Error cargando el icono de Minor Fortitude desde el DLL: " + ex5.Message));
}
Item item5 = new Item("ravenwoodpotions", "RP_PotionMinorFortitude");
item5.Name.English("Minor Fortitude Potion");
item5.Name.Spanish("Poción de Fortaleza Menor");
item5.Description.English("Grants a minor boost to your maximum health for 10 minutes.");
item5.Description.Spanish("Otorga +10 de vida máxima durante 10 minutos.");
ConfigEntry<Toggle> recipeIsActive5 = config("RP_PotionMinorFortitude", "IsRecipeEnabled", Toggle.On, "Enable recipe for Minor Fortitude potion");
item5.RecipeIsActive = (ConfigEntryBase?)(object)recipeIsActive5;
SharedData shared5 = item5.Prefab.GetComponent<ItemDrop>().m_itemData.m_shared;
shared5.m_consumeStatusEffect = (StatusEffect)(object)RavenPotionEffectRegister.minorFortitudeEffect;
shared5.m_itemType = (ItemType)2;
item5.Crafting.Add(CraftingTable.Cauldron, 1);
item5.RequiredItems.Add("Essence_Fire", 3);
item5.RequiredItems.Add("Mushroom", 3);
item5.RequiredItems.Add("Raspberry", 3);
item5.RequiredItems.Add("Dandelion", 3);
RavenPotionEffectRegister.mediumFortitudeEffect = ScriptableObject.CreateInstance<RavenPotionSe_Stats>();
((Object)RavenPotionEffectRegister.mediumFortitudeEffect).name = "SE_MediumFortitude";
((StatusEffect)RavenPotionEffectRegister.mediumFortitudeEffect).m_name = "$se_mediumfortitude_name";
((StatusEffect)RavenPotionEffectRegister.mediumFortitudeEffect).m_tooltip = "$se_mediumfortitude_tooltip";
RavenPotionEffectRegister.mediumFortitudeEffect.potionCategory = PotionCategory.Heal;
RavenPotionEffectRegister.mediumFortitudeEffect.healthExtra = 20f;
((StatusEffect)RavenPotionEffectRegister.mediumFortitudeEffect).m_ttl = 1200f;
try
{
string text6 = "RavenwoodPotions.Icons.MediumFortitudeIcon.png";
Assembly executingAssembly6 = Assembly.GetExecutingAssembly();
using Stream stream6 = executingAssembly6.GetManifestResourceStream(text6);
if (stream6 != null)
{
byte[] array6 = new byte[stream6.Length];
stream6.Read(array6, 0, (int)stream6.Length);
Texture2D val6 = new Texture2D(2, 2);
ImageConversion.LoadImage(val6, array6);
((StatusEffect)RavenPotionEffectRegister.mediumFortitudeEffect).m_icon = Sprite.Create(val6, new Rect(0f, 0f, (float)((Texture)val6).width, (float)((Texture)val6).height), new Vector2(0.5f, 0.5f));
}
else
{
Debug.LogWarning((object)("No se encontró el recurso incrustado en el DLL: " + text6));
}
}
catch (Exception ex6)
{
Debug.LogError((object)("Error cargando el icono de Medium Fortitude desde el DLL: " + ex6.Message));
}
Item item6 = new Item("ravenwoodpotions", "RP_PotionMediumFortitude");
item6.Name.English("Medium Fortitude Potion");
item6.Name.Spanish("Poción de Fortaleza Media");
item6.Description.English("Grants a medium boost to your maximum health for 20 minutes.");
item6.Description.Spanish("Otorga +20 de vida máxima durante 20 minutos.");
ConfigEntry<Toggle> recipeIsActive6 = config("RP_PotionMediumFortitude", "IsRecipeEnabled", Toggle.On, "Enable recipe for Medium Fortitude potion");
item6.RecipeIsActive = (ConfigEntryBase?)(object)recipeIsActive6;
SharedData shared6 = item6.Prefab.GetComponent<ItemDrop>().m_itemData.m_shared;
shared6.m_consumeStatusEffect = (StatusEffect)(object)RavenPotionEffectRegister.mediumFortitudeEffect;
shared6.m_itemType = (ItemType)2;
item6.Crafting.Add(CraftingTable.Cauldron, 2);
item6.RequiredItems.Add("Essence_Fire", 5);
item6.RequiredItems.Add("MushroomYellow", 5);
item6.RequiredItems.Add("Blueberries", 5);
item6.RequiredItems.Add("Thistle", 5);
RavenPotionEffectRegister.majorFortitudeEffect = ScriptableObject.CreateInstance<RavenPotionSe_Stats>();
((Object)RavenPotionEffectRegister.majorFortitudeEffect).name = "SE_MajorFortitude";
((StatusEffect)RavenPotionEffectRegister.majorFortitudeEffect).m_name = "$se_majorfortitude_name";
((StatusEffect)RavenPotionEffectRegister.majorFortitudeEffect).m_tooltip = "$se_majorfortitude_tooltip";
RavenPotionEffectRegister.majorFortitudeEffect.potionCategory = PotionCategory.Heal;
RavenPotionEffectRegister.majorFortitudeEffect.healthExtra = 30f;
((StatusEffect)RavenPotionEffectRegister.majorFortitudeEffect).m_ttl = 1800f;
try
{
string text7 = "RavenwoodPotions.Icons.MajorFortitudeIcon.png";
Assembly executingAssembly7 = Assembly.GetExecutingAssembly();
using Stream stream7 = executingAssembly7.GetManifestResourceStream(text7);
if (stream7 != null)
{
byte[] array7 = new byte[stream7.Length];
stream7.Read(array7, 0, (int)stream7.Length);
Texture2D val7 = new Texture2D(2, 2);
ImageConversion.LoadImage(val7, array7);
((StatusEffect)RavenPotionEffectRegister.majorFortitudeEffect).m_icon = Sprite.Create(val7, new Rect(0f, 0f, (float)((Texture)val7).width, (float)((Texture)val7).height), new Vector2(0.5f, 0.5f));
}
else
{
Debug.LogWarning((object)("No se encontró el recurso incrustado en el DLL: " + text7));
}
}
catch (Exception ex7)
{
Debug.LogError((object)("Error cargando el icono de Major Fortitude desde el DLL: " + ex7.Message));
}
Item item7 = new Item("ravenwoodpotions", "RP_PotionMajorFortitude");
item7.Name.English("Major Fortitude Potion");
item7.Name.Spanish("Poción de Fortaleza Mayor");
item7.Description.English("Grants a major boost to your maximum health for 30 minutes.");
item7.Description.Spanish("Otorga +30 de vida máxima durante 30 minutos.");
ConfigEntry<Toggle> recipeIsActive7 = config("RP_PotionMajorFortitude", "IsRecipeEnabled", Toggle.On, "Enable recipe for Major Fortitude potion");
item7.RecipeIsActive = (ConfigEntryBase?)(object)recipeIsActive7;
SharedData shared7 = item7.Prefab.GetComponent<ItemDrop>().m_itemData.m_shared;
shared7.m_consumeStatusEffect = (StatusEffect)(object)RavenPotionEffectRegister.majorFortitudeEffect;
shared7.m_itemType = (ItemType)2;
item7.Crafting.Add(CraftingTable.Cauldron, 3);
item7.RequiredItems.Add("Essence_Fire", 8);
item7.RequiredItems.Add("MushroomBlue", 8);
item7.RequiredItems.Add("Cloudberry", 8);
item7.RequiredItems.Add("MushroomJotunPuffs", 8);
RavenPotionEffectRegister.mythicFortitudeEffect = ScriptableObject.CreateInstance<RavenPotionSe_Stats>();
((Object)RavenPotionEffectRegister.mythicFortitudeEffect).name = "SE_MythicFortitude";
((StatusEffect)RavenPotionEffectRegister.mythicFortitudeEffect).m_name = "$se_mythicfortitude_name";
((StatusEffect)RavenPotionEffectRegister.mythicFortitudeEffect).m_tooltip = "$se_mythicfortitude_tooltip";
RavenPotionEffectRegister.mythicFortitudeEffect.potionCategory = PotionCategory.Heal;
RavenPotionEffectRegister.mythicFortitudeEffect.healthExtra = 40f;
((StatusEffect)RavenPotionEffectRegister.mythicFortitudeEffect).m_ttl = 3600f;
try
{
string text8 = "RavenwoodPotions.Icons.MythicFortitudeIcon.png";
Assembly executingAssembly8 = Assembly.GetExecutingAssembly();
using Stream stream8 = executingAssembly8.GetManifestResourceStream(text8);
if (stream8 != null)
{
byte[] array8 = new byte[stream8.Length];
stream8.Read(array8, 0, (int)stream8.Length);
Texture2D val8 = new Texture2D(2, 2);
ImageConversion.LoadImage(val8, array8);
((StatusEffect)RavenPotionEffectRegister.mythicFortitudeEffect).m_icon = Sprite.Create(val8, new Rect(0f, 0f, (float)((Texture)val8).width, (float)((Texture)val8).height), new Vector2(0.5f, 0.5f));
}
else
{
Debug.LogWarning((object)("No se encontró el recurso incrustado en el DLL: " + text8));
}
}
catch (Exception ex8)
{
Debug.LogError((object)("Error cargando el icono de Mythic Fortitude desde el DLL: " + ex8.Message));
}
Item item8 = new Item("ravenwoodpotions", "RP_PotionMythicFortitude");
item8.Name.English("Mythic Fortitude Potion");
item8.Name.Spanish("Poción de Fortaleza Mítica");
item8.Description.English("Grants a mythic boost to your maximum health for 1 hour.");
item8.Description.Spanish("Otorga +40 de vida máxima durante 1 hora.");
ConfigEntry<Toggle> recipeIsActive8 = config("RP_PotionMythicFortitude", "IsRecipeEnabled", Toggle.On, "Enable recipe for Mythic Fortitude potion");
item8.RecipeIsActive = (ConfigEntryBase?)(object)recipeIsActive8;
SharedData shared8 = item8.Prefab.GetComponent<ItemDrop>().m_itemData.m_shared;
shared8.m_consumeStatusEffect = (StatusEffect)(object)RavenPotionEffectRegister.mythicFortitudeEffect;
shared8.m_itemType = (ItemType)2;
item8.Crafting.Add(CraftingTable.Cauldron, 4);
item8.RequiredItems.Add("Essence_Fire", 10);
item8.RequiredItems.Add("MushroomSmokePuff", 10);
item8.RequiredItems.Add("Vineberry", 10);
item8.RequiredItems.Add("Fiddleheadfern", 10);
RavenPotionEffectRegister.minorIntellectEffect = ScriptableObject.CreateInstance<RavenPotionSe_Stats>();
((Object)RavenPotionEffectRegister.minorIntellectEffect).name = "SE_MinorIntellect";
((StatusEffect)RavenPotionEffectRegister.minorIntellectEffect).m_name = "$se_minorintellect_name";
((StatusEffect)RavenPotionEffectRegister.minorIntellectEffect).m_tooltip = "$se_minorintellect_tooltip";
RavenPotionEffectRegister.minorIntellectEffect.potionCategory = PotionCategory.Eitr;
RavenPotionEffectRegister.minorIntellectEffect.eitrExtra = 10f;
((StatusEffect)RavenPotionEffectRegister.minorIntellectEffect).m_ttl = 600f;
try
{
string text9 = "RavenwoodPotions.Icons.MinorIntellectIcon.png";
Assembly executingAssembly9 = Assembly.GetExecutingAssembly();
using Stream stream9 = executingAssembly9.GetManifestResourceStream(text9);
if (stream9 != null)
{
byte[] array9 = new byte[stream9.Length];
stream9.Read(array9, 0, (int)stream9.Length);
Texture2D val9 = new Texture2D(2, 2);
ImageConversion.LoadImage(val9, array9);
((StatusEffect)RavenPotionEffectRegister.minorIntellectEffect).m_icon = Sprite.Create(val9, new Rect(0f, 0f, (float)((Texture)val9).width, (float)((Texture)val9).height), new Vector2(0.5f, 0.5f));
}
else
{
Debug.LogWarning((object)("No se encontró el recurso incrustado en el DLL: " + text9));
}
}
catch (Exception ex9)
{
Debug.LogError((object)("Error cargando el icono de Minor Intellect desde el DLL: " + ex9.Message));
}
Item item9 = new Item("ravenwoodpotions", "RP_PotionMinorIntellect");
item9.Name.English("Minor Intellect Potion");
item9.Name.Spanish("Poción de Intelecto Menor");
item9.Description.English("Grants a minor boost to your maximum Eitr for 10 minutes.");
item9.Description.Spanish("Otorga +10 de Eitr máximo durante 10 minutos.");
ConfigEntry<Toggle> recipeIsActive9 = config("RP_PotionMinorIntellect", "IsRecipeEnabled", Toggle.On, "Enable recipe for Minor Intellect potion");
item9.RecipeIsActive = (ConfigEntryBase?)(object)recipeIsActive9;
SharedData shared9 = item9.Prefab.GetComponent<ItemDrop>().m_itemData.m_shared;
shared9.m_consumeStatusEffect = (StatusEffect)(object)RavenPotionEffectRegister.minorIntellectEffect;
shared9.m_itemType = (ItemType)2;
item9.Crafting.Add(CraftingTable.Cauldron, 1);
item9.RequiredItems.Add("Essence_Frost", 3);
item9.RequiredItems.Add("Mushroom", 3);
item9.RequiredItems.Add("Raspberry", 3);
item9.RequiredItems.Add("NeckTail", 3);
RavenPotionEffectRegister.mediumIntellectEffect = ScriptableObject.CreateInstance<RavenPotionSe_Stats>();
((Object)RavenPotionEffectRegister.mediumIntellectEffect).name = "SE_MediumIntellect";
((StatusEffect)RavenPotionEffectRegister.mediumIntellectEffect).m_name = "$se_mediumintellect_name";
((StatusEffect)RavenPotionEffectRegister.mediumIntellectEffect).m_tooltip = "$se_mediumintellect_tooltip";
RavenPotionEffectRegister.mediumIntellectEffect.potionCategory = PotionCategory.Eitr;
RavenPotionEffectRegister.mediumIntellectEffect.eitrExtra = 20f;
((StatusEffect)RavenPotionEffectRegister.mediumIntellectEffect).m_ttl = 1200f;
try
{
string text10 = "RavenwoodPotions.Icons.MediumIntellectIcon.png";
Assembly executingAssembly10 = Assembly.GetExecutingAssembly();
using Stream stream10 = executingAssembly10.GetManifestResourceStream(text10);
if (stream10 != null)
{
byte[] array10 = new byte[stream10.Length];
stream10.Read(array10, 0, (int)stream10.Length);
Texture2D val10 = new Texture2D(2, 2);
ImageConversion.LoadImage(val10, array10);
((StatusEffect)RavenPotionEffectRegister.mediumIntellectEffect).m_icon = Sprite.Create(val10, new Rect(0f, 0f, (float)((Texture)val10).width, (float)((Texture)val10).height), new Vector2(0.5f, 0.5f));
}
else
{
Debug.LogWarning((object)("No se encontró el recurso incrustado en el DLL: " + text10));
}
}
catch (Exception ex10)
{
Debug.LogError((object)("Error cargando el icono de Medium Intellect desde el DLL: " + ex10.Message));
}
Item item10 = new Item("ravenwoodpotions", "RP_PotionMediumIntellect");
item10.Name.English("Medium Intellect Potion");
item10.Name.Spanish("Poción de Intelecto Media");
item10.Description.English("Grants a medium boost to your maximum Eitr for 20 minutes.");
item10.Description.Spanish("Otorga +20 de Eitr máximo durante 20 minutos.");
ConfigEntry<Toggle> recipeIsActive10 = config("RP_PotionMediumIntellect", "IsRecipeEnabled", Toggle.On, "Enable recipe for Medium Intellect potion");
item10.RecipeIsActive = (ConfigEntryBase?)(object)recipeIsActive10;
SharedData shared10 = item10.Prefab.GetComponent<ItemDrop>().m_itemData.m_shared;
shared10.m_consumeStatusEffect = (StatusEffect)(object)RavenPotionEffectRegister.mediumIntellectEffect;
shared10.m_itemType = (ItemType)2;
item10.Crafting.Add(CraftingTable.Cauldron, 2);
item10.RequiredItems.Add("Essence_Frost", 5);
item10.RequiredItems.Add("MushroomYellow", 5);
item10.RequiredItems.Add("Blueberries", 5);
item10.RequiredItems.Add("GreydwarfEye", 5);
RavenPotionEffectRegister.majorIntellectEffect = ScriptableObject.CreateInstance<RavenPotionSe_Stats>();
((Object)RavenPotionEffectRegister.majorIntellectEffect).name = "SE_MajorIntellect";
((StatusEffect)RavenPotionEffectRegister.majorIntellectEffect).m_name = "$se_majorintellect_name";
((StatusEffect)RavenPotionEffectRegister.majorIntellectEffect).m_tooltip = "$se_majorintellect_tooltip";
RavenPotionEffectRegister.majorIntellectEffect.potionCategory = PotionCategory.Eitr;
RavenPotionEffectRegister.majorIntellectEffect.eitrExtra = 30f;
((StatusEffect)RavenPotionEffectRegister.majorIntellectEffect).m_ttl = 1800f;
try
{
string text11 = "RavenwoodPotions.Icons.MajorIntellectIcon.png";
Assembly executingAssembly11 = Assembly.GetExecutingAssembly();
using Stream stream11 = executingAssembly11.GetManifestResourceStream(text11);
if (stream11 != null)
{
byte[] array11 = new byte[stream11.Length];
stream11.Read(array11, 0, (int)stream11.Length);
Texture2D val11 = new Texture2D(2, 2);
ImageConversion.LoadImage(val11, array11);
((StatusEffect)RavenPotionEffectRegister.majorIntellectEffect).m_icon = Sprite.Create(val11, new Rect(0f, 0f, (float)((Texture)val11).width, (float)((Texture)val11).height), new Vector2(0.5f, 0.5f));
}
else
{
Debug.LogWarning((object)("No se encontró el recurso incrustado en el DLL: " + text11));
}
}
catch (Exception ex11)
{
Debug.LogError((object)("Error cargando el icono de Major Intellect desde el DLL: " + ex11.Message));
}
Item item11 = new Item("ravenwoodpotions", "RP_PotionMajorIntellect");
item11.Name.English("Major Intellect Potion");
item11.Name.Spanish("Poción de Intelecto Mayor");
item11.Description.English("Grants a major boost to your maximum Eitr for 30 minutes.");
item11.Description.Spanish("Otorga +30 de Eitr máximo durante 30 minutos.");
ConfigEntry<Toggle> recipeIsActive11 = config("RP_PotionMajorIntellect", "IsRecipeEnabled", Toggle.On, "Enable recipe for Major Intellect potion");
item11.RecipeIsActive = (ConfigEntryBase?)(object)recipeIsActive11;
SharedData shared11 = item11.Prefab.GetComponent<ItemDrop>().m_itemData.m_shared;
shared11.m_consumeStatusEffect = (StatusEffect)(object)RavenPotionEffectRegister.majorIntellectEffect;
shared11.m_itemType = (ItemType)2;
item11.Crafting.Add(CraftingTable.Cauldron, 3);
item11.RequiredItems.Add("Essence_Frost", 8);
item11.RequiredItems.Add("MushroomBlue", 8);
item11.RequiredItems.Add("Cloudberry", 8);
item11.RequiredItems.Add("FreezeGland", 8);
RavenPotionEffectRegister.mythicIntellectEffect = ScriptableObject.CreateInstance<RavenPotionSe_Stats>();
((Object)RavenPotionEffectRegister.mythicIntellectEffect).name = "SE_MythicIntellect";
((StatusEffect)RavenPotionEffectRegister.mythicIntellectEffect).m_name = "$se_mythicintellect_name";
((StatusEffect)RavenPotionEffectRegister.mythicIntellectEffect).m_tooltip = "$se_mythicintellect_tooltip";
RavenPotionEffectRegister.mythicIntellectEffect.potionCategory = PotionCategory.Eitr;
RavenPotionEffectRegister.mythicIntellectEffect.eitrExtra = 40f;
((StatusEffect)RavenPotionEffectRegister.mythicIntellectEffect).m_ttl = 3600f;
try
{
string text12 = "RavenwoodPotions.Icons.MythicIntellectIcon.png";
Assembly executingAssembly12 = Assembly.GetExecutingAssembly();
using Stream stream12 = executingAssembly12.GetManifestResourceStream(text12);
if (stream12 != null)
{
byte[] array12 = new byte[stream12.Length];
stream12.Read(array12, 0, (int)stream12.Length);
Texture2D val12 = new Texture2D(2, 2);
ImageConversion.LoadImage(val12, array12);
((StatusEffect)RavenPotionEffectRegister.mythicIntellectEffect).m_icon = Sprite.Create(val12, new Rect(0f, 0f, (float)((Texture)val12).width, (float)((Texture)val12).height), new Vector2(0.5f, 0.5f));
}
else
{
Debug.LogWarning((object)("No se encontró el recurso incrustado en el DLL: " + text12));
}
}
catch (Exception ex12)
{
Debug.LogError((object)("Error cargando el icono de Mythic Intellect desde el DLL: " + ex12.Message));
}
Item item12 = new Item("ravenwoodpotions", "RP_PotionMythicIntellect");
item12.Name.English("Mythic Intellect Potion");
item12.Name.Spanish("Poción de Intelecto Mítica");
item12.Description.English("Grants a mythic boost to your maximum Eitr for 1 hour.");
item12.Description.Spanish("Otorga +40 de Eitr máximo durante 1 hora.");
ConfigEntry<Toggle> recipeIsActive12 = config("RP_PotionMythicIntellect", "IsRecipeEnabled", Toggle.On, "Enable recipe for Mythic Intellect potion");
item12.RecipeIsActive = (ConfigEntryBase?)(object)recipeIsActive12;
SharedData shared12 = item12.Prefab.GetComponent<ItemDrop>().m_itemData.m_shared;
shared12.m_consumeStatusEffect = (StatusEffect)(object)RavenPotionEffectRegister.mythicIntellectEffect;
shared12.m_itemType = (ItemType)2;
item12.Crafting.Add(CraftingTable.Cauldron, 4);
item12.RequiredItems.Add("Essence_Frost", 10);
item12.RequiredItems.Add("MushroomSmokePuff", 10);
item12.RequiredItems.Add("Vineberry", 10);
item12.RequiredItems.Add("MushroomMagecap", 10);
RavenPotionEffectRegister.minorAgilityEffect = ScriptableObject.CreateInstance<RavenPotionSe_Stats>();
((Object)RavenPotionEffectRegister.minorAgilityEffect).name = "SE_MinorAgility";
((StatusEffect)RavenPotionEffectRegister.minorAgilityEffect).m_name = "$se_minoragility_name";
((StatusEffect)RavenPotionEffectRegister.minorAgilityEffect).m_tooltip = "$se_minoragility_tooltip";
RavenPotionEffectRegister.minorAgilityEffect.potionCategory = PotionCategory.Stamina;
RavenPotionEffectRegister.minorAgilityEffect.staminaExtra = 10f;
((StatusEffect)RavenPotionEffectRegister.minorAgilityEffect).m_ttl = 600f;
try
{
string text13 = "RavenwoodPotions.Icons.MinorAgilityIcon.png";
Assembly executingAssembly13 = Assembly.GetExecutingAssembly();
using Stream stream13 = executingAssembly13.GetManifestResourceStream(text13);
if (stream13 != null)
{
byte[] array13 = new byte[stream13.Length];
stream13.Read(array13, 0, (int)stream13.Length);
Texture2D val13 = new Texture2D(2, 2);
ImageConversion.LoadImage(val13, array13);
((StatusEffect)RavenPotionEffectRegister.minorAgilityEffect).m_icon = Sprite.Create(val13, new Rect(0f, 0f, (float)((Texture)val13).width, (float)((Texture)val13).height), new Vector2(0.5f, 0.5f));
}
else
{
Debug.LogWarning((object)("No se encontró el recurso incrustado en el DLL: " + text13));
}
}
catch (Exception ex13)
{
Debug.LogError((object)("Error cargando el icono de Minor Agility desde el DLL: " + ex13.Message));
}
Item item13 = new Item("ravenwoodpotions", "RP_PotionMinorAgility");
item13.Name.English("Minor Agility Potion");
item13.Name.Spanish("Poción de Agilidad Menor");
item13.Description.English("Grants a minor boost to your maximum Stamina for 10 minutes.");
item13.Description.Spanish("Otorga +10 de Aguante máximo durante 10 minutos.");
ConfigEntry<Toggle> recipeIsActive13 = config("RP_PotionMinorAgility", "IsRecipeEnabled", Toggle.On, "Enable recipe for Minor Agility potion");
item13.RecipeIsActive = (ConfigEntryBase?)(object)recipeIsActive13;
SharedData shared13 = item13.Prefab.GetComponent<ItemDrop>().m_itemData.m_shared;
shared13.m_consumeStatusEffect = (StatusEffect)(object)RavenPotionEffectRegister.minorAgilityEffect;
shared13.m_itemType = (ItemType)2;
item13.Crafting.Add(CraftingTable.Cauldron, 1);
item13.RequiredItems.Add("Essence_Lightning", 3);
item13.RequiredItems.Add("Mushroom", 3);
item13.RequiredItems.Add("Raspberry", 3);
item13.RequiredItems.Add("Honey", 3);
RavenPotionEffectRegister.mediumAgilityEffect = ScriptableObject.CreateInstance<RavenPotionSe_Stats>();
((Object)RavenPotionEffectRegister.mediumAgilityEffect).name = "SE_MediumAgility";
((StatusEffect)RavenPotionEffectRegister.mediumAgilityEffect).m_name = "$se_mediumagility_name";
((StatusEffect)RavenPotionEffectRegister.mediumAgilityEffect).m_tooltip = "$se_mediumagility_tooltip";
RavenPotionEffectRegister.mediumAgilityEffect.potionCategory = PotionCategory.Stamina;
RavenPotionEffectRegister.mediumAgilityEffect.staminaExtra = 20f;
((StatusEffect)RavenPotionEffectRegister.mediumAgilityEffect).m_ttl = 1200f;
try
{
string text14 = "RavenwoodPotions.Icons.MediumAgilityIcon.png";
Assembly executingAssembly14 = Assembly.GetExecutingAssembly();
using Stream stream14 = executingAssembly14.GetManifestResourceStream(text14);
if (stream14 != null)
{
byte[] array14 = new byte[stream14.Length];
stream14.Read(array14, 0, (int)stream14.Length);
Texture2D val14 = new Texture2D(2, 2);
ImageConversion.LoadImage(val14, array14);
((StatusEffect)RavenPotionEffectRegister.mediumAgilityEffect).m_icon = Sprite.Create(val14, new Rect(0f, 0f, (float)((Texture)val14).width, (float)((Texture)val14).height), new Vector2(0.5f, 0.5f));
}
else
{
Debug.LogWarning((object)("No se encontró el recurso incrustado en el DLL: " + text14));
}
}
catch (Exception ex14)
{
Debug.LogError((object)("Error cargando el icono de Medium Agility desde el DLL: " + ex14.Message));
}
Item item14 = new Item("ravenwoodpotions", "RP_PotionMediumAgility");
item14.Name.English("Medium Agility Potion");
item14.Name.Spanish("Poción de Agilidad Media");
item14.Description.English("Grants a medium boost to your maximum Stamina for 20 minutes.");
item14.Description.Spanish("Otorga +20 de Aguante máximo durante 20 minutos.");
ConfigEntry<Toggle> recipeIsActive14 = config("RP_PotionMediumAgility", "IsRecipeEnabled", Toggle.On, "Enable recipe for Medium Agility potion");
item14.RecipeIsActive = (ConfigEntryBase?)(object)recipeIsActive14;
SharedData shared14 = item14.Prefab.GetComponent<ItemDrop>().m_itemData.m_shared;
shared14.m_consumeStatusEffect = (StatusEffect)(object)RavenPotionEffectRegister.mediumAgilityEffect;
shared14.m_itemType = (ItemType)2;
item14.Crafting.Add(CraftingTable.Cauldron, 2);
item14.RequiredItems.Add("Essence_Lightning", 5);
item14.RequiredItems.Add("MushroomYellow", 5);
item14.RequiredItems.Add("Blueberries", 5);
item14.RequiredItems.Add("Carrot", 5);
RavenPotionEffectRegister.majorAgilityEffect = ScriptableObject.CreateInstance<RavenPotionSe_Stats>();
((Object)RavenPotionEffectRegister.majorAgilityEffect).name = "SE_MajorAgility";
((StatusEffect)RavenPotionEffectRegister.majorAgilityEffect).m_name = "$se_majoragility_name";
((StatusEffect)RavenPotionEffectRegister.majorAgilityEffect).m_tooltip = "$se_majoragility_tooltip";
RavenPotionEffectRegister.majorAgilityEffect.potionCategory = PotionCategory.Stamina;
RavenPotionEffectRegister.majorAgilityEffect.staminaExtra = 30f;
((StatusEffect)RavenPotionEffectRegister.majorAgilityEffect).m_ttl = 1800f;
try
{
string text15 = "RavenwoodPotions.Icons.MajorAgilityIcon.png";
Assembly executingAssembly15 = Assembly.GetExecutingAssembly();
using Stream stream15 = executingAssembly15.GetManifestResourceStream(text15);
if (stream15 != null)
{
byte[] array15 = new byte[stream15.Length];
stream15.Read(array15, 0, (int)stream15.Length);
Texture2D val15 = new Texture2D(2, 2);
ImageConversion.LoadImage(val15, array15);
((StatusEffect)RavenPotionEffectRegister.majorAgilityEffect).m_icon = Sprite.Create(val15, new Rect(0f, 0f, (float)((Texture)val15).width, (float)((Texture)val15).height), new Vector2(0.5f, 0.5f));
}
else
{
Debug.LogWarning((object)("No se encontró el recurso incrustado en el DLL: " + text15));
}
}
catch (Exception ex15)
{
Debug.LogError((object)("Error cargando el icono de Major Agility desde el DLL: " + ex15.Message));
}
Item item15 = new Item("ravenwoodpotions", "RP_PotionMajorAgility");
item15.Name.English("Major Agility Potion");
item15.Name.Spanish("Poción de Agilidad Mayor");
item15.Description.English("Grants a major boost to your maximum Stamina for 30 minutes.");
item15.Description.Spanish("Otorga +30 de Aguante máximo durante 30 minutos.");
ConfigEntry<Toggle> recipeIsActive15 = config("RP_PotionMajorAgility", "IsRecipeEnabled", Toggle.On, "Enable recipe for Major Agility potion");
item15.RecipeIsActive = (ConfigEntryBase?)(object)recipeIsActive15;
SharedData shared15 = item15.Prefab.GetComponent<ItemDrop>().m_itemData.m_shared;
shared15.m_consumeStatusEffect = (StatusEffect)(object)RavenPotionEffectRegister.majorAgilityEffect;
shared15.m_itemType = (ItemType)2;
item15.Crafting.Add(CraftingTable.Cauldron, 3);
item15.RequiredItems.Add("Essence_Lightning", 8);
item15.RequiredItems.Add("MushroomBlue", 8);
item15.RequiredItems.Add("Cloudberry", 8);
item15.RequiredItems.Add("Onion", 8);
RavenPotionEffectRegister.mythicAgilityEffect = ScriptableObject.CreateInstance<RavenPotionSe_Stats>();
((Object)RavenPotionEffectRegister.mythicAgilityEffect).name = "SE_MythicAgility";
((StatusEffect)RavenPotionEffectRegister.mythicAgilityEffect).m_name = "$se_mythicagility_name";
((StatusEffect)RavenPotionEffectRegister.mythicAgilityEffect).m_tooltip = "$se_mythicagility_tooltip";
RavenPotionEffectRegister.mythicAgilityEffect.potionCategory = PotionCategory.Stamina;
RavenPotionEffectRegister.mythicAgilityEffect.staminaExtra = 40f;
((StatusEffect)RavenPotionEffectRegister.mythicAgilityEffect).m_ttl = 3600f;
try
{
string text16 = "RavenwoodPotions.Icons.MythicAgilityIcon.png";
Assembly executingAssembly16 = Assembly.GetExecutingAssembly();
using Stream stream16 = executingAssembly16.GetManifestResourceStream(text16);
if (stream16 != null)
{
byte[] array16 = new byte[stream16.Length];
stream16.Read(array16, 0, (int)stream16.Length);
Texture2D val16 = new Texture2D(2, 2);
ImageConversion.LoadImage(val16, array16);
((StatusEffect)RavenPotionEffectRegister.mythicAgilityEffect).m_icon = Sprite.Create(val16, new Rect(0f, 0f, (float)((Texture)val16).width, (float)((Texture)val16).height), new Vector2(0.5f, 0.5f));
}
else
{
Debug.LogWarning((object)("No se encontró el recurso incrustado en el DLL: " + text16));
}
}
catch (Exception ex16)
{
Debug.LogError((object)("Error cargando el icono de Mythic Agility desde el DLL: " + ex16.Message));
}
Item item16 = new Item("ravenwoodpotions", "RP_PotionMythicAgility");
item16.Name.English("Mythic Agility Potion");
item16.Name.Spanish("Poción de Agilidad Mítica");
item16.Description.English("Grants a mythic boost to your maximum Stamina for 1 hour.");
item16.Description.Spanish("Otorga +40 de Aguante máximo durante 1 hora.");
ConfigEntry<Toggle> recipeIsActive16 = config("RP_PotionMythicAgility", "IsRecipeEnabled", Toggle.On, "Enable recipe for Mythic Agility potion");
item16.RecipeIsActive = (ConfigEntryBase?)(object)recipeIsActive16;
SharedData shared16 = item16.Prefab.GetComponent<ItemDrop>().m_itemData.m_shared;
shared16.m_consumeStatusEffect = (StatusEffect)(object)RavenPotionEffectRegister.mythicAgilityEffect;
shared16.m_itemType = (ItemType)2;
item16.Crafting.Add(CraftingTable.Cauldron, 4);
item16.RequiredItems.Add("Essence_Lightning", 10);
item16.RequiredItems.Add("MushroomSmokePuff", 10);
item16.RequiredItems.Add("Vineberry", 10);
item16.RequiredItems.Add("RoyalJelly", 10);
Assembly executingAssembly17 = Assembly.GetExecutingAssembly();
_harmony.PatchAll(executingAssembly17);
SetupWatcher();
}
private void OnDestroy()
{
((BaseUnityPlugin)this).Config.Save();
}
private void SetupWatcher()
{
FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(Paths.ConfigPath, ConfigFileName);
fileSystemWatcher.Changed += ReadConfigValues;
fileSystemWatcher.Created += ReadConfigValues;
fileSystemWatcher.Renamed += ReadConfigValues;
fileSystemWatcher.IncludeSubdirectories = true;
fileSystemWatcher.SynchronizingObject = ThreadingHelper.SynchronizingObject;
fileSystemWatcher.EnableRaisingEvents = true;
}
private void ReadConfigValues(object sender, FileSystemEventArgs e)
{
if (!File.Exists(ConfigFileFullPath))
{
return;
}
try
{
RavenwoodPotionsLogger.LogDebug((object)"ReadConfigValues called");
((BaseUnityPlugin)this).Config.Reload();
}
catch
{
RavenwoodPotionsLogger.LogError((object)("There was an issue loading your " + ConfigFileName));
RavenwoodPotionsLogger.LogError((object)"Please check your config entries for spelling and format!");
}
}
private ConfigEntry<T> config<T>(string group, string name, T value, ConfigDescription description, bool synchronizedSetting = true)
{
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Expected O, but got Unknown
ConfigDescription val = new ConfigDescription(description.Description + (synchronizedSetting ? " [Synced with Server]" : " [Not Synced with Server]"), description.AcceptableValues, description.Tags);
ConfigEntry<T> val2 = ((BaseUnityPlugin)this).Config.Bind<T>(group, name, value, val);
SyncedConfigEntry<T> syncedConfigEntry = ConfigSync.AddConfigEntry<T>(val2);
syncedConfigEntry.SynchronizedConfig = synchronizedSetting;
return val2;
}
private ConfigEntry<T> config<T>(string group, string name, T value, string description, bool synchronizedSetting = true)
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Expected O, but got Unknown
return config(group, name, value, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>()), synchronizedSetting);
}
static RavenWoodPotionsPlugin()
{
string configPath = Paths.ConfigPath;
char directorySeparatorChar = Path.DirectorySeparatorChar;
ConfigFileFullPath = configPath + directorySeparatorChar + ConfigFileName;
ConnectionError = "";
RavenwoodPotionsLogger = Logger.CreateLogSource("RavenwoodPotions");
ConfigSync = new ConfigSync("JamesJonesTV.RavenwoodPotions")
{
DisplayName = "RavenwoodPotions",
CurrentVersion = "1.0.1",
MinimumRequiredVersion = "1.0.1"
};
_serverConfigLocked = null;
_recipeIsActiveConfig = null;
}
}
public static class KeyboardExtensions
{
[SpecialName]
public sealed class <G>$8D1D3E80A18AA9715780B6CB7003B2F1
{
[SpecialName]
public static class <M>$895AB635D4D087636CF1C26BA650BA11
{
}
[ExtensionMarker("<M>$895AB635D4D087636CF1C26BA650BA11")]
public bool IsKeyDown()
{
throw new NotSupportedException();
}
[ExtensionMarker("<M>$895AB635D4D087636CF1C26BA650BA11")]
public bool IsKeyHeld()
{
throw new NotSupportedException();
}
}
public static bool IsKeyDown(this KeyboardShortcut shortcut)
{
//IL_0003: 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)
return (int)((KeyboardShortcut)(ref shortcut)).MainKey != 0 && Input.GetKeyDown(((KeyboardShortcut)(ref shortcut)).MainKey) && ((KeyboardShortcut)(ref shortcut)).Modifiers.All((Func<KeyCode, bool>)Input.GetKey);
}
public static bool IsKeyHeld(this KeyboardShortcut shortcut)
{
//IL_0003: 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)
return (int)((KeyboardShortcut)(ref shortcut)).MainKey != 0 && Input.GetKey(((KeyboardShortcut)(ref shortcut)).MainKey) && ((KeyboardShortcut)(ref shortcut)).Modifiers.All((Func<KeyCode, bool>)Input.GetKey);
}
}
[HarmonyPatch(typeof(ObjectDB), "Awake")]
internal static class ObjectDBAwakePatch
{
private static void Postfix(ObjectDB __instance)
{
RavenPotionEffectRegister.RegisterCustomEffects(__instance);
}
}
[HarmonyPatch(typeof(ObjectDB), "CopyOtherDB")]
internal static class ObjectDBCopyOtherDBPatch
{
private static void Postfix(ObjectDB __instance)
{
RavenPotionEffectRegister.RegisterCustomEffects(__instance);
}
}
internal static class RavenPotionEffectRegister
{
public static RavenPotionSe_Stats minorDefenseEffect;
public static RavenPotionSe_Stats mediumDefenseEffect;
public static RavenPotionSe_Stats majorDefenseEffect;
public static RavenPotionSe_Stats mythicDefenseEffect;
public static RavenPotionSe_Stats minorFortitudeEffect;
public static RavenPotionSe_Stats mediumFortitudeEffect;
public static RavenPotionSe_Stats majorFortitudeEffect;
public static RavenPotionSe_Stats mythicFortitudeEffect;
public static RavenPotionSe_Stats minorIntellectEffect;
public static RavenPotionSe_Stats mediumIntellectEffect;
public static RavenPotionSe_Stats majorIntellectEffect;
public static RavenPotionSe_Stats mythicIntellectEffect;
public static RavenPotionSe_Stats minorAgilityEffect;
public static RavenPotionSe_Stats mediumAgilityEffect;
public static RavenPotionSe_Stats majorAgilityEffect;
public static RavenPotionSe_Stats mythicAgilityEffect;
public static void RegisterCustomEffects(ObjectDB db)
{
ObjectDB db2 = db;
if ((Object)(object)db2 == (Object)null || db2.m_StatusEffects == null)
{
return;
}
StatusEffect val = db2.m_StatusEffects.Find((StatusEffect se) => ((Object)se).name == "Potion_frostresist");
StatusEffect val2 = db2.m_StatusEffects.Find((StatusEffect se) => ((Object)se).name == "Potion_poisonresist");
StatusEffect val3 = db2.m_StatusEffects.Find((StatusEffect se) => ((Object)se).name == "Potion_health_lingering");
StatusEffect val4 = db2.m_StatusEffects.Find((StatusEffect se) => ((Object)se).name == "Potion_stamina_medium");
if ((Object)(object)val != (Object)null)
{
if ((Object)(object)minorDefenseEffect != (Object)null)
{
((StatusEffect)minorDefenseEffect).m_startEffects = val.m_startEffects;
}
if ((Object)(object)mediumDefenseEffect != (Object)null)
{
((StatusEffect)mediumDefenseEffect).m_startEffects = val.m_startEffects;
}
if ((Object)(object)majorDefenseEffect != (Object)null)
{
((StatusEffect)majorDefenseEffect).m_startEffects = val.m_startEffects;
}
if ((Object)(object)mythicDefenseEffect != (Object)null)
{
((StatusEffect)mythicDefenseEffect).m_startEffects = val.m_startEffects;
}
}
if ((Object)(object)val2 != (Object)null)
{
if ((Object)(object)minorFortitudeEffect != (Object)null)
{
((StatusEffect)minorFortitudeEffect).m_startEffects = val2.m_startEffects;
}
if ((Object)(object)mediumFortitudeEffect != (Object)null)
{
((StatusEffect)mediumFortitudeEffect).m_startEffects = val2.m_startEffects;
}
}
if ((Object)(object)val3 != (Object)null)
{
if ((Object)(object)minorIntellectEffect != (Object)null)
{
((StatusEffect)minorIntellectEffect).m_startEffects = val3.m_startEffects;
}
if ((Object)(object)mediumIntellectEffect != (Object)null)
{
((StatusEffect)mediumIntellectEffect).m_startEffects = val3.m_startEffects;
}
if ((Object)(object)majorIntellectEffect != (Object)null)
{
((StatusEffect)majorIntellectEffect).m_startEffects = val3.m_startEffects;
}
if ((Object)(object)mythicIntellectEffect != (Object)null)
{
((StatusEffect)mythicIntellectEffect).m_startEffects = val3.m_startEffects;
}
}
if ((Object)(object)val4 != (Object)null)
{
if ((Object)(object)minorAgilityEffect != (Object)null)
{
((StatusEffect)minorAgilityEffect).m_startEffects = val4.m_startEffects;
}
if ((Object)(object)mediumAgilityEffect != (Object)null)
{
((StatusEffect)mediumAgilityEffect).m_startEffects = val4.m_startEffects;
}
if ((Object)(object)majorAgilityEffect != (Object)null)
{
((StatusEffect)majorAgilityEffect).m_startEffects = val4.m_startEffects;
}
if ((Object)(object)mythicAgilityEffect != (Object)null)
{
((StatusEffect)mythicAgilityEffect).m_startEffects = val4.m_startEffects;
}
}
RegistrarEfectoSeguro((StatusEffect)(object)minorDefenseEffect);
RegistrarEfectoSeguro((StatusEffect)(object)mediumDefenseEffect);
RegistrarEfectoSeguro((StatusEffect)(object)majorDefenseEffect);
RegistrarEfectoSeguro((StatusEffect)(object)mythicDefenseEffect);
RegistrarEfectoSeguro((StatusEffect)(object)minorFortitudeEffect);
RegistrarEfectoSeguro((StatusEffect)(object)mediumFortitudeEffect);
RegistrarEfectoSeguro((StatusEffect)(object)majorFortitudeEffect);
RegistrarEfectoSeguro((StatusEffect)(object)mythicFortitudeEffect);
RegistrarEfectoSeguro((StatusEffect)(object)minorIntellectEffect);
RegistrarEfectoSeguro((StatusEffect)(object)mediumIntellectEffect);
RegistrarEfectoSeguro((StatusEffect)(object)majorIntellectEffect);
RegistrarEfectoSeguro((StatusEffect)(object)mythicIntellectEffect);
RegistrarEfectoSeguro((StatusEffect)(object)minorAgilityEffect);
RegistrarEfectoSeguro((StatusEffect)(object)mediumAgilityEffect);
RegistrarEfectoSeguro((StatusEffect)(object)majorAgilityEffect);
RegistrarEfectoSeguro((StatusEffect)(object)mythicAgilityEffect);
void RegistrarEfectoSeguro(StatusEffect efecto)
{
if (!((Object)(object)efecto == (Object)null) && !string.IsNullOrEmpty(((Object)efecto).name) && !db2.m_StatusEffects.Contains(efecto))
{
db2.m_StatusEffects.Add(efecto);
}
}
}
}
public enum PotionCategory
{
None,
Heal,
Armor,
Stamina,
Eitr
}
public class RavenPotionSe_Stats : SE_Stats
{
[Header("Configuración de la Poción")]
public PotionCategory potionCategory = PotionCategory.None;
[Header("Stats Otorgados (Añade a los base)")]
public float healthExtra = 0f;
public float staminaExtra = 0f;
public float eitrExtra = 0f;
public float armorExtra = 0f;
public override string GetTooltipString()
{
string text = ((SE_Stats)this).GetTooltipString() ?? string.Empty;
return text.Replace("\n\n", "\n").TrimEnd('\n', '\r');
}
}
[HarmonyPatch(typeof(Player), "GetTotalFoodValue")]
internal static class PlayerGetTotalFoodValuePatch
{
private static void Postfix(Player __instance, ref float hp, ref float stamina, ref float eitr)
{
if ((Object)(object)__instance == (Object)null)
{
return;
}
foreach (StatusEffect statusEffect in ((Character)__instance).GetSEMan().GetStatusEffects())
{
if (statusEffect is RavenPotionSe_Stats ravenPotionSe_Stats)
{
if (ravenPotionSe_Stats.healthExtra > 0f)
{
hp += ravenPotionSe_Stats.healthExtra;
}
if (ravenPotionSe_Stats.staminaExtra > 0f)
{
stamina += ravenPotionSe_Stats.staminaExtra;
}
if (ravenPotionSe_Stats.eitrExtra > 0f)
{
eitr += ravenPotionSe_Stats.eitrExtra;
}
}
}
}
}
[HarmonyPatch(typeof(Player), "GetBodyArmor")]
internal static class PlayerGetBodyArmorPatch
{
private static void Postfix(Player __instance, ref float __result)
{
if ((Object)(object)__instance == (Object)null)
{
return;
}
foreach (StatusEffect statusEffect in ((Character)__instance).GetSEMan().GetStatusEffects())
{
if (statusEffect is RavenPotionSe_Stats ravenPotionSe_Stats && ravenPotionSe_Stats.armorExtra > 0f)
{
__result += ravenPotionSe_Stats.armorExtra;
}
}
}
}
[HarmonyPatch(typeof(Player), "ConsumeItem")]
internal static class PlayerConsumeItemPatch
{
private static bool Prefix(Player __instance, Inventory inventory, ItemData item, ref bool __result)
{
if (item != null && item.m_shared != null && (Object)(object)item.m_shared.m_consumeStatusEffect != (Object)null && item.m_shared.m_consumeStatusEffect is RavenPotionSe_Stats ravenPotionSe_Stats)
{
foreach (StatusEffect statusEffect in ((Character)__instance).GetSEMan().GetStatusEffects())
{
if (statusEffect is RavenPotionSe_Stats ravenPotionSe_Stats2 && ravenPotionSe_Stats2.potionCategory != 0 && ravenPotionSe_Stats2.potionCategory == ravenPotionSe_Stats.potionCategory)
{
string arg = Localization.instance.Localize("$msg_potion_active_error");
((Character)__instance).Message((MessageType)2, $"{arg} ({ravenPotionSe_Stats.potionCategory})", 0, (Sprite)null);
__result = false;
return false;
}
}
}
return true;
}
}
[HarmonyPatch(typeof(ZNet), "OnNewConnection")]
public static class RegisterAndCheckVersion
{
private static void Prefix(ZNetPeer peer, ref ZNet __instance)
{
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Expected O, but got Unknown
RavenWoodPotionsPlugin.RavenwoodPotionsLogger.LogDebug((object)"Registering version RPC handler");
peer.m_rpc.Register<ZPackage>("RavenwoodPotions_VersionCheck", (Action<ZRpc, ZPackage>)RpcHandlers.RPC_RavenWoodPotions_Version);
RavenWoodPotionsPlugin.RavenwoodPotionsLogger.LogInfo((object)"Invoking version check");
ZPackage val = new ZPackage();
val.Write("1.0.1");
peer.m_rpc.Invoke("RavenwoodPotions_VersionCheck", new object[1] { val });
}
}
[HarmonyPatch(typeof(ZNet), "RPC_PeerInfo")]
public static class VerifyClient
{
private static bool Prefix(ZRpc rpc, ZPackage pkg, ref ZNet __instance)
{
if (!__instance.IsServer() || RpcHandlers.ValidatedPeers.Contains(rpc))
{
return true;
}
RavenWoodPotionsPlugin.RavenwoodPotionsLogger.LogWarning((object)("Peer (" + rpc.m_socket.GetHostName() + ") never sent version or couldn't due to previous disconnect, disconnecting"));
rpc.Invoke("Error", new object[1] { 3 });
return false;
}
private static void Postfix(ZNet __instance)
{
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Expected O, but got Unknown
ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.instance.GetServerPeerID(), "RavenwoodPotionsRequestAdminSync", new object[1] { (object)new ZPackage() });
}
}
[HarmonyPatch(typeof(FejdStartup), "ShowConnectError")]
public class ShowConnectionError
{
private static void Postfix(FejdStartup __instance)
{
if (__instance.m_connectionFailedPanel.activeSelf)
{
__instance.m_connectionFailedError.fontSizeMax = 25f;
__instance.m_connectionFailedError.fontSizeMin = 15f;
TMP_Text connectionFailedError = __instance.m_connectionFailedError;
connectionFailedError.text = connectionFailedError.text + "\n" + RavenWoodPotionsPlugin.ConnectionError;
}
}
}
[HarmonyPatch(typeof(ZNet), "Disconnect")]
public static class RemoveDisconnectedPeerFromVerified
{
private static void Prefix(ZNetPeer peer, ref ZNet __instance)
{
if (__instance.IsServer())
{
RavenWoodPotionsPlugin.RavenwoodPotionsLogger.LogInfo((object)("Peer (" + peer.m_rpc.m_socket.GetHostName() + ") disconnected, removing from validated list"));
RpcHandlers.ValidatedPeers.Remove(peer.m_rpc);
}
}
}
public static class RpcHandlers
{
public static readonly List<ZRpc> ValidatedPeers = new List<ZRpc>();
public static void RPC_RavenWoodPotions_Version(ZRpc rpc, ZPackage pkg)
{
string text = pkg.ReadString();
RavenWoodPotionsPlugin.RavenwoodPotionsLogger.LogInfo((object)("Version check, local: 1.0.1, remote: " + text));
if (text != "1.0.1")
{
RavenWoodPotionsPlugin.ConnectionError = "RavenwoodPotions Installed: 1.0.1\n Needed: " + text;
if (ZNet.instance.IsServer())
{
RavenWoodPotionsPlugin.RavenwoodPotionsLogger.LogWarning((object)("Peer (" + rpc.m_socket.GetHostName() + ") has incompatible version, disconnecting..."));
rpc.Invoke("Error", new object[1] { 3 });
}
}
else if (!ZNet.instance.IsServer())
{
RavenWoodPotionsPlugin.RavenwoodPotionsLogger.LogInfo((object)"Received same version from server!");
}
else
{
RavenWoodPotionsPlugin.RavenwoodPotionsLogger.LogInfo((object)("Adding peer (" + rpc.m_socket.GetHostName() + ") to validated list"));
ValidatedPeers.Add(rpc);
}
}
public static string ComputeHashForMod()
{
using SHA256 sHA = SHA256.Create();
byte[] array = sHA.ComputeHash(File.ReadAllBytes(Assembly.GetExecutingAssembly().Location));
StringBuilder stringBuilder = new StringBuilder();
byte[] array2 = array;
foreach (byte b in array2)
{
stringBuilder.Append(b.ToString("X2"));
}
return stringBuilder.ToString();
}
}
}
namespace LocalizationManager
{
[PublicAPI]
public class Localizer
{
private static readonly Dictionary<string, Dictionary<string, Func<string>>> PlaceholderProcessors;
private static readonly Dictionary<string, Dictionary<string, string>> loadedTexts;
private static readonly ConditionalWeakTable<Localization, string> localizationLanguage;
private static readonly List<WeakReference<Localization>> localizationObjects;
private static BaseUnityPlugin? _plugin;
private static readonly List<string> fileExtensions;
private static BaseUnityPlugin plugin
{
get
{
//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
//IL_00b2: Expected O, but got Unknown
if (_plugin == null)
{
IEnumerable<TypeInfo> source;
try
{
source = Assembly.GetExecutingAssembly().DefinedTypes.ToList();
}
catch (ReflectionTypeLoadException ex)
{
source = from t in ex.Types
where t != null
select t.GetTypeInfo();
}
_plugin = (BaseUnityPlugin)Chainloader.ManagerObject.GetComponent((Type)source.First((TypeInfo t) => t.IsClass && typeof(BaseUnityPlugin).IsAssignableFrom(t)));
}
return _plugin;
}
}
public static event Action? OnLocalizationComplete;
private static void UpdatePlaceholderText(Localization localization, string key)
{
localizationLanguage.TryGetValue(localization, out string value);
string text = loadedTexts[value][key];
if (PlaceholderProcessors.TryGetValue(key, out Dictionary<string, Func<string>> value2))
{
text = value2.Aggregate(text, (string current, KeyValuePair<string, Func<string>> kv) => current.Replace("{" + kv.Key + "}", kv.Value()));
}
localization.AddWord(key, text);
}
public static void AddPlaceholder<T>(string key, string placeholder, ConfigEntry<T> config, Func<T, string>? convertConfigValue = null) where T : notnull
{
string key2 = key;
string placeholder2 = placeholder;
Func<T, string> convertConfigValue2 = convertConfigValue;
ConfigEntry<T> config2 = config;
if (convertConfigValue2 == null)
{
convertConfigValue2 = (T val) => val.ToString();
}
if (!PlaceholderProcessors.ContainsKey(key2))
{
PlaceholderProcessors[key2] = new Dictionary<string, Func<string>>();
}
config2.SettingChanged += delegate
{
UpdatePlaceholder();
};
if (loadedTexts.ContainsKey(Localization.instance.GetSelectedLanguage()))
{
UpdatePlaceholder();
}
void UpdatePlaceholder()
{
PlaceholderProcessors[key2][placeholder2] = () => convertConfigValue2(config2.Value);
UpdatePlaceholderText(Localization.instance, key2);
}
}
public static void AddText(string key, string text)
{
List<WeakReference<Localization>> list = new List<WeakReference<Localization>>();
foreach (WeakReference<Localization> localizationObject in localizationObjects)
{
if (localizationObject.TryGetTarget(out var target))
{
Dictionary<string, string> dictionary = loadedTexts[localizationLanguage.GetOrCreateValue(target)];
if (!target.m_translations.ContainsKey(key))
{
dictionary[key] = text;
target.AddWord(key, text);
}
}
else
{
list.Add(localizationObject);
}
}
foreach (WeakReference<Localization> item in list)
{
localizationObjects.Remove(item);
}
}
public static void Load()
{
_ = plugin;
}
public static void LoadLocalizationLater(Localization __instance)
{
LoadLocalization(Localization.instance, __instance.GetSelectedLanguage());
}
public static void SafeCallLocalizeComplete()
{
Localizer.OnLocalizationComplete?.Invoke();
}
private static void LoadLocalization(Localization __instance, string language)
{
if (!localizationLanguage.Remove(__instance))
{
localizationObjects.Add(new WeakReference<Localization>(__instance));
}
localizationLanguage.Add(__instance, language);
Dictionary<string, string> dictionary = new Dictionary<string, string>();
foreach (string item in from f in Directory.GetFiles(Path.GetDirectoryName(Paths.PluginPath), plugin.Info.Metadata.Name + ".*", SearchOption.AllDirectories)
where fileExtensions.IndexOf(Path.GetExtension(f)) >= 0
select f)
{
string[] array = Path.GetFileNameWithoutExtension(item).Split(new char[1] { '.' });
if (array.Length >= 2)
{
string text = array[1];
if (dictionary.ContainsKey(text))
{
Debug.LogWarning((object)("Duplicate key " + text + " found for " + plugin.Info.Metadata.Name + ". The duplicate file found at " + item + " will be skipped."));
}
else
{
dictionary[text] = item;
}
}
}
byte[] array2 = LoadTranslationFromAssembly("English");
if (array2 == null)
{
throw new Exception("Found no English localizations in mod " + plugin.Info.Metadata.Name + ". Expected an embedded resource translations/English.json or translations/English.yml.");
}
Dictionary<string, string> dictionary2 = new DeserializerBuilder().IgnoreFields().Build().Deserialize<Dictionary<string, string>>(Encoding.UTF8.GetString(array2));
if (dictionary2 == null)
{
throw new Exception("Localization for mod " + plugin.Info.Metadata.Name + " failed: Localization file was empty.");
}
string text2 = null;
if (language != "English")
{
if (dictionary.TryGetValue(language, out var value))
{
text2 = File.ReadAllText(value);
}
else
{
byte[] array3 = LoadTranslationFromAssembly(language);
if (array3 != null)
{
text2 = Encoding.UTF8.GetString(array3);
}
}
}
if (text2 == null && dictionary.TryGetValue("English", out var value2))
{
text2 = File.ReadAllText(value2);
}
if (text2 != null)
{
foreach (KeyValuePair<string, string> item2 in new DeserializerBuilder().IgnoreFields().Build().Deserialize<Dictionary<string, string>>(text2) ?? new Dictionary<string, string>())
{
dictionary2[item2.Key] = item2.Value;
}
}
loadedTexts[language] = dictionary2;
foreach (KeyValuePair<string, string> item3 in dictionary2)
{
UpdatePlaceholderText(__instance, item3.Key);
}
}
static Localizer()
{
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Expected O, but got Unknown
//IL_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Expected O, but got Unknown
//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
//IL_00ce: Expected O, but got Unknown
//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
//IL_010a: Expected O, but got Unknown
PlaceholderProcessors = new Dictionary<string, Dictionary<string, Func<string>>>();
loadedTexts = new Dictionary<string, Dictionary<string, string>>();
localizationLanguage = new ConditionalWeakTable<Localization, string>();
localizationObjects = new List<WeakReference<Localization>>();
fileExtensions = new List<string>(2) { ".json", ".yml" };
Harmony val = new Harmony("org.bepinex.helpers.LocalizationManager");
val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Localization), "SetupLanguage", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Localizer), "LoadLocalization", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(FejdStartup), "SetupGui", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Localizer), "LoadLocalizationLater", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(FejdStartup), "Start", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Localizer), "SafeCallLocalizeComplete", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
}
private static byte[]? LoadTranslationFromAssembly(string language)
{
foreach (string fileExtension in fileExtensions)
{
byte[] array = ReadEmbeddedFileBytes("translations." + language + fileExtension);
if (array != null)
{
return array;
}
}
return null;
}
public static byte[]? ReadEmbeddedFileBytes(string resourceFileName, Assembly? containingAssembly = null)
{
string resourceFileName2 = resourceFileName;
using MemoryStream memoryStream = new MemoryStream();
if ((object)containingAssembly == null)
{
containingAssembly = Assembly.GetCallingAssembly();
}
string text = containingAssembly.GetManifestResourceNames().FirstOrDefault((string str) => str.EndsWith(resourceFileName2, StringComparison.Ordinal));
if (text != null)
{
containingAssembly.GetManifestResourceStream(text)?.CopyTo(memoryStream);
}
return (memoryStream.Length == 0L) ? null : memoryStream.ToArray();
}
}
public static class LocalizationManagerVersion
{
public const string Version = "1.4.1";
}
}
namespace ItemManager
{
[PublicAPI]
public enum CraftingTable
{
Disabled,
Inventory,
[InternalName("piece_workbench")]
Workbench,
[InternalName("piece_cauldron")]
Cauldron,
[InternalName("piece_MeadCauldron")]
MeadCauldron,
[InternalName("forge")]
Forge,
[InternalName("piece_artisanstation")]
ArtisanTable,
[InternalName("piece_stonecutter")]
StoneCutter,
[InternalName("piece_magetable")]
MageTable,
[InternalName("piece_preptable")]
PrepTable,
[InternalName("blackforge")]
BlackForge,
Custom
}
[PublicAPI]
public enum ConversionPiece
{
Disabled,
[InternalName("smelter")]
Smelter,
[InternalName("charcoal_kiln")]
CharcoalKiln,
[InternalName("blastfurnace")]
BlastFurnace,
[InternalName("windmill")]
Windmill,
[InternalName("piece_spinningwheel")]
SpinningWheel,
[InternalName("eitrrefinery")]
EitrRefinery,
Custom
}
public class InternalName : Attribute
{
public readonly string internalName;
public InternalName(string internalName)
{
this.internalName = internalName;
}
}
[PublicAPI]
public class RequiredResourceList
{
public readonly List<Requirement> Requirements = new List<Requirement>();
public bool Free = false;
public void Add(string itemName, int amount, int quality = 0)
{
Requirements.Add(new Requirement
{
itemName = itemName,
amount = amount,
quality = quality
});
}
public void Add(string itemName, ConfigEntry<int> amountConfig, int quality = 0)
{
Requirements.Add(new Requirement
{
itemName = itemName,
amountConfig = amountConfig,
quality = quality
});
}
}
[PublicAPI]
public class CraftingStationList
{
public readonly List<CraftingStationConfig> Stations = new List<CraftingStationConfig>();
public void Add(CraftingTable table, int level)
{
Stations.Add(new CraftingStationConfig
{
Table = table,
level = level
});
}
public void Add(string customTable, int level)
{
Stations.Add(new CraftingStationConfig
{
Table = CraftingTable.Custom,
level = level,
custom = customTable
});
}
}
[PublicAPI]
public class ItemRecipe
{
public readonly RequiredResourceList RequiredItems = new RequiredResourceList();
public readonly RequiredResourceList RequiredUpgradeItems = new RequiredResourceList();
public readonly CraftingStationList Crafting = new CraftingStationList();
public int CraftAmount = 1;
public bool RequireOnlyOneIngredient = false;
public float QualityResultAmountMultiplier = 1f;
public ConfigEntryBase? RecipeIsActive = null;
}
[PublicAPI]
public class Trade
{
public Trader Trader = Trader.None;
public uint Price = 0u;
public uint Stack = 1u;
public string? RequiredGlobalKey = null;
}
[PublicAPI]
[Flags]
public enum Trader
{
None = 0,
Haldor = 1,
Hildir = 2
}
public struct Requirement
{
public string itemName;
public int amount;
public ConfigEntry<int>? amountConfig;
[Description("Set to a non-zero value to apply the requirement only for a specific quality")]
public int quality;
}
public struct CraftingStationConfig
{
public CraftingTable Table;
public int level;
public string? custom;
}
[Flags]
public enum Configurability
{
Disabled = 0,
Recipe = 1,
Stats = 2,
Drop = 4,
Trader = 8,
Full = 0xF
}
[PublicAPI]
public class DropTargets
{
public readonly List<DropTarget> Drops = new List<DropTarget>();
public void Add(string creatureName, float chance, int min = 1, int? max = null, bool levelMultiplier = true)
{
Drops.Add(new DropTarget
{
creature = creatureName,
chance = chance,
min = min,
max = max.GetValueOrDefault(min),
levelMultiplier = levelMultiplier
});
}
}
public struct DropTarget
{
public string creature;
public int min;
public int max;
public float chance;
public bool levelMultiplier;
}
public enum Toggle
{
On = 1,
Off = 0
}
[PublicAPI]
public class Item
{
private class ItemConfig
{
public ConfigEntry<string>? craft;
public ConfigEntry<string>? upgrade;
public ConfigEntry<CraftingTable> table = null;
public ConfigEntry<int> tableLevel = null;
public ConfigEntry<string> customTable = null;
public ConfigEntry<int>? maximumTableLevel;
public ConfigEntry<Toggle> requireOneIngredient = null;
public ConfigEntry<float> qualityResultAmountMultiplier = null;
}
private class TraderConfig
{
public ConfigEntry<Trader> trader = null;
public ConfigEntry<uint> price = null;
public ConfigEntry<uint> stack = null;
public ConfigEntry<string> requiredGlobalKey = null;
}
private class RequirementQuality
{
public int quality;
}
private class ConfigurationManagerAttributes
{
[UsedImplicitly]
public int? Order;
[UsedImplicitly]
public bool? Browsable;
[UsedImplicitly]
public string? Category;
[UsedImplicitly]
public Action<ConfigEntryBase>? CustomDrawer;
public Func<bool>? browsability;
}
[PublicAPI]
public enum DamageModifier
{
Normal,
Resistant,
Weak,
Immune,
Ignore,
VeryResistant,
VeryWeak,
None
}
private delegate void setDmgFunc(ref DamageTypes dmg, float value);
private class SerializedRequirements
{
public readonly List<Requirement> Reqs;
public SerializedRequirements(List<Requirement> reqs)
{
Reqs = reqs;
}
public SerializedRequirements(string reqs)
: this(reqs.Split(new char[1] { ',' }).Select(delegate(string r)
{
string[] array = r.Split(new char[1] { ':' });
Requirement result = default(Requirement);
result.itemName = array[0];
result.amount = ((array.Length <= 1 || !int.TryParse(array[1], out var result2)) ? 1 : result2);
result.quality = ((array.Length > 2 && int.TryParse(array[2], out var result3)) ? result3 : 0);
return result;
}).ToList())
{
}
public override string ToString()
{
return string.Join(",", Reqs.Select((Requirement r) => $"{r.itemName}:{r.amount}" + ((r.quality > 0) ? $":{r.quality}" : "")));
}
public static ItemDrop? fetchByName(ObjectDB objectDB, string name)
{
GameObject itemPrefab = objectDB.GetItemPrefab(name);
ItemDrop val = ((itemPrefab != null) ? itemPrefab.GetComponent<ItemDrop>() : null);
if ((Object)(object)val == (Object)null)
{
Debug.LogWarning((object)("The required item '" + name + "' does not exist."));
}
return val;
}
public static Requirement[] toPieceReqs(ObjectDB objectDB, SerializedRequirements craft, SerializedRequirements upgrade)
{
//IL_0100: Unknown result type (might be due to invalid IL or missing references)
//IL_0105: Unknown result type (might be due to invalid IL or missing references)
//IL_010d: Unknown result type (might be due to invalid IL or missing references)
//IL_019b: 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_01a8: Unknown result type (might be due to invalid IL or missing references)
//IL_01af: Unknown result type (might be due to invalid IL or missing references)
//IL_01b2: Expected O, but got Unknown
//IL_01b7: Expected O, but got Unknown
//IL_012c: Unknown result type (might be due to invalid IL or missing references)
//IL_0135: Expected O, but got Unknown
ObjectDB objectDB2 = objectDB;
Dictionary<string, Requirement> dictionary = craft.Reqs.Where((Requirement r) => r.itemName != "").ToDictionary((Func<Requirement, string>)((Requirement r) => r.itemName), (Func<Requirement, Requirement>)delegate(Requirement r)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
ItemDrop val6 = ResItem(r);
return (val6 == null) ? ((Requirement)null) : new Requirement
{
m_amount = (r.amountConfig?.Value ?? r.amount),
m_resItem = val6,
m_amountPerLevel = 0
};
});
List<Requirement> list = dictionary.Values.Where((Requirement v) => v != null).ToList();
foreach (Requirement item in upgrade.Reqs.Where((Requirement r) => r.itemName != ""))
{
if (item.quality > 0)
{
ItemDrop val = ResItem(item);
if (val != null)
{
Requirement val2 = new Requirement
{
m_resItem = val,
m_amountPerLevel = (item.amountConfig?.Value ?? item.amount),
m_amount = 0
};
list.Add(val2);
requirementQuality.Add(val2, new RequirementQuality
{
quality = item.quality
});
}
continue;
}
if (!dictionary.TryGetValue(item.itemName, out var value) || value == null)
{
ItemDrop val3 = ResItem(item);
if (val3 != null)
{
string itemName = item.itemName;
Requirement val4 = new Requirement
{
m_resItem = val3,
m_amount = 0
};
Requirement val5 = val4;
dictionary[itemName] = val4;
value = val5;
list.Add(value);
}
}
if (value != null)
{
value.m_amountPerLevel = item.amountConfig?.Value ?? item.amount;
}
}
return list.ToArray();
ItemDrop? ResItem(Requirement r)
{
return fetchByName(objectDB2, r.itemName);
}
}
}
private class SerializedDrop
{
public readonly List<DropTarget> Drops;
public SerializedDrop(List<DropTarget> drops)
{
Drops = drops;
}
public SerializedDrop(string drops)
{
Drops = ((drops == "") ? ((IEnumerable<string>)Array.Empty<string>()) : ((IEnumerable<string>)drops.Split(new char[1] { ',' }))).Select(delegate(string r)
{
string[] array = r.Split(new char[1] { ':' });
if (array.Length <= 2 || !int.TryParse(array[2], out var result))
{
result = 1;
}
if (array.Length <= 3 || !int.TryParse(array[3], out var result2))
{
result2 = result;
}
bool levelMultiplier = array.Length <= 4 || array[4] != "0";
DropTarget result3 = default(DropTarget);
result3.creature = array[0];
result3.chance = ((array.Length > 1 && float.TryParse(array[1], out var result4)) ? result4 : 1f);
result3.min = result;
result3.max = result2;
result3.levelMultiplier = levelMultiplier;
return result3;
}).ToList();
}
public override string ToString()
{
return string.Join(",", Drops.Select((DropTarget r) => $"{r.creature}:{r.chance.ToString(CultureInfo.InvariantCulture)}:{r.min}:" + ((r.min == r.max) ? "" : $"{r.max}") + (r.levelMultiplier ? "" : ":0")));
}
private static Character? fetchByName(ZNetScene netScene, string name)
{
GameObject prefab = netScene.GetPrefab(name);
Character val = ((prefab != null) ? prefab.GetComponent<Character>() : null);
if ((Object)(object)val == (Object)null)
{
Debug.LogWarning((object)("The drop target character '" + name + "' does not exist."));
}
return val;
}
public Dictionary<Character, Drop> toCharacterDrops(ZNetScene netScene, GameObject item)
{
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Expected O, but got Unknown
Dictionary<Character, Drop> dictionary = new Dictionary<Character, Drop>();
foreach (DropTarget drop in Drops)
{
Character val = fetchByName(netScene, drop.creature);
if (val != null)
{
dictionary[val] = new Drop
{
m_prefab = item,
m_amountMin = drop.min,
m_amountMax = drop.max,
m_chance = drop.chance,
m_levelMultiplier = drop.levelMultiplier
};
}
}
return dictionary;
}
}
[CompilerGenerated]
private sealed class <>c__DisplayClass83_0
{
public Quaternion? cameraRotation;
public float lightIntensity;
public ItemDrop item;
public Quaternion? itemRotation;
}
[CompilerGenerated]
private sealed class <Transpile_InventoryGui>d__85 : IEnumerable<CodeInstruction>, IEnumerable, IEnumerator<CodeInstruction>, IDisposable, IEnumerator
{
private int <>1__state;
private CodeInstruction <>2__current;
private int <>l__initialThreadId;
private IEnumerable<CodeInstruction> instructions;
public IEnumerable<CodeInstruction> <>3__instructions;
private List<CodeInstruction> <instrs>5__1;
private FieldInfo <amountField>5__2;
private int <i>5__3;
CodeInstruction IEnumerator<CodeInstruction>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <Transpile_InventoryGui>d__85(int <>1__state)
{
this.<>1__state = <>1__state;
<>l__initialThreadId = Environment.CurrentManagedThreadId;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<instrs>5__1 = null;
<amountField>5__2 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0179: Unknown result type (might be due to invalid IL or missing references)
//IL_0183: Expected O, but got Unknown
//IL_01af: Unknown result type (might be due to invalid IL or missing references)
//IL_01b9: Expected O, but got Unknown
//IL_0143: Unknown result type (might be due to invalid IL or missing references)
//IL_014d: Expected O, but got Unknown
int num;
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<instrs>5__1 = instructions.ToList();
<amountField>5__2 = AccessTools.DeclaredField(typeof(Recipe), "m_amount");
<i>5__3 = 0;
break;
case 1:
<>1__state = -1;
if (<i>5__3 > 1 && <instrs>5__1[<i>5__3 - 2].opcode == OpCodes.Ldfld && CodeInstructionExtensions.OperandIs(<instrs>5__1[<i>5__3 - 2], (MemberInfo)<amountField>5__2) && <instrs>5__1[<i>5__3 - 1].opcode == OpCodes.Ldc_I4_1 && <instrs>5__1[<i>5__3].operand is Label)
{
<>2__current = new CodeInstruction(OpCodes.Ldarg_0, (object)null);
<>1__state = 2;
return true;
}
goto IL_01ca;
case 2:
<>1__state = -1;
<>2__current = new CodeInstruction(OpCodes.Call, (object)AccessTools.DeclaredMethod(typeof(Item), "CheckItemIsUpgrade", (Type[])null, (Type[])null));
<>1__state = 3;
return true;
case 3:
<>1__state = -1;
<>2__current = new CodeInstruction(OpCodes.Brtrue, <instrs>5__1[<i>5__3].operand);
<>1__state = 4;
return true;
case 4:
{
<>1__state = -1;
goto IL_01ca;
}
IL_01ca:
num = <i>5__3 + 1;
<i>5__3 = num;
break;
}
if (<i>5__3 < <instrs>5__1.Count)
{
<>2__current = <instrs>5__1[<i>5__3];
<>1__state = 1;
return true;
}
return false;
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
[DebuggerHidden]
IEnumerator<CodeInstruction> IEnumerable<CodeInstruction>.GetEnumerator()
{
<Transpile_InventoryGui>d__85 <Transpile_InventoryGui>d__;
if (<>1__state == -2 && <>l__initialThreadId == Environment.CurrentManagedThreadId)
{
<>1__state = 0;
<Transpile_InventoryGui>d__ = this;
}
else
{
<Transpile_InventoryGui>d__ = new <Transpile_InventoryGui>d__85(0);
}
<Transpile_InventoryGui>d__.instructions = <>3__instructions;
return <Transpile_InventoryGui>d__;
}
[DebuggerHidden]
IEnumerator IEnumerable.GetEnumerator()
{
return ((IEnumerable<CodeInstruction>)this).GetEnumerator();
}
}
private static readonly List<Item> registeredItems = new List<Item>();
private static readonly Dictionary<ItemDrop, Item> itemDropMap = new Dictionary<ItemDrop, Item>();
private static Dictionary<Item, Dictionary<string, List<Recipe>>> activeRecipes = new Dictionary<Item, Dictionary<string, List<Recipe>>>();
private static Dictionary<Recipe, ConfigEntryBase?> hiddenCraftRecipes = new Dictionary<Recipe, ConfigEntryBase>();
private static Dictionary<Recipe, ConfigEntryBase?> hiddenUpgradeRecipes = new Dictionary<Recipe, ConfigEntryBase>();
private static Dictionary<Item, Dictionary<string, ItemConfig>> itemCraftConfigs = new Dictionary<Item, Dictionary<string, ItemConfig>>();
private static Dictionary<Item, ConfigEntry<string>> itemDropConfigs = new Dictionary<Item, ConfigEntry<string>>();
private Dictionary<CharacterDrop, Drop> characterDrops = new Dictionary<CharacterDrop, Drop>();
private readonly Dictionary<ConfigEntryBase, Action> statsConfigs = new Dictionary<ConfigEntryBase, Action>();
private static readonly ConditionalWeakTable<Requirement, RequirementQuality> requirementQuality = new ConditionalWeakTable<Requirement, RequirementQuality>();
public static Configurability DefaultConfigurability = Configurability.Full;
public Configurability? Configurable = null;
private Configurability configurationVisible = Configurability.Full;
private TraderConfig? traderConfig;
public readonly GameObject Prefab;
[Description("Specifies the maximum required crafting station level to upgrade and repair the item.\nDefault is calculated from crafting station level and maximum quality.")]
public int MaximumRequiredStationLevel = int.MaxValue;
[Description("Assigns the item as a drop item to a creature.\nUses a creature name, a drop chance and a minimum and maximum amount.")]
public readonly DropTargets DropsFrom = new DropTargets();
[Description("Configures whether the item can be bought at the trader.\nDon't forget to set cost to something above 0 or the item will be sold for free.")]
public readonly Trade Trade = new Trade();
internal List<Conversion> Conversions = new List<Conversion>();
internal List<ItemConversion> conversions = new List<ItemConversion>();
public Dictionary<string, ItemRecipe> Recipes = new Dictionary<string, ItemRecipe>();
private LocalizeKey? _name;
private LocalizeKey? _description;
private static object? configManager;
private static Localization? _english;
private static BaseUnityPlugin? _plugin;
private static bool hasConfigSync = true;
private static object? _configSync;
private Configurability configurability => Configurable ?? DefaultConfigurability;
[Description("Specifies the resources needed to craft the item.\nUse .Add to add resources with their internal ID and an amount.\nUse one .Add for each resource type the item should need.")]
public RequiredResourceList RequiredItems => this[""].RequiredItems;
[Description("Specifies the resources needed to upgrade the item.\nUse .Add to add resources with their internal ID and an amount. This amount will be multipled by the item quality level.\nUse one .Add for each resource type the upgrade should need.")]
public RequiredResourceList RequiredUpgradeItems => this[""].RequiredUpgradeItems;
[Description("Specifies the crafting station needed to craft the item.\nUse .Add to add a crafting station, using the CraftingTable enum and a minimum level for the crafting station.\nUse one .Add for each crafting station.")]
public CraftingStationList Crafting => this[""].Crafting;
[Description("Specifies a config entry which toggles whether a recipe is active.")]
public ConfigEntryBase? RecipeIsActive
{
get
{
return this[""].RecipeIsActive;
}
set
{
this[""].RecipeIsActive = value;
}
}
[Description("Specifies the number of items that should be given to the player with a single craft of the item.\nDefaults to 1.")]
public int CraftAmount
{
get
{
return this[""].CraftAmount;
}
set
{
this[""].CraftAmount = value;
}
}
public bool RequireOnlyOneIngredient
{
get
{
return this[""].RequireOnlyOneIngredient;
}
set
{
this[""].RequireOnlyOneIngredient = value;
}
}
public float QualityResultAmountMultiplier
{
get
{
return this[""].QualityResultAmountMultiplier;
}
set
{
this[""].QualityResultAmountMultiplier = value;
}
}
public ItemRecipe this[string name]
{
get
{
if (Recipes.TryGetValue(name, out ItemRecipe value))
{
return value;
}
return Recipes[name] = new ItemRecipe();
}
}
public LocalizeKey Name
{
get
{
LocalizeKey name = _name;
if (name != null)
{
return name;
}
SharedData shared = Prefab.GetComponent<ItemDrop>().m_itemData.m_shared;
if (shared.m_name.StartsWith("$"))
{
_name = new LocalizeKey(shared.m_name);
}
else
{
string text = "$item_" + ((Object)Prefab).name.Replace(" ", "_");
_name = new LocalizeKey(text).English(shared.m_name);
shared.m_name = text;
}
return _name;
}
}
public LocalizeKey Description
{
get
{
LocalizeKey description = _description;
if (description != null)
{
return description;
}
SharedData shared = Prefab.GetComponent<ItemDrop>().m_itemData.m_shared;
if (shared.m_description.StartsWith("$"))
{
_description = new LocalizeKey(shared.m_description);
}
else
{
string text = "$itemdesc_" + ((Object)Prefab).name.Replace(" ", "_");
_description = new Local