using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using CasualOptions; using HarmonyLib; using Microsoft.CodeAnalysis; using Obeliskial_Essentials; 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("com.binbin.CasualOptions")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("0.2.1.0")] [assembly: AssemblyInformationalVersion("0.2.1+fc420958331818084af36bcb0b99afcf8c768e51")] [assembly: AssemblyProduct("CasualOptions")] [assembly: AssemblyTitle("com.binbin.CasualOptions")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.2.1.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } public static class EssentialsCompatibility { private static bool? _enabled; public static bool Enabled { get { bool valueOrDefault = _enabled.GetValueOrDefault(); if (!_enabled.HasValue) { valueOrDefault = Chainloader.PluginInfos.ContainsKey("com.stiffmeds.obeliskialessentials"); _enabled = valueOrDefault; } return _enabled.Value; } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static void EssentialsRegister() { Essentials.RegisterMod(Plugin.PluginName, "binbin", "Casual Options", Plugin.PluginVersion, Plugin.ModDate, "https://github.com/binbinmods/GrindReducer", (string[])null, "", 100, (string[])null, "", true); Plugin.LogInfo(Plugin.PluginGUID + " " + Plugin.PluginVersion + " has loaded with Essentials!"); } } namespace CasualOptions { public class CasualOptionsFunctions { public enum Corruptors { ImpedingDoom, Decadence, RestrictedPower, ResistantMonsters, Equalizer, Poverty, OverchargedMonsters, RandomCombats, Despair } public static bool HasCorruptor(Corruptors corruptor) { return MadnessManager.Instance.IsMadnessTraitActive(corruptor.ToString().ToLower()); } public static CombatTier GetNextCombatTier(CombatTier combatTier) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Expected I4, but got Unknown //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) int num = (int)combatTier; num++; num = Math.Min(num, 12); return (CombatTier)num; } } [HarmonyPatch] public class CasualOptionsPatches { public static bool devMode; public static int i; [HarmonyPrefix] [HarmonyPatch(typeof(AtOManager), "GivePlayer")] public static void GivePlayerPrefix(AtOManager __instance, int type, ref int quantity, string to = "", string from = "", bool anim = true, bool save = false) { Plugin.LogDebug("GivePlayerPrefix"); if ((type == 1 || type == 0) && quantity >= 0 && Plugin.ResourceMultiplier.Value > 0) { Plugin.LogDebug($"GivePlayerPrefix - Multiplier: {Plugin.ResourceMultiplier.Value}, OG quantity: {quantity}, Final {Mathf.RoundToInt((float)Plugin.ResourceMultiplier.Value * 0.01f * (float)quantity)}"); quantity = Mathf.RoundToInt((float)Plugin.ResourceMultiplier.Value * 0.01f * (float)quantity); if (quantity < 0) { quantity = 0; } } } [HarmonyPostfix] [HarmonyPatch(typeof(Character), "SetEvent")] public static void SetEventPostfix(ref Character __instance, EventActivation theEvent, Character target = null, int auxInt = 0, string auxString = "") { //IL_0054: 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_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006a: 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_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) int value = Plugin.BuffAmountToAdd.Value; string value2 = Plugin.BuffToAdd.Value; string value3 = Plugin.BuffWhenToAdd.Value; if (1 == 0) { } EventActivation val = (EventActivation)(value3 switch { "Combat Start" => 1, "Every Turn" => 24, "Every Round" => 2, _ => 1, }); if (1 == 0) { } EventActivation val2 = val; if (theEvent == val2 && CustomFunctions.IsLivingHero(__instance)) { Plugin.LogDebug("CasualOptions - SetEventPostfix"); __instance.SetAura((Character)null, CustomFunctions.GetAuraCurseData(value2), value, false, (CardClass)11, false, true); } } [HarmonyPrefix] [HarmonyPatch(typeof(AtOManager), "AddCardToHero")] public static bool AddCardToHeroPrefix(AtOManager __instance, int _heroIndex, string originalCardName, int count = 1) { if (Plugin.NoDeathPenalty.Value && originalCardName.ToLower().StartsWith("deathsdoor")) { Plugin.LogDebug("AddCardToHeroPrefix - No Death Penalty"); return false; } return true; } [HarmonyPostfix] [HarmonyPatch(typeof(AtOManager), "GetSandboxMods")] public static void GetSandboxModsPostfix(ref AtOManager __instance, ref bool ___sandbox_freeRerolls, ref bool ___sandbox_unlimitedRerolls) { if (Plugin.UnlimitedRerolls.Value) { Plugin.LogDebug("GetSandboxModsPostfix - Unlimited free rerolls"); SandboxManager.Instance.EnableSandbox(); ___sandbox_freeRerolls = true; ___sandbox_unlimitedRerolls = true; } } [HarmonyPostfix] [HarmonyPatch(typeof(Character), "GetEnergyTurn")] public static void GetEnergyTurnPost(ref Character __instance, ref int __result) { if (Plugin.BonusEnergyPerTurn.Value > 0) { Plugin.LogDebug($"GetEnergyTurnPost - BonusEnergyPerTurn: {Plugin.BonusEnergyPerTurn.Value}"); __result += Plugin.BonusEnergyPerTurn.Value; } } [HarmonyPostfix] [HarmonyPatch(typeof(AtOManager), "FinishCombat")] public static void FinishCombatPostFix(ref AtOManager __instance, bool resigned) { Plugin.LogDebug("FinishCombat"); if (Plugin.HPToGainPostCombat.Value == 0) { return; } Hero[] team = __instance.GetTeam(); for (int i = 0; i < 4; i++) { if (team[i] != null && (Object)(object)((Character)team[i]).HeroData != (Object)null) { object arg = Plugin.HPToGainPostCombat.Value; Hero obj = team[i]; Plugin.LogDebug($"FinishCombat - Adding {arg} HP to {((obj != null) ? ((Character)obj).SourceName : null)}"); ((Character)team[i]).ModifyMaxHP(Plugin.HPToGainPostCombat.Value); } } } [HarmonyPostfix] [HarmonyPatch(typeof(Item), "DoItemData")] public static void DoItemDataPrefix(ref Item __instance, Character target, string itemName, int auxInt, CardData cardItem, string itemType, ItemData itemData, Character character, int order, CardData castedCard = null, EventActivation theEvent = 0) { if (Plugin.UnlimitedConsumables.Value) { itemData.DestroyAfterUse = false; itemData.DestroyAfterUses = 0; itemData.TimesPerCombat = 0; itemData.TimesPerTurn = 0; } } [HarmonyPrefix] [HarmonyPatch(typeof(Character), "GrantExperience")] public static void GrantExperiencePrefix(ref Character __instance, ref int _experience) { if (Plugin.ExpMultiplier.Value > 0) { Plugin.LogDebug($"GrantExperiencePrefix - Original XP: {_experience}, Multiplier: {(float)Plugin.ExpMultiplier.Value * 0.01f}"); _experience = Mathf.RoundToInt((float)Plugin.ExpMultiplier.Value * 0.01f * (float)_experience); } } [HarmonyPostfix] [HarmonyPatch(typeof(AtOManager), "FinishCombat")] public static void FinishCombat(AtOManager __instance, ref Hero[] ___teamAtO, bool resigned) { for (int i = 0; i < 4; i++) { if (___teamAtO[i] != null && !((Object)(object)((Character)___teamAtO[i]).HeroData == (Object)null) && ((Character)___teamAtO[i]).Alive) { Plugin.LogDebug($"PostCombatHealPostfix - Healing {((Character)___teamAtO[i]).SourceName} for {Functions.FuncRoundToInt((float)(((Character)___teamAtO[i]).Hp * Plugin.PostCombatHeal.Value / 100))}"); int num = Functions.FuncRoundToInt((float)(((Character)___teamAtO[i]).Hp * Plugin.PostCombatHeal.Value) * 0.01f); ((Character)___teamAtO[i]).HpCurrent = Mathf.Clamp(((Character)___teamAtO[i]).HpCurrent + num, 1, ((Character)___teamAtO[i]).Hp); } } } [HarmonyPrefix] [HarmonyPatch(typeof(SteamManager), "SetObeliskScore")] public static bool SetObeliskScorePrefix(ref SteamManager __instance, int score, bool singleplayer = true) { return false; } [HarmonyPrefix] [HarmonyPatch(typeof(SteamManager), "SetScore")] public static bool SetScorePrefix(ref SteamManager __instance, int score, bool singleplayer = true) { return false; } [HarmonyPrefix] [HarmonyPatch(typeof(SteamManager), "SetSingularityScore")] public static bool SetSingularityScorePrefix(ref SteamManager __instance, int score, bool singleplayer = true) { return false; } [HarmonyPrefix] [HarmonyPatch(typeof(SteamManager), "SetObeliskScoreLeaderboard")] public static bool SetObeliskScoreLeaderboardPrefix(ref SteamManager __instance, int score, bool singleplayer = true) { return false; } [HarmonyPrefix] [HarmonyPatch(typeof(SteamManager), "SetScoreLeaderboard")] public static bool SetScoreLeaderboardPrefix(ref SteamManager __instance, int score, bool singleplayer = true) { return false; } [HarmonyPrefix] [HarmonyPatch(typeof(SteamManager), "SetSingularityScoreLeaderboard")] public static bool SetSingularityScoreLeaderboardPrefix(ref SteamManager __instance, int score, bool singleplayer = true) { return false; } } public class CustomFunctions { public enum AppliesTo { None, Global, Monsters, Heroes, ThisHero } public enum CharacterHas { Perk, Item, Trait } public enum IsAuraOrCurse { Aura, Curse, Both } public static string perkBase = ""; public static void TraitHeal(ref Character _character, Character _target, int healAmount, string traitName) { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown int num = healAmount; if (_target.GetHpLeftForMax() < healAmount) { num = _target.GetHpLeftForMax(); } if (num > 0) { _target.ModifyHp(num, true, true, (Character)null); CastResolutionForCombatText val = new CastResolutionForCombatText(); val.heal = num; if (_target.HeroItem != null) { ((CharacterItem)_target.HeroItem).ScrollCombatTextDamageNew(val); EffectsManager.Instance.PlayEffectAC("healimpactsmall", true, ((CharacterItem)_target.HeroItem).CharImageT, false, 0f, false); } else { ((CharacterItem)_target.NPCItem).ScrollCombatTextDamageNew(val); EffectsManager.Instance.PlayEffectAC("healimpactsmall", true, ((CharacterItem)_target.NPCItem).CharImageT, false, 0f, false); } _target.SetEvent((EventActivation)15, (Character)null, 0, "", (Character)null); _character.SetEvent((EventActivation)14, _target, 0, "", (Character)null); ((CharacterItem)_character.HeroItem).ScrollCombatText(Texts.Instance.GetText("traits_" + traitName, ""), (CombatScrollEffectType)7); } } public static void TraitHealHero(ref Character _character, ref Hero _target, int healAmount, string traitName) { //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Expected O, but got Unknown if (_target == null || !((Character)_target).IsHero || !((Character)_target).Alive) { return; } int num = healAmount; if (((Character)_target).GetHpLeftForMax() < healAmount) { num = ((Character)_target).GetHpLeftForMax(); } if (num > 0) { ((Character)_target).ModifyHp(num, true, true, (Character)null); CastResolutionForCombatText val = new CastResolutionForCombatText(); val.heal = num; if (((Character)_target).HeroItem != null) { ((CharacterItem)((Character)_target).HeroItem).ScrollCombatTextDamageNew(val); EffectsManager.Instance.PlayEffectAC("healimpactsmall", true, ((CharacterItem)((Character)_target).HeroItem).CharImageT, false, 0f, false); } else { ((CharacterItem)((Character)_target).NPCItem).ScrollCombatTextDamageNew(val); EffectsManager.Instance.PlayEffectAC("healimpactsmall", true, ((CharacterItem)((Character)_target).NPCItem).CharImageT, false, 0f, false); } ((Character)_target).SetEvent((EventActivation)15, (Character)null, 0, "", (Character)null); _character.SetEvent((EventActivation)14, (Character)(object)_target, 0, "", (Character)null); ((CharacterItem)_character.HeroItem).ScrollCombatText(Texts.Instance.GetText("traits_" + traitName, ""), (CombatScrollEffectType)7); } } public static void WhenYouGainXGainY(string ACGained, string targetAC, string ACtoApply, int nGained, int nToApply, float multiplier, ref Character _character, string traitName) { if ((!((Object)(object)MatchManager.Instance == (Object)null) || ACGained != null || IsLivingHero(_character)) && !(targetAC == ACtoApply) && ACGained == targetAC) { int num = Mathf.RoundToInt((float)(nGained + nToApply) * multiplier); _character.SetAuraTrait(_character, ACtoApply, num); ((CharacterItem)_character.HeroItem).ScrollCombatText(Texts.Instance.GetText("traits_" + traitName, ""), (CombatScrollEffectType)7); } } public static void WhenYouPlayXGainY(CardType desiredCardType, string desiredAuraCurse, int n_charges, CardData castedCard, ref Character _character, string traitName) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)MatchManager.Instance != (Object)null && (Object)(object)castedCard != (Object)null && (Object)(object)_character.HeroData != (Object)null && castedCard.GetCardTypes().Contains(desiredCardType)) { _character.SetAuraTrait(_character, desiredAuraCurse, n_charges); ((CharacterItem)_character.HeroItem).ScrollCombatText(Texts.Instance.GetText("traits_" + traitName, ""), (CombatScrollEffectType)7); } } public static void ReduceCostByStacks(CardType cardType, string auraCurseName, int nCharges, ref Character _character, ref List heroHand, ref List cardDataList, string traitName, bool applyToAllCards) { //IL_0067: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)_character.HeroData != (Object)null)) { return; } int num = Mathf.FloorToInt((float)(_character.EffectCharges(auraCurseName) / nCharges)); if (num <= 0) { return; } for (int i = 0; i < heroHand.Count; i++) { CardData cardData = MatchManager.Instance.GetCardData(heroHand[i], true); if (cardData.GetCardFinalCost() > 0 && (cardData.GetCardTypes().Contains(cardType) || applyToAllCards)) { cardDataList.Add(cardData); } } for (int j = 0; j < cardDataList.Count; j++) { CardData obj = cardDataList[j]; obj.EnergyReductionTemporal += num; MatchManager.Instance.UpdateHandCards(); CardItem cardFromTableByIndex = MatchManager.Instance.GetCardFromTableByIndex(cardDataList[j].InternalId); cardFromTableByIndex.PlayDissolveParticle(); cardFromTableByIndex.ShowEnergyModification(-num); ((CharacterItem)_character.HeroItem).ScrollCombatText(Texts.Instance.GetText("traits_" + traitName, ""), (CombatScrollEffectType)7); MatchManager.Instance.CreateLogCardModification(cardDataList[j].InternalId, MatchManager.Instance.GetHero(_character.HeroIndex)); } } public static void ReduceCardTypeCostUntilDiscarded(CardType cardType, int amountToReduce, ref Character _character, ref List heroHand, ref List cardDataList, string traitName) { //IL_0050: Unknown result type (might be due to invalid IL or missing references) if (_character.HeroData == null) { return; } if (amountToReduce <= 0) { return; } for (int i = 0; i < heroHand.Count; i++) { CardData cardData = MatchManager.Instance.GetCardData(heroHand[i], true); if (cardData != null && cardData.GetCardFinalCost() > 0 && cardData.HasCardType(cardType)) { cardDataList.Add(cardData); } } for (int j = 0; j < cardDataList.Count; j++) { CardData val = cardDataList[j]; if (val != null) { val.EnergyReductionTemporal += amountToReduce; MatchManager.Instance.UpdateHandCards(); CardItem cardFromTableByIndex = MatchManager.Instance.GetCardFromTableByIndex(val.InternalId); cardFromTableByIndex.PlayDissolveParticle(); cardFromTableByIndex.ShowEnergyModification(-amountToReduce); ((CharacterItem)_character.HeroItem).ScrollCombatText(Texts.Instance.GetText("traits_" + traitName, ""), (CombatScrollEffectType)7); MatchManager.Instance.CreateLogCardModification(val.InternalId, MatchManager.Instance.GetHero(_character.HeroIndex)); } } } public static void AddImmunityToHero(string immunity, ref Hero _character) { if (_character != null && !((Character)_character).AuracurseImmune.Contains(immunity)) { ((Character)_character).AuracurseImmune.Add(immunity); } } public static void IncreaseChargesByStacks(string auraCurseToModify, float stacks_per_bonus, string auraCurseDependent, ref Character _character) { int auraCharges = _character.GetAuraCharges(auraCurseDependent); int num = Mathf.FloorToInt((float)auraCharges / stacks_per_bonus); _character.ModifyAuraCurseQuantity(auraCurseToModify, num); } public static AuraCurseData GetAuraCurseData(string auraCurse) { return Globals.Instance.GetAuraCurseData(auraCurse); } public static string TextChargesLeft(int currentCharges, int chargesTotal) { int num = currentCharges; int num2 = chargesTotal; return "
" + num + "/" + num2 + ""; } public static void Duality(ref Character _character, ref CardData _castedCard, CardClass class1, CardClass class2, string _trait) { //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0082: 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_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) if (MatchManager.Instance == null || _castedCard == null) { return; } TraitData traitData = Globals.Instance.GetTraitData(_trait); if (MatchManager.Instance.activatedTraits != null && MatchManager.Instance.activatedTraits.ContainsKey(_trait) && MatchManager.Instance.activatedTraits[_trait] > traitData.TimesPerTurn - 1) { return; } for (int i = 0; i < 2; i++) { CardClass val; CardClass val2; if (i == 0) { val = class1; val2 = class2; } else { val = class2; val2 = class1; } if (_castedCard.CardClass != val) { continue; } if (MatchManager.Instance.CountHeroHand(-1) == 0 || _character.HeroData == null) { break; } List list = new List(); List heroHand = MatchManager.Instance.GetHeroHand(_character.HeroIndex); int num = 0; for (int j = 0; j < heroHand.Count; j++) { CardData cardData = MatchManager.Instance.GetCardData(heroHand[j], true); if (cardData != null && cardData.CardClass == val2 && _character.GetCardFinalCost(cardData) > num) { num = _character.GetCardFinalCost(cardData); } } if (num <= 0) { break; } for (int k = 0; k < heroHand.Count; k++) { CardData cardData2 = MatchManager.Instance.GetCardData(heroHand[k], true); if (cardData2 != null && cardData2.CardClass == val2 && _character.GetCardFinalCost(cardData2) >= num) { list.Add(cardData2); } } if (list.Count <= 0) { break; } CardData val3 = ((list.Count != 1) ? list[MatchManager.Instance.GetRandomIntRange(0, list.Count, "trait", "")] : list[0]); if (val3 != null) { if (!MatchManager.Instance.activatedTraits.ContainsKey(_trait)) { MatchManager.Instance.activatedTraits.Add(_trait, 1); } else { Dictionary activatedTraits = MatchManager.Instance.activatedTraits; int value = activatedTraits[_trait] + 1; activatedTraits[_trait] = value; } MatchManager.Instance.SetTraitInfoText(); int num2 = 1; val3.EnergyReductionTemporal += num2; MatchManager.Instance.GetCardFromTableByIndex(val3.InternalId).ShowEnergyModification(-num2); MatchManager.Instance.UpdateHandCards(); ((CharacterItem)_character.HeroItem).ScrollCombatText(Texts.Instance.GetText("traits_" + traitData.TraitName, "") + TextChargesLeft(MatchManager.Instance.activatedTraits[_trait], traitData.TimesPerTurn), (CombatScrollEffectType)7); MatchManager.Instance.CreateLogCardModification(val3.InternalId, MatchManager.Instance.GetHero(_character.HeroIndex)); } break; } } public static void PermanentyReduceXWhenYouPlayY(ref Character _character, ref CardData _castedCard, CardType reduceThis, CardType whenYouPlayThis, int amountToReduce, string _trait) { //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Invalid comparison between Unknown and I4 //IL_0143: Unknown result type (might be due to invalid IL or missing references) if (MatchManager.Instance == null || _castedCard == null) { return; } TraitData traitData = Globals.Instance.GetTraitData(_trait); if ((MatchManager.Instance.activatedTraits != null && MatchManager.Instance.activatedTraits.ContainsKey(_trait) && MatchManager.Instance.activatedTraits[_trait] > traitData.TimesPerTurn - 1) || !_castedCard.GetCardTypes().Contains(whenYouPlayThis) || MatchManager.Instance.CountHeroHand(-1) == 0 || _character.HeroData == null) { return; } List list = new List(); List heroHand = MatchManager.Instance.GetHeroHand(_character.HeroIndex); if ((int)reduceThis == 0) { for (int i = 0; i < heroHand.Count; i++) { CardData cardData = MatchManager.Instance.GetCardData(heroHand[i], true); if (cardData != null) { list.Add(cardData); } } } else { for (int j = 0; j < heroHand.Count; j++) { CardData cardData2 = MatchManager.Instance.GetCardData(heroHand[j], true); if (cardData2 != null && cardData2.GetCardTypes().Contains(reduceThis)) { list.Add(cardData2); } } } if (!MatchManager.Instance.activatedTraits.ContainsKey(_trait)) { MatchManager.Instance.activatedTraits.Add(_trait, 1); } else { Dictionary activatedTraits = MatchManager.Instance.activatedTraits; int value = activatedTraits[_trait] + 1; activatedTraits[_trait] = value; } CardData val = list[MatchManager.Instance.GetRandomIntRange(0, list.Count, "trait", "")]; val.EnergyReductionPermanent += amountToReduce; MatchManager.Instance.GetCardFromTableByIndex(val.InternalId).ShowEnergyModification(-amountToReduce); MatchManager.Instance.UpdateHandCards(); ((CharacterItem)_character.HeroItem).ScrollCombatText(Texts.Instance.GetText("traits_" + _trait, "") + TextChargesLeft(MatchManager.Instance.activatedTraits[_trait], traitData.TimesPerTurn), (CombatScrollEffectType)7); MatchManager.Instance.CreateLogCardModification(val.InternalId, MatchManager.Instance.GetHero(_character.HeroIndex)); } public static int CountAllStacks(string auraCurse, Hero[] teamHero = null, NPC[] teamNpc = null, bool includeHeroes = true, bool includeNpcs = true) { if ((Object)(object)MatchManager.Instance == (Object)null) { return 0; } if (teamHero == null) { teamHero = MatchManager.Instance.GetTeamHero(); } if (teamNpc == null) { teamNpc = MatchManager.Instance.GetTeamNPC(); } int num = 0; if (includeHeroes) { for (int i = 0; i < teamHero.Length; i++) { if (IsLivingHero((Character)(object)teamHero[i])) { num += ((Character)teamHero[i]).GetAuraCharges(auraCurse); } } } if (includeNpcs) { for (int j = 0; j < teamNpc.Length; j++) { if (IsLivingNPC((Character)(object)teamNpc[j])) { num += ((Character)teamNpc[j]).GetAuraCharges(auraCurse); } } } return num; } public static List GetValidCharacters(Character[] characters) { List list = new List(); for (int i = 0; i < characters.Length; i++) { Character val = characters[i]; if (val.Alive && val != null) { list.Add(i); } } return list; } public static Character GetFrontCharacter(Character[] characters) { List validCharacters = GetValidCharacters(characters); int num = validCharacters.First(); return characters[num]; } public static Character GetBackCharacter(Character[] characters) { List validCharacters = GetValidCharacters(characters); int num = validCharacters.Last(); return characters[num]; } public static Character GetRandomCharacter(Character[] array) { if (array == null) { Plugin.Log.LogDebug((object)(Plugin.debugBase + "Null Array")); } List list = new List(); for (int i = 0; i < array.Length; i++) { if (array[i] == null) { Plugin.Log.LogDebug((object)(Plugin.debugBase + "Null index")); continue; } Character val = array[i]; if (val.Alive && val != null) { list.Add(val); } } if (list.Count == 0) { return null; } int randomIntRange = MatchManager.Instance.GetRandomIntRange(0, list.Count, "default", ""); if (randomIntRange < list.Count) { return list[randomIntRange]; } if (list[randomIntRange] == null) { return null; } return list[0]; } public static bool IsLivingHero(Character _character) { return _character != null && _character.Alive && _character.IsHero; } public static bool IsLivingNPC(Character _character) { return _character != null && _character.Alive && !_character.IsHero; } public static bool CharacterHasPerkForSet(string perkName, bool flag, AtOManager __instance, Character _characterTarget) { return flag && _characterTarget != null && __instance.CharacterHavePerk(_characterTarget.SubclassName, perkBase + perkName); } public static bool CharacterHasPerkForConsume(string perkName, bool flag, AtOManager __instance, Character _characterCaster) { return flag && _characterCaster != null && __instance.CharacterHavePerk(_characterCaster.SubclassName, perkBase + perkName); } public static bool TeamHasPerk(string perkName) { if ((Object)(object)AtOManager.Instance == (Object)null) { return false; } return AtOManager.Instance.TeamHavePerk(perkBase + perkName) || AtOManager.Instance.TeamHavePerk(perkName); } public static bool IfCharacterHas(Character characterOfInterest, CharacterHas characterHas, string id, AppliesTo appliesTo = AppliesTo.Global, string _type = "", string onlyThisType = "") { if (appliesTo == AppliesTo.None || characterOfInterest == null || (Object)(object)AtOManager.Instance == (Object)null) { return false; } if (_type != "" && onlyThisType != _type) { return false; } bool flag = (characterOfInterest.IsHero && appliesTo == AppliesTo.Heroes) || (!characterOfInterest.IsHero && appliesTo == AppliesTo.Monsters) || appliesTo == AppliesTo.Global || (appliesTo == AppliesTo.ThisHero && characterOfInterest.IsHero); bool flag2 = false; if (appliesTo == AppliesTo.ThisHero) { switch (characterHas) { case CharacterHas.Item: flag2 = AtOManager.Instance.CharacterHaveItem(characterOfInterest.SubclassName, perkBase + id) || AtOManager.Instance.CharacterHaveItem(characterOfInterest.SubclassName, id); break; case CharacterHas.Perk: flag2 = AtOManager.Instance.CharacterHavePerk(characterOfInterest.SubclassName, perkBase + id) || AtOManager.Instance.CharacterHavePerk(characterOfInterest.SubclassName, id); break; case CharacterHas.Trait: flag2 = AtOManager.Instance.CharacterHaveTrait(characterOfInterest.SubclassName, perkBase + id) || AtOManager.Instance.CharacterHaveTrait(characterOfInterest.SubclassName, id); break; } } else { switch (characterHas) { case CharacterHas.Item: flag2 = AtOManager.Instance.TeamHaveItem(perkBase + id, -1, false) || AtOManager.Instance.TeamHaveItem(id, -1, false); break; case CharacterHas.Perk: flag2 = AtOManager.Instance.TeamHavePerk(perkBase + id) || AtOManager.Instance.TeamHavePerk(id); break; case CharacterHas.Trait: flag2 = AtOManager.Instance.TeamHaveTrait(perkBase + id) || AtOManager.Instance.TeamHaveTrait(id); break; } } return flag2 && flag; } public static bool TeamHasPerkGACM(Character characterOfInterest, string perkName, AppliesTo appliesTo = AppliesTo.Global, string _type = "", string onlyThisType = "") { if (appliesTo == AppliesTo.None || characterOfInterest == null || (Object)(object)AtOManager.Instance == (Object)null) { return false; } if (_type != "" && onlyThisType != _type) { return false; } bool flag = (characterOfInterest.IsHero && appliesTo == AppliesTo.Heroes) || (!characterOfInterest.IsHero && appliesTo == AppliesTo.Monsters) || appliesTo == AppliesTo.Global; bool flag2 = AtOManager.Instance.TeamHavePerk(perkBase + perkName) || AtOManager.Instance.TeamHavePerk(perkName); return flag2 && flag; } public static bool CharacterHasPerkGACM(Character characterOfInterest, string perkName, AppliesTo appliesTo = AppliesTo.Global) { if (appliesTo == AppliesTo.None || characterOfInterest == null || (Object)(object)AtOManager.Instance == (Object)null) { return false; } bool flag = (characterOfInterest.IsHero && appliesTo == AppliesTo.Heroes) || (!characterOfInterest.IsHero && appliesTo == AppliesTo.Monsters) || appliesTo == AppliesTo.Global; bool flag2 = AtOManager.Instance.CharacterHavePerk(characterOfInterest.SubclassName, perkBase + perkName) || AtOManager.Instance.CharacterHavePerk(characterOfInterest.SubclassName, perkName); return flag2 && flag; } public static bool TeamHasTraitGACM(Character characterOfInterest, string perkName, AppliesTo appliesTo = AppliesTo.Global, string _type = "", string onlyThisType = "") { if (appliesTo == AppliesTo.None || characterOfInterest == null || (Object)(object)AtOManager.Instance == (Object)null) { return false; } if (_type != "" && onlyThisType != _type) { return false; } bool flag = (characterOfInterest.IsHero && appliesTo == AppliesTo.Heroes) || (!characterOfInterest.IsHero && appliesTo == AppliesTo.Monsters) || appliesTo == AppliesTo.Global; bool flag2 = AtOManager.Instance.TeamHaveTrait(perkBase + perkName) || AtOManager.Instance.TeamHavePerk(perkName); return flag2 && flag; } public static bool CharacterHasTraitGACM(Character characterOfInterest, string perkName, AppliesTo appliesTo = AppliesTo.Global, string _type = "", string onlyThisType = "") { if (appliesTo == AppliesTo.None || characterOfInterest == null || (Object)(object)AtOManager.Instance == (Object)null) { return false; } if (_type != "" && onlyThisType != _type) { return false; } bool flag = (characterOfInterest.IsHero && appliesTo == AppliesTo.Heroes) || (!characterOfInterest.IsHero && appliesTo == AppliesTo.Monsters) || appliesTo == AppliesTo.Global; bool flag2 = AtOManager.Instance.CharacterHaveTrait(characterOfInterest.SubclassName, perkBase + perkName) || AtOManager.Instance.TeamHavePerk(perkName); return flag2 && flag; } public static bool TeamHasPerkForSet(string perkName, bool flag, AtOManager __instance, Character _characterTarget) { return _characterTarget != null && __instance.TeamHavePerk(perkBase + perkName) && flag; } public static bool TeamHasPerkForConsume(string perkName, bool flag, AtOManager __instance, Character _characterCaster) { if ((Object)(object)__instance == (Object)null) { return false; } return _characterCaster != null && (__instance.TeamHavePerk(perkBase + perkName) || __instance.TeamHavePerk(perkName)) && flag; } public static bool CharacterObjectHavePerk(Character _character, string _perkID) { if (_character == null || (Object)(object)AtOManager.Instance == (Object)null) { return false; } return AtOManager.Instance.CharacterHavePerk(_character.SubclassName, perkBase + _perkID) || AtOManager.Instance.CharacterHavePerk(_character.SubclassName, _perkID); } public static void PlayCardForFree(string cardToCast) { if (cardToCast != null && !((Object)(object)Globals.Instance == (Object)null)) { CardData cardData = Globals.Instance.GetCardData(cardToCast, true); if ((Object)(object)cardData == (Object)null) { Plugin.LogDebug("Invalid CardName"); } else { ((MonoBehaviour)MatchManager.Instance).StartCoroutine(MatchManager.Instance.CastCard((CardItem)null, true, cardData, 0, -1, true, (Hero)null)); } } } public static void PlaySoundEffect(Character _character, string ACeffect) { if ((Object)(object)_character.HeroItem != (Object)null) { EffectsManager.Instance.PlayEffectAC(ACeffect, true, ((CharacterItem)_character.HeroItem).CharImageT, false, 0f, false); } } public static void DisplayRemainingChargesForTrait(ref Character _character, TraitData traitData) { if ((Object)(object)_character.HeroItem != (Object)null) { ((CharacterItem)_character.HeroItem).ScrollCombatText(Texts.Instance.GetText("traits_" + traitData.TraitName, "") + TextChargesLeft(MatchManager.Instance.activatedTraits[traitData.TraitName], traitData.TimesPerTurn), (CombatScrollEffectType)7); } } public static void DisplayTraitScroll(ref Character _character, TraitData traitData) { HeroItem heroItem = _character.HeroItem; if (heroItem != null) { ((CharacterItem)heroItem).ScrollCombatText(Texts.Instance.GetText("traits_" + traitData.TraitName, ""), (CombatScrollEffectType)7); } } public static void DisplayTraitScroll(ref Character _character, string traitName) { HeroItem heroItem = _character.HeroItem; if (heroItem != null) { ((CharacterItem)heroItem).ScrollCombatText(Texts.Instance.GetText("traits_" + traitName, ""), (CombatScrollEffectType)7); } } public static void IncrementTraitActivations(TraitData traitData) { string id = traitData.Id; if (!MatchManager.Instance.activatedTraits.ContainsKey(id)) { MatchManager.Instance.activatedTraits.Add(id, 1); } else { MatchManager.Instance.activatedTraits[id]++; } MatchManager.Instance.SetTraitInfoText(); } public static void IncrementTraitActivations(string traitId) { TraitData traitData = Globals.Instance.GetTraitData(traitId); IncrementTraitActivations(traitData); } public static bool CanIncrementTraitActivations(TraitData traitData, int bonusActivations = 0) { Plugin.LogDebug("canIncrementTraitActivations"); if ((Object)(object)traitData == (Object)null) { return false; } string id = traitData.Id; if ((Object)(object)MatchManager.Instance == (Object)null) { return false; } if (MatchManager.Instance.activatedTraits == null) { return false; } if (MatchManager.Instance.activatedTraits.ContainsKey(id) && MatchManager.Instance.activatedTraits[id] > traitData.TimesPerTurn - 1 + bonusActivations) { return false; } if (!MatchManager.Instance.activatedTraits.ContainsKey(id)) { MatchManager.Instance.activatedTraits.Add(id, 0); } return true; } public static bool CanIncrementTraitActivations(string traitId, int bonusActivations = 0) { TraitData traitData = Globals.Instance.GetTraitData(traitId); return CanIncrementTraitActivations(traitData, bonusActivations); } public static void ModifyAllAurasOrCursesByPercent(int percentToModify, IsAuraOrCurse isAuraOrCurse, Character _characterTarget, Character _characterCaster) { if (percentToModify == 0 || _characterTarget == null || !_characterTarget.Alive) { return; } int num = 0; int num2 = 0; int num3 = 0; int num4 = 0; if ((isAuraOrCurse == IsAuraOrCurse.Aura || isAuraOrCurse == IsAuraOrCurse.Both) && percentToModify > 0) { num = percentToModify; } if ((isAuraOrCurse == IsAuraOrCurse.Aura || isAuraOrCurse == IsAuraOrCurse.Both) && percentToModify < 0) { num2 = Math.Abs(percentToModify); } if ((isAuraOrCurse == IsAuraOrCurse.Curse || isAuraOrCurse == IsAuraOrCurse.Both) && percentToModify > 0) { num3 = percentToModify; } if ((isAuraOrCurse == IsAuraOrCurse.Curse || isAuraOrCurse == IsAuraOrCurse.Both) && percentToModify < 0) { num4 = Math.Abs(percentToModify); } if (_characterTarget == null || !_characterTarget.Alive) { return; } for (int i = 0; i < 4; i++) { if ((i == 0 && num <= 0) || (i == 1 && num3 <= 0) || (i == 2 && num2 <= 0) || (i == 3 && num4 <= 0)) { continue; } List list = new List(); List list2 = new List(); for (int j = 0; j < _characterTarget.AuraList.Count; j++) { if (_characterTarget.AuraList[j] != null && (Object)(object)_characterTarget.AuraList[j].ACData != (Object)null && _characterTarget.AuraList[j].GetCharges() > 0 && !(_characterTarget.AuraList[j].ACData.Id == "furnace")) { bool flag = false; if ((i == 0 || i == 2) && _characterTarget.AuraList[j].ACData.IsAura) { flag = true; } else if ((i == 1 || i == 3) && !_characterTarget.AuraList[j].ACData.IsAura) { flag = true; } if (flag) { list.Add(_characterTarget.AuraList[j].ACData.Id); list2.Add(_characterTarget.AuraList[j].GetCharges()); } } } if (list.Count <= 0) { continue; } for (int k = 0; k < list.Count; k++) { int num5 = i switch { 0 => Functions.FuncRoundToInt((float)((double)list2[k] * (double)num / 100.0)), 1 => Functions.FuncRoundToInt((float)((double)list2[k] * (double)num3 / 100.0)), 2 => list2[k] - Functions.FuncRoundToInt((float)((double)list2[k] * (double)num2 / 100.0)), _ => list2[k] - Functions.FuncRoundToInt((float)((double)list2[k] * (double)num4 / 100.0)), }; switch (i) { case 0: case 1: { AuraCurseData val = AtOManager.Instance.GlobalAuraCurseModificationByTraitsAndItems("set", list[k], _characterCaster, _characterTarget, false); if ((Object)(object)val != (Object)null) { int maxCharges = val.GetMaxCharges(); if (maxCharges > -1 && list2[k] + num5 > maxCharges) { num5 = maxCharges - list2[k]; } _characterTarget.SetAura(_characterCaster, val, num5, false, (CardClass)11, false, false); } break; } case 2: case 3: if (num5 <= 0) { num5 = 1; } _characterTarget.ModifyAuraCurseCharges(list[k], num5); _characterTarget.UpdateAuraCurseFunctions((AuraCurseData)null, 0, -1); break; } } } } public static void ApplyAuraCurseToAll(string acToApply, int nToApply, AppliesTo appliesTo, Character sourceCharacter = null, bool useCharacterMods = false, bool isPreventable = true) { Plugin.LogInfo("ApplyAuraCurseToAll"); if ((Object)(object)MatchManager.Instance == (Object)null) { Plugin.LogError("No MatchManager"); return; } if (sourceCharacter == null && useCharacterMods) { Plugin.LogError("No Source Character"); return; } AuraCurseData auraCurseData = GetAuraCurseData(acToApply); if ((Object)(object)auraCurseData == (Object)null) { Plugin.LogError("Improper AuraCurse"); return; } Hero[] teamHero = MatchManager.Instance.GetTeamHero(); NPC[] teamNPC = MatchManager.Instance.GetTeamNPC(); switch (appliesTo) { case AppliesTo.Heroes: { Hero[] array2 = teamHero; foreach (Hero val2 in array2) { if (IsLivingHero((Character)(object)val2)) { ((Character)val2).SetAura(sourceCharacter, auraCurseData, nToApply, false, (CardClass)11, useCharacterMods, isPreventable); } } break; } case AppliesTo.Global: { Hero[] array3 = teamHero; foreach (Hero val3 in array3) { if (IsLivingHero((Character)(object)val3)) { ((Character)val3).SetAura(sourceCharacter, auraCurseData, nToApply, false, (CardClass)11, useCharacterMods, isPreventable); } } NPC[] array4 = teamNPC; foreach (NPC val4 in array4) { if (IsLivingNPC((Character)(object)val4)) { ((Character)val4).SetAura(sourceCharacter, auraCurseData, nToApply, false, (CardClass)11, useCharacterMods, isPreventable); } } break; } case AppliesTo.Monsters: { NPC[] array = teamNPC; foreach (NPC val in array) { if (IsLivingNPC((Character)(object)val)) { ((Character)val).SetAura(sourceCharacter, auraCurseData, nToApply, false, (CardClass)11, useCharacterMods, isPreventable); } } break; } } } public static string CollectionToString(Collection values) { return string.Join(",", values); } public static string CollectionToString(Dictionary dictionary) { return "{" + string.Join(",", dictionary.Select((KeyValuePair kv) => kv.Key + "=" + kv.Value).ToArray()) + "}"; } public static void DrawCards(int numToDraw) { MatchManager.Instance.NewCard(numToDraw, (CardFrom)0, ""); } public static void GainEnergy(Character _character, int energyToGain, TraitData traitData = null) { if (!IsLivingHero(_character)) { Plugin.LogDebug("GainEnergy - Invalid Character"); return; } Plugin.LogDebug("GainEnergy - Modifying Energy"); _character.ModifyEnergy(energyToGain, true); if (_character.HeroItem != null) { Plugin.LogDebug("GainEnergy - Setting Effect AC"); EffectsManager.Instance.PlayEffectAC("energy", true, ((CharacterItem)_character.HeroItem).CharImageT, false, 0f, false); if (!((Object)(object)traitData == (Object)null)) { } } } public static void StealAuraCurses(ref Character characterStealing, ref Character characterToStealFrom, int nToSteal, IsAuraOrCurse isAuraOrCurse = IsAuraOrCurse.Aura) { if (isAuraOrCurse == IsAuraOrCurse.Both) { Plugin.LogDebug("Must Specify Aura or Curse to Steal"); return; } if (characterStealing == null || characterToStealFrom == null || !characterStealing.Alive || !characterToStealFrom.Alive) { Plugin.LogDebug("Character to Steal from or Character Stealing is not a valid living character"); return; } List list = new List(); List list2 = new List(); int num = 0; if (characterToStealFrom != null) { for (int i = 0; i < characterToStealFrom.AuraList.Count; i++) { if (num >= nToSteal) { break; } bool flag = characterToStealFrom.AuraList[i] != null && (Object)(object)characterToStealFrom.AuraList[i].ACData != (Object)null; bool flag2 = ((isAuraOrCurse == IsAuraOrCurse.Aura) ? characterToStealFrom.AuraList[i].ACData.IsAura : (!characterToStealFrom.AuraList[i].ACData.IsAura)); bool flag3 = characterToStealFrom.AuraList[i].ACData.Removable && characterToStealFrom.AuraList[i].GetCharges() > 0; if (flag && flag2 && flag3) { list.Add(characterToStealFrom.AuraList[i].ACData.Id); list2.Add(characterToStealFrom.AuraList[i].GetCharges()); num++; } } } if (num <= 0) { return; } characterToStealFrom.HealCursesName(list, ""); for (int j = 0; j < list.Count; j++) { if (characterStealing != null && characterStealing.Alive) { characterStealing.SetAura(characterToStealFrom, Globals.Instance.GetAuraCurseData(list[j]), list2[j], false, (CardClass)11, true, true); } } } public static List GetDeck(Character character) { return character.Cards; } public static List GetDeckCardData(Character character) { List list = new List(); foreach (string card in character.Cards) { list.Add(Globals.Instance.GetCardData(card, true)); } return list; } public static int CountAllACOnCharacter(Character character, IsAuraOrCurse isAuraOrCurse) { int num = 0; foreach (Aura aura in character.AuraList) { bool flag = true; switch (isAuraOrCurse) { case IsAuraOrCurse.Aura: flag = aura.ACData.IsAura; break; case IsAuraOrCurse.Curse: flag = !aura.ACData.IsAura; break; case IsAuraOrCurse.Both: flag = true; break; } if (flag) { num += aura.AuraCharges; } } return num; } public static void ReduceCardCost(ref CardData cardData, Character currentCharacter = null, int amountToReduce = 1, bool isPermanent = false) { if ((Object)(object)MatchManager.Instance == (Object)null || (Object)(object)cardData == (Object)null) { Plugin.LogError("Null MatchManager/card"); return; } Plugin.LogDebug("Reducing card Cost"); if (currentCharacter == null) { currentCharacter = (Character)(object)MatchManager.Instance.GetHeroHeroActive(); } if (currentCharacter == null) { Plugin.LogError("Null Current Character"); return; } if (isPermanent) { Plugin.LogDebug("Reducing card Cost - permanent"); CardData obj = cardData; obj.EnergyReductionPermanent += amountToReduce; } else { Plugin.LogDebug("Reducing card Cost - temporary"); CardData obj2 = cardData; obj2.EnergyReductionTemporal += amountToReduce; } Plugin.LogDebug("Reducing card Cost - updates"); MatchManager.Instance.GetCardFromTableByIndex(cardData.InternalId).ShowEnergyModification(-amountToReduce); MatchManager.Instance.UpdateHandCards(); MatchManager.Instance.CreateLogCardModification(cardData.InternalId, MatchManager.Instance.GetHero(currentCharacter.HeroIndex)); Plugin.LogDebug("Reducing card Cost - END"); } public static CardData GetRandomHighestCostCard(CardType cardType, List heroHand = null) { //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)MatchManager.Instance == (Object)null) { Plugin.LogError("Null MatchManager"); return null; } if (heroHand == null) { heroHand = MatchManager.Instance.GetHeroHand(MatchManager.Instance.GetHeroActive()); } int num = 0; List list = new List(); for (int i = 0; i < heroHand.Count; i++) { CardData cardData = MatchManager.Instance.GetCardData(heroHand[i], true); if (cardData != null && (cardData.GetCardTypes().Contains(cardType) || (int)cardType == 0) && cardData.GetCardFinalCost() > num) { num = cardData.GetCardFinalCost(); } } if (num <= 0) { return null; } for (int j = 0; j < heroHand.Count; j++) { CardData cardData2 = MatchManager.Instance.GetCardData(heroHand[j], true); if (cardData2 != null && (cardData2.GetCardTypes().Contains(cardType) || (int)cardType == 0) && cardData2.GetCardFinalCost() >= num) { list.Add(cardData2); } } if (list.Count <= 0) { return null; } return (list.Count != 1) ? list[MatchManager.Instance.GetRandomIntRange(0, list.Count, "default", "")] : list[0]; } public static List GetCardsFromHand(CardType cardType = 0, int equalOrAboveCertainCost = 0, int lessThanOrEqualToThisCost = 100) { //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) Character heroHeroActive = (Character)(object)MatchManager.Instance.GetHeroHeroActive(); List heroHand = MatchManager.Instance.GetHeroHand(heroHeroActive.HeroIndex); List list = new List(); for (int i = 0; i < heroHand.Count; i++) { CardData cardData = MatchManager.Instance.GetCardData(heroHand[i], true); if ((Object)(object)cardData != (Object)null && cardData.GetCardFinalCost() > 0 && (cardData.GetCardTypes().Contains(cardType) || (int)cardType == 0) && cardData.GetCardFinalCost() >= equalOrAboveCertainCost && cardData.GetCardFinalCost() <= lessThanOrEqualToThisCost) { list.Add(cardData); } } return list; } public static List GetCardsFromHand(List heroHand, CardType cardType = 0, int equalOrAboveCertainCost = 0, int lessThanOrEqualToThisCost = 100) { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) List list = new List(); for (int i = 0; i < heroHand.Count; i++) { CardData cardData = MatchManager.Instance.GetCardData(heroHand[i], true); if ((Object)(object)cardData != (Object)null && cardData.GetCardFinalCost() > 0 && (cardData.GetCardTypes().Contains(cardType) || (int)cardType == 0) && cardData.GetCardFinalCost() >= equalOrAboveCertainCost && cardData.GetCardFinalCost() <= lessThanOrEqualToThisCost) { list.Add(cardData); } } return list; } public static CardData GetRightmostCard(List heroHand) { return MatchManager.Instance.GetCardData(heroHand.Last(), true); } } [BepInPlugin("com.binbin.CasualOptions", "CasualOptions", "0.2.1")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInProcess("AcrossTheObelisk.exe")] public class Plugin : BaseUnityPlugin { public static string PluginName; public static string PluginVersion; public static string PluginGUID; internal static int ModDate = int.Parse(DateTime.Today.ToString("yyyyMMdd")); private readonly Harmony harmony = new Harmony("com.binbin.CasualOptions"); internal static ManualLogSource Log; internal static bool EssentialsInstalled = false; public static string debugBase = "com.binbin.CasualOptions "; public static ConfigEntry EnableMod { get; set; } public static ConfigEntry EnableDebugging { get; set; } public static ConfigEntry ResourceMultiplier { get; set; } public static ConfigEntry ExpMultiplier { get; set; } public static ConfigEntry UnlimitedRerolls { get; set; } public static ConfigEntry UnlimitedConsumables { get; set; } public static ConfigEntry BonusEnergyPerTurn { get; set; } public static ConfigEntry BuffToAdd { get; set; } public static ConfigEntry BuffAmountToAdd { get; set; } public static ConfigEntry BuffWhenToAdd { get; set; } public static ConfigEntry NoDeathPenalty { get; set; } public static ConfigEntry HPToGainPostCombat { get; set; } public static ConfigEntry PostCombatHeal { get; set; } private void Awake() { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Expected O, but got Unknown //IL_0049: Expected O, but got Unknown //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Expected O, but got Unknown //IL_0076: Expected O, but got Unknown //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Expected O, but got Unknown //IL_00a7: Expected O, but got Unknown //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Expected O, but got Unknown //IL_00d8: Expected O, but got Unknown //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Expected O, but got Unknown //IL_0105: Expected O, but got Unknown //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Expected O, but got Unknown //IL_0132: Expected O, but got Unknown //IL_025b: Unknown result type (might be due to invalid IL or missing references) //IL_026c: Unknown result type (might be due to invalid IL or missing references) //IL_0276: Expected O, but got Unknown //IL_0276: Expected O, but got Unknown //IL_0294: Unknown result type (might be due to invalid IL or missing references) //IL_02a9: Unknown result type (might be due to invalid IL or missing references) //IL_02b3: Expected O, but got Unknown //IL_02b3: Expected O, but got Unknown //IL_02c5: Unknown result type (might be due to invalid IL or missing references) //IL_02d6: Unknown result type (might be due to invalid IL or missing references) //IL_02e0: Expected O, but got Unknown //IL_02e0: Expected O, but got Unknown //IL_0316: Unknown result type (might be due to invalid IL or missing references) //IL_032b: Unknown result type (might be due to invalid IL or missing references) //IL_0335: Expected O, but got Unknown //IL_0335: Expected O, but got Unknown //IL_0347: Unknown result type (might be due to invalid IL or missing references) //IL_0358: Unknown result type (might be due to invalid IL or missing references) //IL_0362: Expected O, but got Unknown //IL_0362: Expected O, but got Unknown //IL_0374: Unknown result type (might be due to invalid IL or missing references) //IL_0385: Unknown result type (might be due to invalid IL or missing references) //IL_038f: Expected O, but got Unknown //IL_038f: Expected O, but got Unknown //IL_03a1: 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_03bd: Expected O, but got Unknown //IL_03bd: Expected O, but got Unknown Log = ((BaseUnityPlugin)this).Logger; Log.LogInfo((object)"com.binbin.CasualOptions 0.2.1 has loaded!"); string text = "CasualOptions"; EnableMod = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "EnableMod"), true, new ConfigDescription("Enables the mod. If false, the mod will not work then next time you load the game.", (AcceptableValueBase)null, Array.Empty())); EnableDebugging = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "EnableDebugging"), false, new ConfigDescription("Enables the debugging", (AcceptableValueBase)null, Array.Empty())); ResourceMultiplier = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "ResourceMultiplier"), 200, new ConfigDescription("Multiplier on Gold/Shards gained (in percent, so 200 will double exp gained). Does not appear visually.", (AcceptableValueBase)null, Array.Empty())); ExpMultiplier = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "ExpMultiplier"), 200, new ConfigDescription("Multiplier on Experience gained (in percent, so 200 will double exp gained).", (AcceptableValueBase)null, Array.Empty())); UnlimitedRerolls = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "UnlimitedRerolls"), true, new ConfigDescription("Enables Unlimited Rerolls in Towns", (AcceptableValueBase)null, Array.Empty())); UnlimitedConsumables = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "UnlimitedConsumables"), true, new ConfigDescription("All Items can be activated an infinite number of times.", (AcceptableValueBase)null, Array.Empty())); List list = new List(22) { "bless", "sharp", "inspire", "energize", "powerful", "fury", "fortify", "block", "shield", "fast", "mitigate", "regeneration", "reinforce", "spellsword", "stanzai", "stanzaii", "stanzaiii", "stealth", "taunt", "thorns", "vitality", "zeal" }; list.Sort(); BonusEnergyPerTurn = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "BonusEnergyPerTurn"), 1, new ConfigDescription("Bonus energy added each turn.", (AcceptableValueBase)null, Array.Empty())); AcceptableValueList val = new AcceptableValueList(list.ToArray()); BuffToAdd = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "BuffToAdd"), "bless", new ConfigDescription("Allows you to add a specific buff to all Heroes.", (AcceptableValueBase)(object)val, Array.Empty())); BuffAmountToAdd = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "BuffAmountToAdd"), 5, new ConfigDescription("Amount of each buff to add.", (AcceptableValueBase)null, Array.Empty())); AcceptableValueList val2 = new AcceptableValueList(new string[3] { "Combat Start", "Every Turn", "Every Round" }); BuffWhenToAdd = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "BuffWhenToAdd"), "Combat Start", new ConfigDescription("Determines when you add the amount of the buff.", (AcceptableValueBase)(object)val2, Array.Empty())); NoDeathPenalty = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "NoDeathPenalty"), true, new ConfigDescription("No longer gain Death's Door when a character dies.", (AcceptableValueBase)null, Array.Empty())); HPToGainPostCombat = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "HPToGainPostCombat"), 2, new ConfigDescription("After every combat, all Heroes gain this much Max Health.", (AcceptableValueBase)null, Array.Empty())); PostCombatHeal = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "PostCombatHealPercent"), 20, new ConfigDescription("After every combat, all Heroes will heal by this % of their Max HP.", (AcceptableValueBase)null, Array.Empty())); PluginName = "CasualOptions"; PluginVersion = "0.2.1"; PluginGUID = "com.binbin.CasualOptions"; if (EnableMod.Value) { EssentialsCompatibility.EssentialsRegister(); harmony.PatchAll(); } } internal static void LogDebug(string msg) { if (EnableDebugging.Value) { Log.LogDebug((object)(debugBase + msg)); } } internal static void LogInfo(string msg) { Log.LogInfo((object)(debugBase + msg)); } internal static void LogError(string msg) { Log.LogError((object)(debugBase + msg)); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] internal static void EssentialsRegister(string msg) { EssentialsInstalled = Chainloader.PluginInfos.ContainsKey("com.stiffmeds.obeliskialessentials"); if (EssentialsInstalled) { Essentials.RegisterMod("CasualOptions", "binbin", "Casual Options", "0.2.1", ModDate, "https://github.com/binbinmods/GrindReducer", (string[])null, "", 100, (string[])null, "", true); } } } public static class PluginInfo { public const string PLUGIN_GUID = "com.binbin.CasualOptions"; public const string PLUGIN_NAME = "CasualOptions"; public const string PLUGIN_VERSION = "0.2.1"; } }