Decompiled source of BingusModRevived v1.1.5

BingusMod.dll

Decompiled 3 weeks ago
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Logging;
using Microsoft.CodeAnalysis;
using On.RoR2;
using R2API;
using R2API.Utils;
using RiskyMod.Allies;
using RoR2;
using RoR2.CharacterAI;
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("BingusMod")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("BingusMod")]
[assembly: AssemblyTitle("BingusMod")]
[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 BingusMod
{
	internal class Assets
	{
		internal static GameObject BingusPrefab;

		internal static Sprite BingusIcon;

		internal static ItemDef BingusItemDef;

		private const string ModPrefix = "@BingusMod:";

		internal static void Init()
		{
			using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("BingusMod.ror2bingus"))
			{
				AssetBundle val = AssetBundle.LoadFromStream(stream);
				BingusPrefab = val.LoadAsset<GameObject>("Assets/Import/bingus/bingus.prefab");
				BingusIcon = val.LoadAsset<Sprite>("Assets/Import/bingus_icon/bingus_icon.png");
			}
			BingusAsRedTierItem();
			AddLanguageTokens();
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		internal static void RiskyModCompat(Inventory inv)
		{
			inv.GiveItem(AllyItems.AllyMarkerItem, 1);
			inv.GiveItem(AllyItems.AllyScalingItem, 1);
			inv.GiveItem(AllyItems.AllyRegenItem, 40);
			inv.GiveItem(AllyItems.AllyAllowVoidDeathItem, 1);
		}

		private static void BingusAsRedTierItem()
		{
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_0118: Expected O, but got Unknown
			//IL_012e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0138: Expected O, but got Unknown
			BingusItemDef = ScriptableObject.CreateInstance<ItemDef>();
			ItemDef bingusItemDef = BingusItemDef;
			((Object)bingusItemDef).name = "BINGUS";
			bingusItemDef.deprecatedTier = (ItemTier)2;
			bingusItemDef.pickupModelPrefab = BingusPrefab;
			bingusItemDef.pickupIconSprite = BingusIcon;
			bingusItemDef.nameToken = "Bingus";
			bingusItemDef.pickupToken = "Entering low health state charms enemies";
			bingusItemDef.descriptionToken = "Entering <style=cDeath>low health state</style> charms <style=cIsUtility>2</style> enemies <style=cStack>(+1 per stack)</style>. Why? because they are stupid and think bingus squish is cute.";
			bingusItemDef.loreToken = "do not let its look fool you, it's a class-534 threat.";
			ItemTag[] array = new ItemTag[4];
			RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
			bingusItemDef.tags = (ItemTag[])(object)array;
			ItemDisplayRule[] array2 = (ItemDisplayRule[])(object)new ItemDisplayRule[1];
			array2[0].followerPrefab = BingusPrefab;
			array2[0].childName = "Head";
			array2[0].localScale = new Vector3(1f, 1f, 1f);
			array2[0].localAngles = new Vector3(-90f, 0f, 0f);
			array2[0].localPos = new Vector3(0f, -0.25f, -0.34f);
			CustomItem val = new CustomItem(BingusItemDef, array2);
			bool flag = ItemAPI.Add(val);
			bool debounce = false;
			HealthComponent.FixedUpdate += (hook_FixedUpdate)delegate(orig_FixedUpdate orig, HealthComponent self)
			{
				//IL_0082: Unknown result type (might be due to invalid IL or missing references)
				//IL_0089: Expected O, but got Unknown
				//IL_0270: Unknown result type (might be due to invalid IL or missing references)
				//IL_0276: Invalid comparison between Unknown and I4
				if (((object)self).Equals((object?)null) || !self.body.isPlayerControlled)
				{
					orig.Invoke(self);
				}
				else
				{
					CharacterBody body = self.body;
					if (body.inventory.GetItemCount(BingusItemDef) > 0)
					{
						if (self.isHealthLow && !debounce)
						{
							Random random = new Random();
							debounce = true;
							for (int i = 0; i <= body.inventory.GetItemCount(BingusItemDef); i++)
							{
								TeamComponent val2 = new TeamComponent();
								try
								{
									if (TeamComponent.GetTeamMembers((TeamIndex)2).Count == 0)
									{
										orig.Invoke(self);
										return;
									}
									val2 = TeamComponent.GetTeamMembers((TeamIndex)2)[random.Next(1, TeamComponent.GetTeamMembers((TeamIndex)2).Count)];
									if (!((Object)(object)((Component)val2.body).gameObject.transform == (Object)null))
									{
										if (val2.body.master.isBoss)
										{
											val2 = TeamComponent.GetTeamMembers((TeamIndex)2)[random.Next(1, TeamComponent.GetTeamMembers((TeamIndex)2).Count)];
										}
										goto IL_0132;
									}
								}
								catch (ArgumentOutOfRangeException)
								{
								}
								continue;
								IL_0132:
								BaseAI component = ((Component)val2.body.master).GetComponent<BaseAI>();
								val2.body.master.teamIndex = (TeamIndex)1;
								val2.body.teamComponent.teamIndex = (TeamIndex)1;
								if (Chainloader.PluginInfos.ContainsKey("com.RiskyLives.RiskyMod") && Object.op_Implicit((Object)(object)val2.body.inventory))
								{
									RiskyModCompat(val2.body.inventory);
								}
								component.currentEnemy.Reset();
								component.ForceAcquireNearestEnemyIfNoCurrentEnemy();
							}
						}
						if (!self.isHealthLow && debounce)
						{
							debounce = false;
						}
						for (int j = 0; j < TeamComponent.GetTeamMembers((TeamIndex)1).Count; j++)
						{
							TeamComponent val3 = TeamComponent.GetTeamMembers((TeamIndex)1)[j];
							if (!val3.body.isPlayerControlled && !((Object)(object)((Component)body).gameObject.transform != (Object)null))
							{
								BaseAI component2 = val3.body.masterObject.GetComponent<BaseAI>();
								if ((int)component2.currentEnemy.characterBody.teamComponent.teamIndex == 1)
								{
									component2.currentEnemy.Reset();
									component2.ForceAcquireNearestEnemyIfNoCurrentEnemy();
								}
							}
						}
					}
					orig.Invoke(self);
				}
			};
		}

		private static void AddLanguageTokens()
		{
			LanguageAPI.Add("BINGUS_NAME", "Bingus");
			LanguageAPI.Add("BINGUS_PICKUP", "Entering <style=cDeath>low health state</style> state charms enemies");
			LanguageAPI.Add("BINGUS_DESC", "Entering <style=cDeath>low health state</style> charms <style=cIsUtility>2</style> enemies <style=cStack>(+1 per stack)</style>. Why? because they are stupid and think bingus squish is cute.");
			LanguageAPI.Add("BINGUS_LORE", "do not let its look fool you, it's a class-534 threat.");
		}
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[R2APISubmoduleDependency(new string[] { "ItemAPI", "LanguageAPI" })]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.phreel.bingusmodrevived", "Bingus Mod", "1.1.5")]
	public class CustomItem : BaseUnityPlugin
	{
		private const string ModVer = "1.1.5";

		private const string ModName = "Bingus Mod";

		public const string ModGuid = "com.phreel.bingusmodrevived";

		internal static ManualLogSource Logger;

		public void Awake()
		{
			Logger = ((BaseUnityPlugin)this).Logger;
			Assets.Init();
		}
	}
}