Decompiled source of Darn1tMod v0.2.1

plugins/Darn1tMod/Darn1tMod.dll

Decompiled 2 weeks ago
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using Microsoft.CodeAnalysis;
using On.RoR2;
using R2API;
using RoR2;
using UnityEngine;
using UnityEngine.AddressableAssets;

[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("Darn1tMod")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+651c9ab3357f07cd5dc7013485a6b72f9a2b69f3")]
[assembly: AssemblyProduct("Darn1tMod")]
[assembly: AssemblyTitle("Darn1tMod")]
[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 Darn1tMod
{
	public static class Asset
	{
		public static AssetBundle mainBundle;

		public const string bundleName = "darn1tmod";

		public static void Init()
		{
			string text = Path.Combine(Path.GetDirectoryName(Darn1tMod.PInfo.Location), "darn1tmod");
			mainBundle = AssetBundle.LoadFromFile(text);
		}
	}
	internal class DamageBuff : BuffDef
	{
		public DamageBuff()
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			base.buffColor = Color.white;
			base.canStack = true;
			base.eliteDef = null;
			base.iconSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/MiscIcons/texMysteryIcon.png").WaitForCompletion();
			base.isCooldown = false;
			base.isHidden = false;
			base.startSfx = null;
			((Object)this).name = "DamageBuff";
			base.ignoreGrowthNectar = false;
			base.isDebuff = false;
			base.flags = (Flags)1;
			ContentAddition.AddBuffDef((BuffDef)(object)this);
		}
	}
	internal class DamageOnKillSlowedOnHitItem : ItemDef
	{
		private const int MAX_BUFFS_PER_STACK = 30;

		public readonly DamageBuff DamageBuff = new DamageBuff();

		public readonly SpeedNerf SpeedNerf = new SpeedNerf();

		public DamageOnKillSlowedOnHitItem()
		{
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Expected O, but got Unknown
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Expected O, but got Unknown
			//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00de: Expected O, but got Unknown
			//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f0: Expected O, but got Unknown
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Expected O, but got Unknown
			((Object)this).name = "DAMAGE_ON_KILL_SLOWED_ON_HIT_NAME";
			base.nameToken = "DAMAGE_ON_KILL_SLOWED_ON_HIT_NAME";
			base.pickupToken = "DAMAGE_ON_KILL_SLOWED_ON_HIT_PICKUP";
			base.descriptionToken = "DAMAGE_ON_KILL_SLOWED_ON_HIT_DESC";
			base.loreToken = "DAMAGE_ON_KILL_SLOWED_ON_HIT_LORE";
			base.deprecatedTier = (ItemTier)3;
			base.pickupIconSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/MiscIcons/texMysteryIcon.png").WaitForCompletion();
			try
			{
				base.pickupModelPrefab = Asset.mainBundle.LoadAsset<GameObject>("cube.prefab");
			}
			catch (Exception)
			{
				base.pickupModelPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mystery/PickupMystery.prefab").WaitForCompletion();
			}
			base.canRemove = true;
			base.hidden = false;
			ItemDisplayRuleDict val = new ItemDisplayRuleDict((ItemDisplayRule[])null);
			ItemAPI.Add(new CustomItem((ItemDef)(object)this, val));
			GlobalEventManager.OnCharacterDeath += (hook_OnCharacterDeath)delegate(orig_OnCharacterDeath orig, GlobalEventManager self, DamageReport report)
			{
				GlobalEventManager_onCharacterDeath(report);
				orig.Invoke(self, report);
			};
			HealthComponent.TakeDamage += (hook_TakeDamage)delegate(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo)
			{
				GlobalEventManager_preOnHitEnemy(self, damageInfo);
				orig.Invoke(self, damageInfo);
			};
			RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(GetStatCoefficients);
		}

		private void GlobalEventManager_onCharacterDeath(DamageReport report)
		{
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			CharacterBody val = report?.attackerBody;
			if (Object.op_Implicit((Object)(object)((val != null) ? val.inventory : null)))
			{
				int itemCount = val.inventory.GetItemCount((ItemDef)(object)this);
				if (itemCount > 0)
				{
					int buffCount = val.GetBuffCount((BuffDef)(object)DamageBuff);
					val.SetBuffCount(((BuffDef)DamageBuff).buffIndex, Math.Min(buffCount + itemCount, itemCount * 30));
				}
			}
		}

		private void GlobalEventManager_preOnHitEnemy(HealthComponent healthComponent, DamageInfo damageInfo)
		{
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			CharacterBody val = healthComponent?.body;
			if (Object.op_Implicit((Object)(object)((val != null) ? val.inventory : null)))
			{
				int itemCount = val.inventory.GetItemCount((ItemDef)(object)this);
				if (itemCount > 0)
				{
					int buffCount = val.GetBuffCount((BuffDef)(object)SpeedNerf);
					val.SetBuffCount(((BuffDef)SpeedNerf).buffIndex, Math.Min(buffCount + itemCount, itemCount * 30));
				}
			}
		}

		private void GetStatCoefficients(CharacterBody sender, StatHookEventArgs args)
		{
			int buffCount = sender.GetBuffCount((BuffDef)(object)DamageBuff);
			if (buffCount > 0)
			{
				float num = sender.baseDamage + args.baseDamageAdd + (sender.level - 1f) * sender.levelDamage;
				float num2 = num * Mathf.Pow(1.05f, (float)buffCount) - num;
				args.baseDamageAdd += num2;
			}
			int buffCount2 = sender.GetBuffCount((BuffDef)(object)SpeedNerf);
			if (buffCount2 > 0)
			{
				float num3 = sender.baseMoveSpeed + args.baseMoveSpeedAdd + (sender.level - 1f) * sender.levelMoveSpeed;
				float num4 = num3 * Mathf.Pow(0.9f, (float)buffCount2) - num3;
				args.baseMoveSpeedAdd += num4;
			}
		}
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("Darn1t.Darn1tMod", "Darn1tMod", "0.1.0")]
	public class Darn1tMod : BaseUnityPlugin
	{
		public const string PluginAuthor = "Darn1t";

		public const string PluginName = "Darn1tMod";

		public const string PluginGUID = "Darn1t.Darn1tMod";

		public const string PluginVersion = "0.1.0";

		private static DamageOnKillSlowedOnHitItem damageOnKillSlowedOnHit;

		private static VoidEnergyDrink voidEnergyDrink;

		private static PermanentDamageArtifact permanentDamageArtifact;

		public static PluginInfo PInfo { get; private set; }

		public void Awake()
		{
			Log.Init(((BaseUnityPlugin)this).Logger);
			PInfo = ((BaseUnityPlugin)this).Info;
			Asset.Init();
			Log.Info("SEAN HURT LOG INIT");
			damageOnKillSlowedOnHit = new DamageOnKillSlowedOnHitItem();
			permanentDamageArtifact = new PermanentDamageArtifact();
			voidEnergyDrink = new VoidEnergyDrink();
		}

		private void Update()
		{
			//IL_0031: 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)
			//IL_0050: 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_005c: 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)
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: 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)
			if (Input.GetKeyDown((KeyCode)283))
			{
				Transform transform = PlayerCharacterMasterController.instances[0].master.GetBodyObject().transform;
				Log.Info($"SEAN HURT Player pressed F2. Spawning our custom item at coordinates {transform.position}");
				PickupDropletController.CreatePickupDroplet(PickupCatalog.FindPickupIndex(((ItemDef)damageOnKillSlowedOnHit).itemIndex), transform.position, transform.forward * 20f);
			}
			if (Input.GetKeyDown((KeyCode)284))
			{
				Transform transform2 = PlayerCharacterMasterController.instances[0].master.GetBodyObject().transform;
				Log.Info($"SEAN HURT Player pressed F3. Spawning our custom item at coordinates {transform2.position}");
				PickupDropletController.CreatePickupDroplet(PickupCatalog.FindPickupIndex(((ItemDef)voidEnergyDrink).itemIndex), transform2.position, transform2.forward * 20f);
			}
		}
	}
	internal static class Log
	{
		private static ManualLogSource _logSource;

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

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

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

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

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

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

		internal static void Warning(object data)
		{
			_logSource.LogWarning(data);
		}
	}
	internal class PermanentDamageArtifact : ArtifactDef
	{
		public PermanentMaxHealthDecreaseItem PermanentMaxHealthDecreaseItem = new PermanentMaxHealthDecreaseItem();

		public bool IsArtifactEnabled
		{
			get
			{
				RunArtifactManager instance = RunArtifactManager.instance;
				return instance != null && instance.IsArtifactEnabled((ArtifactDef)(object)this);
			}
		}

		public PermanentDamageArtifact()
		{
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: 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)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Expected O, but got Unknown
			((ArtifactDef)this).cachedName = "RiskyArtifactOfArrogance";
			base.nameToken = "RISKYARTIFACTS_ARROGANCE_NAME";
			base.descriptionToken = "RISKYARTIFACTS_ARROGANCE_DESC";
			base.smallIconDeselectedSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/MiscIcons/texMysteryIcon.png").WaitForCompletion();
			base.smallIconSelectedSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/MiscIcons/texMysteryIcon.png").WaitForCompletion();
			ContentAddition.AddArtifactDef((ArtifactDef)(object)this);
			HealthComponent.TakeDamage += (hook_TakeDamage)delegate(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo)
			{
				GlobalEventManager_preOnHitEnemy(self, damageInfo);
				orig.Invoke(self, damageInfo);
				GlobalEventManager_postOnHitEnemy(self, damageInfo);
			};
			CharacterBody.onBodyStartGlobal += delegate(CharacterBody characterBody)
			{
				//IL_0056: 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_0032: Unknown result type (might be due to invalid IL or missing references)
				if (characterBody.isPlayerControlled && Object.op_Implicit((Object)(object)RunArtifactManager.instance) && RunArtifactManager.instance.IsArtifactEnabled((ArtifactDef)(object)this))
				{
					ItemDef val = Addressables.LoadAssetAsync<ItemDef>((object)"RoR2/Base/BarrierOnOverHeal/BarrierOnOverHeal.asset").WaitForCompletion();
					characterBody.inventory.GiveItem(val, 1);
				}
				characterBody.SetBuffCount(((BuffDef)PermanentMaxHealthDecreaseItem.HealthDisplayBuff).buffIndex, characterBody.inventory.GetItemCount((ItemDef)(object)PermanentMaxHealthDecreaseItem));
			};
		}

		private void GlobalEventManager_preOnHitEnemy(HealthComponent healthComponent, DamageInfo damageInfo)
		{
			if (IsArtifactEnabled)
			{
				CharacterBody val = healthComponent?.body;
				if (Object.op_Implicit((Object)(object)val) && val.isPlayerControlled)
				{
					healthComponent.barrier += 1f;
				}
			}
		}

		private void GlobalEventManager_postOnHitEnemy(HealthComponent healthComponent, DamageInfo damageInfo)
		{
			//IL_009c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Invalid comparison between Unknown and I4
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			if (!IsArtifactEnabled)
			{
				return;
			}
			CharacterBody val = healthComponent?.body;
			if (val == null || !val.isPlayerControlled)
			{
				return;
			}
			bool flag = healthComponent.barrier <= 0f;
			if (damageInfo.rejected)
			{
				healthComponent.barrier = Math.Max(0f, healthComponent.barrier - 1f);
			}
			healthComponent.health = val.maxHealth;
			if (flag && !damageInfo.rejected)
			{
				int num = Mathf.CeilToInt(((damageInfo.damageType.damageType & 0x200000) == 2097152) ? damageInfo.damage : (5f * damageInfo.procCoefficient));
				val.inventory.GiveItem((ItemDef)(object)PermanentMaxHealthDecreaseItem, num);
				val.SetBuffCount(((BuffDef)PermanentMaxHealthDecreaseItem.HealthDisplayBuff).buffIndex, val.inventory.GetItemCount((ItemDef)(object)PermanentMaxHealthDecreaseItem));
				if (val.healthComponent.health <= (float)val.inventory.GetItemCount((ItemDef)(object)PermanentMaxHealthDecreaseItem))
				{
					val.healthComponent.health = 0f;
				}
			}
		}
	}
	internal class PermanentDamageDisplayBuff : BuffDef
	{
		public PermanentDamageDisplayBuff()
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			base.buffColor = Color.red;
			base.canStack = true;
			base.eliteDef = null;
			base.iconSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/MiscIcons/texMysteryIcon.png").WaitForCompletion();
			base.isCooldown = false;
			base.isHidden = false;
			base.startSfx = null;
			((Object)this).name = "PermanentDamageDisplayBuff";
			base.ignoreGrowthNectar = true;
			base.isDebuff = false;
			base.flags = (Flags)1;
			ContentAddition.AddBuffDef((BuffDef)(object)this);
		}
	}
	internal class PermanentMaxHealthDecreaseItem : ItemDef
	{
		public PermanentDamageDisplayBuff HealthDisplayBuff = new PermanentDamageDisplayBuff();

		public PermanentMaxHealthDecreaseItem()
		{
			//IL_004d: 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_005d: 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_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Expected O, but got Unknown
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Expected O, but got Unknown
			((Object)this).name = "PERMANENT_MAX_HEALTH_DECREASE";
			base.nameToken = "DAMAGE_ON_KILL_SLOWED_ON_HIT_NAME";
			base.pickupToken = "DAMAGE_ON_KILL_SLOWED_ON_HIT_PICKUP";
			base.descriptionToken = "DAMAGE_ON_KILL_SLOWED_ON_HIT_DESC";
			base.loreToken = "DAMAGE_ON_KILL_SLOWED_ON_HIT_LORE";
			base.deprecatedTier = (ItemTier)5;
			base.pickupIconSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/MiscIcons/texMysteryIcon.png").WaitForCompletion();
			base.pickupModelPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mystery/PickupMystery.prefab").WaitForCompletion();
			base.canRemove = false;
			base.hidden = false;
			ItemDisplayRuleDict val = new ItemDisplayRuleDict((ItemDisplayRule[])null);
			ItemAPI.Add(new CustomItem((ItemDef)(object)this, val));
		}
	}
	internal class SpeedNerf : BuffDef
	{
		public SpeedNerf()
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			base.buffColor = Color.blue;
			base.canStack = true;
			base.eliteDef = null;
			base.iconSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/MiscIcons/texMysteryIcon.png").WaitForCompletion();
			base.isCooldown = false;
			base.isHidden = false;
			base.startSfx = null;
			((Object)this).name = "SpeedNerf";
			base.ignoreGrowthNectar = false;
			base.isDebuff = true;
			ContentAddition.AddBuffDef((BuffDef)(object)this);
		}
	}
	internal class VoidEnergyDrink : ItemDef
	{
		public class VoidEnergyDrinkBehavior : MonoBehaviour
		{
			public VoidEnergyDrinkSpeedBuff speedBuff;

			public CharacterBody CharacterBody;

			public int itemStacks = 0;

			private const float timerMax = 1f;

			private float timer = 0f;

			private const int maxBuffsPerItem = 5;

			private bool wasSprinting = false;

			public void FixedUpdate()
			{
				//IL_0098: Unknown result type (might be due to invalid IL or missing references)
				if (CharacterBody.isSprinting)
				{
					wasSprinting = true;
					timer += Time.fixedDeltaTime;
					if (timer >= 1f)
					{
						Debug.Log((object)"SEAN HURT Adding buff");
						CharacterBody.AddBuff((BuffDef)(object)speedBuff);
						timer = 0f;
					}
				}
				else if (wasSprinting)
				{
					Debug.Log((object)"SEAN HURT Removing buff");
					timer = 0f;
					CharacterBody.SetBuffCount(((BuffDef)speedBuff).buffIndex, 0);
					wasSprinting = false;
				}
			}
		}

		public class VoidEnergyDrinkSpeedBuff : BuffDef
		{
			public VoidEnergyDrinkSpeedBuff()
			{
				//IL_0047: Unknown result type (might be due to invalid IL or missing references)
				base.canStack = true;
				base.eliteDef = null;
				base.isCooldown = false;
				base.isHidden = true;
				base.startSfx = null;
				((Object)this).name = "VoidEnergyDrinkSpeedBuff";
				base.ignoreGrowthNectar = true;
				base.isDebuff = false;
				base.flags = (Flags)1;
				ContentAddition.AddBuffDef((BuffDef)(object)this);
			}
		}

		private VoidEnergyDrinkSpeedBuff speedBuff;

		public VoidEnergyDrink()
		{
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Expected O, but got Unknown
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_0116: Expected O, but got Unknown
			//IL_0118: Unknown result type (might be due to invalid IL or missing references)
			//IL_0122: Expected O, but got Unknown
			//IL_013c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0146: Expected O, but got Unknown
			speedBuff = new VoidEnergyDrinkSpeedBuff();
			((Object)this).name = "VOID_ENERGY_DRINK_NAME";
			base.nameToken = "VOID_ENERGY_DRINK_NAME";
			base.pickupToken = "VOID_ENERGY_DRINK_PICKUP";
			base.descriptionToken = "VOID_ENERGY_DRINK_DESC";
			base.loreToken = "VOID_ENERGY_DRINK_LORE";
			base.deprecatedTier = (ItemTier)6;
			ItemRelationshipProvider val = new ItemRelationshipProvider();
			val.relationshipType = Addressables.LoadAssetAsync<ItemRelationshipType>((object)"RoR2/DLC1/Common/ContagiousItem.asset").WaitForCompletion();
			ItemDef itemDef = Addressables.LoadAssetAsync<ItemDef>((object)"RoR2/Base/SprintBonus/SprintBonus.asset").WaitForCompletion();
			val.relationships = (Pair[])(object)new Pair[1]
			{
				new Pair
				{
					itemDef1 = itemDef,
					itemDef2 = (ItemDef)(object)this
				}
			};
			base.pickupIconSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/MiscIcons/texMysteryIcon.png").WaitForCompletion();
			try
			{
				base.pickupModelPrefab = Asset.mainBundle.LoadAsset<GameObject>("cube.prefab");
			}
			catch (Exception)
			{
				base.pickupModelPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mystery/PickupMystery.prefab").WaitForCompletion();
			}
			base.canRemove = true;
			base.hidden = false;
			ItemDisplayRuleDict val2 = new ItemDisplayRuleDict((ItemDisplayRule[])null);
			ItemAPI.Add(new CustomItem((ItemDef)(object)this, val2));
			CharacterBody.onBodyInventoryChangedGlobal += OnInventoryChanged;
			RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(GetStatCoefficients);
		}

		private void GetStatCoefficients(CharacterBody sender, StatHookEventArgs args)
		{
			int buffCount = sender.GetBuffCount((BuffDef)(object)speedBuff);
			int itemCount = sender.inventory.GetItemCount((ItemDef)(object)this);
			float num = sender.sprintingSpeedMultiplier + args.sprintSpeedAdd;
			float num2 = num * (1f + (float)buffCount * 0.03f * (float)itemCount) - num;
			Debug.Log((object)("SEAN HURT ADDING SPRINT SPEED " + num2));
			args.sprintSpeedAdd += num2;
		}

		private void OnInventoryChanged(CharacterBody body)
		{
			int itemCount = body.inventory.GetItemCount((ItemDef)(object)this);
			VoidEnergyDrinkBehavior voidEnergyDrinkBehavior = ((Component)body).GetComponent<VoidEnergyDrinkBehavior>();
			if (itemCount > 0 && !Object.op_Implicit((Object)(object)voidEnergyDrinkBehavior))
			{
				Debug.Log((object)"SEAN HURT Got ITEM");
				voidEnergyDrinkBehavior = ((Component)body).gameObject.AddComponent<VoidEnergyDrinkBehavior>();
				voidEnergyDrinkBehavior.CharacterBody = body;
				voidEnergyDrinkBehavior.speedBuff = speedBuff;
			}
			if (Object.op_Implicit((Object)(object)voidEnergyDrinkBehavior))
			{
				Debug.Log((object)("SEAN HURT SETTING STACKS " + itemCount));
				voidEnergyDrinkBehavior.itemStacks = itemCount;
			}
		}
	}
}