Decompiled source of Cheaper Woodcutters v1.0.1

CheaperWoodcutters.dll

Decompiled a day 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 Eremite;
using Eremite.Buildings;
using Eremite.Controller;
using Eremite.Services;
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.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: AssemblyCompany("CheaperWoodcutters")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("Makes woodcutters cheaper")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+d6ada77561ccfe85ca4c2c807fd24c8c3fc0d51c")]
[assembly: AssemblyProduct("CheaperWoodcutters")]
[assembly: AssemblyTitle("CheaperWoodcutters")]
[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 CheaperWoodcutters
{
	[BepInPlugin("CheaperWoodcutters", "CheaperWoodcutters", "1.0.0")]
	public class Plugin : BaseUnityPlugin
	{
		public static Plugin Instance;

		private Harmony harmony;

		private void Awake()
		{
			Instance = this;
			harmony = Harmony.CreateAndPatchAll(typeof(Plugin), (string)null);
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin CheaperWoodcutters is loaded!");
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin Woodcutters Cost Logger is loaded!");
		}

		[HarmonyPatch(typeof(MetaPerksService), "GetBasePreparationPoints")]
		[HarmonyPrefix]
		private static bool GetBasePreparationPoints_PrePatch(MetaPerksService __instance, ref int __result)
		{
			MB.MetaStateService.Content.buildings.Add("Herbalist's Camp");
			MB.MetaStateService.Content.essentialBuildings.Add("Herbalist's Camp");
			MB.MetaStateService.Content.buildings.Add("Trapper's Camp");
			MB.MetaStateService.Content.essentialBuildings.Add("Trapper's Camp");
			MB.MetaStateService.Content.buildings.Remove("Primitive Herbalist's Camp");
			MB.MetaStateService.Content.buildings.Remove("Primitive Trapper's Camp");
			MB.MetaStateService.Content.buildings.Remove("Primitive Forager's Camp");
			MB.MetaStateService.Content.buildings.Remove("Primitive Fishing Hut");
			return true;
		}

		[HarmonyPatch(typeof(MainController), "OnServicesReady")]
		[HarmonyPostfix]
		private static void ModifyWoodcuttersCamp()
		{
			((BaseUnityPlugin)Instance).Logger.LogInfo((object)"Attempting to modify Woodcutters Camp cost...");
			BuildingModel[] buildings = MainController.Instance.Settings.Buildings;
			if (buildings == null)
			{
				((BaseUnityPlugin)Instance).Logger.LogError((object)"Buildings not found!");
				return;
			}
			BuildingModel val = ((IEnumerable<BuildingModel>)buildings).FirstOrDefault((Func<BuildingModel, bool>)((BuildingModel b) => ((Object)b).name == "Woodcutters Camp"));
			if ((Object)(object)val == (Object)null)
			{
				((BaseUnityPlugin)Instance).Logger.LogError((object)"Woodcutters Camp not found!");
			}
			else if (val.requiredGoods != null && val.requiredGoods.Length != 0)
			{
				((BaseUnityPlugin)Instance).Logger.LogInfo((object)$"Original Woodcutters Camp cost: {val.requiredGoods[0].amount} {((Object)val.requiredGoods[0].good).name}");
				int amount = val.requiredGoods[0].amount;
				val.requiredGoods[0].amount = amount / 2;
				if (val.requiredGoods[0].amount < 1)
				{
					val.requiredGoods[0].amount = 1;
				}
				((BaseUnityPlugin)Instance).Logger.LogInfo((object)$"Modified Woodcutters Camp cost to: {val.requiredGoods[0].amount} {((Object)val.requiredGoods[0].good).name}");
			}
			else
			{
				((BaseUnityPlugin)Instance).Logger.LogError((object)"Woodcutters Camp has no required goods!");
			}
		}

		[HarmonyPatch(typeof(GameController), "StartGame")]
		[HarmonyPostfix]
		private static void LogGameStart()
		{
			bool flag = MB.GameSaveService.IsNewGame();
			((BaseUnityPlugin)Instance).Logger.LogInfo((object)$"Entered a game. Is this a new game: {flag}.");
			try
			{
				BuildingModel val = ((IEnumerable<BuildingModel>)MainController.Instance.Settings.Buildings).FirstOrDefault((Func<BuildingModel, bool>)((BuildingModel b) => ((Object)b).name == "Woodcutters Camp"));
				if ((Object)(object)val != (Object)null)
				{
					((BaseUnityPlugin)Instance).Logger.LogInfo((object)("Found woodcutter building in settings: " + ((Object)val).name));
					if (val.requiredGoods != null && val.requiredGoods.Length != 0)
					{
						((BaseUnityPlugin)Instance).Logger.LogInfo((object)$"Current cost: {val.requiredGoods[0].amount} {((Object)val.requiredGoods[0].good).name}");
					}
				}
			}
			catch (Exception ex)
			{
				((BaseUnityPlugin)Instance).Logger.LogInfo((object)("Error finding woodcutter building: " + ex.Message));
			}
		}
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "CheaperWoodcutters";

		public const string PLUGIN_NAME = "CheaperWoodcutters";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}