using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using CardChoiceSpawnUniqueCardPatch.CustomCategories;
using GamblersChoice.Cards;
using GamblersChoice.Effects;
using HarmonyLib;
using UnboundLib;
using UnboundLib.Cards;
using UnboundLib.GameModes;
using UnityEngine;
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: AssemblyVersion("0.0.0.0")]
namespace GamblersChoice.Cards
{
public class AllIn : CustomCard
{
public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
{
cardInfo.categories = (CardCategory[])(object)new CardCategory[1] { GamblerCategory.Get() };
}
public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
gunAmmo.maxAmmo--;
AllInEffect orAddComponent = ExtensionMethods.GetOrAddComponent<AllInEffect>(((Component)player).gameObject, false);
orAddComponent.stacks++;
}
public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
AllInEffect component = ((Component)player).gameObject.GetComponent<AllInEffect>();
if (component != null)
{
component.stacks--;
if (component.stacks <= 0)
{
Object.Destroy((Object)(object)component);
}
}
}
protected override string GetTitle()
{
return "All In";
}
protected override string GetDescription()
{
return "Every point is a new deal. Your power is random — and so is your life.";
}
protected override GameObject GetCardArt()
{
return null;
}
protected override Rarity GetRarity()
{
return (Rarity)2;
}
protected override CardThemeColorType GetTheme()
{
return (CardThemeColorType)4;
}
public override string GetModName()
{
return "GC";
}
protected override CardInfoStat[] GetStats()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Expected O, but got Unknown
//IL_002d: 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_003c: Expected O, but got Unknown
//IL_005b: 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_0089: Unknown result type (might be due to invalid IL or missing references)
CardInfoStat[] array = new CardInfoStat[3];
CardInfoStat val = new CardInfoStat();
val.positive = true;
val.stat = "Damage";
val.amount = "Random [0.3x - 2.5x]";
val.simepleAmount = (SimpleAmount)0;
array[0] = val;
val = new CardInfoStat();
val.positive = false;
val.stat = "HP";
val.amount = "Random [0.5x - 1.5x]";
val.simepleAmount = (SimpleAmount)0;
array[1] = val;
val = new CardInfoStat();
val.positive = false;
val.stat = "Max Ammo";
val.amount = "-1";
val.simepleAmount = (SimpleAmount)0;
array[2] = val;
return (CardInfoStat[])(object)array;
}
}
public class AnteUp : CustomCard
{
public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
{
cardInfo.categories = (CardCategory[])(object)new CardCategory[1] { GamblerCategory.Get() };
}
public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
gun.damage *= 1.35f;
gun.knockback *= 1.2f;
data.maxHealth = Mathf.Max(data.maxHealth - 25f, 1f);
}
public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
}
protected override string GetTitle()
{
return "Ante Up";
}
protected override string GetDescription()
{
return "Bet your body on your bullets.";
}
protected override GameObject GetCardArt()
{
return null;
}
protected override Rarity GetRarity()
{
return (Rarity)0;
}
protected override CardThemeColorType GetTheme()
{
return (CardThemeColorType)0;
}
public override string GetModName()
{
return "GC";
}
protected override CardInfoStat[] GetStats()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Expected O, but got Unknown
//IL_002d: 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_003c: Expected O, but got Unknown
//IL_005b: 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_0089: Unknown result type (might be due to invalid IL or missing references)
CardInfoStat[] array = new CardInfoStat[3];
CardInfoStat val = new CardInfoStat();
val.positive = true;
val.stat = "Damage";
val.amount = "+35%";
val.simepleAmount = (SimpleAmount)0;
array[0] = val;
val = new CardInfoStat();
val.positive = true;
val.stat = "Knockback";
val.amount = "+20%";
val.simepleAmount = (SimpleAmount)0;
array[1] = val;
val = new CardInfoStat();
val.positive = false;
val.stat = "Max HP";
val.amount = "-25";
val.simepleAmount = (SimpleAmount)0;
array[2] = val;
return (CardInfoStat[])(object)array;
}
}
public class Bluff : CustomCard
{
public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
{
cardInfo.categories = (CardCategory[])(object)new CardCategory[1] { GamblerCategory.Get() };
}
public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
block.additionalBlocks++;
BluffEffect orAddComponent = ExtensionMethods.GetOrAddComponent<BluffEffect>(((Component)player).gameObject, false);
orAddComponent.stacks++;
}
public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
BluffEffect component = ((Component)player).gameObject.GetComponent<BluffEffect>();
if (component != null)
{
component.stacks--;
if (component.stacks <= 0)
{
Object.Destroy((Object)(object)component);
}
}
}
protected override string GetTitle()
{
return "Bluff";
}
protected override string GetDescription()
{
return "Your block cooldown is a gamble — sometimes instant, sometimes glacial.";
}
protected override GameObject GetCardArt()
{
return null;
}
protected override Rarity GetRarity()
{
return (Rarity)0;
}
protected override CardThemeColorType GetTheme()
{
return (CardThemeColorType)2;
}
public override string GetModName()
{
return "GC";
}
protected override CardInfoStat[] GetStats()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Expected O, but got Unknown
//IL_002d: 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_003c: Expected O, but got Unknown
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
CardInfoStat[] array = new CardInfoStat[2];
CardInfoStat val = new CardInfoStat();
val.positive = true;
val.stat = "Blocks";
val.amount = "+1";
val.simepleAmount = (SimpleAmount)0;
array[0] = val;
val = new CardInfoStat();
val.positive = false;
val.stat = "Block CD";
val.amount = "Random [0.2x - 2.5x]";
val.simepleAmount = (SimpleAmount)0;
array[1] = val;
return (CardInfoStat[])(object)array;
}
}
public class CardCounter : CustomCard
{
public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
{
cardInfo.categories = (CardCategory[])(object)new CardCategory[1] { GamblerCategory.Get() };
}
public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
gun.damage *= 0.9f;
CardCounterEffect orAddComponent = ExtensionMethods.GetOrAddComponent<CardCounterEffect>(((Component)player).gameObject, false);
orAddComponent.stacks++;
player.GetGamblerData().cardCounterStacks++;
}
public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
player.GetGamblerData().cardCounterStacks--;
CardCounterEffect component = ((Component)player).gameObject.GetComponent<CardCounterEffect>();
if (component != null)
{
component.stacks--;
if (component.stacks <= 0)
{
Object.Destroy((Object)(object)component);
}
}
}
protected override string GetTitle()
{
return "Card Counter";
}
protected override string GetDescription()
{
return "Count your shots. Every seventh is a guaranteed jackpot hit.";
}
protected override GameObject GetCardArt()
{
return null;
}
protected override Rarity GetRarity()
{
return (Rarity)1;
}
protected override CardThemeColorType GetTheme()
{
return (CardThemeColorType)3;
}
public override string GetModName()
{
return "GC";
}
protected override CardInfoStat[] GetStats()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Expected O, but got Unknown
//IL_002d: 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_003c: Expected O, but got Unknown
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
CardInfoStat[] array = new CardInfoStat[2];
CardInfoStat val = new CardInfoStat();
val.positive = true;
val.stat = "Crit";
val.amount = "Every 7th shot: 2.5x";
val.simepleAmount = (SimpleAmount)0;
array[0] = val;
val = new CardInfoStat();
val.positive = false;
val.stat = "Damage";
val.amount = "-10%";
val.simepleAmount = (SimpleAmount)0;
array[1] = val;
return (CardInfoStat[])(object)array;
}
}
public class CoinFlip : CustomCard
{
public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
{
cardInfo.categories = (CardCategory[])(object)new CardCategory[1] { GamblerCategory.Get() };
}
public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
CoinFlipEffect orAddComponent = ExtensionMethods.GetOrAddComponent<CoinFlipEffect>(((Component)player).gameObject, false);
orAddComponent.stacks++;
}
public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
CoinFlipEffect component = ((Component)player).gameObject.GetComponent<CoinFlipEffect>();
if (component != null)
{
component.stacks--;
if (component.stacks <= 0)
{
Object.Destroy((Object)(object)component);
}
}
}
protected override string GetTitle()
{
return "Coin Flip";
}
protected override string GetDescription()
{
return "Heads you're fast, tails you're slow. Flip each point.";
}
protected override GameObject GetCardArt()
{
return null;
}
protected override Rarity GetRarity()
{
return (Rarity)0;
}
protected override CardThemeColorType GetTheme()
{
return (CardThemeColorType)7;
}
public override string GetModName()
{
return "GC";
}
protected override CardInfoStat[] GetStats()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Expected O, but got Unknown
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
CardInfoStat[] array = new CardInfoStat[1];
CardInfoStat val = new CardInfoStat();
val.positive = true;
val.stat = "Attack Speed";
val.amount = "±30% per point";
val.simepleAmount = (SimpleAmount)0;
array[0] = val;
return (CardInfoStat[])(object)array;
}
}
public class DoubleOrNothing : CustomCard
{
private static GameObject bulletPrefab;
public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
{
cardInfo.categories = (CardCategory[])(object)new CardCategory[1] { GamblerCategory.Get() };
}
public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Expected O, but got Unknown
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Expected O, but got Unknown
gun.attackSpeed *= 1.1f;
player.GetGamblerData().doubleOrNothingStacks++;
if (bulletPrefab == null)
{
bulletPrefab = new GameObject("DoubleOrNothingBullet", new Type[1] { typeof(DoubleOrNothingEffect) });
Object.DontDestroyOnLoad((Object)(object)bulletPrefab);
}
if (player.GetGamblerData().doubleOrNothingStacks == 1)
{
List<ObjectsToSpawn> list = gun.objectsToSpawn.ToList();
ObjectsToSpawn val = new ObjectsToSpawn();
val.AddToProjectile = bulletPrefab;
list.Add(val);
gun.objectsToSpawn = list.ToArray();
}
}
public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
player.GetGamblerData().doubleOrNothingStacks--;
if (player.GetGamblerData().doubleOrNothingStacks <= 0)
{
List<ObjectsToSpawn> list = gun.objectsToSpawn.ToList();
list.RemoveAll((ObjectsToSpawn s) => s.AddToProjectile == bulletPrefab);
gun.objectsToSpawn = list.ToArray();
}
}
protected override string GetTitle()
{
return "Double or Nothing";
}
protected override string GetDescription()
{
return "Every shot's a bet. Might hit twice as hard. Might not hit at all.";
}
protected override GameObject GetCardArt()
{
return null;
}
protected override Rarity GetRarity()
{
return (Rarity)1;
}
protected override CardThemeColorType GetTheme()
{
return (CardThemeColorType)1;
}
public override string GetModName()
{
return "GC";
}
protected override CardInfoStat[] GetStats()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Expected O, but got Unknown
//IL_002d: 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_003c: Expected O, but got Unknown
//IL_005b: 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_0089: Unknown result type (might be due to invalid IL or missing references)
CardInfoStat[] array = new CardInfoStat[3];
CardInfoStat val = new CardInfoStat();
val.positive = true;
val.stat = "Double Chance";
val.amount = "35%";
val.simepleAmount = (SimpleAmount)0;
array[0] = val;
val = new CardInfoStat();
val.positive = false;
val.stat = "Nothing Chance";
val.amount = "15%";
val.simepleAmount = (SimpleAmount)0;
array[1] = val;
val = new CardInfoStat();
val.positive = false;
val.stat = "Attack Speed";
val.amount = "-10%";
val.simepleAmount = (SimpleAmount)0;
array[2] = val;
return (CardInfoStat[])(object)array;
}
}
public class HailMary : CustomCard
{
public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
{
cardInfo.categories = (CardCategory[])(object)new CardCategory[1] { GamblerCategory.Get() };
}
public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
HailMaryEffect orAddComponent = ExtensionMethods.GetOrAddComponent<HailMaryEffect>(((Component)player).gameObject, false);
orAddComponent.stacks++;
}
public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
HailMaryEffect component = ((Component)player).gameObject.GetComponent<HailMaryEffect>();
if (component != null)
{
component.stacks--;
if (component.stacks <= 0)
{
Object.Destroy((Object)(object)component);
}
}
}
protected override string GetTitle()
{
return "Hail Mary";
}
protected override string GetDescription()
{
return "The further behind you fall, the harder you hit. Desperation is fuel.";
}
protected override GameObject GetCardArt()
{
return null;
}
protected override Rarity GetRarity()
{
return (Rarity)2;
}
protected override CardThemeColorType GetTheme()
{
return (CardThemeColorType)4;
}
public override string GetModName()
{
return "GC";
}
protected override CardInfoStat[] GetStats()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Expected O, but got Unknown
//IL_002d: 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_003c: Expected O, but got Unknown
//IL_005b: 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_0089: Unknown result type (might be due to invalid IL or missing references)
CardInfoStat[] array = new CardInfoStat[3];
CardInfoStat val = new CardInfoStat();
val.positive = true;
val.stat = "Behind by 1";
val.amount = "+25% dmg, +15% AS";
val.simepleAmount = (SimpleAmount)0;
array[0] = val;
val = new CardInfoStat();
val.positive = true;
val.stat = "Behind by 3+";
val.amount = "+80% dmg, +45% AS";
val.simepleAmount = (SimpleAmount)0;
array[1] = val;
val = new CardInfoStat();
val.positive = false;
val.stat = "Tied/Ahead";
val.amount = "-10% dmg, -10% AS";
val.simepleAmount = (SimpleAmount)0;
array[2] = val;
return (CardInfoStat[])(object)array;
}
}
public class HotHand : CustomCard
{
public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
{
cardInfo.categories = (CardCategory[])(object)new CardCategory[1] { GamblerCategory.Get() };
}
public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
data.maxHealth = Mathf.Max(data.maxHealth - 15f, 1f);
HotHandEffect orAddComponent = ExtensionMethods.GetOrAddComponent<HotHandEffect>(((Component)player).gameObject, false);
orAddComponent.stacks++;
player.GetGamblerData().hotHandStacks++;
}
public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
player.GetGamblerData().hotHandStacks--;
HotHandEffect component = ((Component)player).gameObject.GetComponent<HotHandEffect>();
if (component != null)
{
component.stacks--;
if (component.stacks <= 0)
{
Object.Destroy((Object)(object)component);
}
}
}
protected override string GetTitle()
{
return "Hot Hand";
}
protected override string GetDescription()
{
return "Ride the streak. Every hit builds your fire — but a fumble burns you.";
}
protected override GameObject GetCardArt()
{
return null;
}
protected override Rarity GetRarity()
{
return (Rarity)2;
}
protected override CardThemeColorType GetTheme()
{
return (CardThemeColorType)0;
}
public override string GetModName()
{
return "GC";
}
protected override CardInfoStat[] GetStats()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Expected O, but got Unknown
//IL_002d: 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_003c: Expected O, but got Unknown
//IL_005b: 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_0089: Unknown result type (might be due to invalid IL or missing references)
CardInfoStat[] array = new CardInfoStat[3];
CardInfoStat val = new CardInfoStat();
val.positive = true;
val.stat = "Streak Damage";
val.amount = "+20% per hit";
val.simepleAmount = (SimpleAmount)0;
array[0] = val;
val = new CardInfoStat();
val.positive = false;
val.stat = "Fumble Chance";
val.amount = "15%";
val.simepleAmount = (SimpleAmount)0;
array[1] = val;
val = new CardInfoStat();
val.positive = false;
val.stat = "Max HP";
val.amount = "-15";
val.simepleAmount = (SimpleAmount)0;
array[2] = val;
return (CardInfoStat[])(object)array;
}
}
public class HouseEdge : CustomCard
{
public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
{
cardInfo.categories = (CardCategory[])(object)new CardCategory[1] { GamblerCategory.Get() };
}
public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
block.cdMultiplier *= 0.85f;
gun.damage *= 0.85f;
data.maxHealth = Mathf.Max(data.maxHealth - 20f, 1f);
HouseEdgeEffect orAddComponent = ExtensionMethods.GetOrAddComponent<HouseEdgeEffect>(((Component)player).gameObject, false);
orAddComponent.stacks++;
}
public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
HouseEdgeEffect component = ((Component)player).gameObject.GetComponent<HouseEdgeEffect>();
if (component != null)
{
component.stacks--;
if (component.stacks <= 0)
{
Object.Destroy((Object)(object)component);
}
}
}
protected override string GetTitle()
{
return "House Edge";
}
protected override string GetDescription()
{
return "Block at the right moment and send their damage right back — with interest.";
}
protected override GameObject GetCardArt()
{
return null;
}
protected override Rarity GetRarity()
{
return (Rarity)2;
}
protected override CardThemeColorType GetTheme()
{
return (CardThemeColorType)4;
}
public override string GetModName()
{
return "GC";
}
protected override CardInfoStat[] GetStats()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Expected O, but got Unknown
//IL_002d: 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_003c: Expected O, but got Unknown
//IL_005b: 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_0089: 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_0098: Expected O, but got Unknown
//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
CardInfoStat[] array = new CardInfoStat[4];
CardInfoStat val = new CardInfoStat();
val.positive = true;
val.stat = "Reflect on Block";
val.amount = "30% chance";
val.simepleAmount = (SimpleAmount)0;
array[0] = val;
val = new CardInfoStat();
val.positive = true;
val.stat = "Block CD";
val.amount = "-15%";
val.simepleAmount = (SimpleAmount)0;
array[1] = val;
val = new CardInfoStat();
val.positive = false;
val.stat = "Damage";
val.amount = "-15%";
val.simepleAmount = (SimpleAmount)0;
array[2] = val;
val = new CardInfoStat();
val.positive = false;
val.stat = "Max HP";
val.amount = "-20";
val.simepleAmount = (SimpleAmount)0;
array[3] = val;
return (CardInfoStat[])(object)array;
}
}
public class Jackpot : CustomCard
{
public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
{
cardInfo.categories = (CardCategory[])(object)new CardCategory[1] { GamblerCategory.Get() };
}
public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
gun.attackSpeed *= 1.15f;
data.maxHealth = Mathf.Max(data.maxHealth - 15f, 1f);
JackpotEffect orAddComponent = ExtensionMethods.GetOrAddComponent<JackpotEffect>(((Component)player).gameObject, false);
orAddComponent.stacks++;
player.GetGamblerData().jackpotStacks++;
}
public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
player.GetGamblerData().jackpotStacks--;
JackpotEffect component = ((Component)player).gameObject.GetComponent<JackpotEffect>();
if (component != null)
{
component.stacks--;
if (component.stacks <= 0)
{
Object.Destroy((Object)(object)component);
}
}
}
protected override string GetTitle()
{
return "Jackpot";
}
protected override string GetDescription()
{
return "Kill an enemy and pray for the big payout — a full heal.";
}
protected override GameObject GetCardArt()
{
return null;
}
protected override Rarity GetRarity()
{
return (Rarity)1;
}
protected override CardThemeColorType GetTheme()
{
return (CardThemeColorType)8;
}
public override string GetModName()
{
return "GC";
}
protected override CardInfoStat[] GetStats()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Expected O, but got Unknown
//IL_002d: 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_003c: Expected O, but got Unknown
//IL_005b: 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_0089: Unknown result type (might be due to invalid IL or missing references)
CardInfoStat[] array = new CardInfoStat[3];
CardInfoStat val = new CardInfoStat();
val.positive = true;
val.stat = "Full Heal on Kill";
val.amount = "25% chance";
val.simepleAmount = (SimpleAmount)0;
array[0] = val;
val = new CardInfoStat();
val.positive = false;
val.stat = "Attack Speed";
val.amount = "-15%";
val.simepleAmount = (SimpleAmount)0;
array[1] = val;
val = new CardInfoStat();
val.positive = false;
val.stat = "Max HP";
val.amount = "-15";
val.simepleAmount = (SimpleAmount)0;
array[2] = val;
return (CardInfoStat[])(object)array;
}
}
public class LoadedDice : CustomCard
{
private static GameObject bulletPrefab;
public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
{
cardInfo.categories = (CardCategory[])(object)new CardCategory[1] { GamblerCategory.Get() };
}
public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Expected O, but got Unknown
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Expected O, but got Unknown
player.GetGamblerData().loadedDiceStacks++;
if (bulletPrefab == null)
{
bulletPrefab = new GameObject("LoadedDiceBullet", new Type[1] { typeof(LoadedDiceEffect) });
Object.DontDestroyOnLoad((Object)(object)bulletPrefab);
}
if (player.GetGamblerData().loadedDiceStacks == 1)
{
List<ObjectsToSpawn> list = gun.objectsToSpawn.ToList();
ObjectsToSpawn val = new ObjectsToSpawn();
val.AddToProjectile = bulletPrefab;
list.Add(val);
gun.objectsToSpawn = list.ToArray();
}
}
public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
player.GetGamblerData().loadedDiceStacks--;
if (player.GetGamblerData().loadedDiceStacks <= 0)
{
List<ObjectsToSpawn> list = gun.objectsToSpawn.ToList();
list.RemoveAll((ObjectsToSpawn s) => s.AddToProjectile == bulletPrefab);
gun.objectsToSpawn = list.ToArray();
}
}
protected override string GetTitle()
{
return "Loaded Dice";
}
protected override string GetDescription()
{
return "Each bullet deals random damage — sometimes pitiful, sometimes devastating.";
}
protected override GameObject GetCardArt()
{
return null;
}
protected override Rarity GetRarity()
{
return (Rarity)0;
}
protected override CardThemeColorType GetTheme()
{
return (CardThemeColorType)1;
}
public override string GetModName()
{
return "GC";
}
protected override CardInfoStat[] GetStats()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Expected O, but got Unknown
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
CardInfoStat[] array = new CardInfoStat[1];
CardInfoStat val = new CardInfoStat();
val.positive = true;
val.stat = "Damage";
val.amount = "Random [0.5x - 1.5x]";
val.simepleAmount = (SimpleAmount)0;
array[0] = val;
return (CardInfoStat[])(object)array;
}
}
public class LuckyPenny : CustomCard
{
public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
{
cardInfo.categories = (CardCategory[])(object)new CardCategory[1] { GamblerCategory.Get() };
}
public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
player.GetGamblerData().luck += 0.15f;
data.maxHealth += 15f;
}
public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
player.GetGamblerData().luck -= 0.15f;
data.maxHealth = Mathf.Max(data.maxHealth - 15f, 1f);
}
protected override string GetTitle()
{
return "Lucky Penny";
}
protected override string GetDescription()
{
return "A small charm that tips the odds in your favor.";
}
protected override GameObject GetCardArt()
{
return null;
}
protected override Rarity GetRarity()
{
return (Rarity)0;
}
protected override CardThemeColorType GetTheme()
{
return (CardThemeColorType)8;
}
public override string GetModName()
{
return "GC";
}
protected override CardInfoStat[] GetStats()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Expected O, but got Unknown
//IL_002d: 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_003c: Expected O, but got Unknown
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
CardInfoStat[] array = new CardInfoStat[2];
CardInfoStat val = new CardInfoStat();
val.positive = true;
val.stat = "Max HP";
val.amount = "+15";
val.simepleAmount = (SimpleAmount)0;
array[0] = val;
val = new CardInfoStat();
val.positive = true;
val.stat = "Luck";
val.amount = "+0.15";
val.simepleAmount = (SimpleAmount)0;
array[1] = val;
return (CardInfoStat[])(object)array;
}
}
public class RicochetRoulette : CustomCard
{
private static GameObject bulletPrefab;
public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
{
cardInfo.categories = (CardCategory[])(object)new CardCategory[1] { GamblerCategory.Get() };
}
public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Expected O, but got Unknown
//IL_0076: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Expected O, but got Unknown
gun.projectileSpeed *= 1.15f;
GamblerData gamblerData = player.GetGamblerData();
gamblerData.ricochetStacks++;
if (bulletPrefab == null)
{
bulletPrefab = new GameObject("RicochetRouletteBullet", new Type[1] { typeof(RicochetRouletteEffect) });
Object.DontDestroyOnLoad((Object)(object)bulletPrefab);
}
if (gamblerData.ricochetStacks == 1)
{
List<ObjectsToSpawn> list = gun.objectsToSpawn.ToList();
ObjectsToSpawn val = new ObjectsToSpawn();
val.AddToProjectile = bulletPrefab;
list.Add(val);
gun.objectsToSpawn = list.ToArray();
}
}
public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
GamblerData gamblerData = player.GetGamblerData();
gamblerData.ricochetStacks--;
if (gamblerData.ricochetStacks <= 0)
{
List<ObjectsToSpawn> list = gun.objectsToSpawn.ToList();
list.RemoveAll((ObjectsToSpawn s) => s.AddToProjectile == bulletPrefab);
gun.objectsToSpawn = list.ToArray();
}
}
protected override string GetTitle()
{
return "Ricochet Roulette";
}
protected override string GetDescription()
{
return "Your bullets bounce off walls — sometimes once, sometimes a dozen times.";
}
protected override GameObject GetCardArt()
{
return null;
}
protected override Rarity GetRarity()
{
return (Rarity)0;
}
protected override CardThemeColorType GetTheme()
{
return (CardThemeColorType)3;
}
public override string GetModName()
{
return "GC";
}
protected override CardInfoStat[] GetStats()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Expected O, but got Unknown
//IL_002d: 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_003c: Expected O, but got Unknown
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
CardInfoStat[] array = new CardInfoStat[2];
CardInfoStat val = new CardInfoStat();
val.positive = true;
val.stat = "Bounces";
val.amount = "Random [0-4]";
val.simepleAmount = (SimpleAmount)0;
array[0] = val;
val = new CardInfoStat();
val.positive = true;
val.stat = "Bullet Speed";
val.amount = "+15%";
val.simepleAmount = (SimpleAmount)0;
array[1] = val;
return (CardInfoStat[])(object)array;
}
}
public class ShellGame : CustomCard
{
public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
{
cardInfo.categories = (CardCategory[])(object)new CardCategory[1] { GamblerCategory.Get() };
}
public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
data.maxHealth = Mathf.Max(data.maxHealth - 10f, 1f);
ShellGameEffect orAddComponent = ExtensionMethods.GetOrAddComponent<ShellGameEffect>(((Component)player).gameObject, false);
orAddComponent.stacks++;
}
public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
ShellGameEffect component = ((Component)player).gameObject.GetComponent<ShellGameEffect>();
if (component != null)
{
component.stacks--;
if (component.stacks <= 0)
{
Object.Destroy((Object)(object)component);
}
}
}
protected override string GetTitle()
{
return "Shell Game";
}
protected override string GetDescription()
{
return "Block and spin the wheel — every block triggers a random bonus.";
}
protected override GameObject GetCardArt()
{
return null;
}
protected override Rarity GetRarity()
{
return (Rarity)1;
}
protected override CardThemeColorType GetTheme()
{
return (CardThemeColorType)8;
}
public override string GetModName()
{
return "GC";
}
protected override CardInfoStat[] GetStats()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Expected O, but got Unknown
//IL_002d: 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_003c: Expected O, but got Unknown
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
CardInfoStat[] array = new CardInfoStat[2];
CardInfoStat val = new CardInfoStat();
val.positive = true;
val.stat = "On Block";
val.amount = "Random effect";
val.simepleAmount = (SimpleAmount)0;
array[0] = val;
val = new CardInfoStat();
val.positive = false;
val.stat = "Max HP";
val.amount = "-10";
val.simepleAmount = (SimpleAmount)0;
array[1] = val;
return (CardInfoStat[])(object)array;
}
}
public class SnakeEyes : CustomCard
{
private static GameObject dudPrefab;
public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
{
cardInfo.categories = (CardCategory[])(object)new CardCategory[1] { GamblerCategory.Get() };
}
public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Expected O, but got Unknown
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Expected O, but got Unknown
gunAmmo.maxAmmo += 3;
player.GetGamblerData().snakeEyesStacks++;
if (dudPrefab == null)
{
dudPrefab = new GameObject("SnakeEyesDud", new Type[1] { typeof(SnakeEyesDudEffect) });
Object.DontDestroyOnLoad((Object)(object)dudPrefab);
}
if (player.GetGamblerData().snakeEyesStacks == 1)
{
List<ObjectsToSpawn> list = gun.objectsToSpawn.ToList();
ObjectsToSpawn val = new ObjectsToSpawn();
val.AddToProjectile = dudPrefab;
list.Add(val);
gun.objectsToSpawn = list.ToArray();
}
}
public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
player.GetGamblerData().snakeEyesStacks--;
if (player.GetGamblerData().snakeEyesStacks <= 0)
{
List<ObjectsToSpawn> list = gun.objectsToSpawn.ToList();
list.RemoveAll((ObjectsToSpawn s) => s.AddToProjectile == dudPrefab);
gun.objectsToSpawn = list.ToArray();
}
}
protected override string GetTitle()
{
return "Snake Eyes";
}
protected override string GetDescription()
{
return "More ammo, but some rounds are blanks.";
}
protected override GameObject GetCardArt()
{
return null;
}
protected override Rarity GetRarity()
{
return (Rarity)0;
}
protected override CardThemeColorType GetTheme()
{
return (CardThemeColorType)3;
}
public override string GetModName()
{
return "GC";
}
protected override CardInfoStat[] GetStats()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Expected O, but got Unknown
//IL_002d: 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_003c: Expected O, but got Unknown
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
CardInfoStat[] array = new CardInfoStat[2];
CardInfoStat val = new CardInfoStat();
val.positive = true;
val.stat = "Max Ammo";
val.amount = "+3";
val.simepleAmount = (SimpleAmount)0;
array[0] = val;
val = new CardInfoStat();
val.positive = false;
val.stat = "Dud Chance";
val.amount = "20%";
val.simepleAmount = (SimpleAmount)0;
array[1] = val;
return (CardInfoStat[])(object)array;
}
}
public class WildCard : CustomCard
{
public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
{
cardInfo.categories = (CardCategory[])(object)new CardCategory[1] { GamblerCategory.Get() };
}
public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
gun.damage *= 0.8f;
gun.spread += 0.1f;
WildCardEffect orAddComponent = ExtensionMethods.GetOrAddComponent<WildCardEffect>(((Component)player).gameObject, false);
orAddComponent.stacks++;
}
public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
WildCardEffect component = ((Component)player).gameObject.GetComponent<WildCardEffect>();
if (component != null)
{
component.stacks--;
if (component.stacks <= 0)
{
Object.Destroy((Object)(object)component);
}
}
}
protected override string GetTitle()
{
return "Wild Card";
}
protected override string GetDescription()
{
return "Every trigger pull is a surprise — you never know how many bullets come out.";
}
protected override GameObject GetCardArt()
{
return null;
}
protected override Rarity GetRarity()
{
return (Rarity)1;
}
protected override CardThemeColorType GetTheme()
{
return (CardThemeColorType)1;
}
public override string GetModName()
{
return "GC";
}
protected override CardInfoStat[] GetStats()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Expected O, but got Unknown
//IL_002d: 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_003c: Expected O, but got Unknown
//IL_005b: 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_0089: Unknown result type (might be due to invalid IL or missing references)
CardInfoStat[] array = new CardInfoStat[3];
CardInfoStat val = new CardInfoStat();
val.positive = true;
val.stat = "Extra Projectiles";
val.amount = "0-3 random";
val.simepleAmount = (SimpleAmount)0;
array[0] = val;
val = new CardInfoStat();
val.positive = false;
val.stat = "Damage";
val.amount = "-20%";
val.simepleAmount = (SimpleAmount)0;
array[1] = val;
val = new CardInfoStat();
val.positive = false;
val.stat = "Spread";
val.amount = "+0.1";
val.simepleAmount = (SimpleAmount)0;
array[2] = val;
return (CardInfoStat[])(object)array;
}
}
public class WinningStreak : CustomCard
{
public override void SetupCard(CardInfo cardInfo, Gun gun, ApplyCardStats cardStats, CharacterStatModifiers statModifiers, Block block)
{
cardInfo.categories = (CardCategory[])(object)new CardCategory[1] { GamblerCategory.Get() };
}
public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
WinningStreakEffect orAddComponent = ExtensionMethods.GetOrAddComponent<WinningStreakEffect>(((Component)player).gameObject, false);
orAddComponent.stacks++;
}
public override void OnRemoveCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers characterStats)
{
WinningStreakEffect component = ((Component)player).gameObject.GetComponent<WinningStreakEffect>();
if (component != null)
{
component.stacks--;
if (component.stacks <= 0)
{
Object.Destroy((Object)(object)component);
}
}
}
protected override string GetTitle()
{
return "Winning Streak";
}
protected override string GetDescription()
{
return "Keep winning and the house pays out bigger. Lose and pay the tilt tax.";
}
protected override GameObject GetCardArt()
{
return null;
}
protected override Rarity GetRarity()
{
return (Rarity)1;
}
protected override CardThemeColorType GetTheme()
{
return (CardThemeColorType)0;
}
public override string GetModName()
{
return "GC";
}
protected override CardInfoStat[] GetStats()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Expected O, but got Unknown
//IL_002d: 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_003c: Expected O, but got Unknown
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
CardInfoStat[] array = new CardInfoStat[2];
CardInfoStat val = new CardInfoStat();
val.positive = true;
val.stat = "Per Win";
val.amount = "+15% dmg, +8% speed";
val.simepleAmount = (SimpleAmount)0;
array[0] = val;
val = new CardInfoStat();
val.positive = false;
val.stat = "On Loss";
val.amount = "-10% dmg (tilt)";
val.simepleAmount = (SimpleAmount)0;
array[1] = val;
return (CardInfoStat[])(object)array;
}
}
}
namespace GamblersChoice.Effects
{
public class AllInEffect : MonoBehaviour
{
public int stacks;
private Player player;
private Gun gun;
private float appliedDamageMult = 1f;
private float appliedHpMult = 1f;
private void Start()
{
player = ((Component)this).GetComponent<Player>();
gun = ((Component)player).GetComponent<Gun>();
GameModeManager.AddHook("PointStart", (Func<IGameModeHandler, IEnumerator>)OnPointStart);
GameModeManager.AddHook("PointEnd", (Func<IGameModeHandler, IEnumerator>)OnPointEnd);
}
private IEnumerator OnPointStart(IGameModeHandler gm)
{
if (player != null && gun != null)
{
float luck = player.GetLuck();
float num = 0.3f + luck * 1f;
float num2 = 2.5f + (float)(stacks - 1) * 1f;
appliedDamageMult = Random.Range(num, num2);
float num3 = 0.5f - (float)(stacks - 1) * 0.15f + luck * 0.5f;
num3 = Mathf.Max(num3, 0.2f);
float num4 = 1.5f + (float)(stacks - 1) * 0.25f;
appliedHpMult = Random.Range(num3, num4);
Gun obj = gun;
obj.damage *= appliedDamageMult;
float maxHealth = player.data.maxHealth;
CharacterData data = player.data;
data.maxHealth *= appliedHpMult;
if (maxHealth > 0f)
{
player.data.health = player.data.health * player.data.maxHealth / maxHealth;
}
}
yield break;
}
private IEnumerator OnPointEnd(IGameModeHandler gm)
{
if (gun != null && appliedDamageMult != 1f)
{
Gun obj = gun;
obj.damage /= appliedDamageMult;
appliedDamageMult = 1f;
}
if (player != null && player.data != null && appliedHpMult != 1f)
{
float maxHealth = player.data.maxHealth;
CharacterData data = player.data;
data.maxHealth /= appliedHpMult;
if (maxHealth > 0f)
{
player.data.health = player.data.health * player.data.maxHealth / maxHealth;
}
appliedHpMult = 1f;
}
yield break;
}
private void OnDestroy()
{
GameModeManager.RemoveHook("PointStart", (Func<IGameModeHandler, IEnumerator>)OnPointStart);
GameModeManager.RemoveHook("PointEnd", (Func<IGameModeHandler, IEnumerator>)OnPointEnd);
}
}
public class BluffEffect : MonoBehaviour
{
public int stacks;
private Player player;
private Block block;
private Action<BlockTriggerType> blockAction;
private void Start()
{
player = ((Component)this).GetComponent<Player>();
block = ((Component)this).GetComponent<Block>();
blockAction = OnBlock;
block.BlockAction = (Action<BlockTriggerType>)Delegate.Combine(block.BlockAction, blockAction);
}
private void OnBlock(BlockTriggerType trigger)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
if ((int)trigger == 0 && player != null && block != null)
{
float luck = player.GetLuck();
float num = Mathf.Max(0.2f - (float)(stacks - 1) * 0.05f, 0.05f);
float num2 = 2.5f - (float)(stacks - 1) * 0.3f;
num2 = Mathf.Max(num2 - luck * 2f, num + 0.2f);
float num3 = GamblerRNG.Range(num, num2, 0f);
num3 = Mathf.Max(num3, 0.05f);
player.GetGamblerData().pendingBlockCdMult = num3;
}
}
private void OnDestroy()
{
if (block != null)
{
block.BlockAction = (Action<BlockTriggerType>)Delegate.Remove(block.BlockAction, blockAction);
}
}
}
public class CardCounterEffect : MonoBehaviour
{
public int stacks;
private Player player;
public bool nextShotIsCrit;
private void Start()
{
player = ((Component)this).GetComponent<Player>();
GameModeManager.AddHook("GameStart", (Func<IGameModeHandler, IEnumerator>)OnGameStart);
}
public int GetCritInterval()
{
return Mathf.Max(7 - (stacks - 1) * 2, 3);
}
public void IncrementCounter()
{
GamblerData gamblerData = player.GetGamblerData();
gamblerData.shotCounter++;
int critInterval = GetCritInterval();
if (gamblerData.shotCounter >= critInterval)
{
gamblerData.shotCounter = 0;
nextShotIsCrit = true;
}
}
public float ConsumeCrit()
{
if (nextShotIsCrit)
{
nextShotIsCrit = false;
return 2.5f;
}
return 1f;
}
private IEnumerator OnGameStart(IGameModeHandler gm)
{
if (player != null)
{
player.GetGamblerData().shotCounter = 0;
}
nextShotIsCrit = false;
yield break;
}
private void OnDestroy()
{
GameModeManager.RemoveHook("GameStart", (Func<IGameModeHandler, IEnumerator>)OnGameStart);
}
}
public class CoinFlipEffect : MonoBehaviour
{
public int stacks;
private Player player;
private Gun gun;
private float appliedMultiplier = 1f;
private void Start()
{
player = ((Component)this).GetComponent<Player>();
gun = ((Component)player).GetComponent<Gun>();
GameModeManager.AddHook("PointStart", (Func<IGameModeHandler, IEnumerator>)OnPointStart);
GameModeManager.AddHook("PointEnd", (Func<IGameModeHandler, IEnumerator>)OnPointEnd);
}
private IEnumerator OnPointStart(IGameModeHandler gm)
{
if (player != null && gun != null)
{
float luck = player.GetLuck();
bool flag = GamblerRNG.CoinFlip(0.5f, luck);
float num = 0.1f + (float)stacks * 0.2f;
if (flag)
{
appliedMultiplier = 1f - num;
}
else
{
appliedMultiplier = 1f + num;
}
Gun obj = gun;
obj.attackSpeed *= appliedMultiplier;
}
yield break;
}
private IEnumerator OnPointEnd(IGameModeHandler gm)
{
if (gun != null && appliedMultiplier != 1f)
{
Gun obj = gun;
obj.attackSpeed /= appliedMultiplier;
appliedMultiplier = 1f;
}
yield break;
}
private void OnDestroy()
{
GameModeManager.RemoveHook("PointStart", (Func<IGameModeHandler, IEnumerator>)OnPointStart);
GameModeManager.RemoveHook("PointEnd", (Func<IGameModeHandler, IEnumerator>)OnPointEnd);
}
}
public class DoubleOrNothingEffect : RayHitEffect
{
public override HasToReturn DoHitEffect(HitInfo hit)
{
if (hit.transform != null)
{
Player component = ((Component)hit.transform).GetComponent<Player>();
if (component != null)
{
ProjectileHit componentInParent = ((Component)this).GetComponentInParent<ProjectileHit>();
if (componentInParent != null)
{
Player ownPlayer = componentInParent.ownPlayer;
if (ownPlayer != null)
{
GamblerData gamblerData = ownPlayer.GetGamblerData();
int doubleOrNothingStacks = gamblerData.doubleOrNothingStacks;
if (doubleOrNothingStacks > 0)
{
float luck = ownPlayer.GetLuck();
float num = 0.35f + (float)(doubleOrNothingStacks - 1) * 0.1f + luck * 0.15f;
float num2 = Mathf.Max(0.15f + (float)(doubleOrNothingStacks - 1) * 0.05f - luck * 0.15f, 0.03f);
float num3 = Mathf.Max(1f - num - num2, 0f);
float[] weights = new float[3] { num, num2, num3 };
switch (GamblerRNG.WeightedRoll(weights, 0f))
{
case 0:
componentInParent.damage *= 2f;
break;
case 1:
componentInParent.damage = 0f;
break;
}
return (HasToReturn)1;
}
return (HasToReturn)1;
}
return (HasToReturn)1;
}
return (HasToReturn)1;
}
return (HasToReturn)1;
}
return (HasToReturn)1;
}
}
public class HailMaryEffect : MonoBehaviour
{
public int stacks;
private Player player;
private Gun gun;
private Block block;
private CharacterStatModifiers stats;
private float appliedDamageMult = 1f;
private float appliedAtkMult = 1f;
private float appliedHpBonus;
private int appliedBlockCharges;
private int appliedJumps;
private void Start()
{
player = ((Component)this).GetComponent<Player>();
gun = ((Component)this).GetComponent<Gun>();
block = ((Component)this).GetComponent<Block>();
stats = ((Component)this).GetComponent<CharacterStatModifiers>();
GameModeManager.AddHook("PointStart", (Func<IGameModeHandler, IEnumerator>)OnPointStart);
GameModeManager.AddHook("PointEnd", (Func<IGameModeHandler, IEnumerator>)OnPointEnd);
}
private IEnumerator OnPointStart(IGameModeHandler gm)
{
if (player == null || gun == null)
{
yield break;
}
int deficit = GetDeficit();
float luck = player.GetLuck();
float num = 1f + (float)(stacks - 1) * 0.4f;
if (deficit <= 0)
{
appliedDamageMult = 1f - 0.1f * num;
appliedAtkMult = 1f + 0.1f * num;
appliedHpBonus = 0f;
appliedBlockCharges = 0;
appliedJumps = 0;
}
else
{
int num2 = Mathf.Min(deficit, 3);
float num3 = ((num2 != 1) ? 0f : (luck * 0.25f));
float num4;
float num5;
float num6;
switch (num2)
{
case 1:
num4 = 0.25f + num3;
num5 = 0.15f;
num6 = 20f;
appliedBlockCharges = 0;
appliedJumps = 0;
break;
case 2:
num4 = 0.5f;
num5 = 0.3f;
num6 = 40f;
appliedBlockCharges = 1;
appliedJumps = 0;
break;
default:
num4 = 0.8f;
num5 = 0.45f;
num6 = 60f;
appliedBlockCharges = 1;
appliedJumps = 1;
break;
}
appliedDamageMult = 1f + num4 * num;
appliedAtkMult = 1f / (1f + num5 * num);
appliedHpBonus = num6 * num;
}
Gun obj = gun;
obj.damage *= appliedDamageMult;
Gun obj2 = gun;
obj2.attackSpeed *= appliedAtkMult;
if (appliedHpBonus > 0f)
{
CharacterData data = player.data;
data.maxHealth += appliedHpBonus;
CharacterData data2 = player.data;
data2.health += appliedHpBonus;
}
if (appliedBlockCharges > 0 && block != null)
{
Block obj3 = block;
obj3.additionalBlocks += appliedBlockCharges;
}
if (appliedJumps > 0)
{
CharacterData data3 = player.data;
data3.jumps += appliedJumps;
}
}
private IEnumerator OnPointEnd(IGameModeHandler gm)
{
RevertBuffs();
yield break;
}
private void RevertBuffs()
{
if (gun != null)
{
if (appliedDamageMult != 1f)
{
Gun obj = gun;
obj.damage /= appliedDamageMult;
}
if (appliedAtkMult != 1f)
{
Gun obj2 = gun;
obj2.attackSpeed /= appliedAtkMult;
}
}
if (player != null && player.data != null && appliedHpBonus > 0f)
{
player.data.maxHealth = Mathf.Max(player.data.maxHealth - appliedHpBonus, 1f);
player.data.health = Mathf.Min(player.data.health, player.data.maxHealth);
}
if (block != null && appliedBlockCharges > 0)
{
Block obj3 = block;
obj3.additionalBlocks -= appliedBlockCharges;
}
if (player != null && player.data != null && appliedJumps > 0)
{
CharacterData data = player.data;
data.jumps -= appliedJumps;
}
appliedDamageMult = 1f;
appliedAtkMult = 1f;
appliedHpBonus = 0f;
appliedBlockCharges = 0;
appliedJumps = 0;
}
private int GetDeficit()
{
if (player == null)
{
return 0;
}
GM_ArmsRace val = Object.FindObjectOfType<GM_ArmsRace>();
if (val == null)
{
return 0;
}
int num = ((player.teamID != 0) ? val.p2Rounds : val.p1Rounds);
int num2 = ((player.teamID != 0) ? val.p1Rounds : val.p2Rounds);
return num2 - num;
}
private void OnDestroy()
{
RevertBuffs();
GameModeManager.RemoveHook("PointStart", (Func<IGameModeHandler, IEnumerator>)OnPointStart);
GameModeManager.RemoveHook("PointEnd", (Func<IGameModeHandler, IEnumerator>)OnPointEnd);
}
}
public class HotHandEffect : MonoBehaviour
{
public int stacks;
private Player player;
private void Start()
{
player = ((Component)this).GetComponent<Player>();
}
private void Update()
{
if (player != null)
{
GamblerData gamblerData = player.GetGamblerData();
if (gamblerData.streakStacks > 0 && Time.time - gamblerData.lastHitTime > 2f)
{
gamblerData.streakStacks = 0;
}
}
}
public int GetMaxStacks()
{
return 5 + (stacks - 1) * 2;
}
public float GetDamagePerStack()
{
return 0.2f + (float)(stacks - 1) * 0.05f;
}
public float GetDamageMultiplier()
{
GamblerData gamblerData = player.GetGamblerData();
return 1f + (float)gamblerData.streakStacks * GetDamagePerStack();
}
public void OnHitEnemy()
{
if (player == null)
{
return;
}
GamblerData gamblerData = player.GetGamblerData();
float luck = player.GetLuck();
if (Time.time - gamblerData.lastHitTime <= 1.5f && gamblerData.streakStacks > 0)
{
int maxStacks = GetMaxStacks();
if (gamblerData.streakStacks < maxStacks)
{
gamblerData.streakStacks++;
}
if (GamblerRNG.FumbleCheck(0.15f, luck))
{
float num = 5f * (float)gamblerData.streakStacks;
gamblerData.streakStacks = 0;
CharacterData data = player.data;
data.health -= num;
}
}
else
{
gamblerData.streakStacks = 1;
}
gamblerData.lastHitTime = Time.time;
}
public void OnTakeDamage()
{
if (player != null)
{
player.GetGamblerData().streakStacks = 0;
}
}
private void OnDestroy()
{
}
}
public class HouseEdgeEffect : MonoBehaviour
{
private struct DamageEntry
{
public float amount;
public float time;
public Player attacker;
}
public int stacks;
private Player player;
private Block block;
private Action<BlockTriggerType> blockAction;
private List<DamageEntry> damageLog = new List<DamageEntry>();
private const float WINDOW = 2f;
private void Start()
{
player = ((Component)this).GetComponent<Player>();
block = ((Component)this).GetComponent<Block>();
blockAction = OnBlock;
block.BlockAction = (Action<BlockTriggerType>)Delegate.Combine(block.BlockAction, blockAction);
}
private void Update()
{
float cutoff = Time.time - 2f;
damageLog.RemoveAll((DamageEntry e) => e.time < cutoff);
}
public void LogDamage(float amount, Player attacker)
{
if (attacker != null && attacker != player)
{
damageLog.Add(new DamageEntry
{
amount = amount,
time = Time.time,
attacker = attacker
});
}
}
private void OnBlock(BlockTriggerType trigger)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
if ((int)trigger != 0 || player == null || damageLog.Count == 0)
{
return;
}
float luck = player.GetLuck();
float num = 0.3f + luck * 0.3f;
num = Mathf.Min(num, 0.75f);
if (!(Random.Range(0f, 1f) >= num))
{
float num2 = 0f;
Player val = null;
for (int i = 0; i < damageLog.Count; i++)
{
num2 += damageLog[i].amount;
val = damageLog[i].attacker;
}
if (val != null)
{
float num3 = 0.5f + (float)stacks * 0.5f;
float num4 = num2 * num3;
CharacterData data = val.data;
data.health -= num4;
damageLog.Clear();
}
}
}
private void OnDestroy()
{
if (block != null)
{
block.BlockAction = (Action<BlockTriggerType>)Delegate.Remove(block.BlockAction, blockAction);
}
}
}
public class JackpotEffect : MonoBehaviour
{
public int stacks;
private Player player;
private void Start()
{
player = ((Component)this).GetComponent<Player>();
}
public void OnKill()
{
if (player != null && stacks > 0)
{
float luck = player.GetLuck();
float num = 0.25f + (float)(stacks - 1) * 0.15f + luck * 0.3f;
num = Mathf.Min(num, 0.7f);
if (Random.Range(0f, 1f) < num)
{
player.data.healthHandler.Heal(player.data.maxHealth);
}
}
}
private void OnDestroy()
{
}
}
public class LoadedDiceEffect : RayHitEffect
{
public override HasToReturn DoHitEffect(HitInfo hit)
{
if (hit.transform != null)
{
Player component = ((Component)hit.transform).GetComponent<Player>();
if (component != null)
{
ProjectileHit componentInParent = ((Component)this).GetComponentInParent<ProjectileHit>();
if (componentInParent != null)
{
Player ownPlayer = componentInParent.ownPlayer;
if (ownPlayer != null)
{
GamblerData gamblerData = ownPlayer.GetGamblerData();
int loadedDiceStacks = gamblerData.loadedDiceStacks;
if (loadedDiceStacks > 0)
{
float luck = ownPlayer.GetLuck();
float num = 0.5f - (float)(loadedDiceStacks - 1) * 0.25f;
float max = 1.5f + (float)(loadedDiceStacks - 1) * 0.25f;
num = Mathf.Max(num, 0f);
float num2 = GamblerRNG.Range(num, max, luck);
num2 = Mathf.Max(num2, 0f);
componentInParent.damage *= num2;
return (HasToReturn)1;
}
return (HasToReturn)1;
}
return (HasToReturn)1;
}
return (HasToReturn)1;
}
return (HasToReturn)1;
}
return (HasToReturn)1;
}
}
public class RicochetRouletteEffect : MonoBehaviour
{
private void Start()
{
ProjectileHit componentInParent = ((Component)this).GetComponentInParent<ProjectileHit>();
if (componentInParent == null)
{
return;
}
Player ownPlayer = componentInParent.ownPlayer;
if (ownPlayer == null)
{
return;
}
GamblerData gamblerData = ownPlayer.GetGamblerData();
int ricochetStacks = gamblerData.ricochetStacks;
if (ricochetStacks <= 0)
{
return;
}
float luck = ownPlayer.GetLuck();
int num = 4 + (ricochetStacks - 1) * 3;
float[] array = new float[num + 1];
for (int i = 0; i <= num; i++)
{
switch (i)
{
case 0:
array[i] = 0.25f;
break;
case 1:
array[i] = 0.25f;
break;
case 2:
array[i] = 0.25f;
break;
case 3:
array[i] = 0.15f;
break;
case 4:
array[i] = 0.1f;
break;
default:
array[i] = 0.08f;
break;
}
}
if (luck > 0f)
{
float num2 = Mathf.Min(luck * 0.5f, array[0] * 0.8f);
array[0] -= num2;
int num3 = Mathf.Max(num / 2, 1);
array[num3] += num2;
}
int num4 = GamblerRNG.WeightedRoll(array, 0f);
RayHitReflect componentInParent2 = ((Component)this).GetComponentInParent<RayHitReflect>();
if (componentInParent2 != null)
{
componentInParent2.reflects += num4;
}
}
}
public class ShellGameEffect : MonoBehaviour
{
public int stacks;
private Player player;
private Gun gun;
private Block block;
private CharacterStatModifiers stats;
private Action<BlockTriggerType> blockAction;
private int tempBlockCharges;
private void Start()
{
player = ((Component)this).GetComponent<Player>();
gun = ((Component)this).GetComponent<Gun>();
block = ((Component)this).GetComponent<Block>();
stats = ((Component)this).GetComponent<CharacterStatModifiers>();
blockAction = OnBlock;
block.BlockAction = (Action<BlockTriggerType>)Delegate.Combine(block.BlockAction, blockAction);
GameModeManager.AddHook("PointEnd", (Func<IGameModeHandler, IEnumerator>)OnPointEnd);
}
private void OnBlock(BlockTriggerType trigger)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
if ((int)trigger == 0 && player != null)
{
for (int i = 0; i < stacks; i++)
{
RollEffect();
}
}
}
private void RollEffect()
{
float luck = player.GetLuck();
float[] weights = new float[5] { 0.2f, 0.2f, 0.2f, 0.2f, 0.2f };
switch (GamblerRNG.WeightedRoll(weights, luck))
{
case 0:
DoBurst();
break;
case 1:
((MonoBehaviour)this).StartCoroutine(DoFortify());
break;
case 2:
((MonoBehaviour)this).StartCoroutine(DoAdrenaline());
break;
case 3:
player.data.healthHandler.Heal(20f);
break;
case 4:
{
Block obj = block;
obj.additionalBlocks++;
tempBlockCharges++;
player.GetGamblerData().tempBlockCharges++;
break;
}
}
}
private void DoBurst()
{
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: 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_0098: 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_00ad: 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)
float num = 30f;
float num2 = 3f;
List<Player> players = PlayerManager.instance.players;
for (int i = 0; i < players.Count; i++)
{
Player val = players[i];
if (val != player && val.teamID != player.teamID)
{
float num3 = Vector2.Distance(new Vector2(((Component)player).transform.position.x, ((Component)player).transform.position.y), new Vector2(((Component)val).transform.position.x, ((Component)val).transform.position.y));
if (num3 <= num2)
{
CharacterData data = val.data;
data.health -= num;
}
}
}
}
private IEnumerator DoFortify()
{
float origDmgMult = 1f;
GamblerData data = player.GetGamblerData();
data.fortifyActive++;
yield return (object)new WaitForSeconds(2.5f);
data.fortifyActive--;
}
private IEnumerator DoAdrenaline()
{
if (gun != null && stats != null)
{
float atkMult = 0.7f;
float moveMult = 1.4f;
Gun obj = gun;
obj.attackSpeed *= atkMult;
CharacterStatModifiers obj2 = stats;
obj2.movementSpeed *= moveMult;
yield return (object)new WaitForSeconds(3f);
Gun obj3 = gun;
obj3.attackSpeed /= atkMult;
CharacterStatModifiers obj4 = stats;
obj4.movementSpeed /= moveMult;
}
}
private IEnumerator OnPointEnd(IGameModeHandler gm)
{
if (tempBlockCharges > 0 && block != null)
{
Block obj = block;
obj.additionalBlocks -= tempBlockCharges;
player.GetGamblerData().tempBlockCharges -= tempBlockCharges;
tempBlockCharges = 0;
}
yield break;
}
private void OnDestroy()
{
if (block != null)
{
block.BlockAction = (Action<BlockTriggerType>)Delegate.Remove(block.BlockAction, blockAction);
}
GameModeManager.RemoveHook("PointEnd", (Func<IGameModeHandler, IEnumerator>)OnPointEnd);
}
}
public class SnakeEyesDudEffect : MonoBehaviour
{
private bool isDud;
private void Start()
{
ProjectileHit componentInParent = ((Component)this).GetComponentInParent<ProjectileHit>();
if (componentInParent == null)
{
return;
}
Player ownPlayer = componentInParent.ownPlayer;
if (ownPlayer != null)
{
float luck = ownPlayer.GetLuck();
float num = Mathf.Max(0.2f - luck * 0.25f, 0.05f);
isDud = Random.Range(0f, 1f) < num;
if (isDud)
{
componentInParent.damage = 0f;
}
}
}
}
public class WildCardEffect : MonoBehaviour
{
public int stacks;
private Player player;
private Gun gun;
public int pendingExtraProjectiles;
public bool rollPending;
private void Start()
{
player = ((Component)this).GetComponent<Player>();
gun = ((Component)this).GetComponent<Gun>();
}
public void RollExtraProjectiles()
{
if (player == null)
{
return;
}
float luck = player.GetLuck();
int num = 3 + (stacks - 1) * 2;
float[] array = new float[num + 1];
for (int i = 0; i <= num; i++)
{
switch (i)
{
case 0:
array[i] = 0.3f;
break;
case 1:
array[i] = 0.3f;
break;
case 2:
array[i] = 0.25f;
break;
case 3:
array[i] = 0.15f;
break;
default:
array[i] = 0.1f;
break;
}
}
pendingExtraProjectiles = GamblerRNG.WeightedRoll(array, luck);
rollPending = true;
}
public int ConsumeExtra()
{
if (!rollPending)
{
return 0;
}
rollPending = false;
return pendingExtraProjectiles;
}
public float GetExtraDamageMultiplier()
{
return 0.5f;
}
}
public class WinningStreakEffect : MonoBehaviour
{
public int stacks;
private Player player;
private Gun gun;
private CharacterStatModifiers stats;
private float appliedDamageMult = 1f;
private float appliedAtkMult = 1f;
private float appliedMoveMult = 1f;
private int prevPoints;
private void Start()
{
player = ((Component)this).GetComponent<Player>();
gun = ((Component)this).GetComponent<Gun>();
stats = ((Component)this).GetComponent<CharacterStatModifiers>();
GameModeManager.AddHook("PointStart", (Func<IGameModeHandler, IEnumerator>)OnPointStart);
GameModeManager.AddHook("PointEnd", (Func<IGameModeHandler, IEnumerator>)OnPointEnd);
GameModeManager.AddHook("GameStart", (Func<IGameModeHandler, IEnumerator>)OnGameStart);
}
private IEnumerator OnGameStart(IGameModeHandler gm)
{
player.GetGamblerData().winStreak = 0;
prevPoints = 0;
yield break;
}
private IEnumerator OnPointEnd(IGameModeHandler gm)
{
RevertBuffs();
int myTeamPoints = GetMyTeamPoints();
if (myTeamPoints > prevPoints)
{
player.GetGamblerData().winStreak++;
}
else
{
player.GetGamblerData().winStreak = 0;
}
prevPoints = myTeamPoints;
yield break;
}
private IEnumerator OnPointStart(IGameModeHandler gm)
{
if (player != null && gun != null && stats != null)
{
int winStreak = player.GetGamblerData().winStreak;
float num = 1f + (float)(stacks - 1) * 0.5f;
if (winStreak == 0)
{
appliedDamageMult = 1f - 0.1f * (0.5f + (float)stacks * 0.5f);
appliedAtkMult = 1f;
appliedMoveMult = 1f;
}
else
{
int num2 = Mathf.Min(winStreak, 4);
float num3 = (float)num2 * 0.15f * num;
float num4 = (float)num2 * 0.08f * num;
appliedDamageMult = 1f + num3;
appliedAtkMult = 1f / (1f + num4);
appliedMoveMult = 1f + num4;
}
Gun obj = gun;
obj.damage *= appliedDamageMult;
Gun obj2 = gun;
obj2.attackSpeed *= appliedAtkMult;
CharacterStatModifiers obj3 = stats;
obj3.movementSpeed *= appliedMoveMult;
}
yield break;
}
private void RevertBuffs()
{
if (gun != null && appliedDamageMult != 1f)
{
Gun obj = gun;
obj.damage /= appliedDamageMult;
}
if (gun != null && appliedAtkMult != 1f)
{
Gun obj2 = gun;
obj2.attackSpeed /= appliedAtkMult;
}
if (stats != null && appliedMoveMult != 1f)
{
CharacterStatModifiers obj3 = stats;
obj3.movementSpeed /= appliedMoveMult;
}
appliedDamageMult = 1f;
appliedAtkMult = 1f;
appliedMoveMult = 1f;
}
private int GetMyTeamPoints()
{
if (player == null)
{
return 0;
}
GM_ArmsRace val = Object.FindObjectOfType<GM_ArmsRace>();
if (val == null)
{
return 0;
}
return (player.teamID != 0) ? val.p2Points : val.p1Points;
}
private void OnDestroy()
{
RevertBuffs();
GameModeManager.RemoveHook("PointStart", (Func<IGameModeHandler, IEnumerator>)OnPointStart);
GameModeManager.RemoveHook("PointEnd", (Func<IGameModeHandler, IEnumerator>)OnPointEnd);
GameModeManager.RemoveHook("GameStart", (Func<IGameModeHandler, IEnumerator>)OnGameStart);
}
}
}
namespace GamblersChoice
{
internal static class GamblerCategory
{
private static CardCategory _cat;
public static CardCategory Get()
{
if (_cat == null)
{
_cat = CustomCardCategories.instance.CardCategory("Gambler");
}
return _cat;
}
}
public class GamblerData
{
public float luck;
public int shotCounter;
public int streakStacks;
public float lastHitTime;
public int loadedDiceStacks;
public int doubleOrNothingStacks;
public int cardCounterStacks;
public int jackpotStacks;
public int hotHandStacks;
public int snakeEyesStacks;
public int ricochetStacks;
public int winStreak;
public float pendingBlockCdMult;
public int tempBlockCharges;
public int fortifyActive;
public Player lastAttacker;
public void ResetPerRound()
{
shotCounter = 0;
streakStacks = 0;
lastHitTime = 0f;
winStreak = 0;
pendingBlockCdMult = 0f;
tempBlockCharges = 0;
fortifyActive = 0;
lastAttacker = null;
}
public void ResetAll()
{
luck = 0f;
loadedDiceStacks = 0;
doubleOrNothingStacks = 0;
cardCounterStacks = 0;
jackpotStacks = 0;
hotHandStacks = 0;
snakeEyesStacks = 0;
ricochetStacks = 0;
ResetPerRound();
}
}
public static class GamblerDataExtension
{
private static readonly ConditionalWeakTable<Player, GamblerData> table = new ConditionalWeakTable<Player, GamblerData>();
public static GamblerData GetGamblerData(this Player player)
{
return table.GetOrCreateValue(player);
}
public static float GetLuck(this Player player)
{
float luck = player.GetGamblerData().luck;
float num = ((Plugin.LuckCap == null) ? 0.6f : Plugin.LuckCap.Value);
return Mathf.Min(luck, num);
}
}
public static class GamblerRNG
{
public static float Range(float min, float max, float luck)
{
float num = luck * 0.5f;
float num2 = min + num;
float num3 = max + num;
return Random.Range(num2, num3);
}
public static int WeightedRoll(float[] weights, float luck)
{
float[] array = (float[])weights.Clone();
if (array.Length > 1 && luck > 0f)
{
float num = luck * array[^1] * 0.5f;
array[0] += num;
array[^1] = Mathf.Max(array[^1] - num, 0.01f);
}
float num2 = 0f;
for (int i = 0; i < array.Length; i++)
{
num2 += array[i];
}
float num3 = Random.Range(0f, num2);
float num4 = 0f;
for (int j = 0; j < array.Length; j++)
{
num4 += array[j];
if (num3 < num4)
{
return j;
}
}
return array.Length - 1;
}
public static bool CoinFlip(float headsChance, float luck)
{
float num = headsChance + luck * 0.3f;
num = Mathf.Clamp(num, 0.05f, 0.95f);
return Random.Range(0f, 1f) < num;
}
public static bool FumbleCheck(float baseChance, float luck)
{
float num = baseChance - luck * 0.15f;
num = Mathf.Max(num, 0.05f);
return Random.Range(0f, 1f) < num;
}
}
}
namespace GamblersChoice.Patches
{
[HarmonyPatch(typeof(Gun), "Attack")]
internal class GunAttackPatch
{
private static int savedProjectiles;
private static bool wildCardActive;
private static void Prefix(Gun __instance)
{
wildCardActive = false;
Player componentInParent = ((Component)__instance).GetComponentInParent<Player>();
if (componentInParent == null)
{
return;
}
WildCardEffect component = ((Component)componentInParent).GetComponent<WildCardEffect>();
if (component != null)
{
component.RollExtraProjectiles();
int num = component.ConsumeExtra();
if (num > 0)
{
savedProjectiles = __instance.numberOfProjectiles;
__instance.numberOfProjectiles += num;
wildCardActive = true;
}
}
}
private static void Postfix(Gun __instance)
{
Player componentInParent = ((Component)__instance).GetComponentInParent<Player>();
if (componentInParent != null)
{
if (wildCardActive)
{
__instance.numberOfProjectiles = savedProjectiles;
wildCardActive = false;
}
((Component)componentInParent).GetComponent<CardCounterEffect>()?.IncrementCounter();
}
}
}
[HarmonyPatch(typeof(ProjectileHit), "Hit")]
internal class ProjectileHitPatch
{
private static void Prefix(ProjectileHit __instance, HitInfo hit)
{
if (hit.transform == null)
{
return;
}
Player component = ((Component)hit.transform).GetComponent<Player>();
if (component == null)
{
return;
}
Player ownPlayer = __instance.ownPlayer;
if (ownPlayer == null)
{
return;
}
HotHandEffect component2 = ((Component)ownPlayer).GetComponent<HotHandEffect>();
if (component2 != null)
{
float damageMultiplier = component2.GetDamageMultiplier();
if (damageMultiplier != 1f)
{
__instance.damage *= damageMultiplier;
}
}
CardCounterEffect component3 = ((Component)ownPlayer).GetComponent<CardCounterEffect>();
if (component3 != null)
{
float num = component3.ConsumeCrit();
if (num != 1f)
{
__instance.damage *= num;
}
}
GamblerData gamblerData = component.GetGamblerData();
gamblerData.lastAttacker = ownPlayer;
}
private static void Postfix(ProjectileHit __instance, HitInfo hit)
{
if (hit.transform == null)
{
return;
}
Player component = ((Component)hit.transform).GetComponent<Player>();
if (component != null)
{
Player ownPlayer = __instance.ownPlayer;
if (ownPlayer != null)
{
((Component)ownPlayer).GetComponent<HotHandEffect>()?.OnHitEnemy();
}
}
}
}
[HarmonyPatch(typeof(HealthHandler), "RPCA_Die")]
internal class HealthHandlerDiePatch
{
private static void Postfix(HealthHandler __instance)
{
Player component = ((Component)__instance).GetComponent<Player>();
if (component == null)
{
return;
}
List<Player> players = PlayerManager.instance.players;
for (int i = 0; i < players.Count; i++)
{
Player val = players[i];
if (val != component && val.teamID != component.teamID)
{
((Component)val).GetComponent<JackpotEffect>()?.OnKill();
}
}
}
}
[HarmonyPatch(typeof(HealthHandler), "DoDamage")]
internal class HealthHandlerDoDamagePatch
{
private static void Postfix(HealthHandler __instance, Vector2 damage)
{
Player component = ((Component)__instance).GetComponent<Player>();
if (component == null)
{
return;
}
float num = ((!(damage.x > 0f)) ? damage.y : damage.x);
if (!(num <= 0f))
{
GamblerData gamblerData = component.GetGamblerData();
((Component)component).GetComponent<HotHandEffect>()?.OnTakeDamage();
((Component)component).GetComponent<HouseEdgeEffect>()?.LogDamage(num, gamblerData.lastAttacker);
if (gamblerData.fortifyActive > 0)
{
float num2 = num * 0.5f * (float)gamblerData.fortifyActive;
component.data.healthHandler.Heal(num2);
}
}
}
}
[HarmonyPatch(typeof(Block), "ResetCD")]
internal class BlockResetCDPatch
{
private static void Postfix(Block __instance)
{
Player component = ((Component)__instance).GetComponent<Player>();
if (component != null)
{
GamblerData gamblerData = component.GetGamblerData();
if (gamblerData.pendingBlockCdMult > 0f && gamblerData.pendingBlockCdMult != 1f)
{
__instance.counter *= gamblerData.pendingBlockCdMult;
gamblerData.pendingBlockCdMult = 0f;
}
}
}
}
[HarmonyPatch(typeof(CharacterStatModifiers), "ResetStats")]
internal class ResetStatsPatch
{
private static void Postfix(CharacterStatModifiers __instance)
{
((Component)__instance).GetComponent<Player>()?.GetGamblerData().ResetPerRound();
}
}
}
namespace GamblersChoice
{
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("com.nicho.rounds.gamblerschoice", "Gamblers Choice", "1.0.2")]
[BepInProcess("Rounds.exe")]
public class Plugin : BaseUnityPlugin
{
internal static Plugin Instance;
internal static ManualLogSource Log;
internal static ConfigEntry<float> LuckCap;
private void Awake()
{
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Expected O, but got Unknown
Instance = this;
Log = ((BaseUnityPlugin)this).Logger;
LuckCap = ((BaseUnityPlugin)this).Config.Bind<float>("Balance", "LuckCapOverride", 0.6f, "Maximum luck value for balance tuning");
Harmony val = new Harmony("com.nicho.rounds.gamblerschoice");
val.PatchAll();
Log.LogInfo((object)string.Format("{0} v{1} loaded", "Gamblers Choice", "1.0.2"));
}
private void Start()
{
CustomCard.BuildCard<LoadedDice>();
CustomCard.BuildCard<SnakeEyes>();
CustomCard.BuildCard<LuckyPenny>();
CustomCard.BuildCard<AnteUp>();
CustomCard.BuildCard<CoinFlip>();
CustomCard.BuildCard<DoubleOrNothing>();
CustomCard.BuildCard<CardCounter>();
CustomCard.BuildCard<Jackpot>();
CustomCard.BuildCard<AllIn>();
CustomCard.BuildCard<HotHand>();
CustomCard.BuildCard<Bluff>();
CustomCard.BuildCard<ShellGame>();
CustomCard.BuildCard<HouseEdge>();
CustomCard.BuildCard<WildCard>();
CustomCard.BuildCard<RicochetRoulette>();
CustomCard.BuildCard<WinningStreak>();
CustomCard.BuildCard<HailMary>();
GameModeManager.AddHook("GameStart", (Func<IGameModeHandler, IEnumerator>)GameStartReset);
Log.LogInfo((object)"All 17 cards registered");
}
private static IEnumerator GameStartReset(IGameModeHandler gm)
{
foreach (Player player in PlayerManager.instance.players)
{
player.GetGamblerData().ResetAll();
}
yield break;
}
}
internal static class PluginInfo
{
public const string GUID = "com.nicho.rounds.gamblerschoice";
public const string NAME = "Gamblers Choice";
public const string VERSION = "1.0.2";
}
}