Redo.dll

Decompiled a month ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using ClassesManagerReborn;
using ClassesManagerReborn.Util;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using ModdingUtils.Extensions;
using ModdingUtils.GameModes;
using ModdingUtils.Utils;
using Photon.Pun;
using RarityLib.Utils;
using Redo.MonoBehaviours;
using RedoNameSpace.Cards;
using UnboundLib;
using UnboundLib.Cards;
using UnboundLib.Networking;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("Redo")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+494d4a4b1e6a6db943c6cfe776dfdb38e0e5ee2a")]
[assembly: AssemblyProduct("Redo")]
[assembly: AssemblyTitle("Redo")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
}
namespace Redo.Patches
{
	[Serializable]
	[HarmonyPatch(typeof(HealthHandler), "DoDamage")]
	internal class HealtHandlerPatchDoDamage
	{
		private static void killPlayer(Player player, Vector2 damage)
		{
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: 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)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			if (player.data.stats.remainingRespawns > 0)
			{
				player.data.view.RPC("RPCA_Die_Phoenix", (RpcTarget)0, new object[1] { damage * player.data.maxHealth * 1000f });
			}
			else
			{
				player.data.view.RPC("RPCA_Die", (RpcTarget)0, new object[1] { damage * player.data.maxHealth * 1000f });
			}
		}

		private static void Prefix(HealthHandler __instance, Vector2 damage, Vector2 position, Color blinkColor, GameObject damagingWeapon, Player damagingPlayer, bool healthRemoval, ref bool lethal, bool ignoreBlock)
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bb: 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_0363: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fe: Unknown result type (might be due to invalid IL or missing references)
			CharacterData val = (CharacterData)Traverse.Create((object)__instance).Field("data").GetValue();
			Player player = val.player;
			if (!val.isPlaying || val.dead || __instance.isRespawning)
			{
				return;
			}
			if ((Object)(object)player != (Object)null && (Object)(object)player == (Object)(object)damagingPlayer && (Object)(object)((Component)player.data).GetComponent<SelfHelpEffect>() != (Object)null)
			{
				player.data.health = Math.Min(player.data.health + 1f * ((Vector2)(ref damage)).magnitude, player.data.maxHealth * 1f + ((Vector2)(ref damage)).magnitude);
			}
			if ((Object)(object)player != (Object)null && (Object)(object)damagingPlayer != (Object)null && (Object)(object)((Component)damagingPlayer.data).GetComponent<PacifistEffect>() != (Object)null)
			{
				if (player.data.health + ((Vector2)(ref damage)).magnitude >= player.data.maxHealth * 1.5f)
				{
					killPlayer(player, damage);
				}
				player.data.health = Math.Min(player.data.health + 2f * ((Vector2)(ref damage)).magnitude, player.data.maxHealth * 1.5f + ((Vector2)(ref damage)).magnitude);
			}
			if (lethal && val.health < ((Vector2)(ref damage)).magnitude)
			{
				if ((Object)(object)damagingPlayer != (Object)null && (Object)(object)((Component)player.data).GetComponent<DestinyBondEffect>() != (Object)null)
				{
					killPlayer(player, damage);
					killPlayer(damagingPlayer, damage);
				}
				if ((Object)(object)((Component)player.data).GetComponent<BackupPlanEffect>() != (Object)null)
				{
					((Component)player.data).GetComponent<BackupPlanEffect>().Explode();
				}
				if ((Object)(object)damagingPlayer != (Object)null && (Object)(object)damagingPlayer != (Object)(object)player && (Object)(object)((Component)damagingPlayer.data).GetComponent<MortalBountyEffect>() != (Object)null)
				{
					Gun gun = damagingPlayer.data.weaponHandler.gun;
					gun.bulletDamageMultiplier += 0.45454547f;
				}
				if ((Object)(object)damagingPlayer != (Object)null && (Object)(object)damagingPlayer != (Object)(object)player && (Object)(object)((Component)damagingPlayer.data).GetComponent<VictorsVitalityEffect>() != (Object)null)
				{
					CharacterData data = damagingPlayer.data;
					data.maxHealth += 25f;
				}
				if ((Object)(object)damagingPlayer != (Object)null && (Object)(object)damagingPlayer != (Object)(object)player && (Object)(object)((Component)damagingPlayer.data).GetComponent<GrimReaperEffect>() != (Object)null)
				{
					CharacterStatModifiers stats = damagingPlayer.data.stats;
					stats.remainingRespawns++;
				}
				if ((Object)(object)damagingPlayer != (Object)null && (Object)(object)player != (Object)null && (Object)(object)damagingPlayer != (Object)(object)player && (Object)(object)((Component)player.data).GetComponent<BountyEffect>() != (Object)null)
				{
					CardInfo cardWithObjectName = Cards.instance.GetCardWithObjectName("__REDO__Bounty");
					Cards.instance.RemoveCardFromPlayer(player, player.data.currentCards.IndexOf(cardWithObjectName));
					Cards.instance.AddCardToPlayer(damagingPlayer, cardWithObjectName, false, "", 0f, 0f);
					killPlayer(player, damage);
				}
				else if ((Object)(object)((Component)player.data).GetComponent<BountyEffect>() != (Object)null)
				{
					CardInfo cardWithObjectName2 = Cards.instance.GetCardWithObjectName("__REDO__Bounty");
					List<Player> list = new List<Player>(PlayerManager.instance.players);
					Player val2 = list[Random.Range(0, list.Count)];
					Cards.instance.RemoveCardFromPlayer(player, player.data.currentCards.IndexOf(cardWithObjectName2));
					Cards.instance.AddCardToPlayer(val2, cardWithObjectName2, false, "", 0f, 0f);
					killPlayer(player, damage);
				}
			}
		}
	}
}
namespace Redo.Cards
{
	internal class DivineGlock : CustomCard
	{
		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
			cardInfo.allowMultiple = true;
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			gun.bulletDamageMultiplier += 0.45454547f;
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
		}

		protected override string GetTitle()
		{
			return "Divine Glock";
		}

		protected override string GetDescription()
		{
			return "Gain 25 damage every point";
		}

		protected override GameObject GetCardArt()
		{
			return null;
		}

		protected override Rarity GetRarity()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (Rarity)0;
		}

		protected override CardInfoStat[] GetStats()
		{
			return (CardInfoStat[])(object)new CardInfoStat[0];
		}

		protected override CardThemeColorType GetTheme()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (CardThemeColorType)0;
		}

		public override string GetModName()
		{
			return "REDO";
		}
	}
}
namespace Redo.MonoBehaviours
{
	public class AnotherOneEffect : MonoBehaviour
	{
		private Player player;

		private void Awake()
		{
			player = ((Component)this).gameObject.GetComponent<Player>();
		}

		private void Start()
		{
			player = ((Component)this).gameObject.GetComponentInParent<Player>();
		}

		public void Update()
		{
			if (!Input.GetMouseButtonDown(0))
			{
				return;
			}
			try
			{
				CardBar val = CardBarUtils.instance.PlayersCardBar(player.playerID);
				string text = ExtensionMethods.GetFieldValue((object)val, "currentCard").ToString();
				string text2 = text;
				if (text2 != null && text.IndexOf('(') != -1)
				{
					text2 = text.Substring(0, text.IndexOf('('));
				}
				if (text2 != null && !(text2 == "__REDO__Another One") && !(text2 == "null"))
				{
					if (PhotonNetwork.OfflineMode)
					{
						CardInfo cardWithObjectName = Cards.instance.GetCardWithObjectName(text2);
						Cards.instance.AddCardToPlayer(player, cardWithObjectName, false, "", 0f, 0f);
						CardInfo cardWithObjectName2 = Cards.instance.GetCardWithObjectName("__REDO__Another One");
						Cards.instance.RemoveCardFromPlayer(player, player.data.currentCards.IndexOf(cardWithObjectName2));
					}
					else if (((Component)player).GetComponent<PhotonView>().IsMine)
					{
						NetworkingManager.RPC(typeof(CardRemoverEffect), "RPCA_AddCards", new object[2]
						{
							text2,
							player.data.view.ControllerActorNr
						});
					}
				}
			}
			catch
			{
			}
		}

		[UnboundRPC]
		private static void RPCA_AddCards(string cardObjectName, int actorID)
		{
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Expected O, but got Unknown
			Player player = (Player)typeof(PlayerManager).InvokeMember("GetPlayerWithActorID", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null, PlayerManager.instance, new object[1] { actorID });
			CardInfo cardWithObjectName = Cards.instance.GetCardWithObjectName(cardObjectName);
			Cards.instance.AddCardToPlayer(player, cardWithObjectName, false, "", 0f, 0f);
			ExtensionMethods.ExecuteAfterSeconds((MonoBehaviour)(object)Unbound.Instance, 0.1f, (Action)delegate
			{
				CardInfo cardWithObjectName2 = Cards.instance.GetCardWithObjectName("__REDO__Another One");
				Cards.instance.RemoveCardFromPlayer(player, player.data.currentCards.IndexOf(cardWithObjectName2));
			});
		}
	}
	public class AntiCringeEffect : MonoBehaviour
	{
		private Player player;

		private void Awake()
		{
			player = ((Component)this).gameObject.GetComponent<Player>();
		}

		private void Start()
		{
			player = ((Component)this).gameObject.GetComponentInParent<Player>();
		}

		public void Update()
		{
			if (!Input.GetMouseButtonDown(0))
			{
				return;
			}
			List<Player> list = new List<Player>(PlayerManager.instance.players);
			foreach (Player item in list)
			{
				try
				{
					CardBar val = CardBarUtils.instance.PlayersCardBar(item.playerID);
					string text = ExtensionMethods.GetFieldValue((object)val, "currentCard").ToString();
					string text2 = text;
					if (text2 != null && text2.Length > 40)
					{
						text2 = text.Substring(0, text.Length - 32);
					}
					Debug.Log((object)text2);
					if (text2 == null || text2 == "__REDO__Copy Cat" || text2 == "null")
					{
						break;
					}
					if (text2 != null)
					{
						if (PhotonNetwork.OfflineMode)
						{
							Debug.Log((object)"Anti Cringe Offline");
							CardInfo cardWithObjectName = Cards.instance.GetCardWithObjectName(text2);
							Cards.instance.RemoveCardFromPlayer(item, item.data.currentCards.IndexOf(cardWithObjectName));
							CardInfo cardWithObjectName2 = Cards.instance.GetCardWithObjectName("__REDO__Anti Cringe");
							Cards.instance.RemoveCardFromPlayer(player, cardWithObjectName2, (SelectionType)2);
						}
						else if (((Component)player).GetComponent<PhotonView>().IsMine)
						{
							Debug.Log((object)"Anti Cringe Online");
							((Component)this).GetComponent<PhotonView>().RPC("RPC_RemoveCard", (RpcTarget)0, new object[2]
							{
								"__REDO__Anti Cringe",
								player.data.view.ControllerActorNr
							});
							((Component)this).GetComponent<PhotonView>().RPC("RPC_RemoveCard", (RpcTarget)0, new object[2]
							{
								text2,
								item.data.view.ControllerActorNr
							});
						}
					}
				}
				catch
				{
					Debug.Log((object)"Anti Cringe Exceptions??!?!?");
				}
			}
		}

		private static string GetCurrentCardBarCardName(Player somePlayer)
		{
			CardBar val = CardBarUtils.instance.PlayersCardBar(somePlayer.playerID);
			object fieldValue = ExtensionMethods.GetFieldValue((object)val, "currentCard");
			if (fieldValue == null)
			{
				return null;
			}
			string text = fieldValue.ToString();
			if (text.Length > 40)
			{
				text = text.Substring(0, text.Length - 32);
			}
			return text;
		}

		[PunRPC]
		private void RPC_RemoveCard(string cardObjectName, int actorID)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Expected O, but got Unknown
			Player val = (Player)typeof(PlayerManager).InvokeMember("GetPlayerWithActorID", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null, PlayerManager.instance, new object[1] { actorID });
			CardInfo cardWithObjectName = Cards.instance.GetCardWithObjectName(cardObjectName);
			Cards.instance.RemoveCardFromPlayer(val, cardWithObjectName, (SelectionType)2);
		}
	}
	public class CardRemoverEffect : MonoBehaviour
	{
		private Player player;

		private void Awake()
		{
			player = ((Component)this).gameObject.GetComponent<Player>();
		}

		private void Start()
		{
			player = ((Component)this).gameObject.GetComponentInParent<Player>();
		}

		public void Update()
		{
			if (!Input.GetMouseButtonDown(0))
			{
				return;
			}
			try
			{
				CardBar val = CardBarUtils.instance.PlayersCardBar(player.playerID);
				string text = ExtensionMethods.GetFieldValue((object)val, "currentCard").ToString();
				string text2 = text;
				if (text2 != null && text.IndexOf('(') != -1)
				{
					text2 = text.Substring(0, text.IndexOf('('));
				}
				if (text2 != null && !(text2 == "__REDO__Card Remover") && !(text2 == "null"))
				{
					if (PhotonNetwork.OfflineMode)
					{
						CardInfo cardWithObjectName = Cards.instance.GetCardWithObjectName(text2);
						Cards.instance.RemoveCardFromPlayer(player, player.data.currentCards.IndexOf(cardWithObjectName));
						CardInfo cardWithObjectName2 = Cards.instance.GetCardWithObjectName("__REDO__Card Remover");
						Cards.instance.RemoveCardFromPlayer(player, player.data.currentCards.IndexOf(cardWithObjectName2));
					}
					else if (((Component)player).GetComponent<PhotonView>().IsMine)
					{
						NetworkingManager.RPC(typeof(CardRemoverEffect), "RPCA_RemoveCards", new object[2]
						{
							text2,
							player.data.view.ControllerActorNr
						});
					}
				}
			}
			catch
			{
			}
		}

		[UnboundRPC]
		private static void RPCA_RemoveCards(string cardObjectName, int actorID)
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Expected O, but got Unknown
			string cardObjectName2 = cardObjectName;
			Player player = (Player)typeof(PlayerManager).InvokeMember("GetPlayerWithActorID", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null, PlayerManager.instance, new object[1] { actorID });
			CardInfo cardWithObjectName = Cards.instance.GetCardWithObjectName("__REDO__Card Remover");
			Cards.instance.RemoveCardFromPlayer(player, player.data.currentCards.IndexOf(cardWithObjectName));
			ExtensionMethods.ExecuteAfterSeconds((MonoBehaviour)(object)Unbound.Instance, 0.1f, (Action)delegate
			{
				CardInfo cardWithObjectName2 = Cards.instance.GetCardWithObjectName(cardObjectName2);
				Cards.instance.RemoveCardFromPlayer(player, player.data.currentCards.IndexOf(cardWithObjectName2));
			});
		}
	}
	public class CopyCatEffect : MonoBehaviour
	{
		private Player player;

		private void Awake()
		{
			player = ((Component)this).gameObject.GetComponent<Player>();
		}

		private void Start()
		{
			player = ((Component)this).gameObject.GetComponentInParent<Player>();
		}

		public void Update()
		{
			if (!Input.GetMouseButtonDown(0))
			{
				return;
			}
			List<Player> list = new List<Player>(PlayerManager.instance.players);
			Debug.Log((object)("Number of players: " + list.Count));
			foreach (Player item in list)
			{
				try
				{
					CardBar val = CardBarUtils.instance.PlayersCardBar(item.playerID);
					string text = ExtensionMethods.GetFieldValue((object)val, "currentCard").ToString();
					string text2 = text;
					if (text2 != null && text.IndexOf('(') != -1)
					{
						text2 = text.Substring(0, text.IndexOf('('));
					}
					Debug.Log((object)text2);
					if (text2 == null || text2 == "__REDO__Copy Cat" || text2 == "null")
					{
						break;
					}
					if (text2 != null)
					{
						if (PhotonNetwork.OfflineMode)
						{
							Debug.Log((object)"Copy Cat Offline");
							CardInfo cardWithObjectName = Cards.instance.GetCardWithObjectName(text2);
							CardInfo cardWithObjectName2 = Cards.instance.GetCardWithObjectName("__REDO__Copy Cat");
							Cards.instance.AddCardToPlayer(player, cardWithObjectName, false, "", 0f, 0f);
							Cards.instance.RemoveCardFromPlayer(player, player.data.currentCards.IndexOf(cardWithObjectName2));
						}
						else if (((Component)player).GetComponent<PhotonView>().IsMine)
						{
							((Component)this).GetComponent<PhotonView>().RPC("RPC_GiveCard", (RpcTarget)0, new object[2]
							{
								text2,
								player.data.view.ControllerActorNr
							});
						}
					}
				}
				catch
				{
				}
			}
		}

		[PunRPC]
		private void RPC_GiveCard(string cardObjectName, int actorID)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Expected O, but got Unknown
			Player val = (Player)typeof(PlayerManager).InvokeMember("GetPlayerWithActorID", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null, PlayerManager.instance, new object[1] { actorID });
			CardInfo cardWithObjectName = Cards.instance.GetCardWithObjectName(cardObjectName);
			CardInfo cardWithObjectName2 = Cards.instance.GetCardWithObjectName("__REDO__Copy Cat");
			Cards.instance.AddCardToPlayer(val, cardWithObjectName, false, "", 0f, 0f);
			Cards.instance.RemoveCardFromPlayer(val, player.data.currentCards.IndexOf(cardWithObjectName2));
		}
	}
	public class BackupPlanEffect : MonoBehaviour
	{
		public ObjectsToSpawn? Explosion;

		private Player player;

		private void Awake()
		{
			player = ((Component)this).gameObject.GetComponent<Player>();
		}

		private void Start()
		{
			player = ((Component)this).gameObject.GetComponentInParent<Player>();
		}

		private void Update()
		{
		}

		public void OnDestroy()
		{
		}

		public void Destroy()
		{
			Object.Destroy((Object)(object)this);
		}

		public void Explode()
		{
			Explosion.effect.GetComponent<Explosion>().damage = player.data.maxHealth;
			((Component)this).GetComponent<PhotonView>().RPC("RPC_Explode", (RpcTarget)0, new object[1] { player.data.view.ControllerActorNr });
		}

		[PunRPC]
		private void RPC_Explode(int actorID)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Expected O, but got Unknown
			//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_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			Player val = (Player)typeof(PlayerManager).InvokeMember("GetPlayerWithActorID", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null, PlayerManager.instance, new object[1] { actorID });
			GameObject val2 = Object.Instantiate<GameObject>(Explosion.effect, ((Component)val.data).transform.position, Quaternion.identity);
			Transform transform = val2.transform;
			transform.localScale *= 3f + Mathf.Min(3f, val.data.maxHealth / 100f);
			Object.Destroy((Object)(object)val2, 2f);
		}
	}
	public class BountyEffect : MonoBehaviour
	{
		static BountyEffect()
		{
		}

		private void Awake()
		{
		}

		public void Explode()
		{
		}

		public void OnDestroy()
		{
		}

		public void Destroy()
		{
			Object.Destroy((Object)(object)this);
		}
	}
	public class CatchMeIfYouCanEffect : MonoBehaviour
	{
		private Player player;

		private int added_revives = 0;

		private readonly float range = 1.75f;

		private void Awake()
		{
			player = ((Component)this).gameObject.GetComponent<Player>();
		}

		private void Start()
		{
		}

		private void Update()
		{
			//IL_0053: 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_006d: 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_00f1: 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_0106: Unknown result type (might be due to invalid IL or missing references)
			if (!PlayerStatus.PlayerAliveAndSimulated(player))
			{
				return;
			}
			List<Player> list = PlayerManager.instance.players.Where((Player player) => PlayerStatus.PlayerAliveAndSimulated(player) && player.playerID != this.player.playerID).ToList();
			foreach (Player item in list)
			{
				Vector2 val = Vector2.op_Implicit(((Component)item).transform.position - ((Component)player).transform.position);
				if (((Vector2)(ref val)).magnitude <= range)
				{
					CharacterStatModifiers component = ((Component)player).GetComponent<CharacterStatModifiers>();
					component.respawns++;
					added_revives++;
					((Damagable)player.data.healthHandler).CallTakeDamage(new Vector2(player.data.health * 100f, player.data.health * 100f), Vector2.op_Implicit(((Component)player).transform.position), (GameObject)null, (Player)null, true);
				}
			}
		}

		public void OnDestroy()
		{
		}

		public void Destroy()
		{
			Object.Destroy((Object)(object)this);
		}
	}
	public class DestinyBondEffect : MonoBehaviour
	{
		static DestinyBondEffect()
		{
		}

		private void Awake()
		{
		}

		public void Explode()
		{
		}

		public void OnDestroy()
		{
		}

		public void Destroy()
		{
			Object.Destroy((Object)(object)this);
		}
	}
	public class DivineGlockEffect : MonoBehaviour, IGameStartHookHandler, IPointStartHookHandler
	{
		private CharacterStatModifiers characterStatModifiers;

		private Player player;

		public void Start()
		{
			InterfaceGameModeHooksManager.instance.RegisterHooks((object)this);
			player = ((Component)this).GetComponentInParent<Player>();
			characterStatModifiers = ((Component)this).GetComponentInParent<CharacterStatModifiers>();
		}

		public void OnPointStart()
		{
			CharacterData data = player.data;
			data.maxHealth += 25f;
			CharacterData data2 = player.data;
			data2.health += 25f;
		}

		public void OnGameStart()
		{
			Object.Destroy((Object)(object)this);
		}

		public void OnDestroy()
		{
			InterfaceGameModeHooksManager.instance.RemoveHooks((object)this);
		}
	}
	public class GrimReaperEffect : MonoBehaviour
	{
		static GrimReaperEffect()
		{
		}

		private void Awake()
		{
		}

		public void Explode()
		{
		}

		public void OnDestroy()
		{
		}

		public void Destroy()
		{
			Object.Destroy((Object)(object)this);
		}
	}
	internal class InstantTransmissionEffect : MonoBehaviour
	{
		public Player player;

		private void Update()
		{
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			if (Input.GetKeyDown((KeyCode)32))
			{
				((Component)player).GetComponentInParent<PlayerCollision>().IgnoreWallForFrames(2);
				((Component)player).transform.position = MainCam.instance.cam.ScreenToWorldPoint(Input.mousePosition);
			}
		}

		private void OnDestroy()
		{
		}

		public void Destroy()
		{
		}
	}
	public class MortalBountyEffect : MonoBehaviour
	{
		static MortalBountyEffect()
		{
		}

		private void Awake()
		{
		}

		public void Explode()
		{
		}

		public void OnDestroy()
		{
		}

		public void Destroy()
		{
			Object.Destroy((Object)(object)this);
		}
	}
	public class MutuallyAssuredDestructionEffect : MonoBehaviour
	{
		public ObjectsToSpawn? Explosion;

		private Player player;

		private readonly float range = 1.75f;

		private void Awake()
		{
			player = ((Component)this).gameObject.GetComponent<Player>();
		}

		private void Start()
		{
			player = ((Component)this).gameObject.GetComponentInParent<Player>();
		}

		private void Update()
		{
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: 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_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_0117: Unknown result type (might be due to invalid IL or missing references)
			//IL_012b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0135: Unknown result type (might be due to invalid IL or missing references)
			if (!PlayerStatus.PlayerAliveAndSimulated(player))
			{
				return;
			}
			List<Player> list = PlayerManager.instance.players.Where((Player player) => PlayerStatus.PlayerAliveAndSimulated(player) && player.playerID != this.player.playerID).ToList();
			foreach (Player item in list)
			{
				double num = (double)((item.data.stats.sizeMultiplier + player.data.stats.sizeMultiplier) / 2f) + 0.5;
				Vector2 val = Vector2.op_Implicit(((Component)item).transform.position - ((Component)player).transform.position);
				if (!((double)((Vector2)(ref val)).magnitude <= num))
				{
					continue;
				}
				if (PhotonNetwork.OfflineMode)
				{
					killPlayer(item);
					Explosion.effect.GetComponent<Explosion>().damage = 1000f;
					GameObject val2 = Object.Instantiate<GameObject>(Explosion.effect, ((Component)player.data).transform.position, Quaternion.identity);
					Transform transform = val2.transform;
					transform.localScale *= 5f;
					Object.Destroy((Object)(object)val2, 2f);
					ExtensionMethods.ExecuteAfterSeconds((MonoBehaviour)(object)Unbound.Instance, 0.1f, (Action)delegate
					{
						killPlayer(player);
					});
				}
				else if (((Component)player).GetComponent<PhotonView>().IsMine)
				{
					((Component)this).GetComponent<PhotonView>().RPC("RPC_Explode", (RpcTarget)0, new object[1] { item.data.view.ControllerActorNr });
					ExtensionMethods.ExecuteAfterSeconds((MonoBehaviour)(object)Unbound.Instance, 0.1f, (Action)delegate
					{
						((Component)this).GetComponent<PhotonView>().RPC("RPC_Explode", (RpcTarget)0, new object[1] { player.data.view.ControllerActorNr });
					});
				}
			}
		}

		public void OnDestroy()
		{
		}

		public void Destroy()
		{
			Object.Destroy((Object)(object)this);
		}

		[PunRPC]
		private void RPC_Explode(int actorID)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Expected O, but got Unknown
			//IL_0065: 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)
			//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)
			Player val = (Player)typeof(PlayerManager).InvokeMember("GetPlayerWithActorID", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null, PlayerManager.instance, new object[1] { actorID });
			Explosion.effect.GetComponent<Explosion>().damage = 1000f;
			GameObject val2 = Object.Instantiate<GameObject>(Explosion.effect, ((Component)val.data).transform.position, Quaternion.identity);
			Transform transform = val2.transform;
			transform.localScale *= 5f;
			Object.Destroy((Object)(object)val2, 2f);
			killPlayer(val);
		}

		private static void killPlayer(Player player)
		{
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)player != (Object)null)
			{
				typeof(HealthHandler).InvokeMember("RPCA_Die", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null, player.data.healthHandler, new object[1] { (object)new Vector2(0f, 1f) });
			}
		}

		public static (GameObject AddToProjectile, GameObject effect, Explosion explosion) LoadExplosion(string name, Gun? gun = null)
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = (GameObject)Resources.Load("0 cards/Explosive bullet");
			Gun component = val.GetComponent<Gun>();
			if ((Object)(object)gun != (Object)null)
			{
				gun.soundGun.AddSoundImpactModifier(component.soundImpactModifier);
			}
			GameObject addToProjectile = component.objectsToSpawn[0].AddToProjectile;
			GameObject val2 = Object.Instantiate<GameObject>(component.objectsToSpawn[0].effect);
			val2.transform.position = new Vector3(1000f, 0f, 0f);
			((Object)val2).hideFlags = (HideFlags)61;
			((Object)val2).name = name;
			Object.DestroyImmediate((Object)(object)val2.GetComponent<RemoveAfterSeconds>());
			Explosion component2 = val2.GetComponent<Explosion>();
			return (addToProjectile, val2, component2);
		}
	}
	public class PacifistEffect : MonoBehaviour
	{
		static PacifistEffect()
		{
		}

		private void Awake()
		{
		}

		public void Explode()
		{
		}

		public void OnDestroy()
		{
		}

		public void Destroy()
		{
			Object.Destroy((Object)(object)this);
		}
	}
	public class SelfHelpEffect : MonoBehaviour
	{
		static SelfHelpEffect()
		{
		}

		private void Awake()
		{
		}

		public void Explode()
		{
		}

		public void OnDestroy()
		{
		}

		public void Destroy()
		{
			Object.Destroy((Object)(object)this);
		}
	}
	internal class SpatialSwapEffect : MonoBehaviour
	{
		public Block block;

		public Player player;

		public CharacterData data;

		private Action<BlockTriggerType> spatialSwapAction;

		private void Start()
		{
			if (Object.op_Implicit((Object)(object)block))
			{
				spatialSwapAction = GetDoBlockAction(player, block, data).Invoke;
				block.BlockAction = (Action<BlockTriggerType>)Delegate.Combine(block.BlockAction, spatialSwapAction);
			}
		}

		public Action<BlockTriggerType> GetDoBlockAction(Player player, Block block, CharacterData data)
		{
			Player player2 = player;
			return delegate
			{
				//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)
				//IL_006c: 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_0073: Unknown result type (might be due to invalid IL or missing references)
				//IL_007d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0092: Unknown result type (might be due to invalid IL or missing references)
				//IL_009c: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
				List<Player> list = PlayerManager.instance.players.Where((Player p) => p.teamID != player2.teamID && !p.data.dead).ToList();
				Vector3 position = ((Component)player2).transform.position;
				if (list.Count >= 1)
				{
					Random random = new Random();
					int index = random.Next(0, list.Count);
					Player val = list[index];
					Vector3 position2 = ((Component)val).transform.position;
					float y = position.y;
					position.y = position2.y;
					position2.y = y;
					float x = position.x;
					position.x = position2.x;
					position2.x = x;
					((Component)player2).GetComponentInParent<PlayerCollision>().IgnoreWallForFrames(2);
					((Component)player2).transform.position = position;
					((Component)val).GetComponentInParent<PlayerCollision>().IgnoreWallForFrames(2);
					((Component)val).transform.position = position2;
				}
			};
		}

		private void OnDestroy()
		{
			block.BlockAction = (Action<BlockTriggerType>)Delegate.Remove(block.BlockAction, spatialSwapAction);
		}

		public void Destroy()
		{
			Object.Destroy((Object)(object)this);
			block.BlockAction = (Action<BlockTriggerType>)Delegate.Remove(block.BlockAction, spatialSwapAction);
		}
	}
	public class VictorsVitalityEffect : MonoBehaviour
	{
		static VictorsVitalityEffect()
		{
		}

		private void Awake()
		{
		}

		public void Explode()
		{
		}

		public void OnDestroy()
		{
		}

		public void Destroy()
		{
			Object.Destroy((Object)(object)this);
		}
	}
}
namespace RedoNameSpace
{
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.devmung.rounds.Redo", "Redo", "1.0.1")]
	[BepInProcess("Rounds.exe")]
	public class Redo : BaseUnityPlugin
	{
		private const string ModId = "com.devmung.rounds.Redo";

		private const string ModName = "Redo";

		public const string Version = "1.0.1";

		public const string ModInitials = "REDO";

		public static Redo instance { get; private set; }

		private void Awake()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Expected O, but got Unknown
			Harmony val = new Harmony("com.devmung.rounds.Redo");
			val.PatchAll();
		}

		private void Start()
		{
			instance = this;
			CustomCard.BuildCard<FraternalTwins>();
			CustomCard.BuildCard<HeavyWeaponsGuy>();
			CustomCard.BuildCard<SomeoneElsesProblem>();
			CustomCard.BuildCard<MutuallyAssuredDestruction>();
			CustomCard.BuildCard<DestinyBond>();
			CustomCard.BuildCard<BackupPlan>();
			CustomCard.BuildCard<ALittleExtraDamage>();
			CustomCard.BuildCard<ModerateExtraDamage>();
			CustomCard.BuildCard<ALotOfDamage>();
			CustomCard.BuildCard<ALittleExtraHealth>();
			CustomCard.BuildCard<ModerateExtraHealth>();
			CustomCard.BuildCard<ALotOfHealth>();
			CustomCard.BuildCard<TheGambler>((Action<CardInfo>)delegate(CardInfo card)
			{
				TheGambler.Card = card;
			});
			CustomCard.BuildCard<BoysGamble>((Action<CardInfo>)delegate(CardInfo card)
			{
				BoysGamble.Card = card;
			});
			CustomCard.BuildCard<BoysGambleLose>((Action<CardInfo>)delegate(CardInfo newCardInfo)
			{
				Cards.instance.AddHiddenCard(newCardInfo);
			});
			CustomCard.BuildCard<BoysGambleWin>((Action<CardInfo>)delegate(CardInfo newCardInfo)
			{
				Cards.instance.AddHiddenCard(newCardInfo);
			});
			CustomCard.BuildCard<MansGamble>((Action<CardInfo>)delegate(CardInfo card)
			{
				MansGamble.Card = card;
			});
			CustomCard.BuildCard<MansGambleLose>((Action<CardInfo>)delegate(CardInfo newCardInfo)
			{
				Cards.instance.AddHiddenCard(newCardInfo);
			});
			CustomCard.BuildCard<MansGambleWin>((Action<CardInfo>)delegate(CardInfo newCardInfo)
			{
				Cards.instance.AddHiddenCard(newCardInfo);
			});
			CustomCard.BuildCard<KingsGamble>((Action<CardInfo>)delegate(CardInfo card)
			{
				KingsGamble.Card = card;
			});
			CustomCard.BuildCard<KingsGambleLose>((Action<CardInfo>)delegate(CardInfo newCardInfo)
			{
				Cards.instance.AddHiddenCard(newCardInfo);
			});
			CustomCard.BuildCard<KingsGambleWin>((Action<CardInfo>)delegate(CardInfo newCardInfo)
			{
				Cards.instance.AddHiddenCard(newCardInfo);
			});
			CustomCard.BuildCard<GirlsGamble>((Action<CardInfo>)delegate(CardInfo card)
			{
				GirlsGamble.Card = card;
			});
			CustomCard.BuildCard<GirlsGambleLose>((Action<CardInfo>)delegate(CardInfo newCardInfo)
			{
				Cards.instance.AddHiddenCard(newCardInfo);
			});
			CustomCard.BuildCard<GirlsGambleWin>((Action<CardInfo>)delegate(CardInfo newCardInfo)
			{
				Cards.instance.AddHiddenCard(newCardInfo);
			});
			CustomCard.BuildCard<WomansGamble>((Action<CardInfo>)delegate(CardInfo card)
			{
				WomansGamble.Card = card;
			});
			CustomCard.BuildCard<WomansGambleLose>((Action<CardInfo>)delegate(CardInfo newCardInfo)
			{
				Cards.instance.AddHiddenCard(newCardInfo);
			});
			CustomCard.BuildCard<WomansGambleWin>((Action<CardInfo>)delegate(CardInfo newCardInfo)
			{
				Cards.instance.AddHiddenCard(newCardInfo);
			});
			CustomCard.BuildCard<QueensGamble>((Action<CardInfo>)delegate(CardInfo card)
			{
				QueensGamble.Card = card;
			});
			CustomCard.BuildCard<QueensGambleLose>((Action<CardInfo>)delegate(CardInfo newCardInfo)
			{
				Cards.instance.AddHiddenCard(newCardInfo);
			});
			CustomCard.BuildCard<QueensGambleWin>((Action<CardInfo>)delegate(CardInfo newCardInfo)
			{
				Cards.instance.AddHiddenCard(newCardInfo);
			});
			CustomCard.BuildCard<MortalBounty>();
			CustomCard.BuildCard<VictorsVitality>();
			CustomCard.BuildCard<GrimReaper>();
			CustomCard.BuildCard<SelfHelp>();
			CustomCard.BuildCard<Pacifist>();
			CustomCard.BuildCard<SpatialSwap>();
			CustomCard.BuildCard<InstantTransmission>();
			CustomCard.BuildCard<Bounty>();
			CustomCard.BuildCard<Sniper>((Action<CardInfo>)delegate(CardInfo card)
			{
				Sniper.Card = card;
			});
			CustomCard.BuildCard<Steady>((Action<CardInfo>)delegate(CardInfo card)
			{
				Steady.Card = card;
			});
			CustomCard.BuildCard<LongerBarrel>((Action<CardInfo>)delegate(CardInfo card)
			{
				LongerBarrel.Card = card;
			});
			CustomCard.BuildCard<ArmorPiercing>((Action<CardInfo>)delegate(CardInfo card)
			{
				ArmorPiercing.Card = card;
			});
			CustomCard.BuildCard<WallHacks>((Action<CardInfo>)delegate(CardInfo card)
			{
				WallHacks.Card = card;
			});
		}
	}
}
namespace RedoNameSpace.Cards
{
	internal class ALittleExtraDamage : CustomCard
	{
		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			gun.bulletDamageMultiplier += 0.45454547f;
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
		}

		protected override string GetTitle()
		{
			return "A Little Extra Damage";
		}

		protected override string GetDescription()
		{
			return "Sprinkle some damage on your gun.";
		}

		protected override GameObject GetCardArt()
		{
			return null;
		}

		protected override Rarity GetRarity()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (Rarity)0;
		}

		protected override CardInfoStat[] GetStats()
		{
			//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_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: 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_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			return (CardInfoStat[])(object)new CardInfoStat[1]
			{
				new CardInfoStat
				{
					positive = true,
					stat = "Gun Damage",
					amount = "+25",
					simepleAmount = (SimpleAmount)0
				}
			};
		}

		protected override CardThemeColorType GetTheme()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (CardThemeColorType)7;
		}

		public override string GetModName()
		{
			return "REDO";
		}
	}
	internal class ALittleExtraHealth : CustomCard
	{
		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			CharacterData data2 = player.data;
			data2.maxHealth += 50f;
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
		}

		protected override string GetTitle()
		{
			return "A Little Extra Health";
		}

		protected override string GetDescription()
		{
			return "Sprinkle some health on your body.";
		}

		protected override GameObject GetCardArt()
		{
			return null;
		}

		protected override Rarity GetRarity()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (Rarity)0;
		}

		protected override CardInfoStat[] GetStats()
		{
			//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_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: 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_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			return (CardInfoStat[])(object)new CardInfoStat[1]
			{
				new CardInfoStat
				{
					positive = true,
					stat = "Health Points",
					amount = "+50",
					simepleAmount = (SimpleAmount)0
				}
			};
		}

		protected override CardThemeColorType GetTheme()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (CardThemeColorType)7;
		}

		public override string GetModName()
		{
			return "REDO";
		}
	}
	internal class ALotOfDamage : CustomCard
	{
		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			gun.bulletDamageMultiplier += 2.7272727f;
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
		}

		protected override string GetTitle()
		{
			return "A Lot Of Damage";
		}

		protected override string GetDescription()
		{
			return "Weak? Just shoot stronger bullets.";
		}

		protected override GameObject GetCardArt()
		{
			return null;
		}

		protected override Rarity GetRarity()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (Rarity)2;
		}

		protected override CardInfoStat[] GetStats()
		{
			//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_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: 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_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			return (CardInfoStat[])(object)new CardInfoStat[1]
			{
				new CardInfoStat
				{
					positive = true,
					stat = "Gun Damage",
					amount = "+150",
					simepleAmount = (SimpleAmount)0
				}
			};
		}

		protected override CardThemeColorType GetTheme()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (CardThemeColorType)7;
		}

		public override string GetModName()
		{
			return "REDO";
		}
	}
	internal class ALotOfHealth : CustomCard
	{
		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			CharacterData data2 = player.data;
			data2.maxHealth += 250f;
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
		}

		protected override string GetTitle()
		{
			return "A Lot Of Health";
		}

		protected override string GetDescription()
		{
			return "Weak? Don't be.";
		}

		protected override GameObject GetCardArt()
		{
			return null;
		}

		protected override Rarity GetRarity()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (Rarity)2;
		}

		protected override CardInfoStat[] GetStats()
		{
			//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_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: 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_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			return (CardInfoStat[])(object)new CardInfoStat[1]
			{
				new CardInfoStat
				{
					positive = true,
					stat = "Health Points",
					amount = "+250",
					simepleAmount = (SimpleAmount)0
				}
			};
		}

		protected override CardThemeColorType GetTheme()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (CardThemeColorType)7;
		}

		public override string GetModName()
		{
			return "REDO";
		}
	}
	internal class AnotherOne : CustomCard
	{
		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			ExtensionMethods.GetOrAddComponent<AnotherOneEffect>(((Component)player).gameObject, false);
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Object.Destroy((Object)(object)ExtensionMethods.GetOrAddComponent<AnotherOneEffect>(((Component)player).gameObject, false));
		}

		protected override string GetTitle()
		{
			return "Another One";
		}

		protected override string GetDescription()
		{
			return "One time use: copy one of your own cards on the card bar by clicking on it.";
		}

		protected override GameObject GetCardArt()
		{
			return null;
		}

		protected override Rarity GetRarity()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (Rarity)2;
		}

		protected override CardInfoStat[] GetStats()
		{
			return (CardInfoStat[])(object)new CardInfoStat[0];
		}

		protected override CardThemeColorType GetTheme()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (CardThemeColorType)7;
		}

		public override string GetModName()
		{
			return "REDO";
		}
	}
	internal class AntiCringe : CustomCard
	{
		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			ExtensionMethods.GetOrAddComponent<AntiCringeEffect>(((Component)player).gameObject, false);
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Object.Destroy((Object)(object)ExtensionMethods.GetOrAddComponent<AntiCringeEffect>(((Component)player).gameObject, false));
		}

		protected override string GetTitle()
		{
			return "Anti Cringe";
		}

		protected override string GetDescription()
		{
			return "One time use: remove any player's card on the card bar by clicking on it.";
		}

		protected override GameObject GetCardArt()
		{
			return null;
		}

		protected override Rarity GetRarity()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (Rarity)0;
		}

		protected override CardInfoStat[] GetStats()
		{
			return (CardInfoStat[])(object)new CardInfoStat[0];
		}

		protected override CardThemeColorType GetTheme()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (CardThemeColorType)7;
		}

		public override string GetModName()
		{
			return "REDO";
		}
	}
	internal class BackupPlan : CustomCard
	{
		private ObjectsToSpawn? explosion;

		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
			statModifiers.movementSpeed = 0.7f;
			cardInfo.allowMultiple = false;
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			//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_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: 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_0069: 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_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: 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_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Expected O, but got Unknown
			BackupPlanEffect orAddComponent = ExtensionMethods.GetOrAddComponent<BackupPlanEffect>(((Component)player).gameObject, false);
			(GameObject AddToProjectile, GameObject effect, Explosion explosion) tuple = LoadExplosion("BackupPlanExplosion");
			GameObject item = tuple.AddToProjectile;
			GameObject item2 = tuple.effect;
			orAddComponent.Explosion = new ObjectsToSpawn
			{
				AddToProjectile = item,
				direction = (Direction)0,
				effect = item2,
				normalOffset = 0.1f,
				scaleFromDamage = 0.5f,
				scaleStackM = 0.7f,
				scaleStacks = true,
				spawnAsChild = false,
				spawnOn = (SpawnOn)0,
				stacks = 0,
				stickToAllTargets = false,
				stickToBigTargets = false,
				zeroZ = false
			};
			ExtensionMethods.GetOrAddComponent<SpawnedAttack>(item2, false).spawner = player;
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Object.Destroy((Object)(object)ExtensionMethods.GetOrAddComponent<BackupPlanEffect>(((Component)player).gameObject, false));
		}

		protected override string GetTitle()
		{
			return "Backup Plan";
		}

		protected override string GetDescription()
		{
			return "Explode on death.";
		}

		protected override GameObject GetCardArt()
		{
			return null;
		}

		protected override Rarity GetRarity()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (Rarity)1;
		}

		protected override CardInfoStat[] GetStats()
		{
			//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_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: 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_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Expected O, but got Unknown
			return (CardInfoStat[])(object)new CardInfoStat[2]
			{
				new CardInfoStat
				{
					positive = true,
					stat = "On Death",
					amount = "Explode",
					simepleAmount = (SimpleAmount)0
				},
				new CardInfoStat
				{
					positive = false,
					stat = "Speed",
					amount = "-30%",
					simepleAmount = (SimpleAmount)0
				}
			};
		}

		protected override CardThemeColorType GetTheme()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (CardThemeColorType)0;
		}

		public override string GetModName()
		{
			return "REDO";
		}

		public static (GameObject AddToProjectile, GameObject effect, Explosion explosion) LoadExplosion(string name, Gun? gun = null)
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = (GameObject)Resources.Load("0 cards/Explosive bullet");
			Gun component = val.GetComponent<Gun>();
			if ((Object)(object)gun != (Object)null)
			{
				gun.soundGun.AddSoundImpactModifier(component.soundImpactModifier);
			}
			GameObject addToProjectile = component.objectsToSpawn[0].AddToProjectile;
			GameObject val2 = Object.Instantiate<GameObject>(component.objectsToSpawn[0].effect);
			val2.transform.position = new Vector3(1000f, 0f, 0f);
			((Object)val2).hideFlags = (HideFlags)61;
			((Object)val2).name = name;
			Object.DestroyImmediate((Object)(object)val2.GetComponent<RemoveAfterSeconds>());
			Explosion component2 = val2.GetComponent<Explosion>();
			return (addToProjectile, val2, component2);
		}
	}
	internal class Bounty : CustomCard
	{
		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
			statModifiers.health = 5f;
			gun.bulletDamageMultiplier = 5f;
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			ExtensionMethods.GetOrAddComponent<BountyEffect>(((Component)player).gameObject, false);
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Object.Destroy((Object)(object)ExtensionMethods.GetOrAddComponent<BountyEffect>(((Component)player).gameObject, false));
		}

		protected override string GetTitle()
		{
			return "Bounty";
		}

		protected override string GetDescription()
		{
			return "Your crimes have earned you strength, but a bounty has been placed on your head. Whomever kills you will take this card with them. If you die due to other reasons, someone else will randomly get it.";
		}

		protected override GameObject GetCardArt()
		{
			return null;
		}

		protected override Rarity GetRarity()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (Rarity)1;
		}

		protected override CardInfoStat[] GetStats()
		{
			//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_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: 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_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Expected O, but got Unknown
			return (CardInfoStat[])(object)new CardInfoStat[2]
			{
				new CardInfoStat
				{
					positive = true,
					stat = "Damage",
					amount = "+500%",
					simepleAmount = (SimpleAmount)0
				},
				new CardInfoStat
				{
					positive = true,
					stat = "Health",
					amount = "+500%",
					simepleAmount = (SimpleAmount)0
				}
			};
		}

		protected override CardThemeColorType GetTheme()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (CardThemeColorType)7;
		}

		public override string GetModName()
		{
			return "REDO";
		}
	}
	internal class CardRemover : CustomCard
	{
		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			ExtensionMethods.GetOrAddComponent<CardRemoverEffect>(((Component)player).gameObject, false);
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Object.Destroy((Object)(object)ExtensionMethods.GetOrAddComponent<CardRemoverEffect>(((Component)player).gameObject, false));
		}

		protected override string GetTitle()
		{
			return "Card Remover";
		}

		protected override string GetDescription()
		{
			return "One time use: remove one of your own cards on the card bar by clicking on it.";
		}

		protected override GameObject GetCardArt()
		{
			return null;
		}

		protected override Rarity GetRarity()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (Rarity)1;
		}

		protected override CardInfoStat[] GetStats()
		{
			return (CardInfoStat[])(object)new CardInfoStat[0];
		}

		protected override CardThemeColorType GetTheme()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (CardThemeColorType)7;
		}

		public override string GetModName()
		{
			return "REDO";
		}
	}
	internal class CopyCat : CustomCard
	{
		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			ExtensionMethods.GetOrAddComponent<CopyCatEffect>(((Component)player).gameObject, false);
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Object.Destroy((Object)(object)ExtensionMethods.GetOrAddComponent<CopyCatEffect>(((Component)player).gameObject, false));
		}

		protected override string GetTitle()
		{
			return "Copy Cat";
		}

		protected override string GetDescription()
		{
			return "One time use: create a copy of any card on the card bar by clicking on it.";
		}

		protected override GameObject GetCardArt()
		{
			return null;
		}

		protected override Rarity GetRarity()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (Rarity)0;
		}

		protected override CardInfoStat[] GetStats()
		{
			return (CardInfoStat[])(object)new CardInfoStat[0];
		}

		protected override CardThemeColorType GetTheme()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (CardThemeColorType)7;
		}

		public override string GetModName()
		{
			return "REDO";
		}
	}
	internal class DestinyBond : CustomCard
	{
		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
			cardInfo.allowMultiple = false;
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			ExtensionMethods.GetOrAddComponent<DestinyBondEffect>(((Component)player).gameObject, false);
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Object.Destroy((Object)(object)ExtensionMethods.GetOrAddComponent<DestinyBondEffect>(((Component)player).gameObject, false));
		}

		protected override string GetTitle()
		{
			return "Destiny Bond";
		}

		protected override string GetDescription()
		{
			return "On death, invite your killer to come with you.";
		}

		protected override GameObject GetCardArt()
		{
			return null;
		}

		protected override Rarity GetRarity()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (Rarity)2;
		}

		protected override CardInfoStat[] GetStats()
		{
			return (CardInfoStat[])(object)new CardInfoStat[0];
		}

		protected override CardThemeColorType GetTheme()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (CardThemeColorType)0;
		}

		public override string GetModName()
		{
			return "REDO";
		}
	}
	internal class FraternalTwins : CustomCard
	{
		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
			CardInfoExtension.GetAdditionalData(cardInfo).canBeReassigned = false;
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			List<Player> list = new List<Player>(PlayerManager.instance.players);
			list.Remove(player);
			Player val = list[Random.Range(0, list.Count)];
			CardInfo[] array = val.data.currentCards.Where((CardInfo card) => CardInfoExtension.GetAdditionalData(card).canBeReassigned).ToArray();
			Cards.instance.RemoveAllCardsFromPlayer(player, true);
			Cards.instance.AddCardsToPlayer(player, array, false, (string[])null, (float[])null, (float[])null, true);
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
		}

		protected override string GetTitle()
		{
			return "Fraternal Twins";
		}

		protected override string GetDescription()
		{
			return "Replace all your cards with a copy of a random player's cards.";
		}

		protected override GameObject GetCardArt()
		{
			return null;
		}

		protected override Rarity GetRarity()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (Rarity)1;
		}

		protected override CardInfoStat[] GetStats()
		{
			return null;
		}

		protected override CardThemeColorType GetTheme()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (CardThemeColorType)7;
		}

		public override string GetModName()
		{
			return "REDO";
		}
	}
	internal class GrimReaper : CustomCard
	{
		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			ExtensionMethods.GetOrAddComponent<GrimReaperEffect>(((Component)player).gameObject, false);
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Object.Destroy((Object)(object)ExtensionMethods.GetOrAddComponent<GrimReaperEffect>(((Component)player).gameObject, false));
		}

		protected override string GetTitle()
		{
			return "Grim Reaper";
		}

		protected override string GetDescription()
		{
			return "Harvest the lives of those you slay in a round.";
		}

		protected override GameObject GetCardArt()
		{
			return null;
		}

		protected override Rarity GetRarity()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (Rarity)2;
		}

		protected override CardInfoStat[] GetStats()
		{
			//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_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: 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_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			return (CardInfoStat[])(object)new CardInfoStat[1]
			{
				new CardInfoStat
				{
					positive = true,
					stat = "Per Kill",
					amount = "+1 Temporary Revive",
					simepleAmount = (SimpleAmount)0
				}
			};
		}

		protected override CardThemeColorType GetTheme()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (CardThemeColorType)0;
		}

		public override string GetModName()
		{
			return "REDO";
		}
	}
	internal class HeavyWeaponsGuy : CustomCard
	{
		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
			statModifiers.health = 3f;
			statModifiers.movementSpeed = 0.7f;
			gun.attackSpeed = 0.2f;
			gun.ammo = 100;
			gun.bulletDamageMultiplier = 0.1f;
			gun.spread = 0.05f;
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
		}

		protected override string GetTitle()
		{
			return "Heavy Weapons Guy";
		}

		protected override string GetDescription()
		{
			return "Become Heavy Weapons Guy.";
		}

		protected override GameObject GetCardArt()
		{
			return null;
		}

		protected override Rarity GetRarity()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (Rarity)2;
		}

		protected override CardInfoStat[] GetStats()
		{
			//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_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: 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_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Expected O, but got Unknown
			//IL_0061: 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_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: 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)
			//IL_008b: Expected O, but got Unknown
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Expected O, but got Unknown
			//IL_00b9: 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)
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Expected O, but got Unknown
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: 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_00fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			//IL_0109: Unknown result type (might be due to invalid IL or missing references)
			//IL_010f: Expected O, but got Unknown
			return (CardInfoStat[])(object)new CardInfoStat[6]
			{
				new CardInfoStat
				{
					positive = true,
					stat = "Health",
					amount = "+300%",
					simepleAmount = (SimpleAmount)0
				},
				new CardInfoStat
				{
					positive = true,
					stat = "Attack Speed",
					amount = "+500%",
					simepleAmount = (SimpleAmount)0
				},
				new CardInfoStat
				{
					positive = true,
					stat = "Ammo",
					amount = "+100",
					simepleAmount = (SimpleAmount)0
				},
				new CardInfoStat
				{
					positive = false,
					stat = "Damage",
					amount = "-90%",
					simepleAmount = (SimpleAmount)0
				},
				new CardInfoStat
				{
					positive = false,
					stat = "Movement Speed",
					amount = "-30%",
					simepleAmount = (SimpleAmount)0
				},
				new CardInfoStat
				{
					positive = false,
					stat = "Spread",
					amount = "+5%",
					simepleAmount = (SimpleAmount)0
				}
			};
		}

		protected override CardThemeColorType GetTheme()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (CardThemeColorType)0;
		}

		public override string GetModName()
		{
			return "REDO";
		}
	}
	internal class InstantTransmission : CustomCard
	{
		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
			cardInfo.allowMultiple = false;
			statModifiers.movementSpeed = 0f;
			statModifiers.numberOfJumps = 0;
			statModifiers.jump = 0f;
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			InstantTransmissionEffect orAddComponent = ExtensionMethods.GetOrAddComponent<InstantTransmissionEffect>(((Component)player).gameObject, false);
			orAddComponent.player = player;
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Object.Destroy((Object)(object)((Component)player).gameObject.GetComponentInChildren<InstantTransmissionEffect>());
		}

		protected override string GetTitle()
		{
			return "Instant Transmission";
		}

		protected override string GetDescription()
		{
			return "Teleport to your cursor when hitting space bar.";
		}

		protected override GameObject GetCardArt()
		{
			return null;
		}

		protected override Rarity GetRarity()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (Rarity)1;
		}

		protected override CardInfoStat[] GetStats()
		{
			//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_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: 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_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Expected O, but got Unknown
			//IL_0061: 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_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: 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)
			//IL_008b: Expected O, but got Unknown
			return (CardInfoStat[])(object)new CardInfoStat[3]
			{
				new CardInfoStat
				{
					positive = false,
					stat = "Movement",
					amount = "No",
					simepleAmount = (SimpleAmount)0
				},
				new CardInfoStat
				{
					positive = false,
					stat = "Jumps",
					amount = "No",
					simepleAmount = (SimpleAmount)0
				},
				new CardInfoStat
				{
					positive = true,
					stat = "Teleport",
					amount = "Yes",
					simepleAmount = (SimpleAmount)0
				}
			};
		}

		protected override CardThemeColorType GetTheme()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (CardThemeColorType)7;
		}

		public override string GetModName()
		{
			return "REDO";
		}
	}
	internal class ModerateExtraDamage : CustomCard
	{
		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			gun.bulletDamageMultiplier += 0.90909094f;
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
		}

		protected override string GetTitle()
		{
			return "Moderate Extra Damage";
		}

		protected override string GetDescription()
		{
			return "Up the caliber of your bullets.";
		}

		protected override GameObject GetCardArt()
		{
			return null;
		}

		protected override Rarity GetRarity()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (Rarity)1;
		}

		protected override CardInfoStat[] GetStats()
		{
			//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_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: 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_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			return (CardInfoStat[])(object)new CardInfoStat[1]
			{
				new CardInfoStat
				{
					positive = true,
					stat = "Gun Damage",
					amount = "+50",
					simepleAmount = (SimpleAmount)0
				}
			};
		}

		protected override CardThemeColorType GetTheme()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (CardThemeColorType)7;
		}

		public override string GetModName()
		{
			return "REDO";
		}
	}
	internal class ModerateExtraHealth : CustomCard
	{
		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			CharacterData data2 = player.data;
			data2.maxHealth += 150f;
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
		}

		protected override string GetTitle()
		{
			return "Moderate Extra Health";
		}

		protected override string GetDescription()
		{
			return "Time to hit the gym.";
		}

		protected override GameObject GetCardArt()
		{
			return null;
		}

		protected override Rarity GetRarity()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (Rarity)1;
		}

		protected override CardInfoStat[] GetStats()
		{
			//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_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: 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_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			return (CardInfoStat[])(object)new CardInfoStat[1]
			{
				new CardInfoStat
				{
					positive = true,
					stat = "Health Points",
					amount = "+150",
					simepleAmount = (SimpleAmount)0
				}
			};
		}

		protected override CardThemeColorType GetTheme()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (CardThemeColorType)7;
		}

		public override string GetModName()
		{
			return "REDO";
		}
	}
	internal class MortalBounty : CustomCard
	{
		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			ExtensionMethods.GetOrAddComponent<MortalBountyEffect>(((Component)player).gameObject, false);
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Object.Destroy((Object)(object)ExtensionMethods.GetOrAddComponent<MortalBountyEffect>(((Component)player).gameObject, false));
		}

		protected override string GetTitle()
		{
			return "Mortal Bounty";
		}

		protected override string GetDescription()
		{
			return "Gain 25 damage for each foe you kill";
		}

		protected override GameObject GetCardArt()
		{
			return null;
		}

		protected override Rarity GetRarity()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (Rarity)2;
		}

		protected override CardInfoStat[] GetStats()
		{
			//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_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: 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_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			return (CardInfoStat[])(object)new CardInfoStat[1]
			{
				new CardInfoStat
				{
					positive = true,
					stat = "Per Kill",
					amount = "+25 Damage",
					simepleAmount = (SimpleAmount)0
				}
			};
		}

		protected override CardThemeColorType GetTheme()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (CardThemeColorType)0;
		}

		public override string GetModName()
		{
			return "REDO";
		}
	}
	internal class MutuallyAssuredDestruction : CustomCard
	{
		private ObjectsToSpawn? explosion;

		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
			statModifiers.movementSpeed = 2f;
			statModifiers.health = 0.4f;
			cardInfo.allowMultiple = false;
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			//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_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: 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_0069: 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_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: 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_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Expected O, but got Unknown
			MutuallyAssuredDestructionEffect orAddComponent = ExtensionMethods.GetOrAddComponent<MutuallyAssuredDestructionEffect>(((Component)player).gameObject, false);
			(GameObject AddToProjectile, GameObject effect, Explosion explosion) tuple = LoadExplosion("MADExplosion");
			GameObject item = tuple.AddToProjectile;
			GameObject item2 = tuple.effect;
			orAddComponent.Explosion = new ObjectsToSpawn
			{
				AddToProjectile = item,
				direction = (Direction)0,
				effect = item2,
				normalOffset = 0.1f,
				scaleFromDamage = 0.5f,
				scaleStackM = 0.7f,
				scaleStacks = true,
				spawnAsChild = false,
				spawnOn = (SpawnOn)0,
				stacks = 0,
				stickToAllTargets = false,
				stickToBigTargets = false,
				zeroZ = false
			};
			ExtensionMethods.GetOrAddComponent<SpawnedAttack>(item2, false).spawner = player;
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Object.Destroy((Object)(object)ExtensionMethods.GetOrAddComponent<MutuallyAssuredDestructionEffect>(((Component)player).gameObject, false));
		}

		protected override string GetTitle()
		{
			return "Mutually Assured Destruction";
		}

		protected override string GetDescription()
		{
			return "Touching another player will permanently kill you both.";
		}

		protected override GameObject GetCardArt()
		{
			return null;
		}

		protected override Rarity GetRarity()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (Rarity)2;
		}

		protected override CardInfoStat[] GetStats()
		{
			//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_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: 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_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Expected O, but got Unknown
			return (CardInfoStat[])(object)new CardInfoStat[2]
			{
				new CardInfoStat
				{
					positive = true,
					stat = "Speed",
					amount = "+100%",
					simepleAmount = (SimpleAmount)0
				},
				new CardInfoStat
				{
					positive = false,
					stat = "Health",
					amount = "-60%",
					simepleAmount = (SimpleAmount)0
				}
			};
		}

		protected override CardThemeColorType GetTheme()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (CardThemeColorType)0;
		}

		public override string GetModName()
		{
			return "REDO";
		}

		public static (GameObject AddToProjectile, GameObject effect, Explosion explosion) LoadExplosion(string name, Gun? gun = null)
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = (GameObject)Resources.Load("0 cards/Explosive bullet");
			Gun component = val.GetComponent<Gun>();
			if ((Object)(object)gun != (Object)null)
			{
				gun.soundGun.AddSoundImpactModifier(component.soundImpactModifier);
			}
			GameObject addToProjectile = component.objectsToSpawn[0].AddToProjectile;
			GameObject val2 = Object.Instantiate<GameObject>(component.objectsToSpawn[0].effect);
			val2.transform.position = new Vector3(1000f, 0f, 0f);
			((Object)val2).hideFlags = (HideFlags)61;
			((Object)val2).name = name;
			Object.DestroyImmediate((Object)(object)val2.GetComponent<RemoveAfterSeconds>());
			Explosion component2 = val2.GetComponent<Explosion>();
			return (addToProjectile, val2, component2);
		}
	}
	internal class Pacifist : CustomCard
	{
		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
			cardInfo.allowMultiple = false;
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			ExtensionMethods.GetOrAddComponent<PacifistEffect>(((Component)player).gameObject, false);
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Object.Destroy((Object)(object)ExtensionMethods.GetOrAddComponent<PacifistEffect>(((Component)player).gameObject, false));
		}

		protected override string GetTitle()
		{
			return "Pacifist*";
		}

		protected override string GetDescription()
		{
			return "Your bullets heal people. \n*Warning: too much healing can be bad.";
		}

		protected override GameObject GetCardArt()
		{
			return null;
		}

		protected override Rarity GetRarity()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (Rarity)1;
		}

		protected override CardInfoStat[] GetStats()
		{
			//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_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: 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_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			return (CardInfoStat[])(object)new CardInfoStat[1]
			{
				new CardInfoStat
				{
					positive = true,
					stat = "Damage",
					amount = "Healing",
					simepleAmount = (SimpleAmount)0
				}
			};
		}

		protected override CardThemeColorType GetTheme()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (CardThemeColorType)7;
		}

		public override string GetModName()
		{
			return "REDO";
		}
	}
	internal class SelfHelp : CustomCard
	{
		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
			cardInfo.allowMultiple = false;
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			ExtensionMethods.GetOrAddComponent<SelfHelpEffect>(((Component)player).gameObject, false);
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Object.Destroy((Object)(object)ExtensionMethods.GetOrAddComponent<SelfHelpEffect>(((Component)player).gameObject, false));
		}

		protected override string GetTitle()
		{
			return "Self Help";
		}

		protected override string GetDescription()
		{
			return "Become immune to self harm.";
		}

		protected override GameObject GetCardArt()
		{
			return null;
		}

		protected override Rarity GetRarity()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (Rarity)1;
		}

		protected override CardInfoStat[] GetStats()
		{
			//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_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: 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_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			return (CardInfoStat[])(object)new CardInfoStat[1]
			{
				new CardInfoStat
				{
					positive = true,
					stat = "Self-damage",
					amount = "None",
					simepleAmount = (SimpleAmount)0
				}
			};
		}

		protected override CardThemeColorType GetTheme()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (CardThemeColorType)7;
		}

		public override string GetModName()
		{
			return "REDO";
		}
	}
	internal class ArmorPiercing : CustomCard
	{
		internal static CardInfo Card;

		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
			gun.unblockable = true;
			gun.bodyRecoil += 250f;
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
		}

		public override void Callback()
		{
			ExtensionMethods.GetOrAddComponent<ClassNameMono>(((Component)this).gameObject, false);
		}

		protected override string GetTitle()
		{
			return "Armor Piercing";
		}

		protected override string GetDescription()
		{
			return "Unblockable Bullets.";
		}

		protected override GameObject GetCardArt()
		{
			return null;
		}

		protected override Rarity GetRarity()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (Rarity)2;
		}

		protected override CardInfoStat[] GetStats()
		{
			//IL_0009: Unknown result type (might be due to