Decompiled source of Crystalide v1.0.5

plugins/Crystalide.dll

Decompiled a month ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Logging;
using Microsoft.CodeAnalysis;
using On.RoR2;
using R2API;
using RoR2;
using RoR2.ExpansionManagement;
using UnityEngine;
using UnityEngine.AddressableAssets;
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("Crystalide")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+80da98228d2d251edde3bef448ab483217be6ff7")]
[assembly: AssemblyProduct("Crystalide")]
[assembly: AssemblyTitle("Crystalide")]
[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 ExamplePlugin
{
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("Lembont.Crystalide", "Crystalide", "1.0.5")]
	public class Crystalide : BaseUnityPlugin
	{
		public const string PluginGUID = "Lembont.Crystalide";

		public const string PluginAuthor = "Lembont";

		public const string PluginName = "Crystalide";

		public const string PluginVersion = "1.0.5";

		public static readonly List<ItemIndex> GloballyClaimedGospelTypes = new List<ItemIndex>();

		private static List<ItemDef> AllGospelItemDefs = new List<ItemDef>();

		public void Awake()
		{
			//IL_0198: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a2: Expected O, but got Unknown
			Log.Init(((BaseUnityPlugin)this).Logger);
			string text = "Crystalide.Language.culpability.language";
			try
			{
				using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(text);
				if (stream == null)
				{
					Log.Error("Cannot find embedded language resource: " + text + ". Stream is null.");
				}
				else
				{
					using StreamReader streamReader = new StreamReader(stream);
					string text2 = streamReader.ReadToEnd();
					if (!string.IsNullOrWhiteSpace(text2))
					{
						LanguageAPI.Add(text2);
					}
				}
			}
			catch (Exception arg)
			{
				Log.Error($"Error loading embedded language resource: {text}\n{arg}");
			}
			CulpabilityPowerItem.Init();
			EvangileJalousieItem.Init();
			IrresponsabiliteEvangileItem.Init();
			EvangileTimiditeItem.Init();
			EvangileReveurItem.Init();
			EvangileEchecItem.Init();
			if ((Object)(object)CulpabilityPowerItem.CulpabilityPowerDef != (Object)null)
			{
				AllGospelItemDefs.Add(CulpabilityPowerItem.CulpabilityPowerDef);
			}
			if ((Object)(object)EvangileJalousieItem.EvangileJalousieDef != (Object)null)
			{
				AllGospelItemDefs.Add(EvangileJalousieItem.EvangileJalousieDef);
			}
			if ((Object)(object)IrresponsabiliteEvangileItem.IrresponsabiliteEvangileDef != (Object)null)
			{
				AllGospelItemDefs.Add(IrresponsabiliteEvangileItem.IrresponsabiliteEvangileDef);
			}
			if ((Object)(object)EvangileTimiditeItem.EvangileTimiditeDef != (Object)null)
			{
				AllGospelItemDefs.Add(EvangileTimiditeItem.EvangileTimiditeDef);
			}
			if ((Object)(object)EvangileReveurItem.EvangileReveurDef != (Object)null)
			{
				AllGospelItemDefs.Add(EvangileReveurItem.EvangileReveurDef);
			}
			if ((Object)(object)EvangileEchecItem.EvangileEchecDef != (Object)null)
			{
				AllGospelItemDefs.Add(EvangileEchecItem.EvangileEchecDef);
			}
			Inventory.GiveItem_ItemIndex_int += new hook_GiveItem_ItemIndex_int(Hook_Inventory_GiveItem_EvangileRules);
			Run.onRunStartGlobal += Run_onRunStartGlobal_AddCustomItemsToDropPoolsAndResetClaimedGospels;
			Log.Info("Mod Crystalide Initialized");
		}

		private void Run_onRunStartGlobal_AddCustomItemsToDropPoolsAndResetClaimedGospels(Run run)
		{
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Invalid comparison between Unknown and I4
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dd: Invalid comparison between Unknown and I4
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_017d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0183: Invalid comparison between Unknown and I4
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_0133: Unknown result type (might be due to invalid IL or missing references)
			//IL_019a: Unknown result type (might be due to invalid IL or missing references)
			//IL_019f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0287: Unknown result type (might be due to invalid IL or missing references)
			//IL_028d: Invalid comparison between Unknown and I4
			//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0206: Unknown result type (might be due to invalid IL or missing references)
			//IL_0208: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_02af: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0397: Unknown result type (might be due to invalid IL or missing references)
			//IL_039c: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cf: Invalid comparison between Unknown and I4
			//IL_031c: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0406: Unknown result type (might be due to invalid IL or missing references)
			//IL_0408: Unknown result type (might be due to invalid IL or missing references)
			//IL_0333: Unknown result type (might be due to invalid IL or missing references)
			//IL_0429: Unknown result type (might be due to invalid IL or missing references)
			//IL_0440: Unknown result type (might be due to invalid IL or missing references)
			//IL_048e: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_052e: Unknown result type (might be due to invalid IL or missing references)
			GloballyClaimedGospelTypes.Clear();
			Log.Info("Crystalide: Globally claimed Gospel list cleared for new run.");
			if ((Object)(object)run == (Object)null)
			{
				return;
			}
			if ((Object)(object)CulpabilityPowerItem.CulpabilityPowerDef != (Object)null && (int)CulpabilityPowerItem.CulpabilityPowerDef.itemIndex != -1)
			{
				PickupIndex val = PickupCatalog.FindPickupIndex(CulpabilityPowerItem.CulpabilityPowerDef.itemIndex);
				if (val != PickupIndex.none && run.availableTier3DropList != null && !run.availableTier3DropList.Contains(val))
				{
					run.availableTier3DropList.Add(val);
					Log.Info("Crystalide: Added " + CulpabilityPowerItem.CulpabilityPowerDef.nameToken + " to Tier 3 drop pool.");
				}
			}
			else
			{
				Log.Warning("Crystalide: CulpabilityPowerDef is null or has invalid itemIndex, cannot add to drop pool.");
			}
			if ((Object)(object)EvangileTimiditeItem.EvangileTimiditeDef != (Object)null && (int)EvangileTimiditeItem.EvangileTimiditeDef.itemIndex != -1)
			{
				PickupIndex val2 = PickupCatalog.FindPickupIndex(EvangileTimiditeItem.EvangileTimiditeDef.itemIndex);
				if (val2 != PickupIndex.none && run.availableTier1DropList != null && !run.availableTier1DropList.Contains(val2))
				{
					run.availableTier1DropList.Add(val2);
					Log.Info("Crystalide: Added " + EvangileTimiditeItem.EvangileTimiditeDef.nameToken + " to Tier 1 drop pool.");
				}
			}
			else
			{
				Log.Warning("Crystalide: EvangileTimiditeDef is null or has invalid itemIndex, cannot add to Tier 1 drop pool.");
			}
			if ((Object)(object)EvangileEchecItem.EvangileEchecDef != (Object)null && (int)EvangileEchecItem.EvangileEchecDef.itemIndex != -1)
			{
				PickupIndex val3 = PickupCatalog.FindPickupIndex(EvangileEchecItem.EvangileEchecDef.itemIndex);
				if (val3 != PickupIndex.none && run.availableTier1DropList != null && !run.availableTier1DropList.Contains(val3))
				{
					run.availableTier1DropList.Add(val3);
					Log.Info("Crystalide: Added " + EvangileEchecItem.EvangileEchecDef.nameToken + " to Tier 1 drop pool.");
				}
				else if (val3 == PickupIndex.none)
				{
					Log.Warning("Crystalide: EvangileEchecDef '" + EvangileEchecItem.EvangileEchecDef.nameToken + "' has valid ItemDef and itemIndex, but PickupCatalog.FindPickupIndex returned none. Item might not be registered with PickupCatalog correctly.");
				}
				else if (run.availableTier1DropList == null)
				{
					Log.Warning("Crystalide: EvangileEchecDef '" + EvangileEchecItem.EvangileEchecDef.nameToken + "' - run.availableTier1DropList is null.");
				}
			}
			else
			{
				Log.Warning("Crystalide: EvangileEchecDef is null or has invalid itemIndex, cannot add to Tier 1 drop pool.");
			}
			ItemDef irresponsabiliteEvangileDef = IrresponsabiliteEvangileItem.IrresponsabiliteEvangileDef;
			if (irresponsabiliteEvangileDef == null || (int)irresponsabiliteEvangileDef.itemIndex != -1)
			{
				PickupIndex val4 = PickupCatalog.FindPickupIndex(IrresponsabiliteEvangileItem.IrresponsabiliteEvangileDef.itemIndex);
				if (val4 != PickupIndex.none)
				{
					List<PickupIndex> availableLunarCombinedDropList = run.availableLunarCombinedDropList;
					if (availableLunarCombinedDropList != null && !availableLunarCombinedDropList.Contains(val4))
					{
						run.availableLunarCombinedDropList.Add(val4);
						Log.Info("Crystalide: Added " + IrresponsabiliteEvangileItem.IrresponsabiliteEvangileDef.nameToken + " to Lunar Combined (Pods) drop pool.");
					}
					List<PickupIndex> availableLunarItemDropList = run.availableLunarItemDropList;
					if (availableLunarItemDropList != null && !availableLunarItemDropList.Contains(val4))
					{
						run.availableLunarItemDropList.Add(val4);
						Log.Info("Crystalide: Added " + IrresponsabiliteEvangileItem.IrresponsabiliteEvangileDef.nameToken + " to general Lunar Item drop pool.");
					}
				}
			}
			string obj = (((Object)(object)EvangileReveurItem.EvangileReveurDef == (Object)null) ? "NULL" : EvangileReveurItem.EvangileReveurDef.nameToken);
			object obj2;
			if (!((Object)(object)EvangileReveurItem.EvangileReveurDef == (Object)null))
			{
				ItemIndex itemIndex = EvangileReveurItem.EvangileReveurDef.itemIndex;
				obj2 = ((object)(ItemIndex)(ref itemIndex)).ToString();
			}
			else
			{
				obj2 = "N/A";
			}
			Log.Info("Crystalide: EvangileReveur - Pre-check Def: " + obj + ", ItemIndex: " + (string?)obj2);
			ItemDef evangileReveurDef = EvangileReveurItem.EvangileReveurDef;
			if (evangileReveurDef == null || (int)evangileReveurDef.itemIndex != -1)
			{
				PickupIndex val5 = PickupCatalog.FindPickupIndex(EvangileReveurItem.EvangileReveurDef.itemIndex);
				Log.Info($"Crystalide: EvangileReveur - PickupIndex found: {val5}");
				if (val5 != PickupIndex.none)
				{
					List<PickupIndex> availableLunarCombinedDropList2 = run.availableLunarCombinedDropList;
					if (availableLunarCombinedDropList2 != null && !availableLunarCombinedDropList2.Contains(val5))
					{
						run.availableLunarCombinedDropList.Add(val5);
						Log.Info("Crystalide: Added " + EvangileReveurItem.EvangileReveurDef.nameToken + " to Lunar Combined (Pods) drop pool.");
					}
					else if (run.availableLunarCombinedDropList == null)
					{
						Log.Warning("Crystalide: EvangileReveur - availableLunarCombinedDropList is null.");
					}
					else if (run.availableLunarCombinedDropList.Contains(val5))
					{
						Log.Info("Crystalide: EvangileReveur - Already in Lunar Combined (Pods) drop pool: " + EvangileReveurItem.EvangileReveurDef.nameToken + ".");
					}
					List<PickupIndex> availableLunarItemDropList2 = run.availableLunarItemDropList;
					if (availableLunarItemDropList2 != null && !availableLunarItemDropList2.Contains(val5))
					{
						run.availableLunarItemDropList.Add(val5);
						Log.Info("Crystalide: Added " + EvangileReveurItem.EvangileReveurDef.nameToken + " to general Lunar Item drop pool.");
					}
					else if (run.availableLunarItemDropList == null)
					{
						Log.Warning("Crystalide: EvangileReveur - availableLunarItemDropList is null.");
					}
					else if (run.availableLunarItemDropList.Contains(val5))
					{
						Log.Info("Crystalide: EvangileReveur - Already in general Lunar Item drop pool: " + EvangileReveurItem.EvangileReveurDef.nameToken + ".");
					}
				}
				else
				{
					Log.Error("Crystalide: EvangileReveur - PickupIndex.none for '" + EvangileReveurItem.EvangileReveurDef.nameToken + "'. Item may not be registered correctly, or PickupCatalog issue.");
				}
			}
			else
			{
				Log.Error("Crystalide: EvangileReveur - Def is null or itemIndex is None at primary check. Cannot add to pools.");
			}
		}

		private void Hook_Inventory_GiveItem_EvangileRules(orig_GiveItem_ItemIndex_int orig, Inventory self, ItemIndex itemIndex, int count)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0306: Unknown result type (might be due to invalid IL or missing references)
			//IL_0323: Unknown result type (might be due to invalid IL or missing references)
			//IL_033a: Unknown result type (might be due to invalid IL or missing references)
			//IL_027b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0281: Unknown result type (might be due to invalid IL or missing references)
			//IL_028b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0164: Unknown result type (might be due to invalid IL or missing references)
			CharacterMaster component = ((Component)self).GetComponent<CharacterMaster>();
			if ((Object)(object)((component != null) ? component.playerCharacterMasterController : null) == (Object)null && !((Object)((Component)self).gameObject).name.Contains("Shrine.Triple"))
			{
				orig.Invoke(self, itemIndex, count);
				return;
			}
			ItemDef itemDef = ItemCatalog.GetItemDef(itemIndex);
			if ((Object)(object)itemDef == (Object)null)
			{
				orig.Invoke(self, itemIndex, count);
				return;
			}
			bool flag = AllGospelItemDefs.Exists((ItemDef gospelDef) => gospelDef.itemIndex == itemIndex);
			if (flag && GloballyClaimedGospelTypes.Contains(itemIndex) && self.GetItemCount(itemIndex) == 0)
			{
				CharacterMaster component2 = ((Component)self).GetComponent<CharacterMaster>();
				bool flag2 = false;
				bool flag3 = false;
				if ((Object)(object)component2 != (Object)null)
				{
					foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances)
					{
						if ((Object)(object)instance.master != (Object)null && (Object)(object)instance.master.inventory != (Object)null && (Object)(object)instance.master != (Object)(object)component2 && instance.master.inventory.GetItemCount(itemIndex) > 0)
						{
							flag3 = true;
							break;
						}
					}
				}
				else
				{
					flag3 = true;
				}
				if (!flag3)
				{
					flag2 = true;
				}
				if (!flag2)
				{
					SendGospelTypeClaimedMessage(itemDef.nameToken);
					return;
				}
			}
			List<ItemDef> list = new List<ItemDef>
			{
				CulpabilityPowerItem.CulpabilityPowerDef,
				EvangileJalousieItem.EvangileJalousieDef,
				IrresponsabiliteEvangileItem.IrresponsabiliteEvangileDef,
				EvangileReveurItem.EvangileReveurDef,
				EvangileTimiditeItem.EvangileTimiditeDef,
				EvangileEchecItem.EvangileEchecDef
			};
			list.RemoveAll((ItemDef item) => (Object)(object)item == (Object)null);
			if (list.Exists((ItemDef gospelDef) => gospelDef.itemIndex == itemIndex))
			{
				bool flag4 = false;
				foreach (ItemDef item in list)
				{
					if (item.itemIndex != itemIndex && self.GetItemCount(item.itemIndex) > 0)
					{
						flag4 = true;
						break;
					}
				}
				if (flag4)
				{
					SendGospelExclusiveConflictMessage(itemDef.nameToken);
					return;
				}
			}
			orig.Invoke(self, itemIndex, count);
			if (flag && self.GetItemCount(itemIndex) > 0 && !GloballyClaimedGospelTypes.Contains(itemIndex))
			{
				GloballyClaimedGospelTypes.Add(itemIndex);
				string nameToken = itemDef.nameToken;
				object arg = itemIndex;
				CharacterMaster component3 = ((Component)self).GetComponent<CharacterMaster>();
				object arg2;
				if (component3 == null)
				{
					arg2 = null;
				}
				else
				{
					CharacterBody body = component3.GetBody();
					arg2 = ((body != null) ? body.GetUserName() : null);
				}
				Log.Info($"Crystalide: Gospel type {nameToken} (ItemIndex: {arg}) has been globally claimed by {arg2}.");
			}
		}

		private void SendGospelTypeClaimedMessage(string attemptedItemNameToken)
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			if (NetworkServer.active)
			{
				SimpleChatMessage val = new SimpleChatMessage();
				val.baseToken = "<color=#FFD700>Cet type d'Évangile ({0}) a déjà été réclamé par un autre joueur cette partie.</color>";
				val.paramTokens = new string[1] { Language.GetString(attemptedItemNameToken) };
				Chat.SendBroadcastChat((ChatMessageBase)(object)val);
			}
		}

		private void SendGospelExclusiveConflictMessage(string attemptedItemNameToken)
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			if (NetworkServer.active)
			{
				SimpleChatMessage val = new SimpleChatMessage();
				val.baseToken = "<color=#FF7F50>Vous possédez déjà un autre Évangile majeur. Impossible de ramasser {0}.</color>";
				val.paramTokens = new string[1] { Language.GetString(attemptedItemNameToken) };
				Chat.SendBroadcastChat((ChatMessageBase)(object)val);
			}
		}

		private void Update()
		{
			if (!Input.GetKeyDown((KeyCode)287))
			{
			}
		}

		private void SpawnItemForPlayer(ItemDef itemDefToSpawn, string itemNameForLog)
		{
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			if (PlayerCharacterMasterController.instances.Count > 0)
			{
				CharacterMaster master = PlayerCharacterMasterController.instances[0].master;
				if (Object.op_Implicit((Object)(object)master) && Object.op_Implicit((Object)(object)master.GetBodyObject()))
				{
					Transform transform = master.GetBodyObject().transform;
					Log.Info($"Player pressed key. Spawning {itemNameForLog} at coordinates {transform.position}");
					PickupDropletController.CreatePickupDroplet(PickupCatalog.FindPickupIndex(itemDefToSpawn.itemIndex), transform.position, transform.forward * 20f);
				}
				else
				{
					Log.Info("Player pressed key, but no player body found to spawn " + itemNameForLog + ".");
				}
			}
			else
			{
				Log.Info("Player pressed key, but no PlayerCharacterMasterController instance found to spawn " + itemNameForLog + ".");
			}
		}

		public static bool DoesPlayerHaveAnyGospelItem(CharacterBody playerBody)
		{
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)playerBody == (Object)null || (Object)(object)playerBody.inventory == (Object)null || AllGospelItemDefs == null)
			{
				return false;
			}
			foreach (ItemDef allGospelItemDef in AllGospelItemDefs)
			{
				if ((Object)(object)allGospelItemDef != (Object)null && playerBody.inventory.GetItemCount(allGospelItemDef.itemIndex) > 0)
				{
					return true;
				}
			}
			return false;
		}
	}
	public static class CulpabilityPowerItem
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_RecalculateStats <0>__CharacterBody_RecalculateStats;

			public static Action<DamageReport> <1>__GlobalEventManager_onCharacterDeathGlobal;

			public static hook_OnDeathStart <2>__CharacterBody_OnDeathStart;

			public static hook_BeginStage <3>__Run_BeginStage_ResetStacks;
		}

		public static ItemDef CulpabilityPowerDef;

		public static BuffDef CulpabilityStacksBuff;

		public static AssetBundle CulpabilityAssetBundle;

		public static GameObject CulpabilityModelPrefab;

		public static Sprite CulpabilityIconSprite;

		public const int STACKS_PER_ITEM_LIMIT = 120;

		private const float STAT_PERCENTAGE_BONUS_PER_STACK = 0.012f;

		private const float FLAT_ARMOR_BONUS_PER_STACK = 0.5f;

		private const float FLAT_REGEN_BONUS_PER_STACK = 0.1f;

		private const float CRIT_CHANCE_BONUS_PER_STACK = 0.05f;

		public static void Init()
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_013f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_018d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0192: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dc: Expected O, but got Unknown
			//IL_01ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0228: Unknown result type (might be due to invalid IL or missing references)
			//IL_022d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0243: Unknown result type (might be due to invalid IL or missing references)
			//IL_0248: Unknown result type (might be due to invalid IL or missing references)
			//IL_025e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0263: Unknown result type (might be due to invalid IL or missing references)
			//IL_0268: Unknown result type (might be due to invalid IL or missing references)
			//IL_026a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0285: Unknown result type (might be due to invalid IL or missing references)
			//IL_028e: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0301: Unknown result type (might be due to invalid IL or missing references)
			//IL_0303: Unknown result type (might be due to invalid IL or missing references)
			//IL_031e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0327: Unknown result type (might be due to invalid IL or missing references)
			//IL_0349: Unknown result type (might be due to invalid IL or missing references)
			//IL_034e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0364: Unknown result type (might be due to invalid IL or missing references)
			//IL_0369: Unknown result type (might be due to invalid IL or missing references)
			//IL_037f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0384: Unknown result type (might be due to invalid IL or missing references)
			//IL_0389: Unknown result type (might be due to invalid IL or missing references)
			//IL_038b: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03af: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0407: Unknown result type (might be due to invalid IL or missing references)
			//IL_040c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0411: Unknown result type (might be due to invalid IL or missing references)
			//IL_0413: Unknown result type (might be due to invalid IL or missing references)
			//IL_042e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0437: Unknown result type (might be due to invalid IL or missing references)
			//IL_0459: Unknown result type (might be due to invalid IL or missing references)
			//IL_045e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0474: Unknown result type (might be due to invalid IL or missing references)
			//IL_0479: Unknown result type (might be due to invalid IL or missing references)
			//IL_048f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0494: Unknown result type (might be due to invalid IL or missing references)
			//IL_0499: Unknown result type (might be due to invalid IL or missing references)
			//IL_049b: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_04bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_050c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0515: Unknown result type (might be due to invalid IL or missing references)
			//IL_0537: Unknown result type (might be due to invalid IL or missing references)
			//IL_053c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0552: Unknown result type (might be due to invalid IL or missing references)
			//IL_0557: Unknown result type (might be due to invalid IL or missing references)
			//IL_056d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0572: Unknown result type (might be due to invalid IL or missing references)
			//IL_0577: Unknown result type (might be due to invalid IL or missing references)
			//IL_0579: Unknown result type (might be due to invalid IL or missing references)
			//IL_0594: Unknown result type (might be due to invalid IL or missing references)
			//IL_059d: Unknown result type (might be due to invalid IL or missing references)
			//IL_05bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_05c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_05da: Unknown result type (might be due to invalid IL or missing references)
			//IL_05df: Unknown result type (might be due to invalid IL or missing references)
			//IL_05f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_05fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0601: Unknown result type (might be due to invalid IL or missing references)
			//IL_061c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0625: Unknown result type (might be due to invalid IL or missing references)
			//IL_0647: Unknown result type (might be due to invalid IL or missing references)
			//IL_064c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0662: Unknown result type (might be due to invalid IL or missing references)
			//IL_0667: Unknown result type (might be due to invalid IL or missing references)
			//IL_067d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0682: Unknown result type (might be due to invalid IL or missing references)
			//IL_0687: Unknown result type (might be due to invalid IL or missing references)
			//IL_0689: Unknown result type (might be due to invalid IL or missing references)
			//IL_06a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_06cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_06d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_0705: Unknown result type (might be due to invalid IL or missing references)
			//IL_070a: Unknown result type (might be due to invalid IL or missing references)
			//IL_070f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0711: Unknown result type (might be due to invalid IL or missing references)
			//IL_072c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0735: Unknown result type (might be due to invalid IL or missing references)
			//IL_0757: Unknown result type (might be due to invalid IL or missing references)
			//IL_075c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0772: Unknown result type (might be due to invalid IL or missing references)
			//IL_0777: Unknown result type (might be due to invalid IL or missing references)
			//IL_078d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0792: Unknown result type (might be due to invalid IL or missing references)
			//IL_0797: Unknown result type (might be due to invalid IL or missing references)
			//IL_0799: Unknown result type (might be due to invalid IL or missing references)
			//IL_07b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_07bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_07df: Unknown result type (might be due to invalid IL or missing references)
			//IL_07e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_07fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_07ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0815: Unknown result type (might be due to invalid IL or missing references)
			//IL_081a: Unknown result type (might be due to invalid IL or missing references)
			//IL_081f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0821: Unknown result type (might be due to invalid IL or missing references)
			//IL_083c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0845: Unknown result type (might be due to invalid IL or missing references)
			//IL_084a: Unknown result type (might be due to invalid IL or missing references)
			//IL_084c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0867: Unknown result type (might be due to invalid IL or missing references)
			//IL_0870: Unknown result type (might be due to invalid IL or missing references)
			//IL_0875: Unknown result type (might be due to invalid IL or missing references)
			//IL_0877: Unknown result type (might be due to invalid IL or missing references)
			//IL_0892: Unknown result type (might be due to invalid IL or missing references)
			//IL_089b: Unknown result type (might be due to invalid IL or missing references)
			//IL_08bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_08c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_08d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_08dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_08f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_08f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_08fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_08ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_091a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0923: Unknown result type (might be due to invalid IL or missing references)
			//IL_0945: Unknown result type (might be due to invalid IL or missing references)
			//IL_094a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0960: Unknown result type (might be due to invalid IL or missing references)
			//IL_0965: Unknown result type (might be due to invalid IL or missing references)
			//IL_097b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0980: Unknown result type (might be due to invalid IL or missing references)
			//IL_0985: Unknown result type (might be due to invalid IL or missing references)
			//IL_0987: Unknown result type (might be due to invalid IL or missing references)
			//IL_09bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_09c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_09f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_09fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a12: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a17: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a2d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a32: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a37: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a39: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a6e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a77: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aaa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aaf: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ac5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aca: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ae0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ae5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aea: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aec: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b21: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b2a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b5d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b62: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b78: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b7d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b93: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b98: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b9d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b9f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bd4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bdd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c10: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c15: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c2b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c30: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c46: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c4b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c50: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c52: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c87: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c90: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cc3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cc8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cde: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ce3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cf9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cfe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d03: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d05: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d3a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d43: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d76: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d7b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d91: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d96: Unknown result type (might be due to invalid IL or missing references)
			//IL_0dac: Unknown result type (might be due to invalid IL or missing references)
			//IL_0db1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0db6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0db8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ded: Unknown result type (might be due to invalid IL or missing references)
			//IL_0df6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e29: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e2e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e44: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e49: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e5f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e64: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e69: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e6b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ea0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ea9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0edc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ee1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ef7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0efc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f12: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f17: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f1c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f1e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f53: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f5c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f8f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f94: Unknown result type (might be due to invalid IL or missing references)
			//IL_0faa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0faf: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fc5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fca: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fcf: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fd1: Unknown result type (might be due to invalid IL or missing references)
			//IL_1006: Unknown result type (might be due to invalid IL or missing references)
			//IL_100f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1042: Unknown result type (might be due to invalid IL or missing references)
			//IL_1047: Unknown result type (might be due to invalid IL or missing references)
			//IL_105d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1062: Unknown result type (might be due to invalid IL or missing references)
			//IL_1078: Unknown result type (might be due to invalid IL or missing references)
			//IL_107d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1082: Unknown result type (might be due to invalid IL or missing references)
			//IL_1084: Unknown result type (might be due to invalid IL or missing references)
			//IL_10b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_10c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_10f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_10fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_1110: Unknown result type (might be due to invalid IL or missing references)
			//IL_1115: Unknown result type (might be due to invalid IL or missing references)
			//IL_112b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1130: Unknown result type (might be due to invalid IL or missing references)
			//IL_1135: Unknown result type (might be due to invalid IL or missing references)
			//IL_1137: Unknown result type (might be due to invalid IL or missing references)
			//IL_116c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1175: Unknown result type (might be due to invalid IL or missing references)
			//IL_11a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_11ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_11c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_11c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_11de: Unknown result type (might be due to invalid IL or missing references)
			//IL_11e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_11e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_11ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_121f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1228: Unknown result type (might be due to invalid IL or missing references)
			//IL_125b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1260: Unknown result type (might be due to invalid IL or missing references)
			//IL_1276: Unknown result type (might be due to invalid IL or missing references)
			//IL_127b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1291: Unknown result type (might be due to invalid IL or missing references)
			//IL_1296: Unknown result type (might be due to invalid IL or missing references)
			//IL_129b: Unknown result type (might be due to invalid IL or missing references)
			//IL_129d: Unknown result type (might be due to invalid IL or missing references)
			//IL_12d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_12db: Unknown result type (might be due to invalid IL or missing references)
			//IL_130e: Unknown result type (might be due to invalid IL or missing references)
			//IL_1313: Unknown result type (might be due to invalid IL or missing references)
			//IL_1329: Unknown result type (might be due to invalid IL or missing references)
			//IL_132e: Unknown result type (might be due to invalid IL or missing references)
			//IL_1344: Unknown result type (might be due to invalid IL or missing references)
			//IL_1349: Unknown result type (might be due to invalid IL or missing references)
			//IL_134e: Unknown result type (might be due to invalid IL or missing references)
			//IL_1350: Unknown result type (might be due to invalid IL or missing references)
			//IL_1385: Unknown result type (might be due to invalid IL or missing references)
			//IL_138e: Unknown result type (might be due to invalid IL or missing references)
			//IL_13c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_13c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_13dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_13e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_13f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_13fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_1401: Unknown result type (might be due to invalid IL or missing references)
			//IL_1403: Unknown result type (might be due to invalid IL or missing references)
			//IL_1438: Unknown result type (might be due to invalid IL or missing references)
			//IL_1441: Unknown result type (might be due to invalid IL or missing references)
			//IL_1474: Unknown result type (might be due to invalid IL or missing references)
			//IL_1479: Unknown result type (might be due to invalid IL or missing references)
			//IL_148f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1494: Unknown result type (might be due to invalid IL or missing references)
			//IL_14aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_14af: Unknown result type (might be due to invalid IL or missing references)
			//IL_14b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_14b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_14d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_14da: Unknown result type (might be due to invalid IL or missing references)
			//IL_150d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1512: Unknown result type (might be due to invalid IL or missing references)
			//IL_1528: Unknown result type (might be due to invalid IL or missing references)
			//IL_152d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1543: Unknown result type (might be due to invalid IL or missing references)
			//IL_1548: Unknown result type (might be due to invalid IL or missing references)
			//IL_154d: Unknown result type (might be due to invalid IL or missing references)
			//IL_154f: Unknown result type (might be due to invalid IL or missing references)
			//IL_156a: Unknown result type (might be due to invalid IL or missing references)
			//IL_1573: Unknown result type (might be due to invalid IL or missing references)
			//IL_15a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_15ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_15c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_15c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_15dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_15e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_15e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_15e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_161d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1626: Unknown result type (might be due to invalid IL or missing references)
			//IL_1659: Unknown result type (might be due to invalid IL or missing references)
			//IL_165e: Unknown result type (might be due to invalid IL or missing references)
			//IL_1674: Unknown result type (might be due to invalid IL or missing references)
			//IL_1679: Unknown result type (might be due to invalid IL or missing references)
			//IL_168f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1694: Unknown result type (might be due to invalid IL or missing references)
			//IL_1699: Unknown result type (might be due to invalid IL or missing references)
			//IL_169b: Unknown result type (might be due to invalid IL or missing references)
			//IL_16d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_16d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_170c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1711: Unknown result type (might be due to invalid IL or missing references)
			//IL_1727: Unknown result type (might be due to invalid IL or missing references)
			//IL_172c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1742: Unknown result type (might be due to invalid IL or missing references)
			//IL_1747: Unknown result type (might be due to invalid IL or missing references)
			//IL_174c: Unknown result type (might be due to invalid IL or missing references)
			//IL_174e: Unknown result type (might be due to invalid IL or missing references)
			//IL_1769: Unknown result type (might be due to invalid IL or missing references)
			//IL_1772: Unknown result type (might be due to invalid IL or missing references)
			//IL_17a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_17aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_17c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_17c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_17db: Unknown result type (might be due to invalid IL or missing references)
			//IL_17e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_17e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_17e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_181c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1825: Unknown result type (might be due to invalid IL or missing references)
			//IL_1858: Unknown result type (might be due to invalid IL or missing references)
			//IL_185d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1873: Unknown result type (might be due to invalid IL or missing references)
			//IL_1878: Unknown result type (might be due to invalid IL or missing references)
			//IL_188e: Unknown result type (might be due to invalid IL or missing references)
			//IL_1893: Unknown result type (might be due to invalid IL or missing references)
			//IL_1898: Unknown result type (might be due to invalid IL or missing references)
			//IL_189a: Unknown result type (might be due to invalid IL or missing references)
			//IL_18cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_18d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_190b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1910: Unknown result type (might be due to invalid IL or missing references)
			//IL_1926: Unknown result type (might be due to invalid IL or missing references)
			//IL_192b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1941: Unknown result type (might be due to invalid IL or missing references)
			//IL_1946: Unknown result type (might be due to invalid IL or missing references)
			//IL_194b: Unknown result type (might be due to invalid IL or missing references)
			//IL_194d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1982: Unknown result type (might be due to invalid IL or missing references)
			//IL_198b: Unknown result type (might be due to invalid IL or missing references)
			//IL_19be: Unknown result type (might be due to invalid IL or missing references)
			//IL_19c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_19d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_19de: Unknown result type (might be due to invalid IL or missing references)
			//IL_19f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_19f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_19fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_1a00: Unknown result type (might be due to invalid IL or missing references)
			//IL_1ac5: Unknown result type (might be due to invalid IL or missing references)
			//IL_1acf: Expected O, but got Unknown
			//IL_1a35: Unknown result type (might be due to invalid IL or missing references)
			//IL_1a3e: Unknown result type (might be due to invalid IL or missing references)
			//IL_1a71: Unknown result type (might be due to invalid IL or missing references)
			//IL_1a76: Unknown result type (might be due to invalid IL or missing references)
			//IL_1a8c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1a91: Unknown result type (might be due to invalid IL or missing references)
			//IL_1aa7: Unknown result type (might be due to invalid IL or missing references)
			//IL_1aac: Unknown result type (might be due to invalid IL or missing references)
			//IL_1ab1: Unknown result type (might be due to invalid IL or missing references)
			//IL_1ab3: Unknown result type (might be due to invalid IL or missing references)
			LoadAssetBundle();
			CulpabilityStacksBuff = ScriptableObject.CreateInstance<BuffDef>();
			((Object)CulpabilityStacksBuff).name = "Lembont_CulpabilityStacksVisualizer_Buff";
			CulpabilityStacksBuff.buffColor = Color.yellow;
			CulpabilityStacksBuff.canStack = true;
			CulpabilityStacksBuff.isDebuff = false;
			CulpabilityStacksBuff.iconSprite = LoadSpriteFromEmbeddedResource("Crystalide.Assets.Icons.CulpabilityPowerIcon.png");
			if ((Object)(object)CulpabilityStacksBuff.iconSprite == (Object)null)
			{
				CulpabilityStacksBuff.iconSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/MiscIcons/texMysteryIcon.png").WaitForCompletion();
			}
			ContentAddition.AddBuffDef(CulpabilityStacksBuff);
			CulpabilityPowerDef = ScriptableObject.CreateInstance<ItemDef>();
			((Object)CulpabilityPowerDef).name = "CulpabilityPower";
			CulpabilityPowerDef.nameToken = "CULPABILITYPOWER_NAME_TOKEN";
			CulpabilityPowerDef.pickupToken = "CULPABILITYPOWER_PICKUP_TOKEN";
			CulpabilityPowerDef.descriptionToken = "CULPABILITYPOWER_DESC_TOKEN";
			CulpabilityPowerDef.loreToken = "CULPABILITYPOWER_LORE_TOKEN";
			CulpabilityPowerDef.deprecatedTier = (ItemTier)2;
			CulpabilityIconSprite = LoadSpriteFromEmbeddedResource("Crystalide.Assets.Icons.culpabilite.png");
			if ((Object)(object)CulpabilityModelPrefab != (Object)null)
			{
				CulpabilityPowerDef.pickupModelPrefab = CulpabilityModelPrefab;
			}
			else
			{
				Log.Warning("CulpabilityPower: CulpabilityModelPrefab est null. Utilisation du modèle placeholder.");
				CulpabilityPowerDef.pickupModelPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mystery/PickupMystery.prefab").WaitForCompletion();
			}
			if ((Object)(object)CulpabilityIconSprite != (Object)null)
			{
				CulpabilityPowerDef.pickupIconSprite = CulpabilityIconSprite;
			}
			else
			{
				Log.Warning("CulpabilityPower: CulpabilityIconSprite est null lors de l'assignation à ItemDef. Utilisation de l'icône placeholder.");
				CulpabilityPowerDef.pickupIconSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/MiscIcons/texMysteryIcon.png").WaitForCompletion();
			}
			CulpabilityPowerDef.canRemove = true;
			CulpabilityPowerDef.hidden = false;
			ItemDef culpabilityPowerDef = CulpabilityPowerDef;
			ItemTag[] array = new ItemTag[4];
			RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
			culpabilityPowerDef.tags = (ItemTag[])(object)array;
			ItemDisplayRuleDict val = new ItemDisplayRuleDict(Array.Empty<ItemDisplayRule>());
			val.Add("CommandoBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
					childName = "UpperArmR",
					localPos = new Vector3(-0.06365f, -0.02321f, -0.01856f),
					localAngles = new Vector3(54.19046f, 190.3208f, 248.5293f),
					localScale = new Vector3(0.08f, 0.08f, 0.08f)
				}
			});
			val.Add("HuntressBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
					childName = "Head",
					localPos = new Vector3(-0.00114f, 0.26414f, 0.06766f),
					localAngles = new Vector3(30.72515f, 0.14565f, 359.9583f),
					localScale = new Vector3(0.08f, 0.08f, 0.08f)
				}
			});
			val.Add("Bandit2Body", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					childName = "Head",
					localPos = new Vector3(-0.00551f, 0.225f, -0.04185f),
					localAngles = new Vector3(339.6204f, 319.7188f, 26.15759f),
					localScale = new Vector3(0.08f, 0.08f, 0.08f)
				}
			});
			val.Add("ToolbotBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					childName = "Hip",
					localPos = new Vector3(0f, 0f, 0f),
					localAngles = new Vector3(0f, 0f, 0f),
					localScale = new Vector3(1f, 1f, 1f)
				}
			});
			val.Add("EngiBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					childName = "CannonHeadR",
					localPos = new Vector3(0.04082f, 0.46394f, -0.00611f),
					localAngles = new Vector3(0f, 0f, 0f),
					localScale = new Vector3(0.08f, 0.08f, 0.08f)
				}
			});
			val.Add("EngiTurretBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0
				}
			});
			val.Add("EngiWalkerTurretBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0
				}
			});
			val.Add("MageBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					childName = "Head",
					localPos = new Vector3(0.00773f, 0.15309f, -0.11082f),
					localAngles = new Vector3(23.54938f, 179.6357f, 179.783f),
					localScale = new Vector3(0.08f, 0.08f, 0.08f)
				}
			});
			val.Add("MercBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					childName = "Stomach",
					localPos = new Vector3(-0.00172f, -0.04511f, 0.20025f),
					localAngles = new Vector3(71.15586f, 359.8581f, 0.49037f),
					localScale = new Vector3(0.08f, 0.08f, 0.08f)
				}
			});
			val.Add("TreebotBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					childName = "HeadCenter",
					localPos = new Vector3(0.02081f, -0.02018f, -0.01053f),
					localAngles = new Vector3(2.61227f, 190.2326f, 177.6537f),
					localScale = new Vector3(0.10061f, 0.13847f, 0.11889f)
				}
			});
			val.Add("LoaderBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					childName = "Head",
					localPos = new Vector3(-0.00116f, 0.22048f, -0.00042f),
					localAngles = new Vector3(0f, 0f, 0f),
					localScale = new Vector3(0.08f, 0.08f, 0.08f)
				}
			});
			val.Add("CrocoBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					childName = "Head",
					localPos = new Vector3(0.01607f, 1.46076f, 1.23326f),
					localAngles = new Vector3(279.4615f, 177.1085f, 182.3127f),
					localScale = new Vector3(1f, 1f, 1f)
				}
			});
			val.Add("CaptainBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					childName = "HandL",
					localPos = new Vector3(0.048f, 0.4229f, 0.00391f),
					localAngles = new Vector3(0f, 0f, 0f),
					localScale = new Vector3(0.04f, 0.04f, 0.04f)
				}
			});
			val.Add("BrotherBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0
				}
			});
			val.Add("ScavBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0
				}
			});
			val.Add("RailgunnerBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					childName = "SMG",
					localPos = new Vector3(-0.20338f, -0.00074f, -2E-05f),
					localAngles = new Vector3(-4E-05f, -8E-05f, 94.08543f),
					localScale = new Vector3(0.04f, 0.04f, 0.04f)
				}
			});
			val.Add("VoidSurvivorBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					childName = "LargeExhaust2R",
					localPos = new Vector3(-0.0029f, 0.00296f, 0.03074f),
					localAngles = new Vector3(343.57f, 276.3782f, 204.0262f),
					localScale = new Vector3(0.04f, 0.04f, 0.04f)
				}
			});
			if (Chainloader.PluginInfos.ContainsKey("com.Bog.Deputy"))
			{
				val.Add("DeputyBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "Hat",
						localPos = new Vector3(0.00154f, 0.04695f, 0.12856f),
						localAngles = new Vector3(69.37428f, 1.98755f, 2.90977f),
						localScale = new Vector3(0.02f, 0.02f, 0.02f)
					}
				});
			}
			if (Chainloader.PluginInfos.ContainsKey("com.rob.Belmont"))
			{
				val.Add("RobBelmontBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "ShoulderR",
						localPos = new Vector3(-0.05175f, 0.15838f, -0.05589f),
						localAngles = new Vector3(282.753f, 27.60862f, 5.68823f),
						localScale = new Vector3(0.1f, 0.1f, 0.1f)
					}
				});
			}
			if (Chainloader.PluginInfos.ContainsKey("com.rob.Driver"))
			{
				val.Add("RobDriverBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "Head",
						localPos = new Vector3(0.01165f, 0.05554f, 0.07947f),
						localAngles = new Vector3(300.8678f, 358.0778f, 0.85306f),
						localScale = new Vector3(0.08f, 0.08f, 0.08f)
					}
				});
			}
			if (Chainloader.PluginInfos.ContainsKey("com.EnforcerGang.Pilot"))
			{
				val.Add("EnforcerBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "ShieldModel",
						localPos = new Vector3(-0.77723f, 0f, 0.97439f),
						localAngles = new Vector3(-3E-05f, 11.60131f, 72.16445f),
						localScale = new Vector3(0.08f, 0.06194f, 0.08f)
					}
				});
			}
			if (Chainloader.PluginInfos.ContainsKey("com.Moonlol.UnofficialRiskOfRuina"))
			{
				val.Add("ArbiterBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "Head",
						localPos = new Vector3(0f, 0.08014f, -0.05398f),
						localAngles = new Vector3(76.1684f, -0.00013f, -0.00017f),
						localScale = new Vector3(0.08815f, 0.07864f, 0.07864f)
					}
				});
			}
			if (Chainloader.PluginInfos.ContainsKey("com.kenko.Seamstress"))
			{
				val.Add("SeamstressBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "Chest",
						localPos = new Vector3(-0.00807f, 0.25432f, 0.10004f),
						localAngles = new Vector3(65.41474f, 15.3731f, 23.01377f),
						localScale = new Vector3(0.08f, 0.08f, 0.08f)
					}
				});
			}
			if (Chainloader.PluginInfos.ContainsKey("com.kenko.Cadet"))
			{
				val.Add("CadetBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "Chest",
						localPos = new Vector3(0f, 0f, 0f),
						localAngles = new Vector3(0f, 0f, 0f),
						localScale = new Vector3(0.05f, 0.05f, 0.05f)
					}
				});
			}
			if (Chainloader.PluginInfos.ContainsKey("com.rob.Hunk"))
			{
				val.Add("HunkBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "Chest",
						localPos = new Vector3(0f, 0f, 0f),
						localAngles = new Vector3(0f, 0f, 0f),
						localScale = new Vector3(0.05f, 0.05f, 0.05f)
					}
				});
			}
			if (Chainloader.PluginInfos.ContainsKey("com.rob.Ravager"))
			{
				val.Add("RavagerBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "Chest",
						localPos = new Vector3(0f, 0f, 0f),
						localAngles = new Vector3(0f, 0f, 0f),
						localScale = new Vector3(0.05f, 0.05f, 0.05f)
					}
				});
			}
			if (Chainloader.PluginInfos.ContainsKey("com.EnforcerGang.HANDOverclocked"))
			{
				val.Add("HANDOverclockedBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "Chest",
						localPos = new Vector3(0f, 0f, 0f),
						localAngles = new Vector3(0f, 0f, 0f),
						localScale = new Vector3(0.05f, 0.05f, 0.05f)
					}
				});
			}
			if (Chainloader.PluginInfos.ContainsKey("com.EnforcerGang.RocketSurvivor"))
			{
				val.Add("RocketSurvivorBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "Chest",
						localPos = new Vector3(0f, 0f, 0f),
						localAngles = new Vector3(0f, 0f, 0f),
						localScale = new Vector3(0.05f, 0.05f, 0.05f)
					}
				});
			}
			if (Chainloader.PluginInfos.ContainsKey("com.kenko.Banshee"))
			{
				val.Add("BansheeBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "Chest",
						localPos = new Vector3(0f, 0f, 0f),
						localAngles = new Vector3(0f, 0f, 0f),
						localScale = new Vector3(0.05f, 0.05f, 0.05f)
					}
				});
			}
			if (Chainloader.PluginInfos.ContainsKey("com.kenko.Interrogator"))
			{
				val.Add("InterrogatorBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "Chest",
						localPos = new Vector3(0f, 0f, 0f),
						localAngles = new Vector3(0f, 0f, 0f),
						localScale = new Vector3(0.05f, 0.05f, 0.05f)
					}
				});
			}
			if (Chainloader.PluginInfos.ContainsKey("com.blake.RifterMod"))
			{
				val.Add("RifterBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "Chest",
						localPos = new Vector3(0f, 0f, 0f),
						localAngles = new Vector3(0f, 0f, 0f),
						localScale = new Vector3(0.05f, 0.05f, 0.05f)
					}
				});
			}
			if (Chainloader.PluginInfos.ContainsKey("com.frosthex.SorceressMod"))
			{
				val.Add("SorceressBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "Chest",
						localPos = new Vector3(0f, 0f, 0f),
						localAngles = new Vector3(0f, 0f, 0f),
						localScale = new Vector3(0.05f, 0.05f, 0.05f)
					}
				});
			}
			if (Chainloader.PluginInfos.ContainsKey("com.ChirrLover.Starstorm2Unofficial"))
			{
				val.Add("CHEFBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "Chest",
						localPos = new Vector3(0f, 0f, 0f),
						localAngles = new Vector3(0f, 0f, 0f),
						localScale = new Vector3(0.05f, 0.05f, 0.05f)
					}
				});
				val.Add("ExecutionerBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "Chest",
						localPos = new Vector3(0f, 0f, 0f),
						localAngles = new Vector3(0f, 0f, 0f),
						localScale = new Vector3(0.05f, 0.05f, 0.05f)
					}
				});
				val.Add("NemesisEnforcerBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "Chest",
						localPos = new Vector3(0f, 0f, 0f),
						localAngles = new Vector3(0f, 0f, 0f),
						localScale = new Vector3(0.05f, 0.05f, 0.05f)
					}
				});
			}
			if (Chainloader.PluginInfos.ContainsKey("com.TeamSillyGuy.Bastian"))
			{
				val.Add("BastianBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "Chest",
						localPos = new Vector3(0f, 0f, 0f),
						localAngles = new Vector3(0f, 0f, 0f),
						localScale = new Vector3(0.05f, 0.05f, 0.05f)
					}
				});
			}
			if (Chainloader.PluginInfos.ContainsKey("com.TeamSandswept.Sandswept"))
			{
				val.Add("GunslingerBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "Chest",
						localPos = new Vector3(0f, 0f, 0f),
						localAngles = new Vector3(0f, 0f, 0f),
						localScale = new Vector3(0.05f, 0.05f, 0.05f)
					}
				});
				val.Add("BanditReloadedBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "Chest",
						localPos = new Vector3(0f, 0f, 0f),
						localAngles = new Vector3(0f, 0f, 0f),
						localScale = new Vector3(0.05f, 0.05f, 0.05f)
					}
				});
			}
			if (Chainloader.PluginInfos.ContainsKey("com.Dragonyck.Bomber"))
			{
				val.Add("BomberBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "Chest",
						localPos = new Vector3(0f, 0f, 0f),
						localAngles = new Vector3(0f, 0f, 0f),
						localScale = new Vector3(0.05f, 0.05f, 0.05f)
					}
				});
			}
			if (Chainloader.PluginInfos.ContainsKey("com.PopcornFactory.Arsonist"))
			{
				val.Add("ArsonistBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "Chest",
						localPos = new Vector3(0f, 0f, 0f),
						localAngles = new Vector3(0f, 0f, 0f),
						localScale = new Vector3(0.05f, 0.05f, 0.05f)
					}
				});
			}
			if (Chainloader.PluginInfos.ContainsKey("com.Moffein.SniperClassic"))
			{
				val.Add("SniperClassicBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "Chest",
						localPos = new Vector3(0f, 0f, 0f),
						localAngles = new Vector3(0f, 0f, 0f),
						localScale = new Vector3(0.05f, 0.05f, 0.05f)
					}
				});
			}
			if (Chainloader.PluginInfos.ContainsKey("com.rob.Paladin"))
			{
				val.Add("PaladinBody", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
				{
					new ItemDisplayRule
					{
						ruleType = (ItemDisplayRuleType)0,
						followerPrefab = CulpabilityPowerDef.pickupModelPrefab,
						childName = "Chest",
						localPos = new Vector3(0f, 0f, 0f),
						localAngles = new Vector3(0f, 0f, 0f),
						localScale = new Vector3(0.05f, 0.05f, 0.05f)
					}
				});
			}
			ItemAPI.Add(new CustomItem(CulpabilityPowerDef, val));
			InitHooks();
		}

		private static void LoadAssetBundle()
		{
			if (!((Object)(object)CulpabilityAssetBundle == (Object)null))
			{
				return;
			}
			try
			{
				string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
				string text = Path.Combine(directoryName, "crystalide");
				if (File.Exists(text))
				{
					CulpabilityAssetBundle = AssetBundle.LoadFromFile(text);
					if ((Object)(object)CulpabilityAssetBundle != (Object)null)
					{
						CulpabilityModelPrefab = CulpabilityAssetBundle.LoadAsset<GameObject>("Assets/culpabilite.prefab");
						if ((Object)(object)CulpabilityModelPrefab == (Object)null)
						{
							Log.Error("CulpabilityPower: N'a pas pu charger le prefab 'Assets/culpabilite.prefab' depuis l'AssetBundle.");
						}
					}
					else
					{
						Log.Error("CulpabilityPower: Echec du chargement de l'AssetBundle depuis le chemin: " + text + " (AssetBundle.LoadFromFile a retourné null).");
					}
				}
				else
				{
					Log.Error("CulpabilityPower: Fichier AssetBundle non trouvé au chemin: " + text);
				}
			}
			catch (Exception ex)
			{
				Log.Error("CulpabilityPower: Exception durant le chargement de l'AssetBundle: " + ex);
			}
		}

		public static Sprite LoadSpriteFromEmbeddedResource(string resourcePath)
		{
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Expected O, but got Unknown
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			Assembly executingAssembly = Assembly.GetExecutingAssembly();
			Stream manifestResourceStream = executingAssembly.GetManifestResourceStream(resourcePath);
			if (manifestResourceStream == null)
			{
				Log.Error("Cannot find embedded resource: " + resourcePath);
				return null;
			}
			byte[] array = new byte[manifestResourceStream.Length];
			manifestResourceStream.Read(array, 0, array.Length);
			Texture2D val = new Texture2D(128, 128, (TextureFormat)4, false);
			if (!ImageConversion.LoadImage(val, array))
			{
				Log.Error("Failed to load texture from embedded resource: " + resourcePath);
				return null;
			}
			return Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f));
		}

		private static void InitHooks()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Expected O, but got Unknown
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Expected O, but got Unknown
			object obj = <>O.<0>__CharacterBody_RecalculateStats;
			if (obj == null)
			{
				hook_RecalculateStats val = CharacterBody_RecalculateStats;
				<>O.<0>__CharacterBody_RecalculateStats = val;
				obj = (object)val;
			}
			CharacterBody.RecalculateStats += (hook_RecalculateStats)obj;
			GlobalEventManager.onCharacterDeathGlobal += GlobalEventManager_onCharacterDeathGlobal;
			object obj2 = <>O.<2>__CharacterBody_OnDeathStart;
			if (obj2 == null)
			{
				hook_OnDeathStart val2 = CharacterBody_OnDeathStart;
				<>O.<2>__CharacterBody_OnDeathStart = val2;
				obj2 = (object)val2;
			}
			CharacterBody.OnDeathStart += (hook_OnDeathStart)obj2;
			object obj3 = <>O.<3>__Run_BeginStage_ResetStacks;
			if (obj3 == null)
			{
				hook_BeginStage val3 = Run_BeginStage_ResetStacks;
				<>O.<3>__Run_BeginStage_ResetStacks = val3;
				obj3 = (object)val3;
			}
			Run.BeginStage += (hook_BeginStage)obj3;
		}

		private static void CharacterBody_RecalculateStats(orig_RecalculateStats orig, CharacterBody self)
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self);
			if (!Object.op_Implicit((Object)(object)self) || !Object.op_Implicit((Object)(object)self.inventory))
			{
				return;
			}
			int itemCount = self.inventory.GetItemCount(CulpabilityPowerDef.itemIndex);
			if (itemCount > 0)
			{
				CulpabilityController culpabilityController = ((Component)self).gameObject.GetComponent<CulpabilityController>();
				if (!Object.op_Implicit((Object)(object)culpabilityController))
				{
					culpabilityController = ((Component)self).gameObject.AddComponent<CulpabilityController>();
					culpabilityController.body = self;
				}
				if (culpabilityController.GetCulpabilityStacks() > 0)
				{
					int culpabilityStacks = culpabilityController.GetCulpabilityStacks();
					float num = (float)culpabilityStacks * 0.012f;
					self.damage += self.baseDamage * num;
					self.attackSpeed += self.baseAttackSpeed * num;
					self.moveSpeed += self.baseMoveSpeed * num;
					self.armor += (float)culpabilityStacks * 0.5f;
					self.regen += (float)culpabilityStacks * 0.1f;
					self.crit += (float)culpabilityStacks * 0.05f;
				}
			}
			else
			{
				CulpabilityController component = ((Component)self).gameObject.GetComponent<CulpabilityController>();
				if (Object.op_Implicit((Object)(object)component))
				{
					Object.Destroy((Object)(object)component);
				}
			}
		}

		private static void GlobalEventManager_onCharacterDeathGlobal(DamageReport report)
		{
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)report.attackerBody) || !Object.op_Implicit((Object)(object)report.attackerBody.inventory))
			{
				return;
			}
			CharacterBody attackerBody = report.attackerBody;
			int itemCount = attackerBody.inventory.GetItemCount(CulpabilityPowerDef.itemIndex);
			if (itemCount <= 0)
			{
				return;
			}
			CulpabilityController culpabilityController = ((Component)attackerBody).gameObject.GetComponent<CulpabilityController>();
			if (!Object.op_Implicit((Object)(object)culpabilityController))
			{
				culpabilityController = ((Component)attackerBody).gameObject.AddComponent<CulpabilityController>();
				culpabilityController.body = attackerBody;
			}
			if (Object.op_Implicit((Object)(object)report.victimBody) && Object.op_Implicit((Object)(object)report.victimBody.teamComponent))
			{
				TeamComponent teamComponent = report.victimBody.teamComponent;
				TeamComponent teamComponent2 = attackerBody.teamComponent;
				if (teamComponent.teamIndex != teamComponent2.teamIndex)
				{
					culpabilityController.AddStacks(1);
				}
				if ((Object)(object)report.victimBody != (Object)(object)attackerBody && teamComponent.teamIndex == teamComponent2.teamIndex && (Object)(object)report.attacker != (Object)(object)((Component)attackerBody).gameObject)
				{
					culpabilityController.AllyDied();
				}
			}
		}

		private static void CharacterBody_OnDeathStart(orig_OnDeathStart orig, CharacterBody self)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self);
			if (Object.op_Implicit((Object)(object)self) && Object.op_Implicit((Object)(object)self.inventory) && self.inventory.GetItemCount(CulpabilityPowerDef.itemIndex) > 0)
			{
				CulpabilityController component = ((Component)self).gameObject.GetComponent<CulpabilityController>();
				if (Object.op_Implicit((Object)(object)component))
				{
					component.ResetStacks();
				}
			}
		}

		private static void Run_BeginStage_ResetStacks(orig_BeginStage orig, Run self)
		{
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self);
			if (!NetworkServer.active)
			{
				return;
			}
			foreach (NetworkUser readOnlyInstances in NetworkUser.readOnlyInstancesList)
			{
				if (!Object.op_Implicit((Object)(object)readOnlyInstances) || !Object.op_Implicit((Object)(object)readOnlyInstances.master))
				{
					continue;
				}
				CharacterBody body = readOnlyInstances.master.GetBody();
				if (body != null && Object.op_Implicit((Object)(object)body.inventory) && body.inventory.GetItemCount(CulpabilityPowerDef.itemIndex) > 0)
				{
					CulpabilityController component = ((Component)body).gameObject.GetComponent<CulpabilityController>();
					if (Object.op_Implicit((Object)(object)component))
					{
						component.ResetStacks();
					}
				}
			}
		}
	}
	public class CulpabilityController : MonoBehaviour
	{
		public CharacterBody body;

		private int culpabilityStacks = 0;

		private bool isGainDoubled = false;

		private void FixedUpdate()
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Invalid comparison between Unknown and I4
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)body) || !((Object)(object)CulpabilityPowerItem.CulpabilityStacksBuff != (Object)null) || (int)CulpabilityPowerItem.CulpabilityStacksBuff.buffIndex == -1)
			{
				return;
			}
			int buffCount = body.GetBuffCount(CulpabilityPowerItem.CulpabilityStacksBuff.buffIndex);
			if (buffCount > culpabilityStacks)
			{
				for (int i = 0; i < buffCount - culpabilityStacks; i++)
				{
					body.RemoveBuff(CulpabilityPowerItem.CulpabilityStacksBuff.buffIndex);
				}
			}
			else if (buffCount < culpabilityStacks)
			{
				for (int j = 0; j < culpabilityStacks - buffCount; j++)
				{
					body.AddBuff(CulpabilityPowerItem.CulpabilityStacksBuff.buffIndex);
				}
			}
		}

		public int GetCulpabilityStacks()
		{
			return culpabilityStacks;
		}

		public int GetMaxStacks()
		{
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)body.inventory))
			{
				return body.inventory.GetItemCount(CulpabilityPowerItem.CulpabilityPowerDef.itemIndex) * 120;
			}
			return 0;
		}

		public void AddStacks(int amount)
		{
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)body) || !Object.op_Implicit((Object)(object)body.inventory))
			{
				return;
			}
			int itemCount = body.inventory.GetItemCount(CulpabilityPowerItem.CulpabilityPowerDef.itemIndex);
			if (itemCount <= 0)
			{
				culpabilityStacks = 0;
				isGainDoubled = false;
				UpdateVisualBuff();
				return;
			}
			int num = (isGainDoubled ? (amount * 2) : amount);
			int maxStacks = GetMaxStacks();
			int num2 = culpabilityStacks;
			culpabilityStacks = Mathf.Min(culpabilityStacks + num, maxStacks);
			if (culpabilityStacks != num2)
			{
				UpdateVisualBuff();
			}
		}

		public void AllyDied()
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)body.inventory) && body.inventory.GetItemCount(CulpabilityPowerItem.CulpabilityPowerDef.itemIndex) > 0)
			{
				int num = culpabilityStacks;
				culpabilityStacks /= 2;
				isGainDoubled = true;
				if (culpabilityStacks != num)
				{
					UpdateVisualBuff();
				}
			}
		}

		public void ResetStacks()
		{
			bool flag = culpabilityStacks != 0 || isGainDoubled;
			culpabilityStacks = 0;
			isGainDoubled = false;
			if (flag)
			{
				UpdateVisualBuff();
			}
		}

		private void UpdateVisualBuff()
		{
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Invalid comparison between Unknown and I4
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)body) || (Object)(object)CulpabilityPowerItem.CulpabilityStacksBuff == (Object)null || (int)CulpabilityPowerItem.CulpabilityStacksBuff.buffIndex == -1 || !NetworkServer.active)
			{
				return;
			}
			int buffCount = body.GetBuffCount(CulpabilityPowerItem.CulpabilityStacksBuff.buffIndex);
			if (buffCount < culpabilityStacks)
			{
				for (int i = 0; i < culpabilityStacks - buffCount; i++)
				{
					body.AddBuff(CulpabilityPowerItem.CulpabilityStacksBuff.buffIndex);
				}
			}
			else if (buffCount > culpabilityStacks)
			{
				for (int j = 0; j < buffCount - culpabilityStacks; j++)
				{
					body.RemoveBuff(CulpabilityPowerItem.CulpabilityStacksBuff.buffIndex);
				}
			}
		}

		private void OnDestroy()
		{
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Invalid comparison between Unknown and I4
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			if (NetworkServer.active && Object.op_Implicit((Object)(object)body) && (Object)(object)CulpabilityPowerItem.CulpabilityStacksBuff != (Object)null && (int)CulpabilityPowerItem.CulpabilityStacksBuff.buffIndex != -1)
			{
				while (body.GetBuffCount(CulpabilityPowerItem.CulpabilityStacksBuff.buffIndex) > 0)
				{
					body.RemoveBuff(CulpabilityPowerItem.CulpabilityStacksBuff.buffIndex);
				}
			}
		}
	}
	public static class EliteRampGenerator
	{
		public static Texture2D CreateGradientTexture(Color32[] colors, int width, int height)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Expected O, but got Unknown
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			Texture2D val = new Texture2D(width, height);
			((Texture)val).wrapMode = (TextureWrapMode)1;
			for (int i = 0; i < height; i++)
			{
				for (int j = 0; j < width; j++)
				{
					float num = (float)j / (float)(width - 1);
					float num2 = num * (float)(colors.Length - 1);
					int num3 = Mathf.FloorToInt(num2);
					float t = num2 - (float)num3;
					if (num3 >= colors.Length - 1)
					{
						num3 = colors.Length - 2;
						t = 1f;
					}
					Color32 val2 = LerpColor32(colors[num3], colors[num3 + 1], t);
					val.SetPixel(j, i, Color32.op_Implicit(val2));
				}
			}
			val.Apply();
			string fileName = "SavedTexture.png";
			SaveTextureToFile(val, fileName);
			return val;
		}

		internal static void SaveTextureToFile(Texture2D texture, string fileName)
		{
			byte[] bytes = ImageConversion.EncodeToPNG(texture);
			string text = Path.Combine(Paths.BepInExRootPath, "plugins", fileName);
			try
			{
				File.WriteAllBytes(text, bytes);
				Log.Info("EliteRampGenerator: Texture de rampe sauvegardée dans: " + text);
			}
			catch (Exception ex)
			{
				Log.Error("EliteRampGenerator: Erreur lors de la sauvegarde de la texture de rampe: " + ex);
			}
		}

		public static Color32 LerpColor32(Color32 colorA, Color32 colorB, float t)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			byte b = (byte)Mathf.Lerp((float)(int)colorA.r, (float)(int)colorB.r, t);
			byte b2 = (byte)Mathf.Lerp((float)(int)colorA.g, (float)(int)colorB.g, t);
			byte b3 = (byte)Mathf.Lerp((float)(int)colorA.b, (float)(int)colorB.b, t);
			byte b4 = (byte)Mathf.Lerp((float)(int)colorA.a, (float)(int)colorB.a, t);
			return new Color32(b, b2, b3, b4);
		}
	}
	public class EvangileEchecController : MonoBehaviour
	{
		private class ActiveBuffInfo
		{
			public BuffDef BuffDef;

			public float Timer;
		}

		public CharacterBody body;

		public bool IsCurrentlyRepairing = false;

		private const float RANDOM_BUFF_BASE_DURATION = 10f;

		private const float RANDOM_BUFF_STACK_DURATION_BONUS = 5f;

		private List<ActiveBuffInfo> _activeRandomBuffs = new List<ActiveBuffInfo>();

		private bool _synergyBuffActiveThisStage = false;

		private const string BREAK_SOUND_EVENT_NAME = "Play_evangile_break";

		private void Awake()
		{
			body = ((Component)this).GetComponent<CharacterBody>();
			Log.Info("EvangileEchecController Awake for body: " + (Object.op_Implicit((Object)(object)body) ? body.GetUserName() : "NO BODY"));
		}

		private void OnEnable()
		{
			Log.Info("EvangileEchecController OnEnable for body: " + (Object.op_Implicit((Object)(object)body) ? body.GetUserName() : "NO BODY"));
			if (!HasAnyEchecItem())
			{
				Log.Info("EvangileEchecController: No Echec items on OnEnable for " + (Object.op_Implicit((Object)(object)body) ? body.GetUserName() : "NO BODY") + ", destroying self if it wasn't already.");
				if (((Behaviour)this).enabled)
				{
					Object.Destroy((Object)(object)this);
				}
				return;
			}
			if ((Object)(object)body == (Object)null)
			{
				body = ((Component)this).GetComponent<CharacterBody>();
				if ((Object)(object)body == (Object)null)
				{
					Log.Error("EvangileEchecController OnEnable: Body is null and GetComponent failed. Cannot subscribe to events.");
					return;
				}
				Log.Info("EvangileEchecController OnEnable: Body re-fetched for " + body.GetUserName() + ".");
			}
			Log.Info("EvangileEchecController: Subscribing to damage/death events for " + body.GetUserName() + " in OnEnable.");
			GlobalEventManager.onClientDamageNotified += GlobalEventManager_OnClientDamageNotified_EchecProc;
			GlobalEventManager.onCharacterDeathGlobal += GlobalEventManager_OnCharacterDeathGlobal_EchecSynergy;
		}

		private void OnDisable()
		{
			Log.Info("EvangileEchecController OnDisable for body: " + (Object.op_Implicit((Object)(object)body) ? body.GetUserName() : "NO BODY"));
			Log.Info("EvangileEchecController: Unsubscribing from damage/death events for " + (Object.op_Implicit((Object)(object)body) ? body.GetUserName() : "NO BODY (or already destroyed?)") + " in OnDisable.");
			GlobalEventManager.onClientDamageNotified -= GlobalEventManager_OnClientDamageNotified_EchecProc;
			GlobalEventManager.onCharacterDeathGlobal -= GlobalEventManager_OnCharacterDeathGlobal_EchecSynergy;
		}

		private void Start()
		{
			Log.Info("EvangileEchecController Start for body: " + (Object.op_Implicit((Object)(object)body) ? body.GetUserName() : "NO BODY"));
			if (!HasAnyEchecItem() && ((Behaviour)this).enabled)
			{
				Log.Info("EvangileEchecController: No Echec items on Start for " + (Object.op_Implicit((Object)(object)body) ? body.GetUserName() : "NO BODY") + ", ensuring destruction.");
				Object.Destroy((Object)(object)this);
			}
		}

		private void OnDestroy()
		{
			Log.Info("EvangileEchecController OnDestroy for body: " + (Object.op_Implicit((Object)(object)body) ? body.GetUserName() : "NO BODY (or already destroyed?)"));
		}

		private bool HasAnyEchecItem()
		{
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)body.inventory))
			{
				return body.inventory.GetItemCount(EvangileEchecItem.EvangileEchecDef.itemIndex) > 0 || body.inventory.GetItemCount(EvangileEchecItem.BrokenEvangileEchecDef.itemIndex) > 0;
			}
			return false;
		}

		private void FixedUpdate()
		{
			if (!NetworkServer.active && !body.hasEffectiveAuthority)
			{
				return;
			}
			for (int num = _activeRandomBuffs.Count - 1; num >= 0; num--)
			{
				ActiveBuffInfo activeBuffInfo = _activeRandomBuffs[num];
				activeBuffInfo.Timer -= Time.fixedDeltaTime;
				if (activeBuffInfo.Timer <= 0f)
				{
					if (body.HasBuff(activeBuffInfo.BuffDef))
					{
						body.RemoveBuff(activeBuffInfo.BuffDef);
					}
					_activeRandomBuffs.RemoveAt(num);
				}
			}
		}

		private void GlobalEventManager_OnClientDamageNotified_EchecProc(DamageDealtMessage damageDealtMessage)
		{
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0101: Unknown result type (might be due to invalid IL or missing references)
			//IL_012e: Unknown result type (might be due to invalid IL or missing references)
			//IL_014a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0160: Unknown result type (might be due to invalid IL or missing references)
			//IL_025b: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_020f: Unknown result type (might be due to invalid IL or missing references)
			if (!NetworkServer.active || (Object)(object)damageDealtMessage.victim != (Object)(object)((Component)body).gameObject || (Object)(object)damageDealtMessage.attacker == (Object)(object)((Component)b