Decompiled source of Unofficial AtO Balance Patch Beta v1.8.4
BepInEx/plugins/com.binbin.UnofficialBalancePatch.dll
Decompiled 2 weeks ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; 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.UnofficialBalancePatch")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.8.4.0")] [assembly: AssemblyInformationalVersion("1.8.4+e76563649bba2863393627927fb48321997a891a")] [assembly: AssemblyProduct("UnofficialBalancePatch")] [assembly: AssemblyTitle("com.binbin.UnofficialBalancePatch")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.8.4.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; } } } namespace UnofficialBalancePatch { public class BalanceFunctions { public static string NumFormatItem(int num, bool plus = false, bool percent = false) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append(" <nobr>"); if (num > 0) { stringBuilder.Append("<color=#263ABC><size=+.1>"); if (plus) { stringBuilder.Append("+"); } } else { stringBuilder.Append("<color=#720070><size=+.1>"); if (plus) { stringBuilder.Append("-"); } } stringBuilder.Append(Mathf.Abs(num)); if (percent) { stringBuilder.Append("%"); } stringBuilder.Append("</color></size></nobr>"); return stringBuilder.ToString(); } public static void BinbinNormalizeDescription(ref CardData __instance, StringBuilder stringBuilder) { stringBuilder.Replace("<c>", "<color=#5E3016>"); stringBuilder.Replace("</c>", "</color>"); stringBuilder.Replace("<nb>", "<nobr>"); stringBuilder.Replace("</nb>", "</nobr>"); stringBuilder.Replace("<br1>", "<br><line-height=15%><br></line-height>"); stringBuilder.Replace("<br2>", "<br><line-height=30%><br></line-height>"); stringBuilder.Replace("<br3>", "<br><line-height=50%><br></line-height>"); string input = stringBuilder.ToString(); input = Regex.Replace(input, "[,][ ]*(<(.*?)>)*(.)", (Match m) => m.ToString().ToLower()); input = Regex.Replace(input, "<br>\\w", (Match m) => m.ToString().ToUpper()); Globals.Instance.CardsDescriptionNormalized[__instance.Id] = stringBuilder.ToString(); __instance.DescriptionNormalized = input; Traverse.Create((object)__instance).Field("descriptionNormalized").SetValue((object)input); } public static void HandleDamagePercentDescription(ref StringBuilder stringBuilder, ItemData itemData, DamageType damageType, float percentIncrease) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Invalid comparison between Unknown and I4 if (itemData.Id == "battleaxerare") { Plugin.LogDebug(" battleaxerare"); } if ((int)damageType != 0 && (int)damageType != 10 && percentIncrease != 0f) { string text = ((object)(DamageType)(ref damageType)).ToString().ToLower(); int num = Functions.FuncRoundToInt(itemData.DamagePercentBonusValue); string key = "item" + text + "Damages"; string value = string.Format(Essentials.medsTexts[key], NumFormatItem(num, plus: true, percent: true)) + "\n"; stringBuilder.Insert(0, value); } } public static void HandleAllDamagePercentDescriptions(ref CardData __instance) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Invalid comparison between Unknown and I4 //IL_0071: 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_00b3: Unknown result type (might be due to invalid IL or missing references) StringBuilder stringBuilder = new StringBuilder(); if (!((Object)(object)__instance.Item == (Object)null)) { ItemData item = __instance.Item; if ((int)item.DamagePercentBonus != 0 || (int)item.DamagePercentBonus2 != 0 || (int)item.DamagePercentBonus3 != 0) { stringBuilder.Append(Globals.Instance.CardsDescriptionNormalized[__instance.Id]); HandleDamagePercentDescription(ref stringBuilder, item, __instance.Item.DamagePercentBonus, __instance.Item.DamagePercentBonusValue); HandleDamagePercentDescription(ref stringBuilder, item, __instance.Item.DamagePercentBonus2, __instance.Item.DamagePercentBonusValue2); HandleDamagePercentDescription(ref stringBuilder, item, __instance.Item.DamagePercentBonus3, __instance.Item.DamagePercentBonusValue3); BinbinNormalizeDescription(ref __instance, stringBuilder); } } } public static void UpdateMaxMadnessChargesByItem(ref AuraCurseData __result, Character characterOfInterest, string itemID) { if ((Object)(object)__result == (Object)null) { Plugin.LogDebug("null AuraCurse"); return; } CustomFunctions.AppliesTo appliesTo = (__result.IsAura ? CustomFunctions.AppliesTo.Heroes : CustomFunctions.AppliesTo.Monsters); if (CustomFunctions.IfCharacterHas(characterOfInterest, CustomFunctions.CharacterHas.Item, itemID + "rare", appliesTo)) { Plugin.LogDebug("UpdateChargesByItem: " + itemID + "rare"); ItemData itemData = Globals.Instance.GetItemData(itemID + "rare"); if (!((Object)(object)itemData == (Object)null)) { if (__result.MaxCharges != -1) { AuraCurseData obj = __result; obj.MaxCharges += itemData.AuracurseCustomModValue1; } if (__result.MaxMadnessCharges != -1) { AuraCurseData obj2 = __result; obj2.MaxMadnessCharges += itemData.AuracurseCustomModValue1; } } } else { if (!CustomFunctions.IfCharacterHas(characterOfInterest, CustomFunctions.CharacterHas.Item, itemID, appliesTo)) { return; } Plugin.LogDebug("UpdateChargesByItem: " + itemID); ItemData itemData2 = Globals.Instance.GetItemData(itemID); if (!((Object)(object)itemData2 == (Object)null)) { if (__result.MaxCharges != -1) { AuraCurseData obj3 = __result; obj3.MaxCharges += itemData2.AuracurseCustomModValue1; } if (__result.MaxMadnessCharges != -1) { AuraCurseData obj4 = __result; obj4.MaxMadnessCharges += itemData2.AuracurseCustomModValue1; } Plugin.LogDebug($"UpdateChargesByItem: {itemID} - post update max charges {__result.MaxMadnessCharges}"); } } } public static string SpriteText(string sprite) { StringBuilder stringBuilder = new StringBuilder(); string text = sprite.ToLower().Replace(" ", ""); switch (text) { case "block": case "card": stringBuilder.Append("<space=.2>"); break; case "piercing": stringBuilder.Append("<space=.4>"); break; case "bleed": stringBuilder.Append("<space=.1>"); break; case "bless": stringBuilder.Append("<space=.1>"); break; default: stringBuilder.Append("<space=.3>"); break; } stringBuilder.Append(" <space=-.2>"); stringBuilder.Append("<size=+.1><sprite name="); stringBuilder.Append(text); stringBuilder.Append("></size>"); switch (text) { case "bleed": stringBuilder.Append("<space=-.4>"); break; case "card": stringBuilder.Append("<space=-.2>"); break; case "powerful": case "fury": stringBuilder.Append("<space=-.1>"); break; default: stringBuilder.Append("<space=-.2>"); break; case "reinforce": case "fire": break; } return stringBuilder.ToString(); } public static string ColorTextArray(string type, params string[] text) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append("<nobr>"); if (type == null || type.Length != 0) { switch (type) { case "damage": stringBuilder.Append("<color=#B00A00>"); break; case "heal": stringBuilder.Append("<color=#1E650F>"); break; case "aura": stringBuilder.Append("<color=#263ABC>"); break; case "curse": stringBuilder.Append("<color=#720070>"); break; case "system": stringBuilder.Append("<color=#5E3016>"); break; default: stringBuilder.Append("<color=#5E3016"); stringBuilder.Append(">"); break; } } int num = 0; foreach (string value in text) { if (num > 0) { stringBuilder.Append(" "); } stringBuilder.Append(value); num++; } if (type != "") { stringBuilder.Append("</color>"); } stringBuilder.Append("</nobr> "); return stringBuilder.ToString(); } public static void AppendDescriptionsToCards(CardData __instance, ref StringBuilder stringBuilder1) { if (BalancePatches.cardsToAppendDescription.Contains(__instance.Id)) { Plugin.LogDebug("Creating description for " + __instance.Id); Plugin.LogDebug($"Current description {__instance.Id}: {stringBuilder1}"); string text = Plugin.itemStem + __instance.Id; stringBuilder1.Append(Functions.FormatStringCard(Texts.Instance.GetText(text, ""))); } } public static void PrependDescriptionsToCards(CardData __instance, ref StringBuilder stringBuilder1) { if (BalancePatches.cardsToPrependDescription.Contains(__instance.Id)) { Plugin.LogDebug("Creating description for " + __instance.Id); Plugin.LogDebug($"Current description {__instance.Id}: {stringBuilder1}"); string text = Plugin.itemStem + __instance.Id; string value = Functions.FormatStringCard(Texts.Instance.GetText(text, "")); stringBuilder1.Insert(0, value); } } } [HarmonyPatch] public class BalancePatches { public static List<string> cardsWithCustomDescriptions = new List<string>(15) { "surprisebox", "surpriseboxrare", "surprisegiftbox", "surprisegiftboxrare", "bbbtreefellingaxe", "bbbtreefellingaxerare", "bbbcloakofthorns", "bbbcloakofthornsrare", "bbbportablewallofflames", "bbbportablewallofflamesrare", "bbbslimepoison", "bbbslimepoisonrare", "bbbscrollofpetimmortality", "bbbscrollofpetimmortalityrare", "rocketbootsrare" }; public static List<string> cardsToAppendDescription = new List<string>(8) { "bbbrustedshield", "bbbrustedshieldrare", "soullanternrare", "boneclawsrare", "mozzy", "mozzyrare", "bbbmelancholicarmor", "bbbmelancholicarmorare" }; public static List<string> cardsToPrependDescription = new List<string>(8) { "mimy", "mimyrare", "captainspresencered", "captainspresencereda", "captainspresenceredb", "captainspresenceblack", "captainspresenceblacka", "captainspresenceblackb" }; [HarmonyPrefix] [HarmonyPatch(typeof(Item), "surprisebox")] public static bool surpriseboxPrefix(Item __instance, Character theCharacter, bool isRare, string itemName) { Plugin.LogDebug("executing supriseboxPrefix"); if (!((Object)(object)MatchManager.Instance != (Object)null)) { return false; } int randomIntRange = MatchManager.Instance.GetRandomIntRange(0, 9, "item", ""); int num = 4; string text; switch (randomIntRange) { case 0: num = (isRare ? 8 : 4); text = "fast"; break; case 1: num = (isRare ? 20 : 6); text = "powerful"; break; case 2: num = (isRare ? 14 : 7); text = "bless"; break; case 3: num = (isRare ? 20 : 10); text = "sharp"; break; case 4: num = (isRare ? 12 : 5); text = "fortify"; break; case 5: num = (isRare ? 5 : 3); text = "evasion"; break; case 6: num = (isRare ? 20 : 10); text = "regeneration"; break; case 7: num = (isRare ? 6 : 3); text = "mitigate"; break; default: num = (isRare ? 24 : 12); text = "vitality"; break; } theCharacter.SetAuraTrait(theCharacter, text, num); ((CharacterItem)theCharacter.HeroItem).ScrollCombatText(itemName, (CombatScrollEffectType)11); return false; } [HarmonyPrefix] [HarmonyPatch(typeof(Item), "surprisegiftbox")] public static bool surprisegiftboxPrefix(Item __instance, Character theCharacter, bool isRare, string itemName) { Plugin.LogDebug("executing surprisegiftbox prefix"); if (!((Object)(object)MatchManager.Instance != (Object)null)) { return false; } int randomIntRange = MatchManager.Instance.GetRandomIntRange(0, 9, "item", ""); int num = 4; string text; switch (randomIntRange) { case 0: num = (isRare ? 8 : 4); text = "fast"; break; case 1: num = (isRare ? 20 : 6); text = "powerful"; break; case 2: num = (isRare ? 10 : 5); text = "bless"; break; case 3: num = (isRare ? 15 : 6); text = "sharp"; break; case 4: num = (isRare ? 12 : 6); text = "fortify"; break; case 5: num = (isRare ? 4 : 2); text = "evasion"; break; case 6: num = (isRare ? 20 : 10); text = "regeneration"; break; case 7: num = (isRare ? 6 : 3); text = "mitigate"; break; default: num = (isRare ? 24 : 12); text = "vitality"; break; } Hero[] teamHero = MatchManager.Instance.GetTeamHero(); for (int i = 0; i < teamHero.Length; i++) { if (teamHero[i] != null && (Object)(object)((Character)teamHero[i]).HeroData != (Object)null && ((Character)teamHero[i]).Alive) { ((Character)teamHero[i]).SetAuraTrait(theCharacter, text, num); } } ((CharacterItem)theCharacter.HeroItem).ScrollCombatText(itemName, (CombatScrollEffectType)11); return false; } [HarmonyPostfix] [HarmonyPatch(typeof(CardData), "SetDescriptionNew")] public static void SetDescriptionNewPostfix(ref CardData __instance, bool forceDescription = false, Character character = null, bool includeInSearch = true) { //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Invalid comparison between Unknown and I4 //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Invalid comparison between Unknown and I4 //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Invalid comparison between Unknown and I4 if ((Object)(object)__instance == (Object)null) { Plugin.LogDebug("Null Card"); return; } StringBuilder stringBuilder = new StringBuilder(); string value = Globals.Instance.CardsDescriptionNormalized[__instance.Id]; stringBuilder.Append(value); if ((Object)(object)__instance.Item != (Object)null && (int)__instance.Item.Activation == 22 && __instance.Item.ExactRound >= 2) { Plugin.LogDebug("Attempting to alter description for " + __instance.Id); Plugin.LogDebug($"Current description {__instance.Id}: {stringBuilder}"); stringBuilder.Replace("Every turn", $"On turn {__instance.Item.ExactRound}"); } if ((Object)(object)__instance.Item != (Object)null && (int)__instance.Item.Activation == 2 && __instance.Item.ExactRound >= 2) { Plugin.LogDebug("Attempting to alter description for " + __instance.Id); stringBuilder.Replace("Every round", $"On round {__instance.Item.ExactRound}"); } if (__instance.EnergyRecharge != 0 && (int)__instance.TargetSide == 0) { Plugin.LogDebug($"Current description for {__instance.Id}: {stringBuilder}"); stringBuilder.Replace("Grant", "Gain"); } BalanceFunctions.BinbinNormalizeDescription(ref __instance, stringBuilder); } [HarmonyPostfix] [HarmonyPatch(typeof(AtOManager), "GlobalAuraCurseModificationByTraitsAndItems")] public static void GlobalAuraCurseModificationByTraitsAndItemsPostfixGeneral(ref AtOManager __instance, ref AuraCurseData __result, string _type, string _acId, Character _characterCaster, Character _characterTarget) { Character val = ((_type == "set") ? _characterTarget : _characterCaster); if (val == null || !val.Alive) { return; } switch (_acId) { case "bleed": { string itemID = "bloodstone"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); itemID = "yoggercleaver"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); if (CustomFunctions.IfCharacterHas(val, CustomFunctions.CharacterHas.Item, "bbbtreefellingaxe", CustomFunctions.AppliesTo.Monsters) || CustomFunctions.IfCharacterHas(val, CustomFunctions.CharacterHas.Item, "bbbtreefellingaxerare", CustomFunctions.AppliesTo.Monsters)) { __result.Preventable = false; } itemID = "boneclawsrare"; if (CustomFunctions.IfCharacterHas(val, CustomFunctions.CharacterHas.Item, itemID, CustomFunctions.AppliesTo.ThisHero)) { __result.DamageTypeWhenConsumed = (DamageType)0; __result.DamageWhenConsumedPerCharge = 0f; } itemID = "mozzy"; if (CustomFunctions.IfCharacterHas(val, CustomFunctions.CharacterHas.Item, itemID, CustomFunctions.AppliesTo.ThisHero) || CustomFunctions.IfCharacterHas(val, CustomFunctions.CharacterHas.Item, itemID + "rare", CustomFunctions.AppliesTo.ThisHero)) { __result.ConsumedAtTurn = true; __result.ConsumedAtTurnBegin = false; } break; } case "bless": { string itemID = "topazring"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); break; } case "block": { string itemID = "crusaderhelmet"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); break; } case "burn": { string itemID = "solring"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); itemID = "ringoffire"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); itemID = "captainspresencered"; if (CustomFunctions.IfCharacterHas(val, CustomFunctions.CharacterHas.Enchantment, itemID, CustomFunctions.AppliesTo.ThisHero)) { __result.Preventable = false; __result.Removable = false; } break; } case "chill": { string itemID = "lunaring"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); itemID = "neverfrost"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); break; } case "crack": { string itemID = "bronzegear"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); itemID = "ironkanabo"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); break; } case "dark": { string itemID = "blackpyramid"; if (CustomFunctions.IfCharacterHas(val, CustomFunctions.CharacterHas.Item, itemID + "rare", CustomFunctions.AppliesTo.Monsters)) { __result.ExplodeAtStacks = 34; } else if (CustomFunctions.IfCharacterHas(val, CustomFunctions.CharacterHas.Item, itemID, CustomFunctions.AppliesTo.Monsters)) { __result.ExplodeAtStacks = 30; } itemID = "soullanternrare"; if (CustomFunctions.IfCharacterHas(val, CustomFunctions.CharacterHas.Item, itemID, CustomFunctions.AppliesTo.ThisHero)) { __result.ExplodeAtStacks = 0; __result.DamageTypeWhenConsumed = (DamageType)0; __result.DamageWhenConsumedPerCharge = 0f; } break; } case "fast": { string itemID = "rocketbootsrare"; if (CustomFunctions.IfCharacterHas(val, CustomFunctions.CharacterHas.Item, itemID, CustomFunctions.AppliesTo.ThisHero)) { __result.GainCharges = true; __result.ConsumeAll = false; } break; } case "mark": { string itemID = "hellblade"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); itemID = "redsteelcloack"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); break; } case "poison": { string itemID = "thepolluter"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); itemID = "venomamulet"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); if (CustomFunctions.IfCharacterHas(val, CustomFunctions.CharacterHas.Item, "bbbslimepoison", CustomFunctions.AppliesTo.Monsters) || CustomFunctions.IfCharacterHas(val, CustomFunctions.CharacterHas.Item, "bbbslimepoisonrare", CustomFunctions.AppliesTo.Monsters)) { __result.Preventable = false; } break; } case "powerful": { string itemID = "mysticstaff"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); itemID = "powergloverare"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); break; } case "sight": { string itemID = "eeriering"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); break; } case "scourge": { string itemID = "captainspresenceblack"; if (CustomFunctions.IfCharacterHas(val, CustomFunctions.CharacterHas.Enchantment, itemID, CustomFunctions.AppliesTo.ThisHero)) { __result.GainCharges = true; } break; } case "thorns": { string itemID = "corruptedplateb"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); itemID = "shieldofthorns"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); itemID = "thornyring"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); itemID = "yggdrasilroot"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); itemID = "bbbthehedgehog"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); itemID = "bbbphalanx"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); itemID = "heartofthorns"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); if (CustomFunctions.IfCharacterHas(val, CustomFunctions.CharacterHas.Item, "bbbportablewallofflames", CustomFunctions.AppliesTo.ThisHero) || CustomFunctions.IfCharacterHas(val, CustomFunctions.CharacterHas.Item, "bbbportablewallofflamesrare", CustomFunctions.AppliesTo.ThisHero)) { __result.DamageReflectedType = (DamageType)4; } break; } case "vitality": { string itemID = "heartamulet"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); itemID = "bbbsausagelinknecklace"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); break; } case "wet": { string itemID = "bucket"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); itemID = "waterskin"; BalanceFunctions.UpdateMaxMadnessChargesByItem(ref __result, val, itemID); break; } } } [HarmonyPrefix] [HarmonyPatch(typeof(Character), "IndirectDamage")] public static void IndirectDamagePostfix(ref Character __instance, DamageType damageType, ref int damage, AudioClip sound = null, string effect = "", string sourceCharacterName = "", string sourceCharacterId = "") { if (!((Object)(object)MatchManager.Instance == (Object)null)) { Character characterById = MatchManager.Instance.GetCharacterById(sourceCharacterId); if (AtOManager.Instance.TeamHaveItem("bbbcloakofthornsrare", -1, false) && CustomFunctions.IsLivingHero(characterById) && characterById.HasEffect("mitigate") && effect == "thorns") { int auraCharges = characterById.GetAuraCharges("mitigate"); float num = 1f + 0.25f * (float)auraCharges; damage = Mathf.RoundToInt((float)damage * num); } else if (AtOManager.Instance.TeamHaveItem("bbbcloakofthorns", -1, false) && CustomFunctions.IsLivingHero(characterById) && characterById.HasEffect("mitigate") && effect == "thorns") { int auraCharges2 = characterById.GetAuraCharges("mitigate"); float num2 = 1f + 0.15f * (float)auraCharges2; damage = Mathf.RoundToInt((float)damage * num2); } } } [HarmonyPrefix] [HarmonyPatch(typeof(MatchManager), "DestroyedItemInThisTurn")] public static bool DestroyedItemInThisTurnPrefix(MatchManager __instance, int _charIndex, string _cardId) { Plugin.LogDebug("DestroyedItemInThisTurnPrefix"); Hero hero = MatchManager.Instance.GetHero(_charIndex); if (hero == null) { return true; } if (((Character)hero).HaveItem("bbbscrollofpetimmortality", -1, false)) { Plugin.LogDebug("Protecting Pet!"); return false; } return true; } [HarmonyPrefix] [HarmonyPatch(typeof(MatchManager), "CreatePet")] public static bool CreatePet(CardData cardPet, GameObject charGO, Hero _hero, NPC _npc, bool _fromEnchant = false, string _enchantName = "") { Plugin.LogDebug("CreatePet"); if ((Object)(object)cardPet == (Object)null) { return true; } if (cardPet.Id == "tombstone" && ((Character)_hero).HaveItem("bbbscrollofpetimmortality", -1, false)) { Plugin.LogDebug("Protecting Pet!"); return false; } return true; } [HarmonyPrefix] [HarmonyPatch(typeof(Item), "DoItem")] public static void DoItemPrefix(EventActivation _theEvent, CardData _cardData, string _item, Character _character, Character _target, int _auxInt, string _auxString, int order, CardData castedCard, ref bool onlyCheckItemActivation) { Plugin.LogDebug("DoItemPrefix"); if ((Object)(object)MatchManager.Instance == (Object)null) { return; } List<string> list = new List<string>(4) { "surprisebox", "surpriseboxrare", "surprisegiftbox", "surprisegiftboxrare" }; if (list.Contains(_item)) { Plugin.LogDebug("DoItemPrefix - found surpriseboxes"); } if (MatchManager.Instance.GetCurrentRound() != 3 && list.Contains(_item)) { Plugin.LogDebug("DoItemPrefix - disabling surpriseboxes"); onlyCheckItemActivation = true; return; } switch (_item) { default: if (!(_item == "bbbchefskniferare")) { break; } goto case "bbbchefsapron"; case "bbbchefsapron": case "bbbchefsapronrare": case "bbbchefsknife": _cardData.Item.CardToGainType = (CardType)29; break; } } [HarmonyPrefix] [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) { Plugin.LogDebug("DoItemDataPrefix"); if ((Object)(object)itemData != (Object)null && (itemData.Id == "bbbfirestarter" || itemData.Id == "bbbfirestarterrare")) { Plugin.LogDebug("Changing Firestarter"); itemData.CardToGainType = (CardType)5; } } [HarmonyPostfix] [HarmonyPatch(typeof(MatchManager), "CastCardAction")] public static void CastCardActionPostfix(MatchManager __instance, CardData _cardActive, Transform targetTransformCast, CardItem theCardItem, string _uniqueCastId, bool _automatic = false, CardData _card = null, int _cardIterationTotal = 1) { //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Invalid comparison between Unknown and I4 Plugin.LogDebug("CastCardActionPostfix"); if ((Object)(object)_cardActive != (Object)null) { Plugin.LogDebug("Casted Card - " + _cardActive.Id); Hero heroHeroActive = __instance.GetHeroHeroActive(); if ((Object)(object)_cardActive != (Object)null && _cardActive.EnergyRecharge > 0 && CustomFunctions.IsLivingHero((Character)(object)heroHeroActive) && (int)_cardActive.TargetSide == 0) { Plugin.LogDebug($"Energy Recharge - giving energy - {_cardActive.EnergyRecharge}"); int num = ((_cardActive.EffectRepeat != 0) ? (_cardActive.EnergyRecharge * _cardActive.EffectRepeat) : _cardActive.EnergyRecharge); ((Character)heroHeroActive).ModifyEnergy(num, true); } } } [HarmonyPostfix] [HarmonyPatch(typeof(Character), "DamageReflected")] public static void DamageReflectedPostfix(ref Character __instance, Hero theCasterHero, NPC theCasterNPC) { if (CustomFunctions.IsLivingHero(__instance) && theCasterHero != null && theCasterNPC != null) { Plugin.LogDebug("DamageReflectedPostfix"); AuraCurseData auraCurseData = CustomFunctions.GetAuraCurseData("thorns"); if ((Object)(object)auraCurseData == (Object)null || auraCurseData.DamageReflectedMultiplier <= 0) { Plugin.LogDebug("DamageReflectedPostfix - Null thorns data"); } else if (CustomFunctions.IfCharacterHas(__instance, CustomFunctions.CharacterHas.Item, "bbbrustedshieldrare", CustomFunctions.AppliesTo.ThisHero)) { Plugin.LogDebug("DamageReflectedPostfix - Applying bbbrustedshieldrare Poison"); ((Character)theCasterNPC).SetAura(__instance, CustomFunctions.GetAuraCurseData("poison"), Functions.FuncRoundToInt((float)__instance.GetAuraCharges("thorns") * 0.75f), false, (CardClass)11, true, true); } else if (CustomFunctions.IfCharacterHas(__instance, CustomFunctions.CharacterHas.Item, "bbbrustedshield", CustomFunctions.AppliesTo.ThisHero) && __instance.HasEffect("rust")) { Plugin.LogDebug("DamageReflectedPostfix - Applying bbbrustedshield Poison"); ((Character)theCasterNPC).SetAura(__instance, CustomFunctions.GetAuraCurseData("poison"), Functions.FuncRoundToInt((float)__instance.GetAuraCharges("thorns") * 0.5f), false, (CardClass)11, true, true); } } } [HarmonyPrefix] [HarmonyPatch(typeof(Functions), "GetRandomCardIdByTypeAndRandomRarity")] public static bool GetRandomCardIdByTypeAndRandomRarityPrefix(ref string __result, CardType _cardType) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Invalid comparison between Unknown and I4 //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Invalid comparison between Unknown and I4 //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Invalid comparison between Unknown and I4 Plugin.LogDebug("GetRandomCardIdByTypeAndRandomRarityPrefix"); int randomIntRange = MatchManager.Instance.GetRandomIntRange(0, Globals.Instance.CardListByType[_cardType].Count, "default", ""); if (Globals.Instance.CardListByType[_cardType].Count == 0) { Plugin.LogDebug("No cards found"); return false; } if ((int)_cardType == 29) { Plugin.LogDebug("trying to generate food"); } string text = Globals.Instance.CardListByType[_cardType][randomIntRange]; if ((int)_cardType == 29) { Plugin.LogDebug("Food we are trying to generate: " + text); } CardData cardData; if ((int)_cardType == 29) { randomIntRange = MatchManager.Instance.GetRandomIntRange(0, 100, "default", ""); if (randomIntRange > 75) { cardData = Globals.Instance.GetCardData(text, false); if ((Object)(object)cardData.UpgradesToRare != (Object)null) { __result = cardData.UpgradesToRare.Id; } else { __result = text; } } else { __result = text; } return false; } cardData = Globals.Instance.GetCardData(text, false); __result = Functions.GetCardByRarity(MatchManager.Instance.GetRandomIntRange(0, 100, "default", ""), cardData, false); return false; } [HarmonyPrefix] [HarmonyPatch(typeof(LootManager), "LootGold")] public static void LootGoldPrefix(LootManager __instance, bool ___isMyLoot, bool[] ___looted, int ___activeCharacter, List<int> ___characterOrder, bool comingFromNet = false) { if ((comingFromNet || ___isMyLoot) && ___looted != null && ___activeCharacter <= ___looted.Length && ___activeCharacter < 4) { Hero hero = AtOManager.Instance.GetHero(___characterOrder[___activeCharacter]); if (CustomFunctions.IfCharacterHas((Character)(object)hero, CustomFunctions.CharacterHas.Item, "mimyrare", CustomFunctions.AppliesTo.Heroes)) { int num = 30; AtOManager.Instance.GivePlayer(0, num, ((Character)hero).Owner, "", true, false); } else if (CustomFunctions.IfCharacterHas((Character)(object)hero, CustomFunctions.CharacterHas.Item, "mimy", CustomFunctions.AppliesTo.Heroes)) { int num = 15; AtOManager.Instance.GivePlayer(0, num, ((Character)hero).Owner, "", true, false); } } } [HarmonyPostfix] [HarmonyPatch(typeof(MatchManager), "GenerateDecksNPCs")] public static void GenerateDecksNPCsPostfix(MatchManager __instance, NPC[] ___TeamNPC, int _npcIndex = -1) { Plugin.LogDebug("GenerateDecksNPCsPostfix"); string text = "bbbsadm"; int num = 1; if (AtOManager.Instance.TeamHaveItem("bbbmelancholicarmorare", -1, false)) { text = "bbbsadma"; num = 2; } if (!AtOManager.Instance.TeamHaveItem("bbbmelancholicarmor", -1, false) && !AtOManager.Instance.TeamHaveItem("bbbmelancholicarmorare", -1, false)) { return; } List<string>[] value = Traverse.Create((object)__instance).Field("NPCDeck").GetValue<List<string>[]>(); for (int i = 0; i < ___TeamNPC.Length; i++) { if ((_npcIndex <= -1 || i == _npcIndex) && ___TeamNPC[i] != null && !((Object)(object)((Character)___TeamNPC[i]).NpcData == (Object)null)) { for (int j = 0; j < num; j++) { int randomIntRange = __instance.GetRandomIntRange(0, __instance.CountNPCDeck(i), "default", ""); Plugin.LogDebug($"Adding card {text} to NPC {((Character)___TeamNPC[i]).InternalId} in index {i} with NPCindex {_npcIndex} at position {randomIntRange}"); value[i].Insert(randomIntRange, text); } } } } [HarmonyPrefix] [HarmonyPatch(typeof(NPC), "BeginRound")] public static void BeginRoundPostfix(NPC __instance) { } [HarmonyPostfix] [HarmonyPatch(typeof(Character), "DamageWithCharacterBonus")] public static void DamageWithCharacterBonusPostfix(Character __instance, ref int __result, int value, DamageType DT, CardClass CC, int energyCost = 0, int additionalDamage = -1000) { if (!__instance.IsHero) { float num = 1f + 0.15f * (float)Plugin.difficultyLevelInt; __result = Mathf.RoundToInt((float)__result * num); } } [HarmonyPostfix] [HarmonyPatch(typeof(Globals), "CreateGameContent")] public static void CreateGameContentPostfix() { if (!Plugin.RemoveNewCards.Value) { return; } Dictionary<string, CardData> value = Traverse.Create((object)Globals.Instance).Field("_CardsSource").GetValue<Dictionary<string, CardData>>(); foreach (string key in value.Keys) { if (key.StartsWith("bbb") || key.StartsWith("raven") || key.StartsWith("jonah")) { Plugin.LogDebug("Removing card " + key); value.Remove(key); } } Traverse.Create((object)Globals.Instance).Field("_CardsSource").SetValue((object)value); } [HarmonyPostfix] [HarmonyPatch(typeof(NPC), "InitData")] public static void InitDataPostfix(ref NPC __instance) { if (((Character)__instance).IsHero) { return; } float num = 1f + 0.15f * (float)Plugin.difficultyLevelInt; num += ((AtOManager.Instance.GetNgPlus(false) > 6 && AtOManager.Instance.GetActNumberForText("") > 2) ? 0.25f : 0f); int num2 = Mathf.Max(40, 20 * Plugin.difficultyLevelInt); NPC obj = __instance; int hp = (((Character)__instance).HpCurrent = Mathf.RoundToInt((float)((Character)__instance).Hp * num) + num2); ((Character)obj).Hp = hp; if (((Character)__instance).Speed < 16 && Plugin.difficultyLevelInt > 1) { NPC obj2 = __instance; ((Character)obj2).Speed = ((Character)obj2).Speed + 1; } List<(int, int, int)> list = new List<(int, int, int)>(3) { (((Character)__instance).ResistSlashing, ((Character)__instance).ResistPiercing, ((Character)__instance).ResistBlunt), (((Character)__instance).ResistFire, ((Character)__instance).ResistCold, ((Character)__instance).ResistLightning), (((Character)__instance).ResistHoly, ((Character)__instance).ResistShadow, ((Character)__instance).ResistMind) }; List<int> list2 = new List<int>(); int num4 = 0; int num5 = 5 * Plugin.difficultyLevelInt; for (int i = 0; i < list.Count; i++) { (int, int, int) tuple = list[i]; int item = tuple.Item1; int item2 = tuple.Item2; int item3 = tuple.Item3; int num6 = item + item2 + item3; if (num6 >= num4) { num4 = num6; list2.Add(i); } } foreach (int item7 in list2) { (int, int, int) tuple2 = list[item7]; int item4 = tuple2.Item1; int item5 = tuple2.Item2; int item6 = tuple2.Item3; list[item7] = (item4 + num5, item5 + num5, item6 + num5); switch (item7) { case 0: ((Character)__instance).ResistSlashing = list[item7].Item1; ((Character)__instance).ResistPiercing = list[item7].Item2; ((Character)__instance).ResistBlunt = list[item7].Item3; break; case 1: ((Character)__instance).ResistFire = list[item7].Item1; ((Character)__instance).ResistCold = list[item7].Item2; ((Character)__instance).ResistLightning = list[item7].Item3; break; case 2: ((Character)__instance).ResistHoly = list[item7].Item1; ((Character)__instance).ResistShadow = list[item7].Item2; ((Character)__instance).ResistMind = list[item7].Item3; break; } } } } public class CustomFunctions { public enum AppliesTo { None, Global, Monsters, Heroes, ThisHero } public enum CharacterHas { Perk, Item, Trait, Enchantment } public enum IsAuraOrCurse { Aura, Curse, Both } public static string perkBase = "<RenameThisForPerks>"; public static void PLog(string s) { Plugin.Log.LogDebug((object)(Plugin.debugBase + s)); } public static void TraitHeal(ref Character _character, Character _target, int healAmount, string traitName) { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown int num = healAmount; if (_target.GetHpLeftForMax() < healAmount) { num = _target.GetHpLeftForMax(); } if (num > 0) { _target.ModifyHp(num, true, true); 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_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0060: 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); 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<string> heroHand, ref List<CardData> 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<string> heroHand, ref List<CardData> 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, string traitName) { 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 "<br><color=#FFF>" + num + "/" + num2 + "</color>"; } 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<CardData> list = new List<CardData>(); List<string> 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<string, int> 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 traitName) { //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(traitName); if ((MatchManager.Instance.activatedTraits != null && MatchManager.Instance.activatedTraits.ContainsKey(traitName) && MatchManager.Instance.activatedTraits[traitName] > traitData.TimesPerTurn - 1) || !_castedCard.GetCardTypes().Contains(whenYouPlayThis) || MatchManager.Instance.CountHeroHand(-1) == 0 || _character.HeroData == null) { return; } List<CardData> list = new List<CardData>(); List<string> 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(traitName)) { MatchManager.Instance.activatedTraits.Add(traitName, 1); } else { Dictionary<string, int> activatedTraits = MatchManager.Instance.activatedTraits; int value = activatedTraits[traitName] + 1; activatedTraits[traitName] = 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_" + traitName, "") + TextChargesLeft(MatchManager.Instance.activatedTraits[traitName], 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 void DealIndirectDamageToAllMonsters(DamageType damageType, int amount) { //IL_004e: Unknown result type (might be due to invalid IL or missing references) Plugin.Log.LogDebug((object)(Plugin.debugBase + "Dealing Indirect Damage")); if ((Object)(object)MatchManager.Instance == (Object)null) { return; } NPC[] teamNPC = MatchManager.Instance.GetTeamNPC(); foreach (NPC val in teamNPC) { if (IsLivingNPC((Character)(object)val)) { ((Character)val).IndirectDamage(damageType, amount, (AudioClip)null, "", "", ""); } } } public static List<int> GetValidCharacters(Character[] characters) { List<int> list = new List<int>(); 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<int> validCharacters = GetValidCharacters(characters); int num = validCharacters.First(); return characters[num]; } public static Character GetBackCharacter(Character[] characters) { List<int> 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<Character> list = new List<Character>(); 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; case CharacterHas.Enchantment: flag2 = CharacterHaveEnchantment(characterOfInterest, 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; case CharacterHas.Enchantment: flag2 = AtOManager.Instance.TeamHaveItem(Plugin.itemStem + id, -1, false) || AtOManager.Instance.TeamHaveItem(Plugin.itemStem + id + "a", -1, false) || AtOManager.Instance.TeamHaveItem(Plugin.itemStem + id + "b", -1, false) || AtOManager.Instance.TeamHaveItem(id, -1, false) || AtOManager.Instance.TeamHaveItem(id + "a", -1, false) || AtOManager.Instance.TeamHaveItem(id + "b", -1, false); 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) { PLog("Invalid CardName"); } else { ((MonoBehaviour)MatchManager.Instance).StartCoroutine(MatchManager.Instance.CastCard((CardItem)null, true, cardData, 0, -1, true)); } } } 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 IncrementTraitActivations(TraitData traitData) { string id = traitData.Id; if (CanIncrementTraitActivations(traitData)) { if (!MatchManager.Instance.activatedTraits.ContainsKey(id)) { MatchManager.Instance.activatedTraits.Add(id, 1); } else { MatchManager.Instance.activatedTraits[id]++; } MatchManager.Instance.SetTraitInfoText(); } } public static bool CanIncrementTraitActivations(TraitData traitData) { string id = traitData.Id; if (!((Object)(object)MatchManager.Instance != (Object)null)) { return false; } if (MatchManager.Instance.activatedTraits != null && MatchManager.Instance.activatedTraits.ContainsKey(id) && MatchManager.Instance.activatedTraits[id] > traitData.TimesPerTurn - 1) { return false; } return true; } 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<string> list = new List<string>(); List<int> list2 = new List<int>(); 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); 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 bool CharacterHaveEnchantment(Character character, string id) { if ((Object)(object)AtOManager.Instance == (Object)null) { return false; } string subclassName = character.SubclassName; return CharacterHaveEnchantment(subclassName, id); } public static bool CharacterHaveEnchantment(string characterId, string id) { if ((Object)(object)AtOManager.Instance == (Object)null) { return false; } return AtOManager.Instance.CharacterHaveItem(characterId, Plugin.itemStem + id) || AtOManager.Instance.CharacterHaveItem(characterId, Plugin.itemStem + id + "a") || AtOManager.Instance.CharacterHaveItem(characterId, Plugin.itemStem + id + "b") || AtOManager.Instance.CharacterHaveItem(characterId, id) || AtOManager.Instance.CharacterHaveItem(characterId, id + "a") || AtOManager.Instance.CharacterHaveItem(characterId, id + "b"); } public static bool TeamHaveEnchantment(string id) { if ((Object)(object)AtOManager.Instance == (Object)null) { return false; } return AtOManager.Instance.TeamHaveItem(Plugin.itemStem + id, -1, false) || AtOManager.Instance.TeamHaveItem(Plugin.itemStem + id + "a", -1, false) || AtOManager.Instance.TeamHaveItem(Plugin.itemStem + id + "b", -1, false) || AtOManager.Instance.TeamHaveItem(id, -1, false) || AtOManager.Instance.TeamHaveItem(id + "a", -1, false) || AtOManager.Instance.TeamHaveItem(id + "b", -1, false); } } [BepInPlugin("com.binbin.UnofficialBalancePatch", "UnofficialBalancePatch", "1.8.4")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInProcess("AcrossTheObelisk.exe")] public class Plugin : BaseUnityPlugin { public enum DifficultyLevelEnum { Easy, Normal, Hard, Extreme } internal const int ModDate = 20241206; private readonly Harmony harmony = new Harmony("com.binbin.UnofficialBalancePatch"); internal static ManualLogSource Log; public static DifficultyLevelEnum difficultyLevel = DifficultyLevelEnum.Hard; public static int difficultyLevelInt = 1; public static string itemStem = "binbin_balances_"; public static string debugBase = "Custom Descriptions - "; public static ConfigEntry<bool> EnableMod { get; set; } public static ConfigEntry<bool> EnableDebugging { get; set; } public static ConfigEntry<string> DifficultyLevel { get; set; } public static ConfigEntry<bool> RemoveNewCards { get; set; } public static ConfigEntry<bool> EnableModuleBleed { get; set; } public static ConfigEntry<bool> EnableModuleBigDeck { get; set; } public static ConfigEntry<bool> EnableModuleBlockScaling { get; set; } public static ConfigEntry<bool> EnableModuleBlunt { get; set; } public static ConfigEntry<bool> EnableModuleCold { get; set; } public static ConfigEntry<bool> EnableModuleCrackedMind { get; set; } public static ConfigEntry<bool> EnableModuleDark { get; set; } public static ConfigEntry<bool> EnableModuleDarkFire { get; set; } public static ConfigEntry<bool> EnableModuleFire { get; set; } public static ConfigEntry<bool> EnableModuleFlasks { get; set; } public static ConfigEntry<bool> EnableModuleFood { get; set; } public static ConfigEntry<bool> EnableModuleGeneratingItems { get; set; } public static ConfigEntry<bool> EnableModuleHealing { get; set; } public static ConfigEntry<bool> EnableModuleHoly { get; set; } public static ConfigEntry<bool> EnableModuleHolyFire { get; set; } public static ConfigEntry<bool> EnableModuleLightning { get; set; } public static ConfigEntry<bool> EnableModuleMark { get; set; } public static ConfigEntry<bool> EnableModuleMeleeAttacks { get; set; } public static ConfigEntry<bool> EnableModuleMind { get; set; } public static ConfigEntry<bool> EnableModuleMiscellaneous { get; set; } public static ConfigEntry<bool> EnableModuleMythicItems { get; set; } public static ConfigEntry<bool> EnableModuleNerfs { get; set; } public static ConfigEntry<bool> EnableModuleNightmare { get; set; } public static ConfigEntry<bool> EnableModuleNPCs { get; set; } public static ConfigEntry<bool> EnableModulePets { get; set; } public static ConfigEntry<bool> EnableModulePlasma { get; set; } public static ConfigEntry<bool> EnableModulePoison { get; set; } public static ConfigEntry<bool> EnableModuleRanged { get; set; } public static ConfigEntry<bool> EnableModuleRareItemReworks { get; set; } public static ConfigEntry<bool> EnableModuleRareItems { get; set; } public static ConfigEntry<bool> EnableModuleRestrictedPower { get; set; } public static ConfigEntry<bool> EnableModuleRust { get; set; } public static ConfigEntry<bool> EnableModuleSahtiItems { get; set; } public static ConfigEntry<bool> EnableModuleScourge { get; set; } public static ConfigEntry<bool> EnableModuleSelfBleed { get; set; } public static ConfigEntry<bool> EnableModuleSelfBurn { get; set; } public static ConfigEntry<bool> EnableModuleSelfChill { get; set; } public static ConfigEntry<bool> EnableModuleSelfDark { get; set; } public static ConfigEntry<bool> EnableModuleSelfSpark { get; set; } public static ConfigEntry<bool> EnableModuleSharp { get; set; } public static ConfigEntry<bool> EnableModuleSight { get; set; } public static ConfigEntry<bool> EnableModuleSkills { get; set; } public static ConfigEntry<bool> EnableModuleSmallWeapons { get; set; } public static ConfigEntry<bool> EnableModuleSpellsword { get; set; } public static ConfigEntry<bool> EnableModuleStealth { get; set; } public static ConfigEntry<bool> EnableModuleSteam { get; set; } public static ConfigEntry<bool> EnableModuleSongs { get; set; } public static ConfigEntry<bool> EnableModuleSongsNew { get; set; } public static ConfigEntry<bool> EnableModuleSpectral { get; set; } public static ConfigEntry<bool> EnableModuleSpeed { get; set; } public static ConfigEntry<bool> EnableModuleThorns { get; set; } public static ConfigEntry<bool> EnableModuleUncommonItems { get; set; } public static ConfigEntry<bool> EnableModuleVanish { get; set; } public static ConfigEntry<bool> EnableModuleVitality { get; set; } public static ConfigEntry<bool> EnableModuleYinYang { get; set; } public static ConfigEntry<bool> EnableModuleZeal { get; set; } private void Awake() { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Expected O, but got Unknown //IL_0047: Expected O, but got Unknown //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Expected O, but got Unknown //IL_0078: Expected O, but got Unknown //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Expected O, but got Unknown //IL_00d9: Expected O, but got Unknown //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Expected O, but got Unknown //IL_0177: Expected O, but got Unknown //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Expected O, but got Unknown //IL_01a8: Expected O, but got Unknown //IL_01be: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Expected O, but got Unknown //IL_01d9: Expected O, but got Unknown //IL_01ef: Unknown result type (might be due to invalid IL or missing references) //IL_0200: Unknown result type (might be due to invalid IL or missing references) //IL_020a: Expected O, but got Unknown //IL_020a: Expected O, but got Unknown //IL_0220: Unknown result type (might be due to invalid IL or missing references) //IL_0231: Unknown result type (might be due to invalid IL or missing references) //IL_023b: Expected O, but got Unknown //IL_023b: Expected O, but got Unknown //IL_0251: Unknown result type (might be due to invalid IL or missing references) //IL_0262: Unknown result type (might be due to invalid IL or missing references) //IL_026c: Expected O, but got Unknown //IL_026c: Expected O, but got Unknown //IL_0282: Unknown result type (might be due to invalid IL or missing references) //IL_0293: Unknown result type (might be due to invalid IL or missing references) //IL_029d: Expected O, but got Unknown //IL_029d: Expected O, but got Unknown //IL_02b3: Unknown result type (might be due to invalid IL or missing references) //IL_02c4: Unknown result type (might be due to invalid IL or missing references) //IL_02ce: Expected O, but got Unknown //IL_02ce: Expected O, but got Unknown //IL_02e4: Unknown result type (might be due to invalid IL or missing references) //IL_02f5: Unknown result type (might be due to invalid IL or missing references) //IL_02ff: Expected O, but got Unknown //IL_02ff: Expected O, but got Unknown //IL_0315: Unknown result type (might be due to invalid IL or missing references) //IL_0326: Unknown result type (might be due to invalid IL or missing references) //IL_0330: Expected O, but got Unknown //IL_0330: Expected O, but got Unknown //IL_0346: Unknown result type (might be due to invalid IL or missing references) //IL_0357: Unknown result type (might be due to invalid IL or missing references) //IL_0361: Expected O, but got Unknown //IL_0361: Expected O, but got Unknown //IL_0377: Unknown result type (might be due to invalid IL or missing references) //IL_0388: Unknown result type (might be due to invalid IL or missing references) //IL_0392: Expected O, but got Unknown //IL_0392: Expected O, but got Unknown //IL_03a8: Unknown result type (might be due to invalid IL or missing references) //IL_03b9: Unknown result type (might be due to invalid IL or missing references) //IL_03c3: Expected O, but got Unknown //IL_03c3: Expected O, but got Unknown //IL_03d9: Unknown result type (might be due to invalid IL or missing references) //IL_03ea: Unknown result type (might be due to invalid IL or missing references) //IL_03f4: Expected O, but got Unknown //IL_03f4: Expected O, but got Unknown //IL_040a: Unknown result type (might be due to invalid IL or missing references) //IL_041b: Unknown result type (might be due to invalid IL or missing references) //IL_0425: Expected O, but got Unknown //IL_0425: Expected O, but got Unknown //IL_043b: Unknown result type (might be due to invalid IL or missing references) //IL_044c: Unknown result type (might be due to invalid IL or missing references) //IL_0456: Expected O, but got Unknown //IL_0456: Expected O, but got Unknown //IL_046c: Unknown result type (might be due to invalid IL or missing references) //IL_047d: Unknown result type (might be due to invalid IL or missing references) //IL_0487: Expected O, but got Unknown //IL_0487: Expected O, but got Unknown //IL_049d: Unknown result type (might be due to invalid IL or missing references) //IL_04ae: Unknown result type (might be due to invalid IL or missing references) //IL_04b8: Expected O, but got Unknown //IL_04b8: Expected O, but got Unknown //IL_04ce: Unknown result type (might be due to invalid IL or missing references) //IL_04df: Unknown result type (might be due to invalid IL or missing references) //IL_04e9: Expected O, but got Unknown //IL_04e9: Expected O, but got Unknown //IL_04ff: Unknown result type (might be due to invalid IL or missing references) //IL_0510: Unknown result type (might be due to invalid IL or missing references) //IL_051a: Expected O, but got Unknown //IL_051a: Expected O, but got Unknown //IL_0530: Unknown result type (might be due to invalid IL or missing references) //IL_0541: Unknown result type (might be due to invalid IL or missing references) //IL_054b: Expected O, but got Unknown //IL_054b: Expected O, but got Unknown //IL_0561: Unknown result type (might be due to invalid IL or missing references) //IL_0572: Unknown result type (might be due to invalid IL or missing references) //IL_057c: Expected O, but got Unknown //IL_057c: Expected O, but got Unknown //IL_0592: Unknown result type (might be due to invalid IL or missing references) //IL_05a3: Unknown result type (might be due to invalid IL or missing references) //IL_05ad: Expected O, but got Unknown //IL_05ad: Expected O, but got Unknown //IL_05c3: Unknown result type (might be due to invalid IL or missing references) //IL_05d4: Unknown result type (might be due to invalid IL or missing references) //IL_05de: Expected O, but got Unknown //IL_05de: Expected O, but got Unknown //IL_05f4: Unknown result type (might be due to invalid IL or missing references) //IL_0605: Unknown result type (might be due to invalid IL or missing references) //IL_060f: Expected O, but got Unknown //IL_060f: Expected O, but got Unknown //IL_0625: Unknown result type (might be due to invalid IL or missing references) //IL_0636: Unknown result type (might be due to invalid IL or missing references) //IL_0640: Expected O, but got Unknown //IL_0640: Expected O, but got Unknown //IL_0656: Unknown result type (might be due to invalid IL or missing references) //IL_0667: Unknown result type (might be due to invalid IL or missing references) //IL_0671: Expected O, but got Unknown //IL_0671: Expected O, but got Unknown //IL_0687: Unknown result type (might be due to invalid IL or missing references) //IL_0698: Unknown result type (might be due to invalid IL or missing references) //IL_06a2: Expected O, but got Unknown //IL_06a2: Expected O, but got Unknown //IL_06b8: Unknown result type (might be due to invalid IL or missing references) //IL_06c9: Unknown result type (might be due to invalid IL or missing references) //IL_06d3: Expected O, but got Unknown //IL_06d3: Expected O, but got Unknown //IL_06e9: Unknown result type (might be due to invalid IL or missing references) //IL_06fa: Unknown result type (might be due to invalid IL or missing references) //IL_0704: Expected O, but got Unknown //IL_0704: Expected O, but got Unknown //IL_071a: Unknown result type (might be due to invalid IL or missing references) //IL_072b: Unknown result type (might be due to invalid IL or missing references) //IL_0735: Expected O, but got Unknown //IL_0735: Expected O, but got Unknown //IL_074b: Unknown result type (might be due to invalid IL or missing references) //IL_075c: Unknown result type (might be due to invalid IL or missing references) //IL_0766: Expected O, but got Unknown //IL_0766: Expected O, but got Unknown //IL_077c: Unknown result type (might be due to invalid IL or missing references) //IL_078d: Unknown result type (might be due to invalid IL or missing references) //IL_0797: Expected O, but got Unknown //IL_0797: Expected O, but got Unknown //IL_07ad: Unknown result type (might be due to invalid IL or missing references) //IL_07be: Unknown result type (might be due to invalid IL or missing references) //IL_07c8: Expected O, but got Unknown //IL_07c8: Expected O, but got Unknown //IL_07de: Unknown result type (might be due to invalid IL or missing references) //IL_07ef: Unknown result type (might be due to invalid IL or missing references) //IL_07f9: Expected O, but got Unknown //IL_07f9: Expected O, but got Unknown //IL_080f: Unknown result type (might be due to invalid IL or missing references) //IL_0820: Unknown result type (might be due to invalid IL or missing references) //IL_082a: Expected O, but got Unknown //IL_082a: Expected O, but got Unknown //IL_0840: Unknown result type (might be due to invalid IL or missing references) //IL_0851: Unknown result type (might be due to invalid IL or missing references) //IL_085b: Expected O, but got Unknown //IL_085b: Expected O, but got Unknown //IL_0871: Unknown result type (might be due to invalid IL or missing references) //IL_0882: Unknown result type (might be due to invalid IL or missing references) //IL_088c: Expected O, but got Unknown //IL_088c: Expected O, but got Unknown //IL_08a2: Unknown result type (might be due to invalid IL or missing references) //IL_08b3: Unknown result type (might be due to invalid IL or missing references) //IL_08bd: Expected O, but got Unknown //IL_08bd: Expected O, but got Unknown //IL_08d3: Unknown result type (might be due to invalid IL or missing references) //IL_08e4: Unknown result type (might be due to invalid IL or missing references) //IL_08ee: Expected O, but got Unknown //IL_08ee: Expected O, but got Unknown //IL_0904: Unknown result type (might be due to invalid IL or missing references) //IL_0915: Unknown result type (might be due to invalid IL or missing references) //IL_091f: Expected O, but got Unknown //IL_091f: Expected O, but got Unknown //IL_0935: Unknown result type (might be due to invalid IL or missing references) //IL_0946: Unknown result type (might be due to invalid IL or missing references) //IL_0950: Expected O, but got Unknown //IL_0950: Expected O, but got Unknown //IL_0966: Unknown result type (might be due to invalid IL or missing references) //IL_0977: Unknown result type (might be due to invalid IL or missing references) //IL_0981: Expected O, but got Unknown //IL_0981: Expected O, but got Unknown //IL_0997: Unknown result type (might be due to invalid IL or missing references) //IL_09a8: Unknown result type (might be due to invalid IL or missing references) //IL_09b2: Expected O, but got Unknown //IL_09b2: Expected O, but got Unknown //IL_09c8: Unknown result type (might be due to invalid IL or missing references) //IL_09d9: Unknown result type (might be due to invalid IL or missing references) //IL_09e3: Expected O, but got Unknown //IL_09e3: Expected O, but got Unknown //IL_09f9: Unknown result type (might be due to invalid IL or missing references) //IL_0a0a: Unknown result type (might be due to invalid IL or missing references) //IL_0a14: Expected O, but got Unknown //IL_0a14: Expected O, but got Unknown //IL_0a2a: Unknown result type (might be due to invalid IL or missing references) //IL_0a3b: Unknown result type (might be due to invalid IL or missing references) //IL_0a45: Expected O, but got Unknown //IL_0a45: Expected O, but got Unknown //IL_0a5b: Unknown result type (might be due to invalid IL or missing references) //IL_0a6c: Unknown result type (might be due to invalid IL or missing references) //IL_0a76: Expected O, but got Unknown //IL_0a76: Expected O, but got Unknown //IL_0a8c: Unknown result type (might be due to invalid IL or missing references) //IL_0a9d: Unknown result type (might be due to invalid IL or missing references) //IL_0aa7: Expected O, but got Unknown //IL_0aa7: Expected O, but got Unknown //IL_0abd: Unknown result type (might be due to invalid IL or missing references) //IL_0ace: Unknown result type (might be due to invalid IL or missing references) //IL_0ad8: Expected O, but got Unknown //IL_0ad8: Expected O, but got Unknown //IL_0aee: Unknown result type (might be due to invalid IL or missing references) //IL_0aff: Unknown result type (might be due to invalid IL or missing references) //IL_0b09: Expected O, but got Unknown //IL_0b09: Expected O, but got Unknown //IL_0b1f: Unknown result type (might be due to invalid IL or missing references) //IL_0b30: Unknown result type (might be due to invalid IL or missing references) //IL_0b3a: Expected O, but got Unknown //IL_0b3a: Expected O, but got Unknown //IL_0b50: Unknown result type (might be due to invalid IL or missing references) //IL_0b61: Unknown result type (might be due to invalid IL or missing references) //IL_0b6b: Expected O, but got Unknown //IL_0b6b: Expected O, but got Unknown //IL_0b81: Unknown result type (might be due to invalid IL or missing references) //IL_0b92: Unknown result type (might be due to invalid IL or missing references) //IL_0b9c: Expected O, but got Unknown //IL_0b9c: Expected O, but got Unknown //IL_0bb2: Unknown result type (might be due to invalid IL or missing references) //IL_0bc3: Unknown result type (might be due to invalid IL or missing references) //IL_0bcd: Expected O, but got Unknown //IL_0bcd: Expected O, but got Unknown //IL_0be3: Unknown result type (might be due to invalid IL or missing references) //IL_0bf4: Unknown result type (might be due to invalid IL or missing references) //IL_0bfe: Expected O, but got Unknown //IL_0bfe: Expected O, but got Unknown //IL_0c14: Unknown result type (might be due to invalid IL or missing references) //IL_0c25: Unknown result type (might be due to invalid IL or missing references) //IL_0c2f: Expected O, but got Unknown //IL_0c2f: Expected O, but got Unknown Log = ((BaseUnityPlugin)this).Logger; Log.LogInfo((object)"com.binbin.UnofficialBalancePatch 1.8.4 has loaded!"); EnableMod = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "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<object>())); EnableDebugging = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "EnableDebugging"), false, new ConfigDescription("Enables the debugging", (AcceptableValueBase)null, Array.Empty<object>())); AcceptableValueList<string> val = new AcceptableValueList<string>(new string[4] { "Easy", "Normal", "Hard", "Extreme" }); DifficultyLevel = ((BaseUnityPlugin)this).Config.Bind<string>(new ConfigDefinition("UnofficialBalancePatch", "StatModifiers"), "Normal", new ConfigDescription("Increases the stats of enemies to compensate for the increased card quality.", (AcceptableValueBase)(object)val, Array.Empty<object>())); string value = DifficultyLevel.Value; if (1 == 0) { } DifficultyLevelEnum difficultyLevelEnum = value switch { "Easy" => DifficultyLevelEnum.Easy, "Normal" => DifficultyLevelEnum.Normal, "Hard" => DifficultyLevelEnum.Hard, "Extreme" => DifficultyLevelEnum.Extreme, _ => DifficultyLevelEnum.Normal, }; if (1 == 0) { } difficultyLevel = difficultyLevelEnum; difficultyLevelInt = (int)difficultyLevel; RemoveNewCards = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Remove New Cards"), false, new ConfigDescription("Removes all fully new cards added by this mod. Existing cards are still altered.", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleBleed = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Bleed Module"), true, new ConfigDescription("Enables the Bleed module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleBigDeck = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Big Deck Module"), true, new ConfigDescription("Enables the Big Deck module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleBlockScaling = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Block Scaling Module"), true, new ConfigDescription("Enables the Block Scaling module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleBlunt = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Blunt Module"), true, new ConfigDescription("Enables the Blunt module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleCold = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Cold Module"), true, new ConfigDescription("Enables the Cold module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleCrackedMind = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Cracked Mind Module"), true, new ConfigDescription("Enables the Cracked Mind module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleDark = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Dark Module"), true, new ConfigDescription("Enables the Dark module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleDarkFire = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Purgatory Module"), true, new ConfigDescription("Enables the Dark/Fire Purgatory module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleFire = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Fire Module"), true, new ConfigDescription("Enables the Fire module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleFlasks = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Flasks Module"), true, new ConfigDescription("Enables the Flasks module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleFood = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Food Module"), true, new ConfigDescription("Enables the Food module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleGeneratingItems = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Generating Items Module"), true, new ConfigDescription("Enables the Generating Items module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleHealing = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Healing Module"), true, new ConfigDescription("Enables the Healing module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleHoly = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Holy Module"), true, new ConfigDescription("Enables the Holy module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleHolyFire = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Holy Fire Module"), true, new ConfigDescription("Enables the Holy Fire module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleLightning = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Lightning Module"), true, new ConfigDescription("Enables the Lightning module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleMark = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Mark Module"), true, new ConfigDescription("Enables the Mark module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleMeleeAttacks = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Melee Attacks Module"), true, new ConfigDescription("Enables the Melee Attacks module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleMind = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Mind Module"), true, new ConfigDescription("Enables the Mind module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleMiscellaneous = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Miscellaneous Module"), true, new ConfigDescription("Enables the Miscellaneous module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleMythicItems = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Mythic Items Module"), true, new ConfigDescription("Enables the Mythic Items module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleNerfs = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Nerfs Module"), true, new ConfigDescription("Enables the Nerfs module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleNightmare = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Nightmare Module"), true, new ConfigDescription("Enables the Nightmare module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleNPCs = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "NPCs Module"), true, new ConfigDescription("Enables the NPCs module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModulePets = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Pets Module"), true, new ConfigDescription("Enables the Pets module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModulePlasma = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Plasma Module"), true, new ConfigDescription("Enables the Plasma module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModulePoison = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Poison Module"), true, new ConfigDescription("Enables the Poison module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleRanged = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Ranged Misc Module"), true, new ConfigDescription("Enables the miscellaneous Ranged module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleRareItemReworks = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Item Reworks Module"), true, new ConfigDescription("Enables the Rare Item Reworks module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleRareItems = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Rare Items Module"), true, new ConfigDescription("Enables the Rare Items module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleRestrictedPower = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Restricted Power Module"), true, new ConfigDescription("Enables the Restricted Power Reworks module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleRust = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Rust Module"), true, new ConfigDescription("Enables the Rust Reworks module. Restart the game for this to take effect", (AcceptableValueBase)null, Array.Empty<object>())); EnableModuleSahtiItems = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("UnofficialBalancePatch", "Sahti Items Module"), true, new Con