using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using HarmonyLib;
using UnboundLib.Cards;
using UnboundLib.GameModes;
using UnboundLib.Utils;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("FriendCardsMod")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("FriendCardsMod")]
[assembly: AssemblyCopyright("Copyright © 2026")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("503b6a2f-e723-4139-b7e0-040352341557")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
[BepInPlugin("friends.mod.friendcards", "Friend Cards", "1.0.0")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class FriendCardsMod : BaseUnityPlugin
{
private void Awake()
{
CustomCard.BuildCard<LucaCard>();
CustomCard.BuildCard<AhmedCard>();
CustomCard.BuildCard<LolplopCard>();
CustomCard.BuildCard<JoelCard>();
CustomCard.BuildCard<EldinCard>();
((BaseUnityPlugin)this).Logger.LogInfo((object)"Friend Cards geladen!");
}
}
public class LucaCard : CustomCard
{
protected override string GetTitle()
{
return "Luca";
}
protected override string GetDescription()
{
return "Gym Bro Mode";
}
protected override Rarity GetRarity()
{
return (Rarity)2;
}
protected override CardThemeColorType GetTheme()
{
return (CardThemeColorType)0;
}
protected override CardInfoStat[] GetStats()
{
return (CardInfoStat[])(object)new CardInfoStat[0];
}
protected override GameObject GetCardArt()
{
return null;
}
public override string GetModName()
{
return "FriendCards";
}
public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers statModifiers)
{
gun.projectileSize += 2f;
gun.damage *= 3f;
statModifiers.movementSpeed *= 0.5f;
data.maxHealth *= 1.5f;
}
}
public class AhmedCard : CustomCard
{
protected override string GetTitle()
{
return "Ahmed";
}
protected override string GetDescription()
{
return "Soundboard Chaos";
}
protected override Rarity GetRarity()
{
return (Rarity)0;
}
protected override CardThemeColorType GetTheme()
{
return (CardThemeColorType)3;
}
protected override CardInfoStat[] GetStats()
{
return (CardInfoStat[])(object)new CardInfoStat[0];
}
protected override GameObject GetCardArt()
{
return null;
}
public override string GetModName()
{
return "FriendCards";
}
public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers statModifiers)
{
gun.damage *= 1.25f;
gun.attackSpeed *= 0.8f;
}
}
public class LolplopCard : CustomCard
{
protected override string GetTitle()
{
return "Lolplop";
}
protected override string GetDescription()
{
return "Bass Drop";
}
protected override Rarity GetRarity()
{
return (Rarity)2;
}
protected override CardThemeColorType GetTheme()
{
return (CardThemeColorType)1;
}
protected override CardInfoStat[] GetStats()
{
return (CardInfoStat[])(object)new CardInfoStat[0];
}
protected override GameObject GetCardArt()
{
return null;
}
public override string GetModName()
{
return "FriendCards";
}
public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers statModifiers)
{
gun.knockback += 5f;
gun.projectileSize += 1f;
gun.damage *= 1.5f;
}
}
public class JoelCard : CustomCard
{
protected override string GetTitle()
{
return "Joel";
}
protected override string GetDescription()
{
return "Strassencruiser";
}
protected override Rarity GetRarity()
{
return (Rarity)0;
}
protected override CardThemeColorType GetTheme()
{
return (CardThemeColorType)7;
}
protected override CardInfoStat[] GetStats()
{
return (CardInfoStat[])(object)new CardInfoStat[0];
}
protected override GameObject GetCardArt()
{
return null;
}
public override string GetModName()
{
return "FriendCards";
}
public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers statModifiers)
{
statModifiers.movementSpeed *= 2f;
gun.attackSpeed *= 3f;
gun.damage *= 2f;
}
}
public class EldinCard : CustomCard
{
protected override string GetTitle()
{
return "Eldin";
}
protected override string GetDescription()
{
return "Drip Overload";
}
protected override Rarity GetRarity()
{
return (Rarity)2;
}
protected override CardThemeColorType GetTheme()
{
return (CardThemeColorType)8;
}
protected override CardInfoStat[] GetStats()
{
return (CardInfoStat[])(object)new CardInfoStat[0];
}
protected override GameObject GetCardArt()
{
return null;
}
public override string GetModName()
{
return "FriendCards";
}
public override void OnAddCard(Player player, Gun gun, GunAmmo gunAmmo, CharacterData data, HealthHandler health, Gravity gravity, Block block, CharacterStatModifiers statModifiers)
{
gun.reflects += 10;
gun.numberOfProjectiles++;
statModifiers.movementSpeed *= 1.3f;
}
}
[BepInPlugin("friends.mod.houserules", "House Rules", "1.0.0")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class HouseRulesMod : BaseUnityPlugin
{
[HarmonyPatch(typeof(CardManager), "GetCardsToSpawn")]
public class BanReviveCardsPatch
{
private static void Postfix(ref List<CardInfo> __result)
{
__result = __result.Where((CardInfo card) => !BANNED_CARDS.Any((string banned) => card.cardName.ToLower().Contains(banned.ToLower()))).ToList();
}
}
[HarmonyPatch(typeof(CardManager), "GetCardsToSpawn")]
public class BoostTableFlipPatch
{
private static void Postfix(ref List<CardInfo> __result)
{
List<CardInfo> source = (from c in CardManager.cards.Values
where c.cardInfo.cardName.ToLower().Contains("table")
select c.cardInfo).ToList();
foreach (CardInfo item in source.Take(3))
{
if (!__result.Contains(item))
{
__result.Add(item);
}
}
}
}
[HarmonyPatch(typeof(CardChoiceVisuals), "Show")]
public class MoreCardsPatch
{
private static void Prefix(ref int amount)
{
amount = 6;
}
}
[CompilerGenerated]
private sealed class <DoLottoRound>d__7 : IEnumerator<object>, IDisposable, IEnumerator
{
private int <>1__state;
private object <>2__current;
public HouseRulesMod <>4__this;
private List<Player> <players>5__1;
private List<CardInfo> <allCards>5__2;
private int <i>5__3;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <DoLottoRound>d__7(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<players>5__1 = null;
<allCards>5__2 = null;
<>1__state = -2;
}
private bool MoveNext()
{
if (<>1__state != 0)
{
return false;
}
<>1__state = -1;
<players>5__1 = PlayerManager.instance.players;
<allCards>5__2 = (from c in CardManager.cards.Values
where !BANNED_CARDS.Contains(c.cardInfo.cardName)
select c.cardInfo into _
orderby Random.value
select _).ToList();
<i>5__3 = 0;
while (<i>5__3 < <players>5__1.Count)
{
if (<i>5__3 < <allCards>5__2.Count)
{
<players>5__1[<i>5__3].data.currentCards.Add(<allCards>5__2[<i>5__3]);
}
<i>5__3++;
}
return false;
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[CompilerGenerated]
private sealed class <OnPickStart>d__4 : IEnumerator<object>, IDisposable, IEnumerator
{
private int <>1__state;
private object <>2__current;
public IGameModeHandler gm;
public HouseRulesMod <>4__this;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <OnPickStart>d__4(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
if (<>1__state != 0)
{
return false;
}
<>1__state = -1;
return false;
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[CompilerGenerated]
private sealed class <OnRoundStart>d__6 : IEnumerator<object>, IDisposable, IEnumerator
{
private int <>1__state;
private object <>2__current;
public IGameModeHandler gm;
public HouseRulesMod <>4__this;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <OnRoundStart>d__6(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
roundCounter++;
if (roundCounter % 3 == 0)
{
<>2__current = <>4__this.DoLottoRound();
<>1__state = 1;
return true;
}
break;
case 1:
<>1__state = -1;
break;
}
return false;
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
public static HouseRulesMod instance;
private Harmony harmony;
public static readonly string[] BANNED_CARDS = new string[6] { "Zombie", "Second Wind", "Revive", "Extra Life", "Phoenix", "Cheat Death" };
private static int roundCounter = 0;
private void Awake()
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Expected O, but got Unknown
instance = this;
harmony = new Harmony("friends.mod.houserules");
harmony.PatchAll();
GameModeManager.AddHook("PickStart", (Func<IGameModeHandler, IEnumerator>)OnPickStart);
GameModeManager.AddHook("RoundStart", (Func<IGameModeHandler, IEnumerator>)OnRoundStart);
((BaseUnityPlugin)this).Logger.LogInfo((object)"House Rules geladen!");
}
[IteratorStateMachine(typeof(<OnPickStart>d__4))]
private IEnumerator OnPickStart(IGameModeHandler gm)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <OnPickStart>d__4(0)
{
<>4__this = this,
gm = gm
};
}
[IteratorStateMachine(typeof(<OnRoundStart>d__6))]
private IEnumerator OnRoundStart(IGameModeHandler gm)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <OnRoundStart>d__6(0)
{
<>4__this = this,
gm = gm
};
}
[IteratorStateMachine(typeof(<DoLottoRound>d__7))]
private IEnumerator DoLottoRound()
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <DoLottoRound>d__7(0)
{
<>4__this = this
};
}
}