LMB.dll

Decompiled 2 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Threading.Tasks;
using BepInEx;
using HarmonyLib;
using InControl;
using Jotunn.Utils;
using LMB.Cards;
using LMB.StickyBombExtensions;
using Microsoft.CodeAnalysis;
using Photon.Pun;
using Sirenix.OdinInspector;
using Sonigon;
using SoundImplementation;
using UnboundLib.Cards;
using UnityEngine;

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

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

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

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
}
namespace LMB
{
	internal class Assets
	{
		public static readonly AssetBundle assetBundle = AssetUtils.LoadAssetBundleFromResources("lmb", typeof(LMB).Assembly);

		public static GameObject succGunArt = assetBundle.LoadAsset<GameObject>("C_SuccGun");

		public static GameObject jimFlickArt = assetBundle.LoadAsset<GameObject>("C_JimFlick");

		public static GameObject stickyBombArt = assetBundle.LoadAsset<GameObject>("C_StickyBomb");

		public static GameObject stickyBombBullet = assetBundle.LoadAsset<GameObject>("StickyBombBullet");

		public static GameObject stickyBomb = assetBundle.LoadAsset<GameObject>("StickyBomb");

		public static SoundEvent stickyBombExplosionSound = assetBundle.LoadAsset<SoundEvent>("StickyBombExplosion");

		public static GameObject costcoArt = assetBundle.LoadAsset<GameObject>("C_Costco");

		public static GameObject duh2x3Art = assetBundle.LoadAsset<GameObject>("C_Duh2x3");

		public static GameObject playTheManArt = assetBundle.LoadAsset<GameObject>("C_PlayTheMan");
	}
	internal class InputListener : MonoBehaviour
	{
		public Detonator[] detonators = new Detonator[0];

		private Player player;

		private CharacterData data;

		public LMBActionSet actionSet;

		public PlayerAction Detonate;

		public bool playTheMan = false;

		public bool tackling = false;

		private bool hasDamaged = true;

		private bool stoppedClick = false;

		private bool reloading = false;

		private Player closestPlayer;

		public GunAmmo gunAmmo;

		public Gun gun;

		public HealthHandler healthHandler;

		public void Start()
		{
			player = ((Component)this).gameObject.GetComponent<Player>();
			gun = ((Component)((Component)this).gameObject.GetComponent<Holding>().holdable).gameObject.GetComponent<Gun>();
			data = ((Component)this).gameObject.GetComponent<CharacterData>();
			actionSet = new LMBActionSet();
			Detonate = actionSet.CreateNewAction("Detonate");
			if (((PlayerActionSet)data.playerActions).Device == null)
			{
				Detonate.AddDefaultBinding((Mouse)3);
			}
			else
			{
				Detonate.AddDefaultBinding((InputControlType)5);
			}
			gunAmmo = ((Component)((Component)this).gameObject.GetComponent<Holding>().holdable).gameObject.GetComponentInChildren<GunAmmo>();
			healthHandler = ((Component)this).gameObject.GetComponent<HealthHandler>();
		}

		public void Update()
		{
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Invalid comparison between Unknown and I4
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fd: Invalid comparison between Unknown and I4
			//IL_0368: Unknown result type (might be due to invalid IL or missing references)
			//IL_036d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0381: Unknown result type (might be due to invalid IL or missing references)
			//IL_039b: Unknown result type (might be due to invalid IL or missing references)
			//IL_020f: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0301: Unknown result type (might be due to invalid IL or missing references)
			//IL_0306: Unknown result type (might be due to invalid IL or missing references)
			//IL_0310: Unknown result type (might be due to invalid IL or missing references)
			//IL_031a: Unknown result type (might be due to invalid IL or missing references)
			//IL_03da: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0421: Unknown result type (might be due to invalid IL or missing references)
			//IL_0426: Unknown result type (might be due to invalid IL or missing references)
			//IL_0436: Unknown result type (might be due to invalid IL or missing references)
			//IL_043b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0248: Unknown result type (might be due to invalid IL or missing references)
			//IL_0258: Unknown result type (might be due to invalid IL or missing references)
			//IL_025d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0262: Unknown result type (might be due to invalid IL or missing references)
			//IL_0267: Unknown result type (might be due to invalid IL or missing references)
			if (detonators.Count() > 0 && ((OneAxisInputControl)Detonate).IsPressed)
			{
				for (int i = 0; i < detonators.Count(); i++)
				{
					if (Object.op_Implicit((Object)(object)detonators[i]))
					{
						detonators[i].Detonate();
					}
				}
				Array.Clear(detonators, 0, detonators.Length);
			}
			if (playTheMan && reloading && (int)gunAmmo.reloadAnim.currentState == 1)
			{
				reloading = false;
				stoppedClick = false;
				tackling = false;
				Task.Delay(new TimeSpan(0, 0, 2)).ContinueWith(delegate
				{
					setHasDamaged(value: true);
				});
			}
			if (playTheMan && !reloading && (int)gunAmmo.reloadAnim.currentState == 0)
			{
				reloading = true;
			}
			if (playTheMan && reloading && !stoppedClick && !((OneAxisInputControl)data.playerActions.Fire).IsPressed)
			{
				stoppedClick = true;
			}
			if (playTheMan && reloading && !tackling && stoppedClick && ((OneAxisInputControl)data.playerActions.Fire).IsPressed)
			{
				tackling = true;
				hasDamaged = false;
				int[] array = new int[0];
				float num = float.MaxValue;
				closestPlayer = player;
				Player val = player;
				for (int j = 0; j < PlayerManager.instance.players.Count(); j++)
				{
					if (PlayerManager.instance.players[j].teamID == player.teamID)
					{
						continue;
					}
					val = PlayerManager.instance.GetClosestPlayerInTeam(((Component)player).transform.position, PlayerManager.instance.players[j].teamID, true);
					if ((Object)(object)val != (Object)null)
					{
						Vector2 val2 = Vector2.op_Implicit(((Component)val).transform.position - ((Component)player).transform.position);
						if (((Vector2)(ref val2)).magnitude < num)
						{
							num = ((Vector2)(ref val2)).magnitude;
							closestPlayer = val;
						}
					}
				}
				if ((Object)(object)closestPlayer == (Object)(object)player)
				{
					tackling = false;
					hasDamaged = true;
				}
				else
				{
					Vector2 val3 = Vector2.op_Implicit(((Component)closestPlayer).transform.position - ((Component)player).transform.position);
					healthHandler.CallTakeForce(((Vector2)(ref val3)).normalized * 20000f, (ForceMode2D)1, true, true, 0f);
				}
			}
			if (playTheMan && !hasDamaged)
			{
				ColliderDistance2D val4 = data.mainCol.Distance(closestPlayer.data.mainCol);
				if (((ColliderDistance2D)(ref val4)).distance < ((CircleCollider2D)data.mainCol).radius + ((CircleCollider2D)closestPlayer.data.mainCol).radius + 0.1f)
				{
					hasDamaged = true;
					HealthHandler obj = closestPlayer.data.healthHandler;
					Vector3 val5 = ((Component)closestPlayer).transform.position - ((Component)this).transform.position;
					((Damagable)obj).CallTakeDamage(Vector2.op_Implicit(((Vector3)(ref val5)).normalized * (gun.damage * 55f / 4f + data.maxHealth / 3f)), Vector2.op_Implicit(((Component)player).transform.position), (GameObject)null, player, true);
				}
			}
		}

		private void setHasDamaged(bool value)
		{
			hasDamaged = value;
		}
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.mattz45986.rounds.lmb", "LMB", "1.0.0")]
	[BepInProcess("Rounds.exe")]
	public class LMB : BaseUnityPlugin
	{
		private const string ModId = "com.mattz45986.rounds.lmb";

		private const string ModName = "LMB";

		public const string Version = "1.0.0";

		public const string ModInitials = "LMB";

		public static LMB? instance { get; private set; }

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

		private void Start()
		{
			CustomCard.BuildCard<SuccGun>();
			CustomCard.BuildCard<JimFlick>();
			CustomCard.BuildCard<StickyBomb>();
			CustomCard.BuildCard<Costco>();
			CustomCard.BuildCard<Duh2x3>();
			CustomCard.BuildCard<PlayTheMan>();
			instance = this;
		}
	}
	internal class LMBActionSet : PlayerActionSet
	{
		public PlayerAction CreateNewAction(string name)
		{
			return ((PlayerActionSet)this).CreatePlayerAction(name);
		}
	}
}
namespace LMB.StickyBombExtensions
{
	internal class Detonator : MonoBehaviour
	{
		public PhotonView? view;

		public float damage;

		public float scale;

		public float knockback;

		private StickyExplosion? explosion;

		private SpawnedAttack? spawned;

		public InputListener? input;

		public SoundUnityEventPlayer soundPlayer;

		public ParticleSystem[] particleSystems;

		public void Start()
		{
			view = ((Component)this).gameObject.GetComponent<PhotonView>();
			explosion = ((Component)this).gameObject.AddComponent<StickyExplosion>();
			spawned = ((Component)this).gameObject.GetComponent<SpawnedAttack>();
			soundPlayer = ((Component)this).gameObject.GetComponentInChildren<SoundUnityEventPlayer>();
			particleSystems = ((Component)this).gameObject.GetComponentsInChildren<ParticleSystem>();
			spawned.view = view;
			explosion.auto = false;
			explosion.damage = damage;
			float num = 1f * (1f - scale) + damage / 55f * scale + Mathf.Abs(knockback) / 4f;
			float num2 = 1f * (1f - scale) + Mathf.Abs(knockback) * scale;
			explosion.range = 3f * num;
			explosion.force = 10000f * num2 * Mathf.Sign(knockback);
			explosion.ignoreTeam = false;
			input = ((Component)spawned.spawner).gameObject.GetComponent<InputListener>();
			input.detonators = CollectionExtensions.AddItem<Detonator>((IEnumerable<Detonator>)input.detonators, ((Component)this).gameObject.GetComponent<Detonator>()).ToArray();
		}

		public void Detonate()
		{
			((Component)((Component)this).gameObject.transform.GetChild(0)).gameObject.SetActive(true);
			explosion.Explode();
			((Renderer)((Component)this).gameObject.GetComponent<SpriteRenderer>()).enabled = false;
			((Behaviour)((Component)this).gameObject.GetComponent<Collider2D>()).enabled = false;
			((MonoBehaviour)this).Invoke("DestroyMe", 2f);
		}

		private void DestroyMe()
		{
			if (Object.op_Implicit((Object)(object)view))
			{
				if (view.IsMine)
				{
					PhotonNetwork.Destroy(((Component)this).gameObject);
				}
			}
			else
			{
				Object.Destroy((Object)(object)((Component)this).gameObject);
			}
		}
	}
	internal class StickyBombBulletHitEffect : RayHitEffect
	{
		public Color color = Color.white;

		public Player owner;

		public GameObject stickyBomb;

		public bool hasHitAlready = false;

		public float damage;

		public float knockback;

		public void Start()
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			owner = ((Component)this).gameObject.GetComponent<SpawnedAttack>().spawner;
			color = owner.GetTeamColors().color;
			damage = ((Component)((Component)owner).gameObject.GetComponent<Holding>().holdable).GetComponent<Gun>().damage * 55f;
			knockback = ((Component)((Component)owner).gameObject.GetComponent<Holding>().holdable).GetComponent<Gun>().knockback;
		}

		public override HasToReturn DoHitEffect(HitInfo hit)
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: 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_0149: Unknown result type (might be due to invalid IL or missing references)
			if (hasHitAlready)
			{
				return (HasToReturn)1;
			}
			ObjectsToSpawn val = new ObjectsToSpawn();
			SpriteRenderer component = stickyBomb.GetComponent<SpriteRenderer>();
			component.color = color;
			val.effect = stickyBomb;
			val.scaleFromDamage = 0.75f;
			Detonator component2 = stickyBomb.GetComponent<Detonator>();
			component2.damage = damage;
			component2.scale = val.scaleFromDamage;
			component2.knockback = knockback;
			float num = 1f * (1f - val.scaleFromDamage) + damage / 55f * val.scaleFromDamage;
			val.normalOffset = stickyBomb.transform.localScale.x * 0.85f * num;
			val.spawnAsChild = true;
			ProjectileHit component3 = ((Component)this).gameObject.GetComponent<ProjectileHit>();
			HealthHandler val2 = null;
			if (Object.op_Implicit((Object)(object)hit.transform))
			{
				val2 = ((Component)hit.transform).GetComponent<HealthHandler>();
			}
			PlayerSkin val3 = null;
			if (Object.op_Implicit((Object)(object)component3.team))
			{
				val3 = component3.team;
			}
			ObjectsToSpawn.SpawnObject(hit.transform, hit, val, val2, val3, damage, ((Component)this).gameObject.GetComponent<SpawnedAttack>(), false);
			hasHitAlready = true;
			return (HasToReturn)1;
		}
	}
	public class StickyExplosion : MonoBehaviour
	{
		[Header("Sounds")]
		public SoundEvent soundDamage;

		[Header("Settings")]
		public float slow = 0f;

		public float silence = 0f;

		public bool fastSlow = false;

		public float stun = 0f;

		public float force = 5000f;

		public float objectForceMultiplier = 1f;

		public bool forceIgnoreMass = true;

		public float damage = 25f;

		public Color dmgColor = Color.black;

		public float range = 2f;

		public float flyingFor = 0f;

		public bool auto = true;

		public bool ignoreTeam = false;

		public bool ignoreWalls = true;

		public bool staticRangeMultiplier = false;

		[FoldoutGroup("Scaling", 0)]
		public bool scaleSlow = false;

		[FoldoutGroup("Scaling", 0)]
		public bool scaleSilence = false;

		[FoldoutGroup("Scaling", 0)]
		public bool scaleDmg = false;

		[FoldoutGroup("Scaling", 0)]
		public bool scaleRadius = false;

		[FoldoutGroup("Scaling", 0)]
		public bool scaleStun = false;

		[FoldoutGroup("Scaling", 0)]
		public bool scaleForce = false;

		[FoldoutGroup("Immunity", 0)]
		public float immunity = 0f;

		private SpawnedAttack spawned;

		public bool locallySimulated;

		public Action<Damagable> DealDamageAction;

		public Action<Damagable> DealHealAction;

		public Action<Damagable, float> HitTargetAction;

		private PhotonView view;

		public Action<CharacterData, float> hitPlayerAction;

		private void Start()
		{
			spawned = ((Component)this).GetComponent<SpawnedAttack>();
			view = ((Component)this).GetComponent<PhotonView>();
			if (auto)
			{
				Explode();
			}
		}

		private void DoExplosionEffects(Collider2D hitCol, float rangeMultiplier, float distance)
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: 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_05ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_05f6: Expected O, but got Unknown
			//IL_0604: Unknown result type (might be due to invalid IL or missing references)
			//IL_0609: Unknown result type (might be due to invalid IL or missing references)
			//IL_0613: Unknown result type (might be due to invalid IL or missing references)
			//IL_0618: Unknown result type (might be due to invalid IL or missing references)
			//IL_061d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0628: Unknown result type (might be due to invalid IL or missing references)
			//IL_062d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0632: Unknown result type (might be due to invalid IL or missing references)
			//IL_0637: Unknown result type (might be due to invalid IL or missing references)
			//IL_063b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0641: Unknown result type (might be due to invalid IL or missing references)
			//IL_064c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0652: Unknown result type (might be due to invalid IL or missing references)
			//IL_0141: 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_04c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_04cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_04db: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_04eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_04fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_04fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0504: Unknown result type (might be due to invalid IL or missing references)
			//IL_050f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0515: Unknown result type (might be due to invalid IL or missing references)
			//IL_054d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0552: Unknown result type (might be due to invalid IL or missing references)
			//IL_055c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0561: Unknown result type (might be due to invalid IL or missing references)
			//IL_0566: Unknown result type (might be due to invalid IL or missing references)
			//IL_0571: Unknown result type (might be due to invalid IL or missing references)
			//IL_0576: Unknown result type (might be due to invalid IL or missing references)
			//IL_057b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0580: Unknown result type (might be due to invalid IL or missing references)
			//IL_0584: Unknown result type (might be due to invalid IL or missing references)
			//IL_058a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0595: Unknown result type (might be due to invalid IL or missing references)
			//IL_059b: Unknown result type (might be due to invalid IL or missing references)
			//IL_036b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0376: Expected O, but got Unknown
			//IL_03a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03db: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_041b: Unknown result type (might be due to invalid IL or missing references)
			//IL_041d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0428: Unknown result type (might be due to invalid IL or missing references)
			//IL_042d: Unknown result type (might be due to invalid IL or missing references)
			float num = (scaleDmg ? ((Component)this).transform.localScale.x : 1f);
			float num2 = (scaleForce ? ((Component)this).transform.localScale.x : 1f);
			float num3 = (scaleSlow ? ((Component)this).transform.localScale.x : 1f);
			float num4 = (scaleSilence ? ((Component)this).transform.localScale.x : 1f);
			float num5 = (scaleStun ? ((1f + ((Component)this).transform.localScale.x) * 0.5f) : 1f);
			Damagable componentInParent = ((Component)hitCol).gameObject.GetComponentInParent<Damagable>();
			CharacterData val = null;
			Bounds bounds;
			Vector2 val2;
			if (Object.op_Implicit((Object)(object)componentInParent))
			{
				val = ((Component)hitCol).gameObject.GetComponentInParent<CharacterData>();
				if ((immunity > 0f && Object.op_Implicit((Object)(object)val) && ((Component)val).GetComponent<PlayerImmunity>().IsImune(immunity, num * damage * rangeMultiplier, ((Object)((Component)this).gameObject).name)) || (!ignoreWalls && Object.op_Implicit((Object)(object)val) && !PlayerManager.instance.CanSeePlayer(Vector2.op_Implicit(((Component)this).transform.position), val.player).canSee))
				{
					return;
				}
				if (slow != 0f && Object.op_Implicit((Object)(object)((Component)componentInParent).GetComponent<CharacterStatModifiers>()))
				{
					if (locallySimulated)
					{
						if (spawned.IsMine() && !val.block.IsBlocking())
						{
							val.stats.RPCA_AddSlow(slow * rangeMultiplier * num3, fastSlow);
						}
					}
					else if (spawned.IsMine() && !val.block.IsBlocking())
					{
						val.view.RPC("RPCA_AddSlow", (RpcTarget)0, new object[2]
						{
							slow * rangeMultiplier * num3,
							fastSlow
						});
					}
				}
				if (silence != 0f && Object.op_Implicit((Object)(object)((Component)componentInParent).GetComponent<SilenceHandler>()) && spawned.IsMine() && !val.block.IsBlocking())
				{
					val.view.RPC("RPCA_AddSilence", (RpcTarget)0, new object[1] { silence * rangeMultiplier * num4 });
				}
				if (Object.op_Implicit((Object)(object)spawned))
				{
					_ = spawned.spawner;
				}
				hitPlayerAction?.Invoke(val, rangeMultiplier);
				if (damage < 0f)
				{
					if (Object.op_Implicit((Object)(object)val))
					{
						val.healthHandler.Heal(0f - damage);
					}
					if (DealHealAction != null)
					{
						DealHealAction(componentInParent);
					}
				}
				else if (damage > 0f)
				{
					if ((Object)soundDamage != (Object)null && (Object)(object)val != (Object)null)
					{
						SoundManager.Instance.Play(soundDamage, ((Component)val).transform);
					}
					bounds = hitCol.bounds;
					val2 = Vector2.op_Implicit(((Bounds)(ref bounds)).ClosestPoint(((Component)this).transform.position)) - Vector2.op_Implicit(((Component)this).transform.position);
					Vector2 val3 = ((Vector2)(ref val2)).normalized;
					if (val3 == Vector2.zero)
					{
						val3 = Vector2.up;
					}
					if (spawned.IsMine())
					{
						componentInParent.CallTakeDamage(num * damage * rangeMultiplier * val3, Vector2.op_Implicit(((Component)this).transform.position), (GameObject)null, spawned.spawner, true);
					}
					if (DealDamageAction != null)
					{
						DealDamageAction(componentInParent);
					}
				}
			}
			if (Object.op_Implicit((Object)(object)val))
			{
				if (HitTargetAction != null)
				{
					HitTargetAction(componentInParent, distance);
				}
				if (force != 0f)
				{
					if (locallySimulated)
					{
						HealthHandler healthHandler = val.healthHandler;
						bounds = hitCol.bounds;
						val2 = Vector2.op_Implicit(((Bounds)(ref bounds)).ClosestPoint(((Component)this).transform.position)) - Vector2.op_Implicit(((Component)this).transform.position);
						healthHandler.TakeForce(((Vector2)(ref val2)).normalized * rangeMultiplier * force * num2, (ForceMode2D)1, forceIgnoreMass, true, 0f);
					}
					else if (spawned.IsMine())
					{
						HealthHandler healthHandler2 = val.healthHandler;
						bounds = hitCol.bounds;
						val2 = Vector2.op_Implicit(((Bounds)(ref bounds)).ClosestPoint(((Component)this).transform.position)) - Vector2.op_Implicit(((Component)this).transform.position);
						healthHandler2.CallTakeForce(((Vector2)(ref val2)).normalized * rangeMultiplier * force * num2, (ForceMode2D)1, forceIgnoreMass, true, flyingFor * rangeMultiplier);
					}
				}
				if (stun > 0f)
				{
					val.stunHandler.AddStun(stun * num5);
				}
			}
			else if (Object.op_Implicit((Object)hitCol.attachedRigidbody))
			{
				Rigidbody2D attachedRigidbody = hitCol.attachedRigidbody;
				bounds = hitCol.bounds;
				val2 = Vector2.op_Implicit(((Bounds)(ref bounds)).ClosestPoint(((Component)this).transform.position)) - Vector2.op_Implicit(((Component)this).transform.position);
				attachedRigidbody.AddForce(((Vector2)(ref val2)).normalized * rangeMultiplier * force * num2, (ForceMode2D)1);
			}
		}

		public void Explode()
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0082: 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_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: 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_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c3: Expected O, but got Unknown
			//IL_0135: Unknown result type (might be due to invalid IL or missing references)
			//IL_014a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0155: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			//IL_015f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0163: Unknown result type (might be due to invalid IL or missing references)
			//IL_0168: Unknown result type (might be due to invalid IL or missing references)
			//IL_0173: Unknown result type (might be due to invalid IL or missing references)
			//IL_017d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0184: Unknown result type (might be due to invalid IL or missing references)
			//IL_018f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0196: Unknown result type (might be due to invalid IL or missing references)
			//IL_019b: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ed: Unknown result type (might be due to invalid IL or missing references)
			float num = (scaleRadius ? ((Component)this).transform.localScale.x : 1f);
			Collider2D[] array = Physics2D.OverlapCircleAll(Vector2.op_Implicit(((Component)this).transform.position), range * num);
			for (int i = 0; i < array.Length; i++)
			{
				if (((Component)array[i]).gameObject.layer != 19)
				{
					Damagable componentInParent = ((Component)array[i]).gameObject.GetComponentInParent<Damagable>();
					Vector2 val = Vector2.op_Implicit(((Component)this).transform.position);
					Bounds bounds = array[i].bounds;
					float num2 = Vector2.Distance(val, Vector2.op_Implicit(((Bounds)(ref bounds)).ClosestPoint(((Component)this).transform.position)));
					float num3 = 1f - num2 / (range * num);
					if (staticRangeMultiplier)
					{
						num3 = 1f;
					}
					num3 = Mathf.Clamp(num3, 0f, 1f);
					NetworkPhysicsObject component = ((Component)array[i]).GetComponent<NetworkPhysicsObject>();
					if (Object.op_Implicit((Object)(object)component) && component.photonView.IsMine)
					{
						float num4 = (scaleForce ? ((Component)this).transform.localScale.x : 1f);
						Vector3 val2 = ((Component)component).transform.position - ((Component)this).transform.position;
						component.BulletPush(Vector2.op_Implicit(((Vector3)(ref val2)).normalized) * objectForceMultiplier * 1f * num3 * force * num4, Vector2.zero, (CharacterData)null);
					}
					if ((Object.op_Implicit((Object)(object)componentInParent) || Object.op_Implicit((Object)array[i].attachedRigidbody)) && (!ignoreTeam || !Object.op_Implicit((Object)(object)spawned) || !((Object)(object)((Component)spawned.spawner).gameObject == (Object)(object)((Component)((Component)array[i]).transform).gameObject)))
					{
						DoExplosionEffects(array[i], num3, num2);
					}
				}
			}
		}
	}
}
namespace LMB.Cards
{
	internal class Costco : CustomCard
	{
		public void Start()
		{
			CardVisuals componentInChildren = ((Component)this).gameObject.GetComponentInChildren<CardVisuals>();
			Action<bool> toggleSelectionAction = toggleSound;
			componentInChildren.toggleSelectionAction = toggleSelectionAction;
		}

		public void toggleSound(bool toggle)
		{
			if (toggle)
			{
				((Component)GameObject.Find("C_Costco(Clone)").transform.Find("Trumpet")).gameObject.SetActive(true);
			}
			else
			{
				GameObject.Find("Trumpet").SetActive(false);
			}
		}

		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
			Debug.Log((object)("[LMB][Card] " + ((CustomCard)this).GetTitle() + " has been setup."));
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Debug.Log((object)string.Format("[{0}][Card] {1} has been added to player {2}.", "LMB", ((CustomCard)this).GetTitle(), player.playerID));
			gravity.gravityForce *= 2f;
			data.maxHealth += 150f;
			gun.damage += 0.2f;
			characterStats.slow += 0.1f;
			characterStats.sizeMultiplier *= 1.3f;
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Debug.Log((object)string.Format("[{0}][Card] {1} has been removed from player {2}.", "LMB", ((CustomCard)this).GetTitle(), player.playerID));
		}

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

		protected override string GetDescription()
		{
			return "\"I can't breathe\"\n- David";
		}

		protected override GameObject GetCardArt()
		{
			return Assets.costcoArt;
		}

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

		protected override CardInfoStat[] GetStats()
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Expected O, but got Unknown
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Expected O, but got Unknown
			return (CardInfoStat[])(object)new CardInfoStat[3]
			{
				new CardInfoStat
				{
					positive = true,
					stat = "Damage",
					amount = "",
					simepleAmount = (SimpleAmount)2
				},
				new CardInfoStat
				{
					positive = true,
					stat = "Health",
					amount = "",
					simepleAmount = (SimpleAmount)4
				},
				new CardInfoStat
				{
					positive = false,
					stat = "BMI",
					amount = "",
					simepleAmount = (SimpleAmount)4
				}
			};
		}

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

		public override string GetModName()
		{
			return "LMB";
		}
	}
	internal class Duh2x3 : CustomCard
	{
		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
			Debug.Log((object)("[LMB][Card] " + ((CustomCard)this).GetTitle() + " has been setup."));
			gun.bursts = 3;
			gun.ammo = 3;
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Debug.Log((object)string.Format("[{0}][Card] {1} has been added to player {2}.", "LMB", ((CustomCard)this).GetTitle(), player.playerID));
			gun.damage *= 0.85f;
			gun.projectileSpeed *= 1.2f;
			gun.spread += 0.05f;
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Debug.Log((object)string.Format("[{0}][Card] {1} has been removed from player {2}.", "LMB", ((CustomCard)this).GetTitle(), player.playerID));
		}

		protected override string GetTitle()
		{
			return "Duh 2 x 3";
		}

		protected override string GetDescription()
		{
			return "MATRIX, but no\nKeanu Reeves";
		}

		protected override GameObject GetCardArt()
		{
			return Assets.duh2x3Art;
		}

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

		protected override CardInfoStat[] GetStats()
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Expected O, but got Unknown
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Expected O, but got Unknown
			return (CardInfoStat[])(object)new CardInfoStat[3]
			{
				new CardInfoStat
				{
					positive = true,
					stat = "Burst",
					amount = "+1",
					simepleAmount = (SimpleAmount)0
				},
				new CardInfoStat
				{
					positive = true,
					stat = "Ammo",
					amount = "+3",
					simepleAmount = (SimpleAmount)0
				},
				new CardInfoStat
				{
					positive = false,
					stat = "Damage",
					amount = "",
					simepleAmount = (SimpleAmount)5
				}
			};
		}

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

		public override string GetModName()
		{
			return "LMB";
		}
	}
	internal class JimFlick : CustomCard
	{
		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
			Debug.Log((object)("[LMB][Card] " + ((CustomCard)this).GetTitle() + " has been setup."));
			gun.spread = 0.2f;
			gun.gravity = 0.1f;
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Debug.Log((object)string.Format("[{0}][Card] {1} has been added to player {2}.", "LMB", ((CustomCard)this).GetTitle(), player.playerID));
			gun.projectileSpeed += 2f;
			gun.knockback += 1f;
			gun.damage *= 2f;
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Debug.Log((object)string.Format("[{0}][Card] {1} has been removed from player {2}.", "LMB", ((CustomCard)this).GetTitle(), player.playerID));
		}

		protected override string GetTitle()
		{
			return "Jim Flick";
		}

		protected override string GetDescription()
		{
			return "Pablo Picasso that man";
		}

		protected override GameObject GetCardArt()
		{
			return Assets.jimFlickArt;
		}

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

		protected override CardInfoStat[] GetStats()
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Expected O, but got Unknown
			//IL_002a: 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)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Expected O, but got Unknown
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Expected O, but got Unknown
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Expected O, but got Unknown
			return (CardInfoStat[])(object)new CardInfoStat[4]
			{
				new CardInfoStat
				{
					positive = true,
					stat = "Knockback",
					simepleAmount = (SimpleAmount)2
				},
				new CardInfoStat
				{
					positive = true,
					stat = "Bullet Speed",
					simepleAmount = (SimpleAmount)3
				},
				new CardInfoStat
				{
					positive = true,
					stat = "Damage",
					simepleAmount = (SimpleAmount)3
				},
				new CardInfoStat
				{
					positive = false,
					stat = "Spread",
					simepleAmount = (SimpleAmount)1
				}
			};
		}

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

		public override string GetModName()
		{
			return "LMB";
		}
	}
	internal class PlayTheMan : CustomCard
	{
		public void Start()
		{
		}

		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
			Debug.Log((object)("[LMB][Card] " + ((CustomCard)this).GetTitle() + " has been setup."));
			cardInfo.allowMultiple = false;
			statModifiers.automaticReload = false;
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Debug.Log((object)string.Format("[{0}][Card] {1} has been added to player {2}.", "LMB", ((CustomCard)this).GetTitle(), player.playerID));
			InputListener inputListener = ((Component)player).gameObject.GetComponent<InputListener>();
			if (!Object.op_Implicit((Object)(object)inputListener))
			{
				inputListener = ((Component)player).gameObject.AddComponent<InputListener>();
			}
			inputListener.playTheMan = true;
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Debug.Log((object)string.Format("[{0}][Card] {1} has been removed from player {2}.", "LMB", ((CustomCard)this).GetTitle(), player.playerID));
		}

		protected override string GetTitle()
		{
			return "Play The Man";
		}

		protected override string GetDescription()
		{
			return "Not the ball.\n\nShoot while reloading\nto slide tackle.";
		}

		protected override GameObject GetCardArt()
		{
			return Assets.playTheManArt;
		}

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

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

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

		public override string GetModName()
		{
			return "LMB";
		}
	}
	internal class StickyBomb : CustomCard
	{
		private static int cardNum;

		private GameObject? stickyBombBullet;

		private StickyBombBulletHitEffect? hitEffect;

		public void Start()
		{
			stickyBombBullet = Assets.stickyBombBullet;
			((Object)stickyBombBullet).name = ((Object)stickyBombBullet).name + cardNum;
			PhotonNetwork.PrefabPool.RegisterPrefab(((Object)stickyBombBullet).name, stickyBombBullet);
			hitEffect = stickyBombBullet.GetComponent<StickyBombBulletHitEffect>();
			if (!Object.op_Implicit((Object)(object)hitEffect))
			{
				hitEffect = stickyBombBullet.AddComponent<StickyBombBulletHitEffect>();
			}
			hitEffect.stickyBomb = Assets.stickyBomb;
			((Object)hitEffect.stickyBomb).name = ((Object)hitEffect.stickyBomb).name + cardNum;
			PhotonNetwork.PrefabPool.RegisterPrefab(((Object)hitEffect.stickyBomb).name, hitEffect.stickyBomb);
			if (!Object.op_Implicit((Object)(object)hitEffect.stickyBomb.GetComponent<Detonator>()))
			{
				hitEffect.stickyBomb.AddComponent<Detonator>();
			}
		}

		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
			Debug.Log((object)("[LMB][Card] " + ((CustomCard)this).GetTitle() + " has been setup."));
			cardNum++;
			cardInfo.allowMultiple = false;
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Expected O, but got Unknown
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: 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)
			Debug.Log((object)string.Format("[{0}][Card] {1} has been added to player {2}.", "LMB", ((CustomCard)this).GetTitle(), player.playerID));
			ProjectileHit component = stickyBombBullet.GetComponent<ProjectileHit>();
			component.destroyOnBlock = true;
			ProjectilesToSpawn val = new ProjectilesToSpawn();
			val.objectToSpawn = stickyBombBullet;
			ProjectilesToSpawn[] projectiles = (ProjectilesToSpawn[])(object)new ProjectilesToSpawn[1] { val };
			gun.projectiles = projectiles;
			if (!Object.op_Implicit((Object)(object)((Component)player).gameObject.GetComponent<InputListener>()))
			{
				InputListener inputListener = ((Component)player).gameObject.AddComponent<InputListener>();
			}
			Color color = (gun.projectileColor = player.GetTeamColors().color);
			hitEffect.color = color;
			hitEffect.owner = player;
			gun.projectileSize *= 3f;
			gun.damage *= 1.5f;
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Debug.Log((object)string.Format("[{0}][Card] {1} has been removed from player {2}.", "LMB", ((CustomCard)this).GetTitle(), player.playerID));
		}

		protected override string GetTitle()
		{
			return "Sticky Bomb";
		}

		protected override string GetDescription()
		{
			return "What in the butt-fuck\nmonkey shit is that?\n\nPress middle-mouse or left-stick to detonate";
		}

		protected override GameObject GetCardArt()
		{
			return Assets.stickyBombArt;
		}

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

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

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

		public override string GetModName()
		{
			return "LMB";
		}
	}
	internal class SuccGun : CustomCard
	{
		public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
		{
			Debug.Log((object)("[LMB][Card] " + ((CustomCard)this).GetTitle() + " has been setup."));
		}

		public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Debug.Log((object)string.Format("[{0}][Card] {1} has been added to player {2}.", "LMB", ((CustomCard)this).GetTitle(), player.playerID));
			if (gun.knockback < 0f)
			{
				gun.knockback *= 2f;
			}
			else
			{
				gun.knockback *= -2f;
			}
		}

		public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
		{
			Debug.Log((object)string.Format("[{0}][Card] {1} has been removed from player {2}.", "LMB", ((CustomCard)this).GetTitle(), player.playerID));
		}

		protected override string GetTitle()
		{
			return "Succ Gun";
		}

		protected override string GetDescription()
		{
			return "Joey needs you closer\nto spread the AIDS";
		}

		protected override GameObject GetCardArt()
		{
			return Assets.succGunArt;
		}

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

		protected override CardInfoStat[] GetStats()
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			return (CardInfoStat[])(object)new CardInfoStat[1]
			{
				new CardInfoStat
				{
					positive = true,
					stat = "Knockback",
					amount = "-200%",
					simepleAmount = (SimpleAmount)0
				}
			};
		}

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

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