Decompiled source of ItemsRebalanced v0.0.1

plugins/ItemsRebalanced/ItemsRebalanced.dll

Decompiled 3 months 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 IL.RoR2;
using Microsoft.CodeAnalysis;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On.RoR2;
using R2API;
using RoR2;
using UnityEngine;
using UnityEngine.Networking;

[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("ItemsRebalanced")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+755ae00b551178fff70f5cb804d45c7901f22d8e")]
[assembly: AssemblyProduct("ItemsRebalanced")]
[assembly: AssemblyTitle("ItemsRebalanced")]
[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 ItemsRebalanced
{
	public static class DescColors
	{
		public enum Color
		{
			cStack,
			cIsDamage,
			cIsHealth,
			cIsUtility,
			cIsHealing,
			cIsVoid
		}

		public static string Style(this string self, Color style)
		{
			return "<style=" + style.ToString() + ">" + self + "</style>";
		}
	}
	public class DescSetter
	{
		public static string BisonSteakName = "FLATHEALTH";

		public static string StunGrenadeName = "STUNCHANCEONHIT";

		public static void SetDesc()
		{
			string text = "ITEM_";
			string text2 = "_PICKUP";
			string text3 = "_DESC";
			if (ItemsRebalancedConfig.EnableBisonSteakRework.Value == 1)
			{
				string text4 = "While above " + "90% health ".Style(DescColors.Color.cIsHealth) + ", increase " + "movement speed ".Style(DescColors.Color.cIsUtility) + "by " + "28% ".Style(DescColors.Color.cIsUtility) + "(+28% per stack)".Style(DescColors.Color.cStack) + ".";
				LanguageAPI.Add(text + BisonSteakName + text2, text4);
				LanguageAPI.Add(text + BisonSteakName + text3, text4);
			}
		}
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("Egglectro.ItemsRebalanced", "ItemsRebalanced", "0.0.1")]
	public class ItemsRebalanced : BaseUnityPlugin
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static Func<Instruction, bool> <>9__4_1;

			public static Func<Instruction, bool> <>9__4_2;

			public static Func<Instruction, bool> <>9__4_3;

			public static Func<Instruction, bool> <>9__4_4;

			public static Manipulator <>9__4_0;

			internal void <Awake>b__4_0(ILContext il)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Expected O, but got Unknown
				ILCursor val = new ILCursor(il);
				int num3 = default(int);
				int num2 = default(int);
				float num = default(float);
				val.TryGotoNext(new Func<Instruction, bool>[4]
				{
					(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num3),
					(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num2),
					(Instruction x) => ILPatternMatchingExt.MatchConvR4(x),
					(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, ref num)
				});
				val.Index += 3;
				val.Next.Operand = 0f;
			}

			internal bool <Awake>b__4_1(Instruction x)
			{
				int num = default(int);
				return ILPatternMatchingExt.MatchLdloc(x, ref num);
			}

			internal bool <Awake>b__4_2(Instruction x)
			{
				int num = default(int);
				return ILPatternMatchingExt.MatchLdloc(x, ref num);
			}

			internal bool <Awake>b__4_3(Instruction x)
			{
				return ILPatternMatchingExt.MatchConvR4(x);
			}

			internal bool <Awake>b__4_4(Instruction x)
			{
				float num = default(float);
				return ILPatternMatchingExt.MatchLdcR4(x, ref num);
			}
		}

		public const string PluginGUID = "Egglectro.ItemsRebalanced";

		public const string PluginAuthor = "Egglectro";

		public const string PluginName = "ItemsRebalanced";

		public const string PluginVersion = "0.0.1";

		public void Awake()
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Expected O, but got Unknown
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Expected O, but got Unknown
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Expected O, but got Unknown
			//IL_0064: 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_006f: Expected O, but got Unknown
			Log.Init(((BaseUnityPlugin)this).Logger);
			ItemsRebalancedConfig.SetUpConfigs((BaseUnityPlugin)(object)this);
			DescSetter.SetDesc();
			HealthComponent.TakeDamage += new hook_TakeDamage(OnTakeDamage);
			HealthComponent.Heal += new hook_Heal(OnCharacterHeal);
			if (ItemsRebalancedConfig.EnableBisonSteakRework.Value != 1)
			{
				return;
			}
			object obj = <>c.<>9__4_0;
			if (obj == null)
			{
				Manipulator val = delegate(ILContext il)
				{
					//IL_0002: Unknown result type (might be due to invalid IL or missing references)
					//IL_0008: Expected O, but got Unknown
					ILCursor val2 = new ILCursor(il);
					int num3 = default(int);
					int num2 = default(int);
					float num = default(float);
					val2.TryGotoNext(new Func<Instruction, bool>[4]
					{
						(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num3),
						(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num2),
						(Instruction x) => ILPatternMatchingExt.MatchConvR4(x),
						(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, ref num)
					});
					val2.Index += 3;
					val2.Next.Operand = 0f;
				};
				<>c.<>9__4_0 = val;
				obj = (object)val;
			}
			CharacterBody.RecalculateStats += (Manipulator)obj;
			CharacterBody.RecalculateStats += new hook_RecalculateStats(ReworkBisonSteak);
		}

		private void OnTakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo)
		{
			orig.Invoke(self, damageInfo);
			if (Object.op_Implicit((Object)(object)self.body))
			{
				self.body.RecalculateStats();
			}
		}

		private float OnCharacterHeal(orig_Heal orig, HealthComponent self, float healAmount, ProcChainMask procChainMask, bool nonRegen)
		{
			//IL_0004: Unknown result type (might be due to invalid IL or missing references)
			float result = orig.Invoke(self, healAmount, procChainMask, nonRegen);
			if (Object.op_Implicit((Object)(object)self.body))
			{
				self.body.RecalculateStats();
			}
			return result;
		}

		private void ReworkBisonSteak(orig_RecalculateStats orig, CharacterBody self)
		{
			orig.Invoke(self);
			if (!NetworkServer.active)
			{
				return;
			}
			if ((Object)(object)self.healthComponent != (Object)null)
			{
				int num = (Object.op_Implicit((Object)(object)self.inventory) ? self.inventory.GetItemCount(Items.FlatHealth) : 0);
				if (num > 0)
				{
					float num2 = self.healthComponent.health / self.healthComponent.fullHealth;
					float num3 = ((num2 >= 0.9f) ? (0.28f * (float)num) : 0f);
					float num4 = self.baseMoveSpeed * num3;
					self.moveSpeed += num4;
					((BaseUnityPlugin)this).Logger.LogInfo((object)$"Bison Steak rework activated. Item count: {num}, Percent health: {num2}, MoveSpeed: {self.moveSpeed}");
				}
			}
			else
			{
				((BaseUnityPlugin)this).Logger.LogWarning((object)"HealthComponent is null, cannot apply Bison Steak rework.");
			}
		}
	}
	public static class ItemsRebalancedConfig
	{
		public static ConfigEntry<int> EnableStunGrenadeRework { get; set; }

		public static ConfigEntry<int> EnableBisonSteakRework { get; set; }

		public static ConfigEntry<int> EnableLeechingSeedRework { get; set; }

		public static ConfigEntry<int> EnableAegisRework { get; set; }

		public static ConfigEntry<int> EnableTitanicKnurlRework { get; set; }

		public static ConfigEntry<int> EnableLostSeersLensesRework { get; set; }

		public static void SetUpConfigs(BaseUnityPlugin plugin)
		{
			CommonConfig(plugin);
		}

		public static void CommonConfig(BaseUnityPlugin plugin)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Expected O, but got Unknown
			EnableBisonSteakRework = plugin.Config.Bind<int>("Bison Steak", "Toggle Rework", 1, new ConfigDescription("[ 0 = Disabled | 1 = Enabled ]", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 1), Array.Empty<object>()));
		}

		public static void UncommonConfig(BaseUnityPlugin plugin)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Expected O, but got Unknown
			EnableLeechingSeedRework = plugin.Config.Bind<int>("Leeching Seed", "Toggle Rework", 1, new ConfigDescription("[ 0 = Disabled | 1 = Enabled ]", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 1), Array.Empty<object>()));
		}

		public static void LegendaryConfig(BaseUnityPlugin plugin)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Expected O, but got Unknown
			EnableAegisRework = plugin.Config.Bind<int>("Aegis", "Toggle Rework", 1, new ConfigDescription("[ 0 = Disabled | 1 = Enabled ]", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 1), Array.Empty<object>()));
		}

		public static void BossConfig(BaseUnityPlugin plugin)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Expected O, but got Unknown
			EnableTitanicKnurlRework = plugin.Config.Bind<int>("TitanicKnurl", "Toggle Rework", 1, new ConfigDescription("[ 0 = Disabled | 1 = Enabled ]", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 1), Array.Empty<object>()));
		}

		public static void VoidConfig(BaseUnityPlugin plugin)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Expected O, but got Unknown
			EnableLostSeersLensesRework = plugin.Config.Bind<int>("Lost Seer's Lenses", "Toggle Rework", 1, new ConfigDescription("[ 0 = Disabled | 1 = Enabled ]", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 1), Array.Empty<object>()));
		}
	}
	internal static class Log
	{
		private static ManualLogSource _logSource;

		internal static void Init(ManualLogSource logSource)
		{
			_logSource = logSource;
		}

		internal static void Debug(object data)
		{
			_logSource.LogDebug(data);
		}

		internal static void Error(object data)
		{
			_logSource.LogError(data);
		}

		internal static void Fatal(object data)
		{
			_logSource.LogFatal(data);
		}

		internal static void Info(object data)
		{
			_logSource.LogInfo(data);
		}

		internal static void Message(object data)
		{
			_logSource.LogMessage(data);
		}

		internal static void Warning(object data)
		{
			_logSource.LogWarning(data);
		}
	}
}