Decompiled source of BarbedWireUnlocker v1.0.0

BarbedWireUnlocker.dll

Decompiled 3 weeks ago
using System;
using System.Diagnostics;
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 GlobalSettings;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("BarbedWireUnlocker")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+d79dd39ac9cf6e683e9680f800e22b23dca4ca0e")]
[assembly: AssemblyProduct("BarbedWireUnlocker")]
[assembly: AssemblyTitle("BarbedWireUnlocker")]
[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.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;
		}
	}
}
namespace BarbedWireUnlocker
{
	public class BarbedWireModifier
	{
		private readonly ManualLogSource logger;

		private readonly BarbedWireUnlocker barbedWireUnlocker;

		public BarbedWireModifier(ManualLogSource logger, BarbedWireUnlocker barbedWireUnlocker)
		{
			this.logger = logger;
			this.barbedWireUnlocker = barbedWireUnlocker;
		}

		public void SetDamageDealtModifier()
		{
			if (barbedWireUnlocker.configUI.debugMode.Value)
			{
				logger.LogInfo((object)("barbedWireDamageDealtMultiplier before: " + Gameplay.Get().barbedWireDamageDealtMultiplier));
			}
			Gameplay.Get().barbedWireDamageDealtMultiplier = barbedWireUnlocker.configUI.damageDealtMultipler.Value;
			if (barbedWireUnlocker.configUI.debugMode.Value)
			{
				logger.LogInfo((object)("barbedWireDamageDealtMultiplier after: " + Gameplay.Get().barbedWireDamageDealtMultiplier));
			}
		}

		public void SetDamageDealtModifier(int value)
		{
			if (barbedWireUnlocker.configUI.debugMode.Value)
			{
				logger.LogInfo((object)("barbedWireDamageDealtMultiplier before: " + Gameplay.Get().barbedWireDamageDealtMultiplier));
			}
			Gameplay.Get().barbedWireDamageDealtMultiplier = value;
			if (barbedWireUnlocker.configUI.debugMode.Value)
			{
				logger.LogInfo((object)("barbedWireDamageDealtMultiplier after: " + Gameplay.Get().barbedWireDamageDealtMultiplier));
			}
		}

		public void SetDamageTakenModifier()
		{
			if (barbedWireUnlocker.configUI.debugMode.Value)
			{
				logger.LogInfo((object)("barbedWireDamageTakenMultiplier before: " + Gameplay.Get().barbedWireDamageTakenMultiplier));
			}
			Gameplay.Get().barbedWireDamageTakenMultiplier = barbedWireUnlocker.configUI.damageTakenMultipler.Value;
			if (barbedWireUnlocker.configUI.debugMode.Value)
			{
				logger.LogInfo((object)("barbedWireDamageTakenMultiplier after: " + Gameplay.Get().barbedWireDamageTakenMultiplier));
			}
		}

		public void SetDamageTakenModifier(int value)
		{
			if (barbedWireUnlocker.configUI.debugMode.Value)
			{
				logger.LogInfo((object)("barbedWireDamageTakenMultiplier before: " + Gameplay.Get().barbedWireDamageTakenMultiplier));
			}
			Gameplay.Get().barbedWireDamageTakenMultiplier = value;
			if (barbedWireUnlocker.configUI.debugMode.Value)
			{
				logger.LogInfo((object)("barbedWireDamageTakenMultiplier after: " + Gameplay.Get().barbedWireDamageTakenMultiplier));
			}
		}
	}
	[HarmonyPatch]
	public class BarbedWirePatches
	{
		[HarmonyPatch]
		internal static class HeroController_Start_Patch
		{
			private static MethodBase TargetMethod()
			{
				Type type = AccessTools.TypeByName("HeroController");
				if (type == null)
				{
					throw new Exception("Could not find type HeroController");
				}
				return AccessTools.Method(type, "Start", (Type[])null, (Type[])null);
			}

			private static void Postfix(object __instance)
			{
				ManualLogSource? logger = BarbedWirePatches.logger;
				if (logger != null)
				{
					logger.LogInfo((object)"\ud83d\udd0d HeroController.Start patch triggered!");
				}
				BarbedWireUnlocker instance = BarbedWireUnlocker.Instance;
				if (instance.configUI.unlockBarbedWireAtStart.Value)
				{
					instance.configUI.unlockBarbedWire.Value = true;
					instance.UnlockBarbedWireTool();
					ManualLogSource? logger2 = BarbedWirePatches.logger;
					if (logger2 != null)
					{
						logger2.LogInfo((object)"Barbed wire tool unlocked at start");
					}
				}
				if (instance.configUI.equipBarbedWireAtStart.Value)
				{
					instance.EquipBarbedWireToolAtStart();
					ManualLogSource? logger3 = BarbedWirePatches.logger;
					if (logger3 != null)
					{
						logger3.LogInfo((object)"Barbed wire tool equipped at start");
					}
				}
				instance.barbedWireModifier.SetDamageDealtModifier();
				instance.barbedWireModifier.SetDamageTakenModifier();
			}
		}

		private static ManualLogSource? logger;

		private static bool hasAttemptedUnlock;

		public static void SetLogger(ManualLogSource logSource)
		{
			logger = logSource;
		}

		public static void ResetUnlockAttempt()
		{
			hasAttemptedUnlock = false;
			ManualLogSource? obj = logger;
			if (obj != null)
			{
				obj.LogInfo((object)"Reset unlock attempt flag - next unlock attempt will be allowed");
			}
		}
	}
	[BepInPlugin("BarbedWireUnlocker", "BarbedWireUnlocker", "1.0.0")]
	public class BarbedWireUnlocker : BaseUnityPlugin
	{
		private Harmony harmony;

		public ConfigUI configUI;

		public BarbedWireModifier barbedWireModifier;

		public ManualLogSource Logger => ((BaseUnityPlugin)this).Logger;

		public static BarbedWireUnlocker Instance { get; private set; }

		private void Awake()
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Expected O, but got Unknown
			try
			{
				Logger.LogInfo((object)"=== BarbedWireUnlocker v1.0.0 Starting ===");
				Logger.LogInfo((object)"Plugin GUID: BarbedWireUnlocker");
				harmony = new Harmony("BarbedWireUnlocker");
				harmony.PatchAll();
				Logger.LogInfo((object)"Harmony patches applied successfully!");
				Instance = this;
				configUI = new ConfigUI(Logger, this);
				barbedWireModifier = new BarbedWireModifier(Logger, this);
				configUI.InitializeConfigUI(((BaseUnityPlugin)this).Config);
				BarbedWirePatches.SetLogger(Logger);
				if (configUI.debugMode.Value)
				{
					Logger.LogInfo((object)("Config file location: " + ((BaseUnityPlugin)this).Config.ConfigFilePath));
				}
				Logger.LogInfo((object)"=== BarbedWireUnlocker initialization COMPLETED ===");
			}
			catch (Exception ex)
			{
				Logger.LogError((object)("❌ ERROR during BarbedWireUnlocker initialization: " + ex.Message));
				Logger.LogError((object)("Stack trace: " + ex.StackTrace));
			}
		}

		private void OnDestroy()
		{
			Harmony obj = harmony;
			if (obj != null)
			{
				obj.UnpatchSelf();
			}
		}

		public void UnlockBarbedWireTool()
		{
			Logger.LogInfo((object)"Manual unlock requested for barbedWire tool...");
			try
			{
				ToolItem barbedWireTool = Gameplay.BarbedWireTool;
				if ((Object)(object)barbedWireTool != (Object)null)
				{
					if (configUI.debugMode.Value)
					{
						Logger.LogInfo((object)"Found barbedWire tool, unlocking and equipping...");
					}
					barbedWireTool.Unlock((Action)null, (PopupFlags)3);
					Logger.LogInfo((object)"BarbedWire tool unlocked successfully!");
				}
				else
				{
					Logger.LogWarning((object)"Could not find barbedWire tool item");
				}
			}
			catch (Exception ex)
			{
				Logger.LogError((object)("Error unlocking/equipping barbedWire tool: " + ex.Message));
			}
		}

		public void LockBarbedWire()
		{
			Logger.LogInfo((object)"Manual unlock requested for barbedWire tool...");
			try
			{
				ToolItem barbedWireTool = Gameplay.BarbedWireTool;
				if ((Object)(object)barbedWireTool != (Object)null && barbedWireTool.IsUnlocked)
				{
					if (configUI.debugMode.Value)
					{
						Logger.LogInfo((object)"Found barbedWire tool, unlocking and equipping...");
					}
					barbedWireTool.Lock();
					Logger.LogInfo((object)"BarbedWire tool unlocked successfully!");
				}
				else
				{
					Logger.LogWarning((object)"Could not find barbedWire tool item");
				}
			}
			catch (Exception ex)
			{
				Logger.LogError((object)("Error unlocking/equipping barbedWire tool: " + ex.Message));
			}
		}

		public void ResetUnlockAttempt()
		{
			BarbedWirePatches.ResetUnlockAttempt();
		}

		public void EquipBarbedWireTool()
		{
			try
			{
				ToolItem barbedWireTool = Gameplay.BarbedWireTool;
				if ((Object)(object)barbedWireTool != (Object)null)
				{
					if (!configUI.unlockBarbedWire.Value)
					{
						configUI.unlockBarbedWire.Value = true;
					}
					if (!barbedWireTool.IsUnlockedNotHidden)
					{
						if (configUI.debugMode.Value)
						{
							Logger.LogInfo((object)(barbedWireTool.name + " is not unlocked! Unlocking now..."));
						}
						UnlockBarbedWireTool();
						if (configUI.debugMode.Value)
						{
							Logger.LogInfo((object)(barbedWireTool.name + " is now unlocked."));
						}
					}
					ToolItemManager.SetExtraEquippedTool("0", barbedWireTool);
					ToolItemManager.SendEquippedChangedEvent(false);
					Logger.LogInfo((object)"BarbedWire tool equipped successfully!");
				}
				else
				{
					Logger.LogWarning((object)"Could not find barbedWire tool item");
				}
			}
			catch (Exception ex)
			{
				Logger.LogError((object)("Error equipping barbedWire tool: " + ex.Message));
			}
		}

		public void EquipBarbedWireToolAtStart()
		{
			try
			{
				ToolItem barbedWireTool = Gameplay.BarbedWireTool;
				if ((Object)(object)barbedWireTool != (Object)null)
				{
					if (!configUI.unlockBarbedWireAtStart.Value)
					{
						configUI.unlockBarbedWireAtStart.Value = true;
					}
					if (!barbedWireTool.IsUnlockedNotHidden)
					{
						if (configUI.debugMode.Value)
						{
							Logger.LogInfo((object)(barbedWireTool.name + " is not unlocked! Unlocking now..."));
						}
						UnlockBarbedWireTool();
						if (configUI.debugMode.Value)
						{
							Logger.LogInfo((object)(barbedWireTool.name + " is now unlocked."));
						}
					}
					ToolItemManager.AutoEquip(barbedWireTool);
					ToolItemManager.SendEquippedChangedEvent(false);
					Logger.LogInfo((object)"BarbedWire tool equipped successfully!");
				}
				else
				{
					Logger.LogWarning((object)"Could not find barbedWire tool item");
				}
			}
			catch (Exception ex)
			{
				Logger.LogError((object)("Error equipping barbedWire tool: " + ex.Message));
			}
		}

		public void UnequipBarbedWireTool()
		{
			try
			{
				ToolItem barbedWireTool = Gameplay.BarbedWireTool;
				if ((Object)(object)barbedWireTool != (Object)null)
				{
					if (barbedWireTool.IsUnlockedNotHidden)
					{
						ToolItemManager.UnequipTool(barbedWireTool);
						Logger.LogInfo((object)"BarbedWire tool unequipped successfully!");
						ToolItemManager.SendEquippedChangedEvent(false);
					}
					else
					{
						Logger.LogInfo((object)"BarbedWire tool is not equiped!");
					}
				}
				else
				{
					Logger.LogWarning((object)"Could not find barbedWire tool item");
				}
			}
			catch (Exception ex)
			{
				Logger.LogError((object)("Error equipping barbedWire tool: " + ex.Message));
			}
		}

		public void ReadtoolItems()
		{
			foreach (ToolItem allTool in ToolItemManager.GetAllTools())
			{
				Logger.LogInfo((object)("ToolItem: " + allTool.name));
			}
		}
	}
	public class ConfigUI
	{
		private readonly ManualLogSource logger;

		private readonly BarbedWireUnlocker barbedWireUnlocker;

		public ConfigEntry<bool> debugMode;

		public ConfigEntry<bool> unlockBarbedWire;

		public ConfigEntry<bool> unlockBarbedWireAtStart;

		public ConfigEntry<bool> equipBarbedWire;

		public ConfigEntry<bool> equipBarbedWireAtStart;

		public ConfigEntry<float> damageDealtMultipler;

		public ConfigEntry<float> damageTakenMultipler;

		public ConfigEntry<bool> readAllTools;

		public ConfigUI(ManualLogSource logger, BarbedWireUnlocker barbedWireUnlocker)
		{
			this.logger = logger;
			this.barbedWireUnlocker = barbedWireUnlocker;
		}

		public void InitializeConfigUI(ConfigFile config)
		{
			//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Expected O, but got Unknown
			//IL_00d7: Expected O, but got Unknown
			debugMode = config.Bind<bool>("Debug", "DebugMode", false, (ConfigDescription)null);
			unlockBarbedWireAtStart = config.Bind<bool>("Unlock", "Unlock Barbed Wire At Start", false, (ConfigDescription)null);
			unlockBarbedWire = config.Bind<bool>("Unlock", "Unlock Barbed Wire", false, (ConfigDescription)null);
			equipBarbedWireAtStart = config.Bind<bool>("Equip", "Equip Barbed Wire At Start", false, (ConfigDescription)null);
			equipBarbedWire = config.Bind<bool>("Equip", "Equip Barbed Wire", false, (ConfigDescription)null);
			damageDealtMultipler = config.Bind<float>("Modifier", "Modifies Damage Dealt Multiplaer", 1.5f, (ConfigDescription)null);
			damageTakenMultipler = config.Bind<float>("Modifier", "Modifies Damage Taken Multiplaer", 2f, (ConfigDescription)null);
			readAllTools = config.Bind<bool>(new ConfigDefinition("Barbed Wire Unlocker", "Read All Tools"), false, new ConfigDescription("Click to read all tools", (AcceptableValueBase)null, Array.Empty<object>()));
			readAllTools.SettingChanged += delegate
			{
				if (readAllTools.Value)
				{
					logger.LogInfo((object)"Read All Tools button clicked!");
					barbedWireUnlocker.ReadtoolItems();
					readAllTools.Value = false;
				}
			};
			unlockBarbedWire.SettingChanged += delegate
			{
				if (unlockBarbedWire.Value)
				{
					barbedWireUnlocker.UnlockBarbedWireTool();
				}
				else
				{
					barbedWireUnlocker.LockBarbedWire();
				}
			};
			equipBarbedWire.SettingChanged += delegate
			{
				if (equipBarbedWire.Value)
				{
					barbedWireUnlocker.EquipBarbedWireTool();
				}
				else
				{
					barbedWireUnlocker.UnequipBarbedWireTool();
				}
			};
			damageDealtMultipler.SettingChanged += delegate
			{
				barbedWireUnlocker.barbedWireModifier.SetDamageDealtModifier();
			};
			damageTakenMultipler.SettingChanged += delegate
			{
				barbedWireUnlocker.barbedWireModifier.SetDamageTakenModifier();
			};
		}
	}
	public class OnStartManager
	{
		private readonly ManualLogSource logger;

		public OnStartManager(ManualLogSource logger)
		{
			this.logger = logger;
		}
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "BarbedWireUnlocker";

		public const string PLUGIN_NAME = "BarbedWireUnlocker";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}