Decompiled source of KoalasFantasticCards v3.6.1

plugins/koalasfantasticcards.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.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using CardChoiceSpawnUniqueCardPatch.CustomCategories;
using CardThemeLib;
using ClassesManagerReborn;
using ClassesManagerReborn.Util;
using HarmonyLib;
using Jotunn.Utils;
using KFC.Cards;
using KFC.MonoBehaviors;
using KFC.Monos;
using KFC.RiftShenanigans;
using KFC.UnessesaryAddons;
using ModdingUtils.Extensions;
using ModdingUtils.Utils;
using ModsPlus;
using Photon.Pun;
using RarityLib.Utils;
using SimulationChamber;
using Sonigon;
using TMPro;
using UnboundLib;
using UnboundLib.Cards;
using UnboundLib.GameModes;
using UnboundLib.Networking;
using UnboundLib.Utils;
using UnboundLib.Utils.UI;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using WillsWackyManagers.Utils;

[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("koalasfantasticcards")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("koalasfantasticcards")]
[assembly: AssemblyTitle("koalasfantasticcards")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace KFC
{
	[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.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("koala.koalas.fantastic.cards", "Koalas Fantastic Cards", "3.6.1")]
	[BepInProcess("Rounds.exe")]
	public class KFC : BaseUnityPlugin
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static Func<CardInfo, bool> <>9__22_0;

			public static UnityAction <>9__22_1;

			public static Action<CardInfo> <>9__22_2;

			public static Action<CardInfo> <>9__22_3;

			public static Action<CardInfo> <>9__22_4;

			public static Action<CardInfo> <>9__22_5;

			public static Action<CardInfo> <>9__22_6;

			public static Action<CardInfo> <>9__22_7;

			public static Action<CardInfo> <>9__22_8;

			public static Action<CardInfo> <>9__22_9;

			public static Action<CardInfo> <>9__22_10;

			public static Action<CardInfo> <>9__22_11;

			public static Action<CardInfo> <>9__22_12;

			public static Action<CardInfo> <>9__22_13;

			public static Action<CardInfo> <>9__22_14;

			public static Action<CardInfo> <>9__22_15;

			public static Action<CardInfo> <>9__22_16;

			public static Action<CardInfo> <>9__22_17;

			public static Action<CardInfo> <>9__22_18;

			public static Action<CardInfo> <>9__22_19;

			public static Action<CardInfo> <>9__22_20;

			public static Action<CardInfo> <>9__22_21;

			public static Action<CardInfo> <>9__22_22;

			public static Action<CardInfo> <>9__22_23;

			public static Action<CardInfo> <>9__22_24;

			public static Action<CardInfo> <>9__22_25;

			public static Action<CardInfo> <>9__22_26;

			public static Action<CardInfo> <>9__22_27;

			public static Action<CardInfo> <>9__22_28;

			public static Action<CardInfo> <>9__22_29;

			public static Action<CardInfo> <>9__22_30;

			public static Action<CardInfo> <>9__22_31;

			public static Action<CardInfo> <>9__22_32;

			public static Action<CardInfo> <>9__22_33;

			public static Action<CardInfo> <>9__22_34;

			public static Action<CardInfo> <>9__22_35;

			public static Action<CardInfo> <>9__22_36;

			public static Action<CardInfo> <>9__22_37;

			internal bool <Start>b__22_0(CardInfo c)
			{
				return c.cardName.ToLower() == "mayhem";
			}

			internal void <Start>b__22_1()
			{
			}

			internal void <Start>b__22_2(CardInfo card)
			{
				BoxedBullets.card = card;
				ExtensionMethods.SetAbbreviation(card, "Bb");
			}

			internal void <Start>b__22_3(CardInfo card)
			{
				StayWinning.card = card;
				ExtensionMethods.SetAbbreviation(card, "Sw");
			}

			internal void <Start>b__22_4(CardInfo card)
			{
				splinter.card = card;
				ExtensionMethods.SetAbbreviation(card, "Sp");
			}

			internal void <Start>b__22_5(CardInfo card)
			{
				indiajoenas.card = card;
				ExtensionMethods.SetAbbreviation(card, "Ij");
			}

			internal void <Start>b__22_6(CardInfo card)
			{
				legos.card = card;
				ExtensionMethods.SetAbbreviation(card, "Le");
			}

			internal void <Start>b__22_7(CardInfo card)
			{
				uwullets.card = card;
				ExtensionMethods.SetAbbreviation(card, "Uw");
			}

			internal void <Start>b__22_8(CardInfo card)
			{
				scp_500.card = card;
				ExtensionMethods.SetAbbreviation(card, "S5");
			}

			internal void <Start>b__22_9(CardInfo card)
			{
				doomSlayer.card = card;
				ExtensionMethods.SetAbbreviation(card, "DS");
			}

			internal void <Start>b__22_10(CardInfo card)
			{
				blackholegun.card = card;
				ExtensionMethods.SetAbbreviation(card, "Bh");
			}

			internal void <Start>b__22_11(CardInfo card)
			{
				Armor.card = card;
				ExtensionMethods.SetAbbreviation(card, "Ar");
			}

			internal void <Start>b__22_12(CardInfo card)
			{
				Extendo.card = card;
				ExtensionMethods.SetAbbreviation(card, "Ex");
			}

			internal void <Start>b__22_13(CardInfo card)
			{
				KingOfSpeed.card = card;
			}

			internal void <Start>b__22_14(CardInfo card)
			{
				swordinstone.card = card;
				ExtensionMethods.SetAbbreviation(card, "Ss");
			}

			internal void <Start>b__22_15(CardInfo card)
			{
				excaliber.card = card;
				ExtensionMethods.SetAbbreviation(card, "Ex");
			}

			internal void <Start>b__22_16(CardInfo card)
			{
				Cards.instance.AddHiddenCard(card);
				failure.card = card;
				ExtensionMethods.SetAbbreviation(card, "XX");
			}

			internal void <Start>b__22_17(CardInfo card)
			{
				RiftWalker.card = card;
				ExtensionMethods.SetAbbreviation(card, "Rw");
			}

			internal void <Start>b__22_18(CardInfo card)
			{
				RiftGun.card = card;
				ExtensionMethods.SetAbbreviation(card, "Rh");
			}

			internal void <Start>b__22_19(CardInfo card)
			{
				RiftBody.card = card;
				ExtensionMethods.SetAbbreviation(card, "Rb");
			}

			internal void <Start>b__22_20(CardInfo card)
			{
				RiftMind.card = card;
				ExtensionMethods.SetAbbreviation(card, "Rm");
			}

			internal void <Start>b__22_21(CardInfo card)
			{
				Cards.instance.AddHiddenCard(card);
				RiftSoul.card = card;
				ExtensionMethods.SetAbbreviation(card, "Rs");
			}

			internal void <Start>b__22_22(CardInfo card)
			{
				Cards.instance.AddHiddenCard(card);
				Rifted.card = card;
			}

			internal void <Start>b__22_23(CardInfo card)
			{
				ViruzCard.card = card;
			}

			internal void <Start>b__22_24(CardInfo card)
			{
				Ard.card = card;
				ExtensionMethods.SetAbbreviation(card, "A+");
			}

			internal void <Start>b__22_25(CardInfo card)
			{
				Bard.card = card;
				ExtensionMethods.SetAbbreviation(card, "B+");
			}

			internal void <Start>b__22_26(CardInfo card)
			{
				Ccard.card = card;
				ExtensionMethods.SetAbbreviation(card, "C+");
			}

			internal void <Start>b__22_27(CardInfo card)
			{
				VoloMori.card = card;
			}

			internal void <Start>b__22_28(CardInfo card)
			{
				ImCursed.card = card;
			}

			internal void <Start>b__22_29(CardInfo card)
			{
				F3nxCorgi.card = card;
			}

			internal void <Start>b__22_30(CardInfo card)
			{
				Alyssa.card = card;
			}

			internal void <Start>b__22_31(CardInfo card)
			{
				Geballion.card = card;
			}

			internal void <Start>b__22_32(CardInfo card)
			{
				HaruShijun.card = card;
			}

			internal void <Start>b__22_33(CardInfo card)
			{
				Pexiltd.card = card;
			}

			internal void <Start>b__22_34(CardInfo card)
			{
				LaggyBullets.card = card;
				CurseManager.instance.RegisterCurse(card);
			}

			internal void <Start>b__22_35(CardInfo card)
			{
				Shadow.card = card;
				CurseManager.instance.RegisterCurse(card);
			}

			internal void <Start>b__22_36(CardInfo card)
			{
				rerollNew.card = card;
				CurseManager.instance.RegisterCurse(card);
			}

			internal void <Start>b__22_37(CardInfo card)
			{
				NoAim.card = card;
				CurseManager.instance.RegisterCurse(card);
			}
		}

		private const string ModId = "koala.koalas.fantastic.cards";

		private const string ModName = "Koalas Fantastic Cards";

		public const string Version = "3.6.1";

		public const string ModInitials = "KFC";

		public const string ModIntDed = "KFC";

		public const string CurseInt = "KFC Curses";

		public static KFC instance;

		public static AudioClip uwu;

		public static AudioClip honk;

		public static AudioClip owo;

		public static int pogess = 0;

		internal static AssetBundle ArtAssets;

		internal static AssetBundle ArtAssets2;

		public static ConfigEntry<bool> cardSounds;

		public ObjectsToSpawn wallbounce;

		internal static GameObject BoxProj;

		internal static int BoxCap = 5;

		private static float myst = 477.2f;

		public static object[] mysteryValue = new object[4]
		{
			myst,
			1f + myst / 500f,
			myst / 5f + "%",
			myst / 15f + "%"
		};

		public static bool Debug = false;

		private void HearCardsAction(bool val)
		{
			cardSounds.Value = val;
		}

		private void NewGUI(GameObject menu)
		{
			string[] array = new string[19]
			{
				"Fake", "Fantastic", "Fabulous", "Fried", "Fancy", "Freaky", "Fat", "Foolish", "Funny", "False",
				"Fortuitus", "Fast", "Ferocious", "Fair", "Fashionable", "Finger-lickin", "Female", "Fucking Annoying", "Forbidden"
			};
			MenuHandler.CreateToggle(cardSounds.Value, "Custom Card Sounds", menu, (UnityAction<bool>)HearCardsAction, 50, true, (Color?)null, (TMP_FontAsset)null, (Material)null, (TextAlignmentOptions?)null);
		}

		public static bool hasCard(CardInfo card, Player player)
		{
			foreach (CardInfo currentCard in player.data.currentCards)
			{
				if (((Object)currentCard).name == ((Object)card).name)
				{
					return true;
				}
			}
			return false;
		}

		private void Start()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Expected O, but got Unknown
			//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0200: Unknown result type (might be due to invalid IL or missing references)
			//IL_0205: Unknown result type (might be due to invalid IL or missing references)
			//IL_0215: Unknown result type (might be due to invalid IL or missing references)
			//IL_021a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0224: Expected O, but got Unknown
			//IL_021f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0165: Unknown result type (might be due to invalid IL or missing references)
			//IL_016a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0170: Expected O, but got Unknown
			Harmony val = new Harmony("koala.koalas.fantastic.cards");
			val.PatchAll();
			instance = this;
			FieldInfo field = typeof(CardManager).GetField("defaultCards", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
			CardInfo[] source = (CardInfo[])field.GetValue(null);
			CardInfo val2 = source.Where((CardInfo c) => c.cardName.ToLower() == "mayhem").ToArray()[0];
			ObjectsToSpawn val3 = ((Component)val2).gameObject.GetComponent<Gun>().objectsToSpawn[0];
			wallbounce = val3;
			string[] array = new string[19]
			{
				"Fake", "Fantastic", "Fabulous", "Fried", "Fancy", "Freaky", "Fat", "Foolish", "Funny", "False",
				"Fortuitus", "Fast", "Ferocious", "Fair", "Fashionable", "Finger-lickin", "Female", "Fucking Annoying", "Forbidden"
			};
			string text = array[Random.Range(0, array.Length)];
			string text2 = "Koala's " + text + " Cards";
			object obj = <>c.<>9__22_1;
			if (obj == null)
			{
				UnityAction val4 = delegate
				{
				};
				<>c.<>9__22_1 = val4;
				obj = (object)val4;
			}
			Unbound.RegisterMenu(text2, (UnityAction)obj, (Action<GameObject>)NewGUI, (GameObject)null, true);
			cardSounds = ((BaseUnityPlugin)this).Config.Bind<bool>("KFC", "HearStuff", true, (ConfigDescription)null);
			ArtAssets = AssetUtils.LoadAssetBundleFromResources("kfccards", typeof(KFC).Assembly);
			ArtAssets2 = AssetUtils.LoadAssetBundleFromResources("vkfcassets", typeof(KFC).Assembly);
			CardThemeLib.instance.CreateOrGetType("Koality", new CardThemeColor
			{
				bgColor = new Color(0f, 0f, 0f),
				targetColor = new Color(0.9f, 0f, 0.9f)
			});
			uwu = ArtAssets.LoadAsset<AudioClip>("uwu");
			owo = ArtAssets.LoadAsset<AudioClip>("owo");
			honk = ArtAssets.LoadAsset<AudioClip>("honk");
			if ((Object)(object)ArtAssets == (Object)null)
			{
				Debug.Log((object)"Koalas Fantastic art asset bundle either doesn't exist or failed to load.");
			}
			if ((Object)(object)ArtAssets2 == (Object)null)
			{
				Debug.Log((object)"Koalas Less Fantastic art asset bundle either doesn't exist or failed to load.");
			}
			PhotonNetwork.PrefabPool.RegisterPrefab("KFC_Excaliber", ArtAssets.LoadAsset<GameObject>("CrucibleSword"));
			PhotonNetwork.PrefabPool.RegisterPrefab("KFC_Boulder", ArtAssets.LoadAsset<GameObject>("Boulder"));
			PhotonNetwork.PrefabPool.RegisterPrefab("KFC_BlackHole", ArtAssets.LoadAsset<GameObject>("BlackHole"));
			PhotonNetwork.PrefabPool.RegisterPrefab("KFC_Turret", ArtAssets.LoadAsset<GameObject>("Turret"));
			PhotonNetwork.PrefabPool.RegisterPrefab("KFC_Buff", ArtAssets.LoadAsset<GameObject>("Buff"));
			PhotonNetwork.PrefabPool.RegisterPrefab("KFC_LegoBrickR", ArtAssets.LoadAsset<GameObject>("legoBrickR"));
			PhotonNetwork.PrefabPool.RegisterPrefab("KFC_LegoBrickY", ArtAssets.LoadAsset<GameObject>("legoBrickY"));
			PhotonNetwork.PrefabPool.RegisterPrefab("KFC_LegoBrickG", ArtAssets.LoadAsset<GameObject>("legoBrickG"));
			PhotonNetwork.PrefabPool.RegisterPrefab("KFC_LegoBrickB", ArtAssets.LoadAsset<GameObject>("legoBrickB"));
			BoxProj = ArtAssets2.LoadAsset<GameObject>("VKFC_Box");
			BoxProj.AddComponent<OwnerScript>();
			PhotonNetwork.PrefabPool.RegisterPrefab("VKFC_Box", BoxProj);
			CustomCard.BuildCard<BoxedBullets>((Action<CardInfo>)delegate(CardInfo card)
			{
				BoxedBullets.card = card;
				ExtensionMethods.SetAbbreviation(card, "Bb");
			});
			CustomCard.BuildCard<StayWinning>((Action<CardInfo>)delegate(CardInfo card)
			{
				StayWinning.card = card;
				ExtensionMethods.SetAbbreviation(card, "Sw");
			});
			CustomCard.BuildCard<splinter>((Action<CardInfo>)delegate(CardInfo card)
			{
				splinter.card = card;
				ExtensionMethods.SetAbbreviation(card, "Sp");
			});
			CustomCard.BuildCard<indiajoenas>((Action<CardInfo>)delegate(CardInfo card)
			{
				indiajoenas.card = card;
				ExtensionMethods.SetAbbreviation(card, "Ij");
			});
			CustomCard.BuildCard<legos>((Action<CardInfo>)delegate(CardInfo card)
			{
				legos.card = card;
				ExtensionMethods.SetAbbreviation(card, "Le");
			});
			CustomCard.BuildCard<uwullets>((Action<CardInfo>)delegate(CardInfo card)
			{
				uwullets.card = card;
				ExtensionMethods.SetAbbreviation(card, "Uw");
			});
			CustomCard.BuildCard<scp_500>((Action<CardInfo>)delegate(CardInfo card)
			{
				scp_500.card = card;
				ExtensionMethods.SetAbbreviation(card, "S5");
			});
			CustomCard.BuildCard<doomSlayer>((Action<CardInfo>)delegate(CardInfo card)
			{
				doomSlayer.card = card;
				ExtensionMethods.SetAbbreviation(card, "DS");
			});
			CustomCard.BuildCard<blackholegun>((Action<CardInfo>)delegate(CardInfo card)
			{
				blackholegun.card = card;
				ExtensionMethods.SetAbbreviation(card, "Bh");
			});
			CustomCard.BuildCard<Armor>((Action<CardInfo>)delegate(CardInfo card)
			{
				Armor.card = card;
				ExtensionMethods.SetAbbreviation(card, "Ar");
			});
			CustomCard.BuildCard<Extendo>((Action<CardInfo>)delegate(CardInfo card)
			{
				Extendo.card = card;
				ExtensionMethods.SetAbbreviation(card, "Ex");
			});
			CustomCard.BuildCard<KingOfSpeed>((Action<CardInfo>)delegate(CardInfo card)
			{
				KingOfSpeed.card = card;
			});
			CustomCard.BuildCard<swordinstone>((Action<CardInfo>)delegate(CardInfo card)
			{
				swordinstone.card = card;
				ExtensionMethods.SetAbbreviation(card, "Ss");
			});
			CustomCard.BuildCard<excaliber>((Action<CardInfo>)delegate(CardInfo card)
			{
				excaliber.card = card;
				ExtensionMethods.SetAbbreviation(card, "Ex");
			});
			CustomCard.BuildCard<failure>((Action<CardInfo>)delegate(CardInfo card)
			{
				Cards.instance.AddHiddenCard(card);
				failure.card = card;
				ExtensionMethods.SetAbbreviation(card, "XX");
			});
			CustomCard.BuildCard<RiftWalker>((Action<CardInfo>)delegate(CardInfo card)
			{
				RiftWalker.card = card;
				ExtensionMethods.SetAbbreviation(card, "Rw");
			});
			CustomCard.BuildCard<RiftGun>((Action<CardInfo>)delegate(CardInfo card)
			{
				RiftGun.card = card;
				ExtensionMethods.SetAbbreviation(card, "Rh");
			});
			CustomCard.BuildCard<RiftBody>((Action<CardInfo>)delegate(CardInfo card)
			{
				RiftBody.card = card;
				ExtensionMethods.SetAbbreviation(card, "Rb");
			});
			CustomCard.BuildCard<RiftMind>((Action<CardInfo>)delegate(CardInfo card)
			{
				RiftMind.card = card;
				ExtensionMethods.SetAbbreviation(card, "Rm");
			});
			CustomCard.BuildCard<RiftSoul>((Action<CardInfo>)delegate(CardInfo card)
			{
				Cards.instance.AddHiddenCard(card);
				RiftSoul.card = card;
				ExtensionMethods.SetAbbreviation(card, "Rs");
			});
			CustomCard.BuildCard<Rifted>((Action<CardInfo>)delegate(CardInfo card)
			{
				Cards.instance.AddHiddenCard(card);
				Rifted.card = card;
			});
			CustomCard.BuildCard<ViruzCard>((Action<CardInfo>)delegate(CardInfo card)
			{
				ViruzCard.card = card;
			});
			CustomCard.BuildCard<Ard>((Action<CardInfo>)delegate(CardInfo card)
			{
				Ard.card = card;
				ExtensionMethods.SetAbbreviation(card, "A+");
			});
			CustomCard.BuildCard<Bard>((Action<CardInfo>)delegate(CardInfo card)
			{
				Bard.card = card;
				ExtensionMethods.SetAbbreviation(card, "B+");
			});
			CustomCard.BuildCard<Ccard>((Action<CardInfo>)delegate(CardInfo card)
			{
				Ccard.card = card;
				ExtensionMethods.SetAbbreviation(card, "C+");
			});
			CustomCard.BuildCard<VoloMori>((Action<CardInfo>)delegate(CardInfo card)
			{
				VoloMori.card = card;
			});
			CustomCard.BuildCard<ImCursed>((Action<CardInfo>)delegate(CardInfo card)
			{
				ImCursed.card = card;
			});
			CustomCard.BuildCard<F3nxCorgi>((Action<CardInfo>)delegate(CardInfo card)
			{
				F3nxCorgi.card = card;
			});
			CustomCard.BuildCard<Alyssa>((Action<CardInfo>)delegate(CardInfo card)
			{
				Alyssa.card = card;
			});
			CustomCard.BuildCard<Geballion>((Action<CardInfo>)delegate(CardInfo card)
			{
				Geballion.card = card;
			});
			CustomCard.BuildCard<HaruShijun>((Action<CardInfo>)delegate(CardInfo card)
			{
				HaruShijun.card = card;
			});
			CustomCard.BuildCard<Pexiltd>((Action<CardInfo>)delegate(CardInfo card)
			{
				Pexiltd.card = card;
			});
			CustomCard.BuildCard<LaggyBullets>((Action<CardInfo>)delegate(CardInfo card)
			{
				LaggyBullets.card = card;
				CurseManager.instance.RegisterCurse(card);
			});
			CustomCard.BuildCard<Shadow>((Action<CardInfo>)delegate(CardInfo card)
			{
				Shadow.card = card;
				CurseManager.instance.RegisterCurse(card);
			});
			CustomCard.BuildCard<rerollNew>((Action<CardInfo>)delegate(CardInfo card)
			{
				rerollNew.card = card;
				CurseManager.instance.RegisterCurse(card);
			});
			CustomCard.BuildCard<NoAim>((Action<CardInfo>)delegate(CardInfo card)
			{
				NoAim.card = card;
				CurseManager.instance.RegisterCurse(card);
			});
			GameModeManager.AddHook("GameStart", (Func<IGameModeHandler, IEnumerator>)GameStart);
		}

		public IEnumerator GameStart(IGameModeHandler gameModeHandler)
		{
			foreach (Player p in PlayerManager.instance.players)
			{
				((Component)p).gameObject.AddComponent<KoalasBonusStats>();
			}
			yield break;
		}
	}
}
namespace KFC.UnessesaryAddons
{
	public class OwnerScript : MonoBehaviour
	{
		public Player Owner = null;

		private Rigidbody2D rb;

		public void FixedUpdate()
		{
			//IL_0070: 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)
			if ((Object)(object)Owner != (Object)null)
			{
				rb = ((Component)this).GetComponent<Rigidbody2D>();
				rb.mass = Owner.data.weaponHandler.gun.damage * 20000f;
				((Component)((Component)this).transform.GetChild(0)).GetComponent<SpriteRenderer>().color = PlayerManager.instance.GetColorFromPlayer(Owner.playerID).color;
				((Component)this).GetComponent<SFPolygon>().shadowLayers = LayerMask.op_Implicit(-1);
			}
		}
	}
}
namespace KFC.RiftShenanigans
{
	public class RiftBodyMono : CardEffect
	{
		private float bodyTimer = 12.5f;

		private ParticleSystem[] jumpParts;

		private ParticleSystem[] landParts;

		public override IEnumerator OnPointStart(IGameModeHandler gameModeHandler)
		{
			bodyTimer = 12.5f;
			yield break;
		}

		private void InvisPlayer()
		{
			((Component)((CardEffect)this).player.data.weaponHandler.gun).gameObject.SetActive(false);
			((Component)((Component)((CardEffect)this).player).transform.GetChild(0)).gameObject.SetActive(false);
			if (!((CardEffect)this).player.data.view.IsMine)
			{
				((Component)((Component)((CardEffect)this).player).transform.GetChild(1)).gameObject.SetActive(false);
				((Component)((Component)((CardEffect)this).player).transform.GetChild(2)).gameObject.SetActive(false);
				((Component)((Component)((Component)((CardEffect)this).player).transform.GetChild(3)).transform.GetChild(1)).gameObject.SetActive(false);
				((Component)((Component)((Component)((CardEffect)this).player).transform.GetChild(4)).transform.GetChild(0)).gameObject.SetActive(false);
				((Component)((Component)((CardEffect)this).player).transform.GetChild(6)).gameObject.SetActive(false);
				jumpParts = ((CardEffect)this).player.data.jump.jumpPart;
				landParts = ((CardEffect)this).player.data.landParts;
				((CardEffect)this).player.data.jump.jumpPart = null;
				((CardEffect)this).player.data.landParts = null;
				((Component)((CardEffect)this).player.data.healthHandler).gameObject.SetActive(false);
				SpriteRenderer[] componentsInChildren = ((Component)((CardEffect)this).player).GetComponentsInChildren<SpriteRenderer>();
				foreach (SpriteRenderer val in componentsInChildren)
				{
					((Renderer)val).enabled = false;
				}
			}
		}

		private void VisPlayer()
		{
			((Component)((CardEffect)this).player.data.weaponHandler.gun).gameObject.SetActive(true);
			((Component)((Component)((CardEffect)this).player).transform.GetChild(0)).gameObject.SetActive(true);
			((Component)((Component)((CardEffect)this).player).transform.GetChild(1)).gameObject.SetActive(true);
			((Component)((Component)((CardEffect)this).player).transform.GetChild(2)).gameObject.SetActive(true);
			((Component)((Component)((Component)((CardEffect)this).player).transform.GetChild(3)).transform.GetChild(1)).gameObject.SetActive(true);
			((Component)((Component)((Component)((CardEffect)this).player).transform.GetChild(4)).transform.GetChild(0)).gameObject.SetActive(true);
			((Component)((Component)((CardEffect)this).player).transform.GetChild(6)).gameObject.SetActive(true);
			((CardEffect)this).player.data.jump.jumpPart = jumpParts;
			((CardEffect)this).player.data.landParts = landParts;
			((Component)((CardEffect)this).player.data.healthHandler).gameObject.SetActive(true);
			SpriteRenderer[] componentsInChildren = ((Component)((CardEffect)this).player).GetComponentsInChildren<SpriteRenderer>();
			foreach (SpriteRenderer val in componentsInChildren)
			{
				((Renderer)val).enabled = true;
			}
		}

		public override void OnBlock(BlockTriggerType blockTriggerType)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			((CardEffect)this).OnBlock(blockTriggerType);
			if (!(bodyTimer > 12.5f))
			{
				return;
			}
			bodyTimer = 0f;
			for (int i = 0; i < ((Component)((CardEffect)this).player).transform.childCount; i++)
			{
				GameObject gameObject = ((Component)((Component)((CardEffect)this).player).transform.GetChild(i)).gameObject;
				if (((Object)gameObject).name == "BegoneThot(Clone)" || ((Object)gameObject).name == "SupriseMofo(Clone)")
				{
					Object.Destroy((Object)(object)gameObject);
				}
			}
			GameObject val = KFC.ArtAssets.LoadAsset<GameObject>("BegoneThot");
			Object.Instantiate<GameObject>(val, ((Component)((CardEffect)this).player).transform);
			InvisPlayer();
			Collider2D[] componentsInChildren = ((Component)((CardEffect)this).player).GetComponentsInChildren<Collider2D>();
			foreach (Collider2D val2 in componentsInChildren)
			{
				((Behaviour)val2).enabled = false;
			}
			ExtensionMethods.ExecuteAfterSeconds((MonoBehaviour)(object)KFC.instance, 5f, (Action)delegate
			{
				VisPlayer();
				Collider2D[] componentsInChildren2 = ((Component)((CardEffect)this).player).GetComponentsInChildren<Collider2D>();
				foreach (Collider2D val3 in componentsInChildren2)
				{
					((Behaviour)val3).enabled = true;
				}
				GameObject val4 = KFC.ArtAssets.LoadAsset<GameObject>("SupriseMofo");
				Object.Instantiate<GameObject>(val4, ((Component)((CardEffect)this).player).transform);
				ExtensionMethods.ExecuteAfterSeconds((MonoBehaviour)(object)KFC.instance, 10f, (Action)delegate
				{
					GameObject val5 = KFC.ArtAssets.LoadAsset<GameObject>("SupriseMofo");
					Object.Instantiate<GameObject>(val5, ((Component)((CardEffect)this).player).transform);
				});
			});
		}

		public void Update()
		{
			bodyTimer += TimeHandler.deltaTime;
		}
	}
	public class RiftFreeMono : MonoBehaviour
	{
		public void Update()
		{
			Player component = ((Component)this).gameObject.GetComponent<Player>();
			component.data.silenceHandler.StopSilence();
			component.data.stunHandler.StopStun();
		}
	}
	public class RiftSoulMono : CardEffect
	{
		public override IEnumerator OnPointStart(IGameModeHandler gameModeHandler)
		{
			ExtensionMethods.ExecuteAfterFrames((MonoBehaviour)(object)KFC.instance, 10, (Action)delegate
			{
				Cards.instance.AddCardToPlayer(((CardEffect)this).player, Rifted.card, false, "__", 0f, 0f);
				CardBarUtils.instance.ShowImmediate(((CardEffect)this).player, Rifted.card);
				Gun gun = ((CardEffect)this).gun;
				gun.damage *= 0.99f;
				Gun gun2 = ((CardEffect)this).gun;
				gun2.dmgMOnBounce *= 0.99f;
				Gun gun3 = ((CardEffect)this).gun;
				gun3.speedMOnBounce *= 0.99f;
				Gun gun4 = ((CardEffect)this).gun;
				gun4.spread += 0.01f;
				Gun gun5 = ((CardEffect)this).gun;
				gun5.projectileSpeed *= 0.99f;
				CharacterStatModifiers characterStats = ((CardEffect)this).characterStats;
				characterStats.movementSpeed *= 0.99f;
				CharacterData data = ((CardEffect)this).player.data;
				data.maxHealth *= 0.99f;
				((CardEffect)this).player.data.health = ((CardEffect)this).player.data.maxHealth;
				Gun gun6 = ((CardEffect)this).gun;
				gun6.reloadTime *= 1.01f;
				Gun gun7 = ((CardEffect)this).gun;
				gun7.attackSpeed *= 1.01f;
				Gun gun8 = ((CardEffect)this).gun;
				gun8.reloadTimeAdd += 0.05f;
			});
			yield break;
		}
	}
}
namespace KFC.ArtSchenanigans
{
	public class KoalaArtHandler : MonoBehaviour
	{
		public GameObject owner;

		public void Update()
		{
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)owner == (Object)null)
			{
				Object.Destroy((Object)(object)((Component)this).gameObject);
			}
			Scene scene = owner.scene;
			if (((Scene)(ref scene)).name == "DontDestroyOnLoad")
			{
				Object.Destroy((Object)(object)((Component)this).gameObject);
			}
		}

		public void DestroyMe()
		{
			Object.Destroy((Object)(object)((Component)this).gameObject);
		}
	}
	public class Aahahsdhahh : MonoBehaviour
	{
		public KoalaArtHandler handler;

		public void OnDestroy()
		{
			handler.DestroyMe();
		}
	}
}
namespace KFC.Monos
{
	public class BoxThoseBullets : CardEffect
	{
		public List<GameObject> Boxes = new List<GameObject>();

		private int curBox = 0;

		protected override void OnDestroy()
		{
			KillBoxes();
		}

		public override void OnShoot(GameObject projectile)
		{
			//IL_005c: 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_0088: 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_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_011c: Unknown result type (might be due to invalid IL or missing references)
			//IL_011d: Unknown result type (might be due to invalid IL or missing references)
			//IL_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0123: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			//IL_012e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0133: Unknown result type (might be due to invalid IL or missing references)
			//IL_013c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0146: Unknown result type (might be due to invalid IL or missing references)
			//IL_0156: Unknown result type (might be due to invalid IL or missing references)
			//IL_015c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0161: Unknown result type (might be due to invalid IL or missing references)
			if (Boxes.Count == 0)
			{
				SpawnBoxes();
			}
			GameObject val = Boxes[curBox];
			curBox++;
			if (curBox == KFC.BoxCap)
			{
				curBox = 0;
			}
			val.GetComponent<Rigidbody2D>().velocity = Vector2.zero;
			val.transform.position = projectile.transform.position + ((Vector3)(ref ((CardEffect)this).player.data.aimDirection)).normalized * 3f;
			val.transform.rotation = Quaternion.identity;
			float num = Mathf.Sqrt(((CardEffect)this).gun.projectileSpeed);
			Vector3 val2 = ((Vector3)(ref ((CardEffect)this).player.data.aimDirection)).normalized;
			float num2 = Random.Range(0f - ((CardEffect)this).gun.spread, ((CardEffect)this).gun.spread);
			num2 /= (1f + ((CardEffect)this).gun.projectileSpeed * 0.5f) * 0.5f;
			val2 += Vector3.Cross(val2, Vector3.forward) * num2;
			val.GetComponent<Rigidbody2D>().AddForce(Vector2.op_Implicit(((Vector3)(ref val2)).normalized * 40000000f * ((CardEffect)this).gun.damage * num));
			PhotonNetwork.Destroy(projectile);
		}

		[UnboundRPC]
		public static void RPCDistributeOwners(int playerId)
		{
			OwnerScript[] array = Object.FindObjectsOfType<OwnerScript>();
			foreach (OwnerScript ownerScript in array)
			{
				if ((Object)(object)ownerScript.Owner == (Object)null)
				{
					ownerScript.Owner = ExtensionMethods.GetPlayerWithID(PlayerManager.instance, playerId);
					break;
				}
			}
		}

		public override void OnTakeDamage(Vector2 damage, bool selfDamage)
		{
			if (((CardEffect)this).player.data.health < 0f)
			{
				ResetBoxes();
			}
		}

		public override IEnumerator OnPointEnd(IGameModeHandler gameModeHandler)
		{
			KillBoxes();
			yield return null;
		}

		public override IEnumerator OnPointStart(IGameModeHandler gameModeHandler)
		{
			SpawnBoxes();
			yield return null;
		}

		public void SpawnBoxes()
		{
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			if (Boxes.Count > 0)
			{
				KillBoxes();
			}
			for (int i = 0; i < KFC.BoxCap; i++)
			{
				GameObject item = PhotonNetwork.Instantiate("VKFC_Box", new Vector3(999f, 999f, 0f), Quaternion.identity, (byte)0, (object[])null);
				Boxes.Add(item);
				NetworkingManager.RPC(typeof(BoxThoseBullets), "RPCDistributeOwners", new object[1] { ((CardEffect)this).player.playerID });
			}
		}

		public void ResetBoxes()
		{
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			foreach (GameObject box in Boxes)
			{
				box.transform.position = new Vector3(999f, 999f, 0f);
			}
		}

		public void KillBoxes()
		{
			foreach (GameObject box in Boxes)
			{
				PhotonNetwork.Destroy(box.gameObject);
			}
			Boxes.Clear();
		}
	}
	public class WeStayWinning : CardEffect
	{
		public Dictionary<int, int> TeamScore = new Dictionary<int, int>();

		public override IEnumerator OnPickPhaseStart(IGameModeHandler gameModeHandler)
		{
			foreach (KeyValuePair<int, int> ts in TeamScore)
			{
				if (ts.Key != ((CardEffect)this).player.teamID && GameModeManager.CurrentHandler.GetTeamScore(ts.Key).rounds != ts.Value)
				{
					Cards.instance.RemoveAllCardsFromPlayer(((CardEffect)this).player, true);
					while (((CardEffect)this).player.data.currentCards.IndexOf(StayWinning.card) != -1)
					{
						Cards.instance.RemoveCardFromPlayer(((CardEffect)this).player, ((CardEffect)this).player.data.currentCards.IndexOf(StayWinning.card));
					}
				}
			}
			yield return null;
		}
	}
}
namespace KFC.MonoBehaviors
{
	public class armor_mono : CardEffect
	{
		private float armorHp = 0f;

		private bool armorDestroyed = true;

		private GameObject hbarcolor;

		private GameObject hbargray;

		private void ResetHealthBar()
		{
			armorHp = 0f;
			foreach (CardInfo currentCard in ((CardEffect)this).player.data.currentCards)
			{
				if ((Object)(object)currentCard == (Object)(object)Armor.card)
				{
					armorHp += 1f;
				}
			}
			armorDestroyed = false;
		}

		protected override void Start()
		{
			ResetHealthBar();
			((CardEffect)this).Start();
		}

		public override IEnumerator OnPointStart(IGameModeHandler gameModeHandler)
		{
			ResetHealthBar();
			yield break;
		}

		private void Update()
		{
		}

		public override void OnRevive()
		{
			ResetHealthBar();
			((CardEffect)this).OnRevive();
		}

		public override void OnTakeDamage(Vector2 damage, bool selfDamage)
		{
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			float magnitude = ((Vector2)(ref damage)).magnitude;
			if (!armorDestroyed)
			{
				armorHp -= 1f;
				CharacterData data = ((CardEffect)this).player.data;
				data.health += magnitude;
				if (armorHp <= 0f)
				{
					armorDestroyed = true;
				}
			}
			((CardEffect)this).OnTakeDamage(damage, selfDamage);
		}
	}
	public class blackholegun_Mono : CardEffect
	{
		private GameObject bhole;

		protected override void Start()
		{
			((CardEffect)this).Start();
		}

		public override void OnShoot(GameObject projectile)
		{
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			if (((CardEffect)this).player.data.view.IsMine)
			{
				if (Object.op_Implicit((Object)(object)bhole))
				{
					Object.Destroy((Object)(object)bhole.GetComponent<blackHole_Mono>().projec);
					PhotonNetwork.Destroy(bhole);
				}
				bhole = PhotonNetwork.Instantiate("KFC_BlackHole", ((Component)((CardEffect)this).data.hand).transform.position, Quaternion.identity, (byte)0, (object[])null);
			}
			ExtensionMethods.ExecuteAfterFrames((MonoBehaviour)(object)KFC.instance, 5, (Action)delegate
			{
				if ((Object)(object)GameObject.Find("BlackHole(Clone)").GetComponent<blackHole_Mono>() == (Object)null)
				{
					GameObject.Find("BlackHole(Clone)").AddComponent<blackHole_Mono>().projec = projectile;
				}
			});
		}

		public override IEnumerator OnPointEnd(IGameModeHandler gameModeHandler)
		{
			if (((CardEffect)this).player.data.view.IsMine && Object.op_Implicit((Object)(object)bhole))
			{
				Object.Destroy((Object)(object)bhole.GetComponent<blackHole_Mono>().projec);
				PhotonNetwork.Destroy(bhole);
			}
			return ((CardEffect)this).OnPointEnd(gameModeHandler);
		}
	}
	public class blackHole_Mono : MonoBehaviour
	{
		private float size;

		public GameObject projec;

		public void Start()
		{
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			size = 0.5f;
			((Component)((Component)this).gameObject.transform.GetChild(0)).transform.localScale = new Vector3(size / 3f, size / 3f, size / 3f);
			((Component)((Component)this).gameObject.transform.GetChild(1)).transform.localScale = new Vector3(size, size, size);
		}

		public void Update()
		{
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0148: Unknown result type (might be due to invalid IL or missing references)
			//IL_014d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0158: Unknown result type (might be due to invalid IL or missing references)
			//IL_015d: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
			size += TimeHandler.deltaTime;
			((Component)((Component)this).gameObject.transform.GetChild(0)).transform.localScale = new Vector3(size / 3f, size / 3f, size / 3f);
			((Component)((Component)this).gameObject.transform.GetChild(1)).transform.localScale = new Vector3(size, size, size);
			((Component)((Component)this).gameObject.transform).GetComponentInChildren<DamageBox>().damage = size * 25f;
			if (size < 1f)
			{
				((Component)((Component)this).gameObject.transform).GetComponentInChildren<DamageBox>().damage = 0f;
			}
			List<Player> players = PlayerManager.instance.players;
			if ((Object)(object)projec != (Object)null)
			{
				((Component)this).gameObject.transform.position = projec.transform.position;
			}
			if (players.Count == 0)
			{
				return;
			}
			foreach (Player item in players)
			{
				float num = Vector2.Distance(Vector2.op_Implicit(((Component)item).transform.position), Vector2.op_Implicit(((Component)this).transform.position));
				if (num < size * 1.5f && size > 1f)
				{
					item.data.stats.gravity = 0f - Math.Abs(item.data.stats.gravity);
					Vector3 position = Vector3.MoveTowards(((Component)item).transform.position, ((Component)this).gameObject.transform.position, TimeHandler.deltaTime * size * 2f);
					((Component)item).transform.position = position;
				}
				else
				{
					item.data.stats.gravity = Math.Abs(item.data.stats.gravity);
				}
			}
		}
	}
	public class laggyMono : CardEffect
	{
		public override void OnShoot(GameObject projectile)
		{
			float num = 0f;
			foreach (CardInfo currentCard in ((CardEffect)this).player.data.currentCards)
			{
				if ((Object)(object)currentCard == (Object)(object)LaggyBullets.card)
				{
					num += 1f;
				}
			}
			projectile.SetActive(false);
			ExtensionMethods.ExecuteAfterSeconds((MonoBehaviour)(object)KFC.instance, num, (Action)delegate
			{
				projectile.SetActive(true);
			});
		}
	}
	public class AimlessMono : CardEffect
	{
		public struct MousePoint
		{
			public int X;

			public int Y;

			public MousePoint(int x, int y)
			{
				X = x;
				Y = y;
			}
		}

		[DllImport("user32.dll")]
		public static extern bool SetCursorPos(int X, int Y);

		[DllImport("user32.dll")]
		[return: MarshalAs(UnmanagedType.Bool)]
		private static extern bool GetCursorPos(out MousePoint lpMousePoint);

		public override void OnShoot(GameObject projectile)
		{
			//IL_000b: 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_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: 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_0063: 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)
			GetCursorPos(out var lpMousePoint);
			Vector3 val = default(Vector3);
			((Vector3)(ref val))..ctor(Input.mousePosition.x, Input.mousePosition.y, ((Component)((CardEffect)this).player).transform.position.z);
			Vector3 val2 = default(Vector3);
			((Vector3)(ref val2))..ctor((float)lpMousePoint.X - val.x, (float)lpMousePoint.Y + val.y - (float)Screen.height);
			SetCursorPos((int)val2.x + (int)((float)Screen.width * Random.Range(0.05f, 0.95f)), (int)val2.y + (int)((float)Screen.height * Random.Range(0.05f, 0.95f)));
		}
	}
	public class rerollCurse : CardEffect
	{
		private CardInfo lastCard = rerollNew.card;

		protected override void Start()
		{
			lastCard = rerollNew.card;
		}

		private void Update()
		{
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			CardInfo val = ((CardEffect)this).data.currentCards[((CardEffect)this).data.currentCards.Count - 1];
			if (!((Object)(object)val != (Object)(object)lastCard))
			{
				return;
			}
			Dictionary<string, Card> cards = CardManager.cards;
			Rarity rarity = val.rarity;
			List<CardInfo> list = new List<CardInfo>();
			foreach (Card value in cards.Values)
			{
				CardInfo cardInfo = value.cardInfo;
				if (cardInfo.rarity == rarity && Cards.instance.PlayerIsAllowedCard(((CardEffect)this).player, cardInfo) && CardManager.IsCardActive(cardInfo) && (Object)(object)cardInfo != (Object)(object)val)
				{
					list.Add(cardInfo);
				}
			}
			CardInfo newCard = list.ElementAt(Random.Range(0, list.Count));
			lastCard = val;
			ExtensionMethods.ExecuteAfterFrames((MonoBehaviour)(object)KFC.instance, 10, (Action)delegate
			{
				lastCard = newCard;
				Cards.instance.RemoveCardFromPlayer(((CardEffect)this).player, ((CardEffect)this).data.currentCards.Count - 1);
				Cards.instance.AddCardsToPlayer(((CardEffect)this).player, (CardInfo[])(object)new CardInfo[1] { newCard }, false, (string[])null, (float[])null, (float[])null);
			});
		}
	}
	public class shadowMono : CardEffect
	{
		private GameObject coverPrefab;

		private GameObject cover;

		private void Start()
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			coverPrefab = KFC.ArtAssets.LoadAsset<GameObject>("ShadowCover");
			cover = Object.Instantiate<GameObject>(coverPrefab, ((Component)((CardEffect)this).player).transform);
			cover.transform.localPosition = Vector3.zero;
			((Renderer)cover.GetComponent<SpriteRenderer>()).sortingLayerID = -1160774667;
			SpriteRenderer[] componentsInChildren = cover.GetComponentsInChildren<SpriteRenderer>();
			foreach (SpriteRenderer val in componentsInChildren)
			{
				((Renderer)val).sortingLayerID = -1160774667;
			}
		}

		private void Update()
		{
			if ((Object)(object)cover != (Object)null)
			{
				if (Input.anyKey)
				{
					cover.SetActive(true);
				}
				else
				{
					cover.SetActive(false);
				}
			}
		}
	}
	public class Fortune : CardEffect
	{
		public void Update()
		{
			if (((CardEffect)this).player.data.maxHealth > 0f)
			{
				((CardEffect)this).player.data.healthHandler.Heal(((CardEffect)this).player.data.maxHealth * (1f / 3f) * TimeHandler.deltaTime);
			}
		}
	}
	public class StatThief : CardEffect
	{
		public override IEnumerator OnPointStart(IGameModeHandler gameModeHandler)
		{
			List<Player> others = PlayerManager.instance.players.Where((Player p) => p.playerID != ((CardEffect)this).player.playerID).ToList();
			float[] statChanges = new float[7];
			foreach (Player o in others)
			{
				Gun g = o.data.weaponHandler.gun;
				statChanges[0] += g.damage;
				g.damage *= 0.99f;
				statChanges[1] += o.data.maxHealth / 100f;
				CharacterData data = o.data;
				data.maxHealth *= 0.99f;
				o.data.health = o.data.maxHealth;
				statChanges[2] += 0.3f / g.attackSpeed;
				g.attackSpeed /= 0.99f;
				statChanges[3] += 1f / ((Component)g).gameObject.GetComponentInChildren<GunAmmo>().reloadTimeMultiplier;
				GunAmmo componentInChildren = ((Component)g).gameObject.GetComponentInChildren<GunAmmo>();
				componentInChildren.reloadTimeMultiplier /= 0.99f;
				statChanges[4] += o.data.stats.movementSpeed;
				CharacterStatModifiers stats = o.data.stats;
				stats.movementSpeed *= 0.99f;
				statChanges[5] += o.data.stats.jump;
				CharacterStatModifiers stats2 = o.data.stats;
				stats2.jump *= 0.99f;
				statChanges[6] += 1f / o.data.block.cdMultiplier;
				Block block = o.data.block;
				block.cdMultiplier /= 0.99f;
			}
			for (int i = 0; i < statChanges.Length; i++)
			{
				statChanges[i] *= 0.01f;
				statChanges[i] += 1f;
			}
			Gun gun = ((CardEffect)this).gun;
			gun.damage *= statChanges[0];
			CharacterData data2 = ((CardEffect)this).player.data;
			data2.maxHealth *= statChanges[1];
			((CardEffect)this).player.data.health = ((CardEffect)this).player.data.maxHealth;
			Gun gun2 = ((CardEffect)this).gun;
			gun2.attackSpeedMultiplier /= statChanges[2];
			GunAmmo gunAmmo = ((CardEffect)this).gunAmmo;
			gunAmmo.reloadTimeMultiplier /= statChanges[3];
			CharacterStatModifiers characterStats = ((CardEffect)this).characterStats;
			characterStats.movementSpeed *= statChanges[4];
			CharacterStatModifiers characterStats2 = ((CardEffect)this).characterStats;
			characterStats2.jump *= statChanges[5];
			Block block2 = ((CardEffect)this).block;
			block2.cdMultiplier *= statChanges[6];
			yield return null;
		}
	}
	public class KoalasDeath : CardEffect
	{
		public void Update()
		{
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			float num = ((CardEffect)this).player.data.maxHealth * 0.15f * TimeHandler.deltaTime;
			((Damagable)((CardEffect)this).player.data.healthHandler).CallTakeDamage(Vector2.one * num, Vector2.zero, (GameObject)null, (Player)null, true);
		}

		public override IEnumerator OnPointStart(IGameModeHandler gameModeHandler)
		{
			((CardEffect)this).player.data.health = ((CardEffect)this).player.data.maxHealth;
			yield return null;
		}
	}
	public class Thief : CardEffect
	{
		private int stealDelay = 0;

		private int coolDown = 2;

		internal List<string> blacklistedCategories = new List<string> { "CardManipulation", "Grants Curses", "GivesNulls" };

		public override IEnumerator OnPickPhaseEnd(IGameModeHandler gameModeHandler)
		{
			stealDelay++;
			if (stealDelay >= coolDown)
			{
				stealDelay = 0;
				List<Player> others = PlayerManager.instance.players.Where((Player p) => p.playerID != ((CardEffect)this).player.playerID).ToList();
				Dictionary<Player, List<CardInfo>> stuff = new Dictionary<Player, List<CardInfo>>();
				foreach (Player o in others)
				{
					List<CardInfo> cords = o.data.currentCards.Where((CardInfo c) => c.categories.Select((CardCategory c) => ((Object)c).name.ToLowerInvariant()).Intersect(blacklistedCategories.Select((string s) => s.ToLowerInvariant())).Count() <= 0 && Cards.instance.PlayerIsAllowedCard(((CardEffect)this).player, c)).ToList();
					string cardStuff = "";
					foreach (CardInfo c3 in cords)
					{
						cardStuff = cardStuff + c3.cardName + ", ";
					}
					if (cords.Count() > 0)
					{
						stuff.Add(o, cords);
					}
				}
				if (stuff.Count == 0)
				{
					Cards.instance.AddCardToPlayer(((CardEffect)this).player, MasterThief.card, false, "", 0f, 0f);
				}
				else
				{
					foreach (KeyValuePair<Player, List<CardInfo>> kvp in stuff)
					{
						string cardNames = "";
						foreach (CardInfo c2 in kvp.Value)
						{
							cardNames = cardNames + c2.cardName + ", ";
						}
						cardNames.Remove(0, cardNames.Length - 2);
						MonoBehaviour.print((object)("ID: " + kvp.Key.playerID + " | Cards: " + cardNames));
					}
					int dicIndex = Random.Range(0, stuff.Count);
					KeyValuePair<Player, List<CardInfo>> victim = stuff.ElementAt(dicIndex);
					CardInfo randCard = victim.Value[Random.Range(0, victim.Value.Count)];
					int index = victim.Key.data.currentCards.IndexOf(randCard);
					Cards.instance.AddCardToPlayer(((CardEffect)this).player, randCard, false, "", 0f, 0f);
					Cards.instance.RemoveCardFromPlayer(victim.Key, index);
				}
			}
			yield return null;
		}
	}
	public class GeballionsAura : CardEffect
	{
		private int time = 0;

		private bool inGame = false;

		public void OnEnable()
		{
			inGame = true;
		}

		public override IEnumerator OnRoundStart(IGameModeHandler gameModeHandler)
		{
			inGame = true;
			time = 0;
			yield break;
		}

		public override void OnRevive()
		{
			inGame = true;
			time = 0;
		}

		public override IEnumerator OnRoundEnd(IGameModeHandler gameModeHandler)
		{
			inGame = false;
			yield break;
		}

		public void Update()
		{
			//IL_00a0: 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_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			time++;
			if (!inGame || time < 300)
			{
				return;
			}
			List<Player> list = PlayerManager.instance.players.Where((Player pl) => pl.playerID != ((CardEffect)this).player.playerID && pl.teamID != ((CardEffect)this).player.teamID && pl.data.health > 0f).ToList();
			if (((CardEffect)this).player.data.health <= 0f)
			{
				inGame = false;
				return;
			}
			foreach (Player item in list)
			{
				if (Vector3.Distance(((Component)((CardEffect)this).player).transform.position, ((Component)item).transform.position) < 10f)
				{
					Vector2 val = Vector2.one * ((CardEffect)this).player.data.maxHealth * 0.05f * TimeHandler.deltaTime;
					item.data.healthHandler.DoDamage(val, Vector2.zero, Color.red, (GameObject)null, ((CardEffect)this).player, true, true, true);
				}
			}
		}
	}
	public class GattlingHandler : CardEffect
	{
		public GameObject gattling;

		public void OnEnable()
		{
			if (!Object.op_Implicit((Object)(object)gattling))
			{
				gattling = Object.Instantiate<GameObject>(KFC.ArtAssets.LoadAsset<GameObject>("gattlin"));
			}
		}

		public void Update()
		{
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)gattling))
			{
				if (((Behaviour)((CardEffect)this).player).isActiveAndEnabled)
				{
					gattling.transform.position = ((CardEffect)this).player.data.hand.position;
					gattling.transform.up = ((CardEffect)this).player.data.aimDirection;
				}
				else
				{
					gattling.transform.position = new Vector3(1000f, 1000f, 0f);
				}
			}
		}

		public override IEnumerator OnPointStart(IGameModeHandler gameModeHandler)
		{
			if (!Object.op_Implicit((Object)(object)gattling))
			{
				gattling = Object.Instantiate<GameObject>(KFC.ArtAssets.LoadAsset<GameObject>("gattlin"));
			}
			return ((CardEffect)this).OnPointStart(gameModeHandler);
		}

		public override IEnumerator OnPointEnd(IGameModeHandler gameModeHandler)
		{
			Object.Destroy((Object)(object)gattling);
			gattling = null;
			return ((CardEffect)this).OnPointEnd(gameModeHandler);
		}

		protected override void OnDestroy()
		{
			Object.Destroy((Object)(object)gattling);
			((CardEffect)this).OnDestroy();
		}
	}
	public class MerlinChaos : CardEffect
	{
		public override void OnShoot(GameObject projectile)
		{
			ExtensionMethods.GetOrAddComponent<RBGullets>(projectile.gameObject, false);
		}
	}
	public class RBGullets : MonoBehaviour
	{
		private int phase = 1;

		private float[] cols = new float[3] { 1f, 0f, 0f };

		public void Update()
		{
			//IL_004b: 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_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0378: Unknown result type (might be due to invalid IL or missing references)
			//IL_0382: Unknown result type (might be due to invalid IL or missing references)
			int num = Random.Range(0, 10);
			int num2 = 1;
			if (num <= 3)
			{
				num2 = -1;
			}
			int num3 = Random.Range(0, 10);
			int num4 = 1;
			if (num3 <= 3)
			{
				num4 = -1;
			}
			((Component)this).gameObject.GetComponent<Rigidbody2D>().velocity = new Vector2(((Component)this).gameObject.GetComponent<Rigidbody2D>().velocity.x * (float)num2, ((Component)this).gameObject.GetComponent<Rigidbody2D>().velocity.y * (float)num4);
			switch (phase)
			{
			case 1:
				cols[1] += TimeHandler.deltaTime * 10f;
				if (cols[1] >= 1f)
				{
					cols[1] = 1f;
					phase = 2;
				}
				break;
			case 2:
				cols[0] -= TimeHandler.deltaTime * 10f;
				if (cols[0] <= 0f)
				{
					cols[0] = 0f;
					phase = 3;
				}
				break;
			case 3:
				cols[2] += TimeHandler.deltaTime * 10f;
				if (cols[2] >= 1f)
				{
					cols[2] = 1f;
					phase = 4;
				}
				break;
			case 4:
				cols[1] -= TimeHandler.deltaTime * 10f;
				if (cols[1] <= 0f)
				{
					cols[1] = 0f;
					phase = 5;
				}
				break;
			case 5:
				cols[0] += TimeHandler.deltaTime * 10f;
				if (cols[0] >= 1f)
				{
					cols[0] = 1f;
					phase = 6;
				}
				break;
			case 6:
				cols[2] -= TimeHandler.deltaTime * 10f;
				if (cols[2] <= 0f)
				{
					cols[2] = 0f;
					phase = 1;
				}
				break;
			}
			TrailRenderer[] componentsInChildren = ((Component)this).gameObject.GetComponentsInChildren<TrailRenderer>();
			Color val2 = default(Color);
			foreach (TrailRenderer val in componentsInChildren)
			{
				((Color)(ref val2))..ctor(1f, 1f, 1f, 1f);
				switch (phase)
				{
				case 1:
					((Color)(ref val2))..ctor(1f, 0f, 0f);
					break;
				case 2:
					((Color)(ref val2))..ctor(1f, 1f, 0f);
					break;
				case 3:
					((Color)(ref val2))..ctor(0f, 1f, 0f);
					break;
				case 4:
					((Color)(ref val2))..ctor(0f, 1f, 1f);
					break;
				case 5:
					((Color)(ref val2))..ctor(0f, 0f, 1f);
					break;
				case 6:
					((Color)(ref val2))..ctor(1f, 0f, 1f);
					break;
				}
				val.startColor = val2;
				val.endColor = val2;
			}
		}
	}
	public class meteorHandler : CardEffect
	{
		public float height = 20f;

		public void Update()
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: 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_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//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_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_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			Vector2 sensorSize = MainCam.instance.cam.sensorSize;
			height = ((Vector2)(ref sensorSize))[1];
			Vector3 val = default(Vector3);
			((Vector3)(ref val))..ctor(((Component)((CardEffect)this).player).transform.position.x, ((Component)((CardEffect)this).player).transform.position.y + (height - ((Component)((CardEffect)this).player).transform.position.y), ((Component)((CardEffect)this).player).transform.position.z);
			float x = MainCam.instance.cam.ScreenToWorldPoint(Input.mousePosition).x;
			float y = MainCam.instance.cam.ScreenToWorldPoint(Input.mousePosition).y;
			Vector3 val2 = default(Vector3);
			((Vector3)(ref val2))..ctor(x, y, ((Component)((CardEffect)this).player).transform.position.z);
			Vector3 val3 = val2 - val;
			ExtensionMethods.SetFieldValue((object)((CardEffect)this).gun, "forceShootDir", (object)val3);
		}

		public override void OnShoot(GameObject projectile)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: 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_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			Vector3 position = default(Vector3);
			((Vector3)(ref position))..ctor(projectile.transform.position.x, projectile.transform.position.y + (2.5f + height - ((Component)((CardEffect)this).player).transform.position.y), projectile.transform.position.z);
			projectile.transform.position = position;
		}
	}
	public class BottomRock : CardEffect
	{
		public float[] trueStatsFP = new float[5];

		public float[] trueStatsFN = new float[4];

		public int[] trueStatsIP = new int[5];

		public float[] maxStatsFP = new float[5];

		public float[] maxStatsFN = new float[4];

		public int[] maxStatsIP = new int[5];

		public bool build = false;

		protected override void Start()
		{
			ExtensionMethods.ExecuteAfterFrames((MonoBehaviour)(object)KFC.instance, 15, (Action)delegate
			{
				BuildStats();
			});
		}

		private void BuildStats()
		{
			trueStatsFP[0] = ((CardEffect)this).gun.damage;
			trueStatsFP[1] = ((CardEffect)this).data.maxHealth;
			trueStatsFP[2] = ((CardEffect)this).characterStats.movementSpeed;
			trueStatsFP[3] = ((CardEffect)this).characterStats.jump;
			trueStatsFP[4] = ((CardEffect)this).characterStats.lifeSteal;
			trueStatsFN[0] = ((CardEffect)this).gun.attackSpeed;
			trueStatsFN[1] = ((Component)((CardEffect)this).gun).GetComponentInChildren<GunAmmo>().reloadTime;
			trueStatsFN[2] = ((CardEffect)this).block.cooldown;
			trueStatsFN[3] = ((CardEffect)this).characterStats.sizeMultiplier;
			trueStatsIP[0] = ((CardEffect)this).characterStats.numberOfJumps;
			trueStatsIP[1] = ((CardEffect)this).gun.ammo;
			trueStatsIP[2] = ((CardEffect)this).block.additionalBlocks;
			trueStatsIP[3] = ((CardEffect)this).gun.numberOfProjectiles;
			trueStatsIP[4] = ((CardEffect)this).gun.reflects;
			maxStatsFP[0] = ((CardEffect)this).gun.damage;
			maxStatsFP[1] = ((CardEffect)this).data.maxHealth;
			maxStatsFP[2] = ((CardEffect)this).characterStats.movementSpeed;
			maxStatsFP[3] = ((CardEffect)this).characterStats.jump;
			maxStatsFP[4] = ((CardEffect)this).characterStats.lifeSteal;
			maxStatsFN[0] = ((CardEffect)this).gun.attackSpeed;
			maxStatsFN[1] = ((Component)((CardEffect)this).gun).GetComponentInChildren<GunAmmo>().reloadTime;
			maxStatsFN[2] = ((CardEffect)this).block.cooldown;
			maxStatsFN[3] = ((CardEffect)this).characterStats.sizeMultiplier;
			maxStatsIP[0] = ((CardEffect)this).characterStats.numberOfJumps;
			maxStatsIP[1] = ((CardEffect)this).gun.ammo;
			maxStatsIP[2] = ((CardEffect)this).block.additionalBlocks;
			maxStatsIP[3] = ((CardEffect)this).gun.numberOfProjectiles;
			maxStatsIP[4] = ((CardEffect)this).gun.reflects;
			build = true;
		}

		private void Update()
		{
			if (!build)
			{
				return;
			}
			float[] array = new float[5]
			{
				((CardEffect)this).gun.damage,
				((CardEffect)this).data.maxHealth,
				((CardEffect)this).characterStats.movementSpeed,
				((CardEffect)this).characterStats.jump,
				((CardEffect)this).characterStats.lifeSteal
			};
			float[] array2 = new float[4]
			{
				((CardEffect)this).gun.attackSpeed,
				((Component)((CardEffect)this).gun).GetComponentInChildren<GunAmmo>().reloadTime,
				((CardEffect)this).block.cooldown,
				((CardEffect)this).characterStats.sizeMultiplier
			};
			int[] array3 = new int[5]
			{
				((CardEffect)this).characterStats.numberOfJumps,
				((CardEffect)this).gun.ammo,
				((CardEffect)this).block.additionalBlocks,
				((CardEffect)this).gun.numberOfProjectiles,
				((CardEffect)this).gun.reflects
			};
			for (int i = 0; i < array.Length; i++)
			{
				float num = array[i];
				if (num != maxStatsFP[i])
				{
					float num2 = num / maxStatsFP[i];
					trueStatsFP[i] *= num2;
					if (trueStatsFP[i] > maxStatsFP[i])
					{
						maxStatsFP[i] = trueStatsFP[i];
					}
				}
			}
			for (int j = 0; j < array2.Length; j++)
			{
				float num3 = array2[j];
				if (num3 != maxStatsFN[j])
				{
					float num4 = num3 / maxStatsFN[j];
					trueStatsFN[j] *= num4;
					if (trueStatsFN[j] < maxStatsFN[j])
					{
						maxStatsFN[j] = trueStatsFN[j];
					}
				}
			}
			for (int k = 0; k < array3.Length; k++)
			{
				int num5 = array3[k];
				if (num5 != maxStatsIP[k])
				{
					int num6 = num5 - maxStatsIP[k];
					trueStatsIP[k] += num6;
					if (trueStatsIP[k] > maxStatsIP[k])
					{
						maxStatsIP[k] = trueStatsIP[k];
					}
				}
			}
			((CardEffect)this).gun.damage = maxStatsFP[0];
			float num7 = ((CardEffect)this).data.maxHealth / ((CardEffect)this).data.health;
			((CardEffect)this).data.maxHealth = maxStatsFP[1];
			((CardEffect)this).data.health = ((CardEffect)this).data.maxHealth / num7;
			((CardEffect)this).characterStats.movementSpeed = maxStatsFP[2];
			((CardEffect)this).characterStats.jump = maxStatsFP[3];
			((CardEffect)this).characterStats.lifeSteal = maxStatsFP[4];
			((CardEffect)this).gun.attackSpeed = maxStatsFN[0];
			((Component)((CardEffect)this).gun).GetComponentInChildren<GunAmmo>().reloadTime = maxStatsFN[1];
			((CardEffect)this).block.cooldown = maxStatsFN[2];
			((CardEffect)this).characterStats.sizeMultiplier = maxStatsFN[3];
			((CardEffect)this).characterStats.numberOfJumps = maxStatsIP[0];
			((CardEffect)this).gun.ammo = maxStatsIP[1];
			((CardEffect)this).block.additionalBlocks = maxStatsIP[2];
			((CardEffect)this).gun.numberOfProjectiles = maxStatsIP[3];
			((CardEffect)this).gun.reflects = maxStatsIP[4];
		}
	}
	public class excaliber_Mono : CardEffect
	{
		public ExcaliberSword_Mono excaliberSword;

		private float swordShoot = 0f;

		private CustomHealthBar swordCool;

		protected override void Start()
		{
			//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_012c: Unknown result type (might be due to invalid IL or missing references)
			((CardEffect)this).Start();
			Renderer[] componentsInChildren = ((Component)((Component)((CardEffect)this).gun).transform).GetComponentsInChildren<Renderer>();
			foreach (Renderer val in componentsInChildren)
			{
				val.enabled = false;
			}
			GameObject val2 = PhotonNetwork.Instantiate("KFC_Excaliber", ((Component)((CardEffect)this).data.hand).transform.position, Quaternion.identity, (byte)0, (object[])null);
			NetworkingManager.RPC(typeof(excaliber_Mono), "RPCSword", new object[2]
			{
				((Object)val2).name,
				((CardEffect)this).player.playerID
			});
			excaliberSword = ExtensionMethods.GetOrAddComponent<ExcaliberSword_Mono>(val2, false);
			excaliberSword.player = ((CardEffect)this).player;
			((Component)((Component)((Component)((CardEffect)this).gun).transform).GetComponentInChildren<Canvas>()).gameObject.AddComponent<CanvasGroup>().alpha = 0f;
			swordCool = ((Component)((Component)excaliberSword).gameObject.transform.GetChild(2)).gameObject.AddComponent<CustomHealthBar>();
			swordCool.SetValues(swordShoot, ((CardEffect)this).gun.attackSpeed * 5f / 0.3f);
			swordCool.SetColor(Color.red);
			FixSword();
		}

		[UnboundRPC]
		public static void RPCSword(string swordName, int playerid)
		{
			List<Rigidbody2D> list = (from g in Object.FindObjectsOfType<Rigidbody2D>()
				where ((Object)g).name == swordName
				select g).ToList();
			foreach (Rigidbody2D item in list)
			{
				if ((Object)(object)((Component)item).gameObject.GetComponent<ExcaliberSword_Mono>() == (Object)null)
				{
					((Component)item).gameObject.AddComponent<ExcaliberSword_Mono>().player = PlayerManager.instance.players.Where((Player p) => p.playerID == playerid).ToArray()[0];
					break;
				}
			}
		}

		private void FixSword()
		{
			Renderer[] componentsInChildren = ((Component)((Component)((CardEffect)this).gun).transform).GetComponentsInChildren<Renderer>();
			foreach (Renderer val in componentsInChildren)
			{
				val.enabled = false;
			}
			PolygonCollider2D componentInChildren = ((Component)excaliberSword).gameObject.GetComponentInChildren<PolygonCollider2D>();
			Collider2D[] componentsInChildren2 = ((Component)((CardEffect)this).player).GetComponentsInChildren<Collider2D>();
			foreach (Collider2D val2 in componentsInChildren2)
			{
				Physics2D.IgnoreCollision((Collider2D)(object)componentInChildren, val2);
			}
		}

		public override void OnShoot(GameObject projectile)
		{
			PhotonNetwork.Destroy(projectile);
			if (!excaliberSword.boomer && swordShoot > ((CardEffect)this).gun.attackSpeed * 5f / 0.3f)
			{
				excaliberSword.StartBoomer();
				swordShoot = 0f;
			}
		}

		public void Update()
		{
			swordShoot += TimeHandler.deltaTime;
			swordCool.SetValues(swordShoot, ((CardEffect)this).gun.attackSpeed * 5f / 0.3f);
		}

		public void OnEnable()
		{
			FixSword();
		}

		public override IEnumerator OnPointStart(IGameModeHandler gameModeHandler)
		{
			FixSword();
			yield break;
		}

		public override void OnRevive()
		{
			FixSword();
		}

		protected override void OnDestroy()
		{
			PhotonNetwork.Destroy(((Component)excaliberSword).gameObject);
			((CardEffect)this).OnDestroy();
		}
	}
	public class ExcaliberSword_Mono : MonoBehaviour
	{
		public Player player;

		private Rigidbody2D rigid;

		private DamageBox damagebox;

		public bool boomer = false;

		private Vector2 swordLoc;

		private Vector3 swordAim;

		private Vector3 targetLoc;

		private bool goOut = true;

		private void Start()
		{
			rigid = ((Component)this).gameObject.GetComponent<Rigidbody2D>();
			damagebox = ((Component)this).gameObject.GetComponentInChildren<DamageBox>();
			damagebox.damage = player.data.weaponHandler.gun.damage;
		}

		public void StartBoomer()
		{
			//IL_0020: 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_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			boomer = true;
			goOut = true;
			targetLoc = player.data.hand.position + ((Vector3)(ref player.data.aimDirection)).normalized * 30f;
			swordAim = player.data.aimDirection;
		}

		public Vector2 RotateVector(Vector2 v, float angle)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: 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_0043: 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)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			float num = angle * (MathF.PI / 180f);
			float num2 = v.x * Mathf.Cos(num) - v.y * Mathf.Sin(num);
			float num3 = v.x * Mathf.Sin(num) + v.y * Mathf.Cos(num);
			return new Vector2(num2, num3);
		}

		private void Update()
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_022c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: 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_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0117: Unknown result type (might be due to invalid IL or missing references)
			//IL_012c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0131: Unknown result type (might be due to invalid IL or missing references)
			//IL_015c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0161: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: Unknown result type (might be due to invalid IL or missing references)
			//IL_017c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0181: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: 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_01ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
			if (!player.data.view.IsMine)
			{
				return;
			}
			if (!boomer)
			{
				swordLoc = Vector2.op_Implicit(player.data.hand.position);
				swordAim = player.data.aimDirection;
			}
			if (boomer)
			{
				if (goOut)
				{
					swordLoc = Vector2.MoveTowards(swordLoc, Vector2.op_Implicit(targetLoc), 60f * TimeHandler.deltaTime * player.data.weaponHandler.gun.projectileSpeed);
					if (Vector2.Distance(swordLoc, Vector2.op_Implicit(targetLoc)) < 1f)
					{
						goOut = false;
					}
					swordAim = player.data.aimDirection;
				}
				if (!goOut)
				{
					swordLoc = Vector2.MoveTowards(swordLoc, Vector2.op_Implicit(player.data.hand.position), 60f * TimeHandler.deltaTime * player.data.weaponHandler.gun.projectileSpeed);
					if (Vector2.Distance(swordLoc, Vector2.op_Implicit(player.data.hand.position)) < 1f)
					{
						boomer = false;
					}
					swordAim = player.data.aimDirection;
				}
			}
			player.data.weaponHandler.gun.ammo = 0;
			rigid.position = swordLoc;
			((Component)rigid).transform.up = swordAim;
			if (player.data.health <= 0f)
			{
				rigid.position = new Vector2(1000f, 1000f);
			}
		}
	}
	public class BulletPusher : CardEffect
	{
		public float dist = 0f;

		public override void OnShoot(GameObject projectile)
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			Vector3 val = ((Vector3)(ref ((CardEffect)this).player.data.aimDirection)).normalized * dist;
			Transform transform = projectile.transform;
			transform.position += val;
			((CardEffect)this).OnShoot(projectile);
		}
	}
	public class BulletSword : CardEffect
	{
		private bool going = true;

		private SimulatedGun swordMaker;

		public override IEnumerator OnJumpCoroutine()
		{
			if (!Object.op_Implicit((Object)(object)swordMaker))
			{
				swordMaker = ((Component)((CardEffect)this).player).GetComponent<SimulatedGun>();
			}
			yield return MakeBulletSword();
		}

		public override IEnumerator OnRoundStart(IGameModeHandler gameModeHandler)
		{
			if (!Object.op_Implicit((Object)(object)swordMaker))
			{
				swordMaker = ((Component)((CardEffect)this).player).GetComponent<SimulatedGun>();
			}
			going = true;
			yield return MakeBulletSword();
		}

		public override IEnumerator OnRoundEnd(IGameModeHandler gameModeHandler)
		{
			going = false;
			yield return null;
		}

		private IEnumerable MakeBulletSword()
		{
			while (going)
			{
				yield return (object)new WaitForSecondsRealtime(0.2f);
				swordMaker.SimulatedAttack(((CardEffect)this).player.playerID, ((CardEffect)this).gun.shootPosition.position, ((CardEffect)this).data.aimDirection, 0f, ((CardEffect)this).gun.damage, (Transform)null, false);
			}
			yield return null;
		}
	}
	public class indiajon_Mono : CardEffect
	{
		private int rocks = 0;

		private List<GameObject> rooks = new List<GameObject>();

		public void SpawnBall()
		{
			//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_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: 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_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0103: Unknown result type (might be due to invalid IL or missing references)
			//IL_0108: Unknown result type (might be due to invalid IL or missing references)
			if (rocks >= 3)
			{
				rocks--;
				PhotonNetwork.Destroy(rooks[0]);
				rooks.RemoveAt(0);
			}
			List<Player> list = PlayerManager.instance.players.Where((Player pl) => pl.playerID != ((CardEffect)this).player.playerID && pl.teamID != ((CardEffect)this).player.teamID && pl.data.health > 0f).ToList();
			if (list.Count == 0)
			{
				return;
			}
			Player val = list[Random.Range(0, list.Count)];
			Vector3 normalized = ((Vector3)(ref val.data.aimDirection)).normalized;
			int num = 15;
			Vector3 val2 = ((Component)val).transform.position + new Vector3(0f, (float)num, 0f);
			GameObject betterBall = PhotonNetwork.Instantiate("KFC_Boulder", val2, Quaternion.identity, (byte)0, (object[])null);
			betterBall.GetComponent<Rigidbody2D>().velocity = Vector2.op_Implicit(new Vector3(0f, -50f, 0f));
			rooks.Add(betterBall);
			rocks++;
			ExtensionMethods.ExecuteAfterSeconds((MonoBehaviour)(object)KFC.instance, 5f, (Action)delegate
			{
				if (Object.op_Implicit((Object)(object)betterBall))
				{
					rocks--;
					rooks.Remove(betterBall);
					PhotonNetwork.Destroy(betterBall);
				}
			});
		}

		public override void OnBlock(BlockTriggerType trigger)
		{
			SpawnBall();
		}
	}
	public class BallObject : MonoBehaviour
	{
		private void Awake()
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			((Component)this).transform.localRotation = Quaternion.Euler(new Vector3(90f, 0f, 0f));
		}
	}
	public class legos_Mono : CardEffect
	{
		private int leegos = 0;

		private List<GameObject> leeeeeeeegs = new List<GameObject>();

		public override void OnBulletHit(GameObject projectile, HitInfo hit)
		{
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			((CardEffect)this).OnBulletHit(projectile, hit);
			if (leegos >= 10)
			{
				PhotonNetwork.Destroy(leeeeeeeegs[0]);
				leeeeeeeegs.RemoveAt(0);
				leegos--;
			}
			leegos++;
			string[] array = new string[4] { "KFC_LegoBrickR", "KFC_LegoBrickY", "KFC_LegoBrickB", "KFC_LegoBrickG" };
			string text = array[Random.Range(0, array.Length)];
			GameObject lego = PhotonNetwork.Instantiate(text, projectile.transform.position, Quaternion.identity, (byte)0, (object[])null);
			leeeeeeeegs.Add(lego);
			lego.gameObject.GetComponent<DamageBox>().damage = 0f;
			ExtensionMethods.ExecuteAfterSeconds((MonoBehaviour)(object)KFC.instance, 10f, (Action)delegate
			{
				if (Object.op_Implicit((Object)(object)lego))
				{
					leegos--;
					leeeeeeeegs.Remove(lego);
					PhotonNetwork.Destroy(lego);
				}
			});
		}
	}
	public class ShopHandle : MonoBehaviour
	{
		public void Update()
		{
			Player player = ((Component)this).GetComponent<Player>();
			if (!Input.GetMouseButtonDown(0))
			{
				return;
			}
			try
			{
				CardBar val = CardBarUtils.instance.PlayersCardBar(player.playerID);
				string text = ExtensionMethods.GetFieldValue((object)val, "currentCard").ToString();
				if (text == null || !((Component)player).gameObject.GetComponent<PhotonView>().IsMine)
				{
					return;
				}
				string text2 = text.Substring(0, text.IndexOf('('));
				CardInfo cardInfoWithName = CardManager.GetCardInfoWithName(text2);
				if (!((Object)(object)cardInfoWithName == (Object)(object)Sacrafice.card))
				{
					Cards.instance.RemoveCardsFromPlayer(player, new int[2]
					{
						player.data.currentCards.IndexOf(Sacrafice.card),
						player.data.currentCards.IndexOf(cardInfoWithName)
					});
					ExtensionMethods.ExecuteAfterFrames((MonoBehaviour)(object)KFC.instance, 20, (Action)delegate
					{
						CurseManager.instance.CursePlayer(player);
					});
				}
			}
			catch
			{
			}
		}
	}
	public class sp500Manager : CardEffect
	{
		private int indexing = -1;

		public override void OnTakeDamage(Vector2 damage, bool selfDamage)
		{
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			if (selfDamage)
			{
				float magnitude = ((Vector2)(ref damage)).magnitude;
				if (magnitude < 10f)
				{
					CharacterData data = ((CardEffect)this).player.data;
					data.health += magnitude;
				}
				else
				{
					CharacterData data2 = ((CardEffect)this).player.data;
					data2.health += 10f;
				}
			}
			((CardEffect)this).OnTakeDamage(damage, selfDamage);
		}

		private void ReverseBads(CardInfo c)
		{
			Gun component = ((Component)c).gameObject.GetComponent<Gun>();
			CharacterStatModifiers component2 = ((Component)c).gameObject.GetComponent<CharacterStatModifiers>();
			if (component.reloadTimeAdd > 0f)
			{
				GunAmmo gunAmmo = ((CardEffect)this).gunAmmo;
				gunAmmo.reloadTimeAdd -= component.reloadTimeAdd;
			}
			if (component.ammo < 0)
			{
				GunAmmo gunAmmo2 = ((CardEffect)this).gunAmmo;
				gunAmmo2.maxAmmo -= component.ammo;
			}
			if (component.attackSpeed > 1f)
			{
				Gun gun = ((CardEffect)this).gun;
				gun.attackSpeed /= component.attackSpeed;
			}
			if (component.reloadTime > 1f)
			{
				GunAmmo gunAmmo3 = ((CardEffect)this).gunAmmo;
				gunAmmo3.reloadTime /= component.reloadTime;
			}
			if (component2.health < 1f)
			{
				CharacterStatModifiers characterStats = ((CardEffect)this).characterStats;
				characterStats.health /= component2.health;
			}
			if (component.damage < 1f)
			{
				Gun gun2 = ((CardEffect)this).gun;
				gun2.damage /= component.damage;
			}
			if (component.projectileSpeed < 1f)
			{
				Gun gun3 = ((CardEffect)this).gun;
				gun3.projectileSpeed /= component.projectileSpeed;
			}
			if (component2.movementSpeed < 1f)
			{
				CharacterStatModifiers characterStats2 = ((CardEffect)this).characterStats;
				characterStats2.movementSpeed /= component2.movementSpeed;
			}
			if (component.dmgMOnBounce < 1f)
			{
				Gun gun4 = ((CardEffect)this).gun;
				gun4.dmgMOnBounce /= component.dmgMOnBounce;
			}
			if (component.speedMOnBounce < 1f)
			{
				Gun gun5 = ((CardEffect)this).gun;
				gun5.speedMOnBounce /= component.speedMOnBounce;
			}
		}

		public override IEnumerator OnPointStart(IGameModeHandler gameModeHandler)
		{
			if (indexing == -1)
			{
				indexing = ((CardEffect)this).player.data.currentCards.IndexOf(scp_500.card) + 1;
			}
			if (indexing <= ((CardEffect)this).player.data.currentCards.Count)
			{
				yield break;
			}
			List<CardInfo> cardstoCheck = ((CardEffect)this).player.data.currentCards;
			cardstoCheck.RemoveRange(0, indexing - 1);
			foreach (CardInfo c in cardstoCheck)
			{
				ReverseBads(c);
			}
			indexing = ((CardEffect)this).player.data.currentCards.Count;
		}

		public override void OnJump()
		{
			if (indexing == -1)
			{
				indexing = ((CardEffect)this).player.data.currentCards.IndexOf(scp_500.card) + 1;
			}
			if (indexing > ((CardEffect)this).player.data.currentCards.Count)
			{
				List<CardInfo> currentCards = ((CardEffect)this).player.data.currentCards;
				currentCards.RemoveRange(0, indexing - 1);
				foreach (CardInfo item in currentCards)
				{
					ReverseBads(item);
				}
				indexing = ((CardEffect)this).player.data.currentCards.Count;
			}
			((CardEffect)this).OnJump();
		}
	}
	public class byebyeWall : CardEffect
	{
		public override void OnBulletHit(GameObject projectile, HitInfo hit)
		{
			if (!Object.op_Implicit((Object)(object)((Component)hit.collider).gameObject.GetComponent<Player>()))
			{
				((Component)hit.collider).gameObject.SetActive(false);
			}
		}
	}
	public class UnlimitedAmmo : CardEffect
	{
		public void Update()
		{
			int num = 3;
			foreach (CardInfo currentCard in ((CardEffect)this).player.data.currentCards)
			{
				num += ((Component)currentCard).gameObject.GetComponent<Gun>().ammo;
			}
			if (((CardEffect)this).gunAmmo.maxAmmo == 90)
			{
				((CardEffect)this).gunAmmo.maxAmmo = num;
			}
		}
	}
	public class tracers : CardEffect
	{
		public override void OnShoot(GameObject projectile)
		{
			TrailRenderer[] componentsInChildren = projectile.GetComponentsInChildren<TrailRenderer>();
			foreach (TrailRenderer val in componentsInChildren)
			{
				val.time = 1f;
			}
		}
	}
	public class FuckMe : CardEffect
	{
		private float t = 0f;

		private float a;

		private float b;

		private float c;

		public override IEnumerator OnPointStart(IGameModeHandler gameModeHandler)
		{
			t += 1f;
			a = 1f;
			b = 1f;
			c = 1f;
			foreach (CardInfo card in ((CardEffect)this).player.data.currentCards)
			{
				if (card.cardName.ToLower().Equals("increase a"))
				{
					a += 1f;
				}
				if (card.cardName.ToLower().Equals("increase b"))
				{
					b += 1f;
				}
				if (card.cardName.ToLower().Equals("increase c"))
				{
					c += 1f;
				}
			}
			float mult = (float)(((Math.Pow(a * t, 1.2) + (double)(3f * b * t) + (double)(c * t / 4f)) / (double)(100f / (c / 8f)) - (double)(b / 3f)) / 6.0) + 1f;
			if (mult < 0.2f)
			{
				mult = 0.2f;
			}
			Gun gun = ((CardEffect)this).gun;
			gun.damage *= mult;
			Gun gun2 = ((CardEffect)this).gun;
			gun2.attackSpeed /= mult;
			GunAmmo gunAmmo = ((CardEffect)this).gunAmmo;
			gunAmmo.reloadTimeMultiplier /= mult;
			Gun gun3 = ((CardEffect)this).gun;
			gun3.projectileSpeed *= mult;
			CharacterData data = ((CardEffect)this).player.data;
			data.maxHealth *= mult;
			((CardEffect)this).player.data.health = ((CardEffect)this).player.data.maxHealth;
			CharacterStatModifiers characterStats = ((CardEffect)this).characterStats;
			characterStats.jump /= (mult + 1f) / 2f;
			CharacterStatModifiers characterStats2 = ((CardEffect)this).characterStats;
			characterStats2.movementSpeed *= mult;
			Block block = ((CardEffect)this).block;
			block.cdMultiplier /= mult;
			yield break;
		}
	}
	public class KoalasBonusStats : MonoBehaviour
	{
		public Vector2 shootPos;
	}
}
namespace KFC.Cards
{
	public class Armor : CustomEffectCard<armor_mono>
	{
		internal static CardInfo card;

		public override CardDetails<armor_mono> Details => new CardDetails<armor_mono>
		{
			Title = "Armor",
			Description = "Tanks one hit of damage",
			ModName = "KFC",
			Art = KFC.ArtAssets.LoadAsset<GameObject>("C_Armor"),
			Rarity = (Rarity)2,
			Theme = (CardThemeColorType)1
		};
	}
	public class blackholegun : CustomEffectCard<blackholegun_Mono>
	{
		internal static CardInfo card;

		public override CardDetails<blackholegun_Mono> Details => new CardDetails<blackholegun_Mono>
		{
			Title = "Blackhole Gun",
			Description = "Bro stole it from stickfight\n:skull:",
			ModName = "KFC",
			Art = KFC.ArtAssets.LoadAsset<GameObject>("C_Blackhole"),
			Rarity = RarityUtils.GetRarity("Mythical"),
			Theme = (CardThemeColorType)0
		};

		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
			cardInfo.allowMultiple = false;
			gun.gravity = 0f;
			gun.ignoreWalls = true;
			gun.projectileSpeed = 0.1f;
			gun.destroyBulletAfter = 30f;
		}
	}
	public class BoxedBullets : CustomEffectCard<BoxThoseBullets>
	{
		internal static CardInfo card;

		public override CardDetails<BoxThoseBullets> Details => new CardDetails<BoxThoseBullets>
		{
			Title = "Boxed Bullets",
			Description = "Shoot boxes at people instead of bullets",
			ModName = "KFC",
			Art = KFC.ArtAssets2.LoadAsset<GameObject>("C_BoxedBullets"),
			Rarity = (Rarity)2,
			Theme = (CardThemeColorType)8,
			OwnerOnly = true
		};

		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers)
		{
			cardInfo.allowMultiple = false;
		}
	}
	public class LaggyBullets : CustomEffectCard<laggyMono>
	{
		internal static CardInfo card;

		public override CardDetails<laggyMono> Details => new CardDetails<laggyMono>
		{
			Title = "Laggy Bullets",
			Description = "Wait im lagging",
			ModName = "KFC Curses",
			Art = KFC.ArtAssets.LoadAsset<GameObject>("C_Laggy"),
			Rarity = (Rarity)1,
			Theme = (CardThemeColorType)4
		};

		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
			cardInfo.categories = (CardCategory[])(object)new CardCategory[1] { CurseManager.instance.curseCategory };
		}
	}
	public class NoAim : CustomEffectCard<AimlessMono>
	{
		internal static CardInfo card;

		public override CardDetails<AimlessMono> Details => new CardDetails<AimlessMono>
		{
			Title = "Cant Aim",
			Description = "What are you aiming at",
			ModName = "KFC Curses",
			Art = KFC.ArtAssets.LoadAsset<GameObject>("C_NoAim"),
			Rarity = (Rarity)2,
			Theme = (CardThemeColorType)4,
			OwnerOnly = true
		};

		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
			cardInfo.allowMultiple = false;
			cardInfo.categories = (CardCategory[])(object)new CardCategory[1] { CurseManager.instance.curseCategory };
		}
	}
	public class rerollNew : CustomEffectCard<rerollCurse>
	{
		internal static CardInfo card;

		public override CardDetails<rerollCurse> Details => new CardDetails<rerollCurse>
		{
			Title = "Instant Rerolling",
			Description = "Rerolls all future picks",
			ModName = "KFC Curses",
			Art = KFC.ArtAssets.LoadAsset<GameObject>("C_Shadow"),
			Rarity = (Rarity)2,
			Theme = (CardThemeColorType)4,
			OwnerOnly = true
		};

		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
			cardInfo.categories = (CardCategory[])(object)new CardCategory[1] { CurseManager.instance.curseCategory };
		}
	}
	public class Shadow : CustomEffectCard<shadowMono>
	{
		internal static CardInfo card;

		public override CardDetails<shadowMono> Details => new CardDetails<shadowMono>
		{
			Title = "Peephole",
			Description = "When you do anything, become shrouded in darkness",
			ModName = "KFC Curses",
			Art = KFC.ArtAssets.LoadAsset<GameObject>("C_Shadow"),
			Rarity = (Rarity)2,
			Theme = (CardThemeColorType)4,
			OwnerOnly = true
		};

		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
			cardInfo.categories = (CardCategory[])(object)new CardCategory[1] { CurseManager.instance.curseCategory };
		}
	}
	public class Alyssa : SimpleCard
	{
		internal static CardInfo card;

		public override CardDetails Details
		{
			get
			{
				//IL_0000: Unknown result type (might be due to invalid IL or missing references)
				//IL_0006: Expected O, but got Unknown
				//IL_0059: Unknown result type (might be due to invalid IL or missing references)
				//IL_005e: 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_0083: Expected O, but got Unknown
				CardDetails val = new CardDetails();
				val.Title = "Project Alyssa";
				val.Description = "+14 Projectile Speed";
				val.ModName = "KFC";
				val.Art = KFC.ArtAssets.LoadAsset<GameObject>("C_Alyssa");
				val.Rarity = (Rarity)2;
				val.Theme = (CardThemeColorType)7;
				val.Stats = (CardInfoStat[])(object)new CardInfoStat[1]
				{
					new CardInfoStat
					{
						amount = "<#FF00FF>*14",
						positive = true,
						simepleAmount = (SimpleAmount)0,
						stat = "Projectile Speed"
					}
				};
				return val;
			}
		}

		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
			gun.projectileSpeed = 14f;
		}
	}
	public class AncientKoala : SimpleCard
	{
		internal static CardInfo card;

		public override CardDetails Details => new CardDetails
		{
			Title = "Ancient Koala",
			Description = "<#ff00ff>Only the first gains a fragment of true power",
			ModName = "KFC",
			Art = KFC.ArtAssets.LoadAsset<GameObject>("C_KoalaMain"),
			Rarity = RarityUtils.GetRarity("Divine"),
			Theme = CardThemeLib.instance.CreateOrGetType("Koality", (CardThemeColor)null)
		};

		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
			//IL_0211: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				for (int i = 0; i < ((Component)this).transform.childCount; i++)
				{
					Transform child = ((Component)this).transform.GetChild(i);
					if (((Object)child).name.Remove(9).ToLower() == "koalamain")
					{
						Object.Destroy((Object)(object)((Component)((Component)this).transform.GetChild(i)).gameObject);
					}
				}
				GameObject val = KFC.ArtAssets.LoadAsset<GameObject>("KoalaMain");
				((Renderer)val.gameObject.GetComponent<SpriteRenderer>()).sortingLayerName = "MostFront";
				((Renderer)val.gameObject.GetComponent<SpriteRenderer>()).sortingOrder = 11;
				((Renderer)((Component)val.transform.GetChild(0)).GetComponent<SpriteRenderer>()).sortingLayerName = "MostFront";
				((Renderer)((Component)val.transform.GetChild(0)).GetComponent<SpriteRenderer>()).sortingOrder = 12;
				((Renderer)((Component)val.transform.GetChild(1)).GetComponent<SpriteRenderer>()).sortingLayerName = "MostFront";
				((Renderer)((Component)val.transform.GetChild(1)).GetComponent<SpriteRenderer>()).sortingOrder = 13;
				((Renderer)((Component)val.transform.GetChild(2)).GetComponent<SpriteRenderer>()).sortingLayerName = "MostFront";
				((Renderer)((Component)val.transform.GetChild(2)).GetComponent<SpriteRenderer>()).sortingOrder = 14;
				((Renderer)((Component)val.transform.GetChild(2).GetChild(0)).GetComponent<SpriteRenderer>()).sortingLayerName = "MostFront";
				((Renderer)((Component)val.transform.GetChild(2).GetChild(0)).GetComponent<SpriteRenderer>()).sortingOrder = 15;
				((Renderer)((Component)val.transform.GetChild(3)).GetComponent<SpriteRenderer>()).sortingLayerName = "MostFront";
				((Renderer)((Component)val.transform.GetChild(3)).GetComponent<SpriteRenderer>()).sortingOrder = 13;
				val.gameObject.layer = 21;
				for (int j = 0; j < val.transform.childCount; j++)
				{
					((Component)val.transform.GetChild(j)).gameObject.layer = 21;
				}
				Object.Instantiate<GameObject>(val, ((Component)this).transform);
				val.transform.localPosition = Vector3.zero;
			}
			catch
			{
			}
			CardInfoExtension.GetAdditionalData(cardInfo).canBeReassigned = false;
			cardInfo.categories = (CardCategory[])(object)new CardCategory[2]
			{
				CustomCardCategories.instance.CardCategory("cantEternity"),
				CustomCardCategories.instance.CardCategory("CardManipulation")
			};
		}

		protected override void Added(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			bool flag = false;
			Player[] array = PlayerManager.instance.players.ToArray();
			foreach (Player val in array)
			{
				foreach (CardInfo currentCard in val.data.currentCards)
				{
					if ((Object)(object)currentCard == (Object)(object)card)
					{
						flag = true;
					}
				}
			}
			if (flag)
			{
				Cards.instance.RemoveAllCardsFromPlayer(player, true);
				Cards.instance.AddCardToPlayer(player, KoalaWrath.card, false, "", 0f, 0f);
				return;
			}
			CardInfo[] gifts = (CardInfo[])(object)new CardInfo[4]
			{
				KoalaGlory.card,
				KoalaThief.card,
				KoalaMight.card,
				KoalaStats.card
			};
			List<CardInfo> list = gifts.ToList();
			foreach (CardInfo currentCard2 in player.data.currentCards)
			{
				CardInfo[] array2 = gifts;
				foreach (CardInfo val2 in array2)
				{
					if ((Object)(object)currentCard2 == (Object)(object)val2)
					{
						list.Remove(val2);
					}
				}
			}
			CardInfo[] array3 = list.ToArray();
			if (array3.Length != 0)
			{
				int num = Random.Range(0, array3.Length);
				int index = gifts.ToList().IndexOf(array3[num]);
				ExtensionMethods.ExecuteAfterFrames((MonoBehaviour)(object)KFC.instance, 10, (Action)delegate
				{
					Cards.instance.AddCardToPlayer(player, gifts[index], false, "", 0f, 0f);
				});
			}
		}
	}
	public class KoalaGlory : CustomEffectCard<Fortune>
	{
		internal static CardInfo card;

		public override CardDetails<Fortune> Details
		{
			get
			{
				//IL_0046: Unknown result type (might be due to invalid IL or missing references)
				//IL_005d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0071: Unknown result type (might be due to invalid IL or missing references)
				//IL_0076: Unknown result type (might be due to invalid IL or missing references)
				//IL_0081: 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)
				//IL_008a: Unknown result type (might be due to invalid IL or missing references)
				//IL_008f: Unknown result type (might be due to invalid IL or missing references)
				//IL_009b: Expected O, but got Unknown
				//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_00ad: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c7: Expected O, but got Unknown
				CardDetails<Fortune> val = new CardDetails<Fortune>();
				val.Title = "Glory of Koala";
				val.Description = "You gain an abundance of fame and fortune";
				val.ModName = "KFC";
				val.Art = KFC.ArtAssets.LoadAsset<GameObject>("C_KoalaGlory");
				val.Rarity = RarityUtils.GetRarity("Legendary");
				val.Theme = CardThemeLib.instance.CreateOrGetType("Koality", (CardThemeColor)null);
				val.Stats = (CardInfoStat[])(object)new CardInfoStat[2]
				{
					new CardInfoStat
					{
						amount = "<#ff00ff>+25% of Others",
						positive = true,
						simepleAmount = (SimpleAmount)0,
						stat = "Max Hp"
					},
					new CardInfoStat
					{
						amount = "<#ff00ff>10% Max Hp",
						positive = true,
						simepleAmount = (SimpleAmount)0,
						stat = "Healing per second"
					}
				};
				return val;
			}
		}

		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers)
		{
			CardInfoExtension.GetAdditionalData(cardInfo).canBeReassigned = false;
			cardInfo.categories = (CardCategory[])(object)new CardCategory[1] { CustomCardCategories.instance.CardCategory("cantEternity") };
		}

		protected override void Added(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Player[] array = PlayerManager.instance.players.Where((Player p) => p.playerID != player.playerID).ToArray();
			float num = 0f;
			Player[] array2 = array;
			foreach (Player val in array2)
			{
				num += val.data.maxHealth * 0.25f;
			}
			CharacterData data2 = player.data;
			data2.maxHealth += num;
			player.data.health = player.data.maxHealth;
		}

		public override bool GetEnabled()
		{
			return false;
		}
	}
	public class KoalaMight : SimpleCard
	{
		internal static CardInfo card;

		public override CardDetails Details
		{
			get
			{
				//IL_0000: Unknown result type (might be due to invalid IL or missing references)
				//IL_0006: Expected O, but got Unknown
				//IL_0046: Unknown result type (might be due to invalid IL or missing references)
				//IL_005d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0071: Unknown result type (might be due to invalid IL or missing references)
				//IL_0076: Unknown result type (might be due to invalid IL or missing references)
				//IL_0099: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a0: 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_00b3: Expected O, but got Unknown
				//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
				//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f7: Expected O, but got Unknown
				//IL_00f9: Unknown result type (might be due to invalid IL