Decompiled source of MasterCooking v1.0.1

MasterCooking.dll

Decompiled 2 weeks ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("MasterCooking")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("A mod that applies Smoothbrain's Cooking skill bonuses to Ashlands Feast items")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("MasterCooking")]
[assembly: AssemblyTitle("MasterCooking")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.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.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace MasterCooking
{
	[BepInPlugin("com.ruijven.mastercooking", "MasterCooking", "1.0.2")]
	internal class MasterCookingPlugin : BaseUnityPlugin
	{
		public const string PluginGUID = "com.ruijven.mastercooking";

		public const string PluginName = "MasterCooking";

		public const string PluginVersion = "1.0.2";

		internal static ManualLogSource Logger;

		public static ConfigEntry<float> HealthFactor;

		public static ConfigEntry<float> StaminaFactor;

		public static ConfigEntry<float> RegenFactor;

		public static ConfigEntry<float> EitrFactor;

		public static ConfigEntry<float> DurationFactor;

		public static ConfigEntry<float> ExperienceGainFactor;

		public static ConfigEntry<bool> LogDebugInfo;

		internal static MasterCookingPlugin Instance { get; private set; }

		private void Awake()
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Expected O, but got Unknown
			Instance = this;
			Logger = ((BaseUnityPlugin)this).Logger;
			InitializeConfig();
			Harmony val = new Harmony("com.ruijven.mastercooking");
			val.PatchAll(Assembly.GetExecutingAssembly());
			Logger.LogInfo((object)"MasterCooking v1.0.2 loaded successfully!");
			Logger.LogInfo((object)"This mod applies Cooking skill bonuses to ALL food consumption.");
		}

		private void InitializeConfig()
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Expected O, but got Unknown
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Expected O, but got Unknown
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Expected O, but got Unknown
			//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f0: Expected O, but got Unknown
			//IL_0123: Unknown result type (might be due to invalid IL or missing references)
			//IL_012d: Expected O, but got Unknown
			//IL_0160: Unknown result type (might be due to invalid IL or missing references)
			//IL_016a: Expected O, but got Unknown
			//IL_018b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0195: Expected O, but got Unknown
			HealthFactor = ((BaseUnityPlugin)this).Config.Bind<float>("Stat Multipliers", "HealthFactor", 1.3f, new ConfigDescription("Health multiplier at Cooking skill level 100 (e.g., 1.3 = 30% increase)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 5f), Array.Empty<object>()));
			StaminaFactor = ((BaseUnityPlugin)this).Config.Bind<float>("Stat Multipliers", "StaminaFactor", 1.3f, new ConfigDescription("Stamina multiplier at Cooking skill level 100 (e.g., 1.3 = 30% increase)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 5f), Array.Empty<object>()));
			RegenFactor = ((BaseUnityPlugin)this).Config.Bind<float>("Stat Multipliers", "RegenFactor", 1.3f, new ConfigDescription("Health regeneration multiplier at Cooking skill level 100 (e.g., 1.3 = 30% increase)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 5f), Array.Empty<object>()));
			EitrFactor = ((BaseUnityPlugin)this).Config.Bind<float>("Stat Multipliers", "EitrFactor", 1.3f, new ConfigDescription("Eitr multiplier at Cooking skill level 100 (e.g., 1.3 = 30% increase)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 5f), Array.Empty<object>()));
			DurationFactor = ((BaseUnityPlugin)this).Config.Bind<float>("Stat Multipliers", "DurationFactor", 1f, new ConfigDescription("Duration multiplier at Cooking skill level 100 (e.g., 1.5 = 50% longer duration)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 3f), Array.Empty<object>()));
			ExperienceGainFactor = ((BaseUnityPlugin)this).Config.Bind<float>("Skill Progression", "ExperienceGainFactor", 1f, new ConfigDescription("Multiplier for Cooking skill experience gained (e.g., 2.0 = 2x XP)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 10f), Array.Empty<object>()));
			LogDebugInfo = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "LogDebugInfo", false, new ConfigDescription("Enable detailed debug logging in the console.", (AcceptableValueBase)null, Array.Empty<object>()));
		}
	}
	[HarmonyPatch]
	internal class Patch_FeastFix
	{
		[HarmonyPatch(typeof(Player), "EatFood")]
		[HarmonyPrefix]
		private static void EatFoodPrefix(Player __instance, ItemData item)
		{
			if ((Object)(object)__instance != (Object)(object)Player.m_localPlayer || item == null || item.m_shared == null)
			{
				return;
			}
			float cookingSkillLevel = GetCookingSkillLevel(__instance);
			float num = Mathf.Min(cookingSkillLevel / 100f, 1f);
			if (!(num <= 0f))
			{
				float num2 = 1f + num * (MasterCookingPlugin.HealthFactor.Value - 1f);
				float num3 = 1f + num * (MasterCookingPlugin.StaminaFactor.Value - 1f);
				float num4 = 1f + num * (MasterCookingPlugin.RegenFactor.Value - 1f);
				float num5 = 1f + num * (MasterCookingPlugin.EitrFactor.Value - 1f);
				if (item.m_shared.m_food > 0f)
				{
					SharedData shared = item.m_shared;
					shared.m_food *= num2;
				}
				if (item.m_shared.m_foodStamina > 0f)
				{
					SharedData shared2 = item.m_shared;
					shared2.m_foodStamina *= num3;
				}
				if (item.m_shared.m_foodRegen > 0f)
				{
					SharedData shared3 = item.m_shared;
					shared3.m_foodRegen *= num4;
				}
				if (item.m_shared.m_foodEitr > 0f)
				{
					SharedData shared4 = item.m_shared;
					shared4.m_foodEitr *= num5;
				}
			}
		}

		[HarmonyPatch(typeof(Player), "EatFood")]
		[HarmonyPostfix]
		private static void EatFoodPostfix(Player __instance, ItemData item, ref bool __result)
		{
			if (!__result || (Object)(object)__instance != (Object)(object)Player.m_localPlayer || item == null || item.m_shared == null)
			{
				return;
			}
			float cookingSkillLevel = GetCookingSkillLevel(__instance);
			float num = Mathf.Min(cookingSkillLevel / 100f, 1f);
			if (!(num <= 0f))
			{
				float num2 = 1f + num * (MasterCookingPlugin.HealthFactor.Value - 1f);
				float num3 = 1f + num * (MasterCookingPlugin.StaminaFactor.Value - 1f);
				float num4 = 1f + num * (MasterCookingPlugin.RegenFactor.Value - 1f);
				float num5 = 1f + num * (MasterCookingPlugin.EitrFactor.Value - 1f);
				if (item.m_shared.m_food > 0f)
				{
					SharedData shared = item.m_shared;
					shared.m_food /= num2;
				}
				if (item.m_shared.m_foodStamina > 0f)
				{
					SharedData shared2 = item.m_shared;
					shared2.m_foodStamina /= num3;
				}
				if (item.m_shared.m_foodRegen > 0f)
				{
					SharedData shared3 = item.m_shared;
					shared3.m_foodRegen /= num4;
				}
				if (item.m_shared.m_foodEitr > 0f)
				{
					SharedData shared4 = item.m_shared;
					shared4.m_foodEitr /= num5;
				}
				float num6 = 1f + num * (MasterCookingPlugin.DurationFactor.Value - 1f);
				List<Food> foods = __instance.GetFoods();
				Food val = ((IEnumerable<Food>)foods).FirstOrDefault((Func<Food, bool>)((Food f) => f.m_item.m_shared.m_name == item.m_shared.m_name));
				if (val != null && val.m_time > 0f)
				{
					val.m_time *= num6;
				}
			}
		}

		[HarmonyPatch(typeof(Player), "UpdateFood")]
		[HarmonyPrefix]
		private static void UpdateFoodPrefix(Player __instance, float dt, bool forceUpdate)
		{
			if ((Object)(object)__instance != (Object)(object)Player.m_localPlayer)
			{
				return;
			}
			float cookingSkillLevel = GetCookingSkillLevel(__instance);
			float num = Mathf.Min(cookingSkillLevel / 100f, 1f);
			if (num <= 0f)
			{
				return;
			}
			float num2 = 1f + num * (MasterCookingPlugin.HealthFactor.Value - 1f);
			float num3 = 1f + num * (MasterCookingPlugin.StaminaFactor.Value - 1f);
			float num4 = 1f + num * (MasterCookingPlugin.EitrFactor.Value - 1f);
			List<Food> foods = __instance.GetFoods();
			foreach (Food item in foods)
			{
				if (item.m_item.m_shared.m_food > 0f)
				{
					SharedData shared = item.m_item.m_shared;
					shared.m_food *= num2;
				}
				if (item.m_item.m_shared.m_foodStamina > 0f)
				{
					SharedData shared2 = item.m_item.m_shared;
					shared2.m_foodStamina *= num3;
				}
				if (item.m_item.m_shared.m_foodEitr > 0f)
				{
					SharedData shared3 = item.m_item.m_shared;
					shared3.m_foodEitr *= num4;
				}
			}
		}

		[HarmonyPatch(typeof(Player), "UpdateFood")]
		[HarmonyPostfix]
		private static void UpdateFoodPostfix(Player __instance, float dt, bool forceUpdate)
		{
			if ((Object)(object)__instance != (Object)(object)Player.m_localPlayer)
			{
				return;
			}
			float cookingSkillLevel = GetCookingSkillLevel(__instance);
			float num = Mathf.Min(cookingSkillLevel / 100f, 1f);
			if (num <= 0f)
			{
				return;
			}
			float num2 = 1f + num * (MasterCookingPlugin.HealthFactor.Value - 1f);
			float num3 = 1f + num * (MasterCookingPlugin.StaminaFactor.Value - 1f);
			float num4 = 1f + num * (MasterCookingPlugin.EitrFactor.Value - 1f);
			List<Food> foods = __instance.GetFoods();
			foreach (Food item in foods)
			{
				if (item.m_item.m_shared.m_food > 0f)
				{
					SharedData shared = item.m_item.m_shared;
					shared.m_food /= num2;
				}
				if (item.m_item.m_shared.m_foodStamina > 0f)
				{
					SharedData shared2 = item.m_item.m_shared;
					shared2.m_foodStamina /= num3;
				}
				if (item.m_item.m_shared.m_foodEitr > 0f)
				{
					SharedData shared3 = item.m_item.m_shared;
					shared3.m_foodEitr /= num4;
				}
			}
		}

		[HarmonyPatch(typeof(Player), "RaiseSkill")]
		[HarmonyPrefix]
		private static void RaiseSkillPrefix(Player __instance, SkillType skill, ref float value)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0004: Invalid comparison between Unknown and I4
			if ((int)skill == 105)
			{
				value *= MasterCookingPlugin.ExperienceGainFactor.Value;
			}
		}

		private static float GetCookingSkillLevel(Player player)
		{
			try
			{
				return ((Character)player).GetSkillLevel((SkillType)105);
			}
			catch (Exception ex)
			{
				MasterCookingPlugin.Logger.LogError((object)("Error getting Cooking skill level: " + ex.Message));
				return 0f;
			}
		}
	}
}