using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using Cards; using Cards.Data; using Cards.Utility; using ChaoticCorruptions; 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.ChaoticCorruptions")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.1.1.0")] [assembly: AssemblyInformationalVersion("1.1.1+14f4bbdffb35d0c0e6bb6178030a9b06e32bbb3c")] [assembly: AssemblyProduct("ChaoticCorruptions")] [assembly: AssemblyTitle("com.binbin.ChaoticCorruptions")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.1.1.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } public static class EssentialsCompatibility { private static bool? _enabled; public static bool Enabled { get { bool valueOrDefault = _enabled == true; if (!_enabled.HasValue) { valueOrDefault = Chainloader.PluginInfos.ContainsKey("com.stiffmeds.obeliskialessentials"); _enabled = valueOrDefault; } return _enabled.Value; } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static void EssentialsRegister() { Essentials.RegisterMod(Plugin.PluginName, "binbin", "Provides configs to Randomize or Corrupt starter cards and items.", Plugin.PluginVersion, Plugin.ModDate, "https://github.com/binbinmods/ChaoticCorruptions", (string[])null, "", 100, (string[])null, "", true); Plugin.LogInfo(Plugin.PluginGUID + " " + Plugin.PluginVersion + " has loaded with Essentials!"); } } namespace ChaoticCorruptions { [HarmonyPatch] public class AntiCheat { [HarmonyPrefix] [HarmonyPatch(typeof(SteamManager), "SetObeliskScore")] public static bool SetObeliskScorePrefix(ref SteamManager __instance, int score, bool singleplayer = true) { return false; } [HarmonyPrefix] [HarmonyPatch(typeof(SteamManager), "SetScore")] public static bool SetScorePrefix(ref SteamManager __instance, int score, bool singleplayer = true) { return false; } [HarmonyPrefix] [HarmonyPatch(typeof(SteamManager), "SetSingularityScore")] public static bool SetSingularityScorePrefix(ref SteamManager __instance, int score, bool singleplayer = true) { return false; } [HarmonyPrefix] [HarmonyPatch(typeof(SteamManager), "SetObeliskScoreLeaderboard")] public static bool SetObeliskScoreLeaderboardPrefix(ref SteamManager __instance, int score, bool singleplayer = true) { return false; } [HarmonyPrefix] [HarmonyPatch(typeof(SteamManager), "SetScoreLeaderboard")] public static bool SetScoreLeaderboardPrefix(ref SteamManager __instance, int score, bool singleplayer = true) { return false; } [HarmonyPrefix] [HarmonyPatch(typeof(SteamManager), "SetSingularityScoreLeaderboard")] public static bool SetSingularityScoreLeaderboardPrefix(ref SteamManager __instance, int score, bool singleplayer = true) { return false; } [HarmonyPrefix] [HarmonyPatch(typeof(SteamManager), "SetWeeklyScore")] public static bool SetWeeklyScorePrefix(ref SteamManager __instance, int score, int week, string nick, string nickgroup, bool singleplayer = true) { return false; } [HarmonyPrefix] [HarmonyPatch(typeof(SteamManager), "SetWeeklyScoreLeaderboard")] public static bool SetWeeklyScoreLeaderboardPrefix(ref SteamManager __instance, int score, int week, string nick, string nickgroup, bool singleplayer = true) { return false; } } public class ChaoticCorruptionsFunctions { public static CardRealtimeData GetRandomCardWeighted(Hero hero, bool craftableOnly = true) { //IL_005c: 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_0087: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: 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_00cc: Invalid comparison between Unknown and I4 //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Invalid comparison between Unknown and I4 //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Invalid comparison between Unknown and I4 //IL_01d0: Unknown result type (might be due to invalid IL or missing references) //IL_01d6: Invalid comparison between Unknown and I4 //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_01fd: Invalid comparison between Unknown and I4 //IL_021d: Unknown result type (might be due to invalid IL or missing references) //IL_0223: Invalid comparison between Unknown and I4 //IL_025c: Unknown result type (might be due to invalid IL or missing references) //IL_0262: Invalid comparison between Unknown and I4 //IL_0246: Unknown result type (might be due to invalid IL or missing references) //IL_024c: Invalid comparison between Unknown and I4 AtOManager instance = AtOManager.Instance; int num = ((instance != null) ? instance.GetNgPlus(false) : 0); int num2 = ((!craftableOnly) ? 30 : ((num < 5) ? 10 : 37)); int num3 = ((!craftableOnly) ? 35 : ((num < 5) ? 65 : 60)); int num4 = ((!craftableOnly) ? 20 : ((num < 5) ? 20 : 3)); int num5 = ((!craftableOnly) ? 10 : ((num < 5) ? 5 : 0)); CardClass result = (CardClass)11; Enum.TryParse(Enum.GetName(typeof(HeroClass), ((Character)hero).HeroData.HeroClass), out result); CardClass result2 = (CardClass)11; Enum.TryParse(Enum.GetName(typeof(HeroClass), ((Character)hero).HeroData.HeroSubClass.HeroClassSecondary), out result2); List list = Globals.Instance.CardListNotUpgradedByClass[result]; List list2 = (((int)result2 == 11) ? new List() : Globals.Instance.CardListNotUpgradedByClass[result2]); int num6 = Random.Range(0, 2); int num7 = Random.Range(0, 100); CardRealtimeData cardData = Globals.Instance.GetCardData((num6 < 1 || (int)result2 == 11) ? list[Random.Range(0, list.Count)] : list2[Random.Range(0, list2.Count)], false); Plugin.LogDebug("Randomizing card: " + cardData.Id, "GetRandomCardWeighted"); bool flag = true; while (flag) { flag = false; bool flag2 = false; while (!flag2) { flag = false; cardData = Globals.Instance.GetCardData((num6 < 1 || (int)result2 == 11) ? list[Random.Range(0, list.Count)] : list2[Random.Range(0, list2.Count)], false); if (flag) { continue; } if (num7 < num2) { if ((int)cardData.CardRarity == 0) { flag2 = true; } } else if (num7 < num2 + num3) { if ((int)cardData.CardRarity == 1) { flag2 = true; } } else if (num7 < num2 + num3 + num4) { if ((int)cardData.CardRarity == 2) { flag2 = true; } } else if (num7 < num2 + num3 + num4 + num5) { if ((int)cardData.CardRarity == 3) { flag2 = true; } } else if ((int)cardData.CardRarity == 4) { flag2 = true; } } } return cardData; } internal static void InitNewCard(CardRealtimeData newCard, ref Dictionary> ____CardItemByType, ref Dictionary> ____CardListByType, ref Dictionary> ____CardListByClass, ref List ____CardListNotUpgraded, ref Dictionary> ____CardListNotUpgradedByClass, ref Dictionary> ____CardListByClassType, ref Dictionary ____CardEnergyCost) { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Invalid comparison between Unknown and I4 //IL_0066: 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_0092: Invalid comparison between Unknown and I4 //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) newCard.UpdateId(newCard.Id); ____CardEnergyCost.Add(newCard.Id, newCard.EnergyCost); Globals.Instance.IncludeInSearch(newCard.CardName, newCard.Id, true); ____CardListByClass[newCard.CardClass].Add(newCard.Id); if ((int)newCard.CardUpgraded == 0) { ____CardListNotUpgradedByClass[newCard.CardClass].Add(newCard.Id); ____CardListNotUpgraded.Add(newCard.Id); if ((int)newCard.CardClass == 8) { if (!____CardItemByType.ContainsKey(newCard.CardType)) { ____CardItemByType.Add(newCard.CardType, new List()); } ____CardItemByType[newCard.CardType].Add(newCard.Id); } } List cardTypes = newCard.GetCardTypes(); for (int i = 0; i < cardTypes.Count; i++) { if (!____CardListByType.ContainsKey(cardTypes[i])) { ____CardListByType.Add(cardTypes[i], new List()); } ____CardListByType[cardTypes[i]].Add(newCard.Id); string key = Enum.GetName(typeof(CardClass), newCard.CardClass) + "_" + Enum.GetName(typeof(CardType), cardTypes[i]); if (!____CardListByClassType.ContainsKey(key)) { ____CardListByClassType[key] = new List(); } ____CardListByClassType[key].Add(newCard.Id); Globals.Instance.IncludeInSearch(Texts.Instance.GetText(Enum.GetName(typeof(CardType), cardTypes[i]), ""), newCard.Id, true); } newCard.PostInit(); CardDescriptionExtension.SetDescriptionNew(newCard, true, (Character)null, true); } internal static void SetCardSourceField(CardDataNew source, string fieldName, object value) { Traverse.Create((object)source).Field(fieldName).SetValue(value); } public static CardRealtimeData AddNewCard(string id, string baseId, ref Dictionary ____CardsSource, ref Dictionary ____Cards, Action customize = null) { //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Expected O, but got Unknown id = id.ToLower(); baseId = baseId.ToLower(); if (!____CardsSource.TryGetValue(baseId, out var value)) { Plugin.LogError("AddNewCard: source card '" + baseId + "' not found", "AddNewCard"); return null; } CardDataNew val = Object.Instantiate(value); ((Object)val).name = id; SetCardSourceField(val, "id", id); SetCardSourceField(val, "internalId", id); customize?.Invoke(val); CardRealtimeData val2 = new CardRealtimeData(val, id); ____CardsSource[id] = val; ____Cards[id] = val2; return val2; } } [HarmonyPatch] public class ChaoticCorruptionsPatches { public static bool devMode = Plugin.DevMode.Value; public static int i = 0; [HarmonyPostfix] [HarmonyPatch(typeof(Functions), "GetCardByRarity")] public static void GetCardByRarityPostfix(ref string __result, int rarity, CardRealtimeData _cardData, bool isChallenge = false) { Plugin.LogDebug("GetCardByRarityPostfix", "GetCardByRarityPostfix"); if (Plugin.GuaranteeCorruptCards.Value || devMode || Random.Range(0, 100) <= Plugin.IncreaseCardCorruptionOdds.Value) { object obj; if (_cardData == null) { obj = null; } else { CardDataNew upgradesToRare = _cardData.UpgradesToRare; obj = ((upgradesToRare != null) ? upgradesToRare.Id : null); } if (obj == null) { obj = __result; } __result = (string)obj; } } [HarmonyPostfix] [HarmonyPatch(typeof(Loot), "GetLootItems")] public static void GetLootItemsPostfix(ref List __result, string _itemListId, string _idAux = "") { Plugin.LogDebug("GetLootItemsPostfix", "GetLootItemsPostfix"); if (!Plugin.GuaranteeCorruptItems.Value && Plugin.IncreaseItemCorruptionOdds.Value <= 0 && !devMode) { return; } for (int i = 0; i < __result.Count; i++) { CardRealtimeData cardData = Globals.Instance.GetCardData(__result[i], true); if (!(cardData == (CardRealtimeData)null) && (Plugin.GuaranteeCorruptItems.Value || (Plugin.IncreaseItemCorruptionOdds.Value > 0 && Random.Range(0, 100) <= Plugin.IncreaseItemCorruptionOdds.Value) || devMode)) { List obj = __result; int index = i; object obj2; if (cardData == null) { obj2 = null; } else { CardDataNew upgradesToRare = cardData.UpgradesToRare; obj2 = ((upgradesToRare != null) ? upgradesToRare.Id : null); } if (obj2 == null) { obj2 = __result[i]; } obj[index] = (string)obj2; } } } [HarmonyPrefix] [HarmonyPatch(typeof(Hero), "SetInitialItems")] public static void SetInitialItemsPrefix(ref Hero __instance, ref CardDataNew _cardData, ref int _rankLevel) { if (!(_cardData.Id == "harley") && (Plugin.CorruptStartingItems.Value || devMode)) { Plugin.LogDebug("SetInitialItemsPrefix - corrupting " + _cardData.Id, "SetInitialItemsPrefix"); CardDataNew obj = _cardData; object obj2; if (obj == null) { obj2 = null; } else { UpgradeData upgrade = obj.Upgrade; obj2 = ((upgrade != null) ? upgrade.UpgradesToRare : null); } if (obj2 == null) { obj2 = _cardData; } _cardData = (CardDataNew)obj2; _rankLevel = 0; } } [HarmonyPostfix] [HarmonyPatch(typeof(Hero), "SetInitialCards")] public static void SetInitialCardsPostfix(ref Hero __instance, HeroData heroData) { Plugin.LogDebug("SetInitialCardsPostfix", "SetInitialCardsPostfix"); try { List cards = ((Character)__instance).Cards; if (Plugin.CompletelyRandomizeStartingDecks.Value || devMode) { Plugin.LogDebug("SetInitialCardsPostfix - randomizing " + ((Character)__instance).SourceName, "SetInitialCardsPostfix"); for (int i = 0; i < cards.Count; i++) { string text = cards[i]; Plugin.LogDebug(text, "SetInitialCardsPostfix"); if (!Globals.Instance.GetCardData(text, true).HasFlag((CustomFlags)64) && !(Globals.Instance.GetCardData(text, true) == (CardRealtimeData)null)) { Plugin.LogDebug("past check", "SetInitialCardsPostfix"); string id = ChaoticCorruptionsFunctions.GetRandomCardWeighted(__instance, craftableOnly: false).Id; Plugin.LogDebug("newCard " + id, "SetInitialCardsPostfix"); cards[i] = id; } } ((Character)__instance).Cards = cards; } else if (Plugin.RandomizeStartingDecks.Value || devMode) { for (int j = 0; j < cards.Count; j++) { string text2 = cards[j]; if (!Globals.Instance.GetCardData(text2, true).HasFlag((CustomFlags)64) && !(Globals.Instance.GetCardData(text2, true) == (CardRealtimeData)null)) { cards[j] = ChaoticCorruptionsFunctions.GetRandomCardWeighted(__instance).Id; } } ((Character)__instance).Cards = cards; } if (Plugin.CorruptStartingDecks.Value || devMode) { Plugin.LogDebug("SetInitialCardsPostfix - corrupting " + ((Character)__instance).SourceName, "SetInitialCardsPostfix"); for (int k = 0; k < cards.Count; k++) { string text3 = cards[k]; int index = k; Globals instance = Globals.Instance; object obj; if (instance == null) { obj = null; } else { CardRealtimeData cardData = instance.GetCardData(text3, true); if (cardData == null) { obj = null; } else { CardDataNew upgradesToRare = cardData.UpgradesToRare; obj = ((upgradesToRare != null) ? upgradesToRare.Id : null); } } if (obj == null) { obj = cards[k]; } cards[index] = (string)obj; } ((Character)__instance).Cards = cards; } if (Plugin.PandorasBox.Value || devMode) { Plugin.LogDebug("SetInitialCardsPostfix - Pandoras Box", "SetInitialCardsPostfix"); for (int l = 0; l < cards.Count; l++) { string msg = cards[l]; Plugin.LogDebug(msg, "SetInitialCardsPostfix"); Plugin.LogDebug("past check", "SetInitialCardsPostfix"); string text4 = (Plugin.CorruptStartingDecks.Value ? "chaoticchaosrare" : "chaoticchaos"); Plugin.LogDebug("newCard " + text4, "SetInitialCardsPostfix"); cards[l] = text4; } ((Character)__instance).Cards = cards; } } catch (Exception ex) { Plugin.LogError("Error: " + ex.Message, "SetInitialCardsPostfix"); Plugin.LogError("Stack trace: " + ex.StackTrace, "SetInitialCardsPostfix"); } } [HarmonyPostfix] [HarmonyPatch(typeof(Hero), "SetInitialCardsSingularity")] public static void SetSingularityInitialCardsPostfix(ref Hero __instance, HeroData heroData) { Plugin.LogDebug("SetInitialCardsSingularity", "SetSingularityInitialCardsPostfix"); try { Random.InitState(Functions.GetDeterministicHashCode(AtOManager.Instance.GetGameId() + ((Character)__instance).SourceName + "com.binbin.ChaoticCorruptions")); List cards = ((Character)__instance).Cards; if (Plugin.CompletelyRandomizeStartingDecks.Value || devMode) { Plugin.LogDebug("SetInitialCardsPostfix - randomizing " + ((Character)__instance).SourceName, "SetSingularityInitialCardsPostfix"); for (int i = 0; i < cards.Count; i++) { string text = cards[i]; Plugin.LogDebug(text, "SetSingularityInitialCardsPostfix"); if (!Globals.Instance.GetCardData(text, true).HasFlag((CustomFlags)64) && !(Globals.Instance.GetCardData(text, true) == (CardRealtimeData)null)) { Plugin.LogDebug("past check", "SetSingularityInitialCardsPostfix"); string id = ChaoticCorruptionsFunctions.GetRandomCardWeighted(__instance, craftableOnly: false).Id; Plugin.LogDebug("newCard " + id, "SetSingularityInitialCardsPostfix"); cards[i] = id; } } ((Character)__instance).Cards = cards; } else if (Plugin.RandomizeStartingDecks.Value || devMode) { for (int j = 0; j < cards.Count; j++) { string text2 = cards[j]; cards[j] = ChaoticCorruptionsFunctions.GetRandomCardWeighted(__instance).Id; } ((Character)__instance).Cards = cards; } if (!Plugin.CorruptStartingDecks.Value && !devMode) { return; } Plugin.LogDebug("SetInitialCardsPostfix - corrupting " + ((Character)__instance).SourceName, "SetSingularityInitialCardsPostfix"); for (int k = 0; k < cards.Count; k++) { string text3 = cards[k]; int index = k; Globals instance = Globals.Instance; object obj; if (instance == null) { obj = null; } else { CardRealtimeData cardData = instance.GetCardData(text3, true); if (cardData == null) { obj = null; } else { CardDataNew upgradesToRare = cardData.UpgradesToRare; obj = ((upgradesToRare != null) ? upgradesToRare.Id : null); } } if (obj == null) { obj = cards[k]; } cards[index] = (string)obj; } ((Character)__instance).Cards = cards; } catch (Exception ex) { Plugin.LogError("Error: " + ex.Message, "SetSingularityInitialCardsPostfix"); Plugin.LogError("Stack trace: " + ex.StackTrace, "SetSingularityInitialCardsPostfix"); } } [MethodImpl(MethodImplOptions.NoInlining)] [HarmonyReversePatch(/*Could not decode attribute arguments.*/)] [HarmonyPatch(typeof(CardCraftManager), "CanCraftThisCard")] public static bool CanCraftThisCard(CardCraftManager instance, CardRealtimeData cData) { throw new NotImplementedException("Reverse patch stub for CardCraftManager.CanCraftThisCard"); } [HarmonyPostfix] [HarmonyPatch(typeof(CardCraftManager), "CanCraftThisCard")] public static void CanCraftThisCardPostfix(ref CardCraftManager __instance, ref bool __result, CardRealtimeData cData) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Invalid comparison between Unknown and I4 bool flag = CanCraftThisCard(__instance, Functions.GetCardDataFromCardData(cData, "")); if ((Plugin.CraftableCorruptions.Value || devMode) && (int)cData.CardUpgraded == 3 && flag) { __result = true; } else if (Plugin.OnlyCraftCorrupts.Value || devMode) { if ((int)cData.CardUpgraded == 3 && flag) { __result = true; } else { __result = false; } } } [HarmonyPostfix] [HarmonyPatch(typeof(CardCraftManager), "ShowCardCraft")] public static void ShowCardCraftPostfix(CardCraftManager __instance, BotonAdvancedCraft ___buttonAdvancedCraft, int type = 0) { Plugin.LogDebug("ShowCardCraftPostfix", "ShowCardCraftPostfix"); if ((Plugin.OnlyCraftCorrupts.Value || devMode) && __instance.craftType == 2) { Plugin.LogDebug("ShowCardCraftPostfix - setting Active", "ShowCardCraftPostfix"); __instance.AdvancedCraft(true); } } [HarmonyPostfix] [HarmonyPatch(typeof(Globals), "GetCraftCost")] public static void GetCraftCostPostfix(ref int __result, string cardId, float discountCraft = 0f, float discountUpgrade = 0f, int zoneTier = 0) { //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Invalid comparison between Unknown and I4 Plugin.LogDebug("GetCraftCostPostfix - " + cardId, "GetCraftCostPostfix"); if (Plugin.CraftableCorruptionsCost.Value > 0 && Plugin.CraftableCorruptions.Value) { CardRealtimeData cardData = Globals.Instance.GetCardData(cardId, true); if (!(cardData == (CardRealtimeData)null) && (int)cardData.CardUpgraded == 3) { int value = Plugin.CraftableCorruptionsCost.Value; value -= Functions.FuncRoundToInt((float)value * discountUpgrade); value += Functions.FuncRoundToInt((float)(value * SandboxManager.Instance.CardCraftPrice) * 0.01f); __result += value; } } } [HarmonyPostfix] [HarmonyPatch(typeof(Globals), "CreateGameContentRoutine")] public static void CreateGameContent(ref IEnumerator __result, Globals __instance) { __result = Plugin.RunAfter(__result, CreateGameContentPostfix); } public static void CreateGameContentPostfix() { try { Plugin.LogDebug("starting", "CreateGameContentPostfix"); Traverse val = Traverse.Create((object)Globals.Instance); Dictionary ____CardsSource = val.Field("_CardsSource").GetValue>(); Dictionary ____Cards = val.Field("_Cards").GetValue>(); Dictionary> ____CardItemByType = val.Field("_CardItemByType").GetValue>>(); Dictionary> ____CardListByType = val.Field("_CardListByType").GetValue>>(); Dictionary> ____CardListByClass = val.Field("_CardListByClass").GetValue>>(); List ____CardListNotUpgraded = val.Field("_CardListNotUpgraded").GetValue>(); Dictionary> ____CardListNotUpgradedByClass = val.Field("_CardListNotUpgradedByClass").GetValue>>(); Dictionary> ____CardListByClassType = val.Field("_CardListByClassType").GetValue>>(); Dictionary ____CardEnergyCost = val.Field("_CardEnergyCost").GetValue>(); string text = "chaos"; string text2 = "lasthope"; CardRealtimeData cardData = Globals.Instance.GetCardData(text2, false); if (cardData == (CardRealtimeData)null) { Plugin.LogError("CreateGameContent: missing source card " + text2, "CreateGameContentPostfix"); return; } CardRealtimeData val2 = ChaoticCorruptionsFunctions.AddNewCard("chaotic" + text, text2, ref ____CardsSource, ref ____Cards, delegate(CardDataNew src) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown UpgradeData upgrade = src.Upgrade; ChaoticCorruptionsFunctions.SetCardSourceField(src, "upgrade", (object)new UpgradeData(upgrade.UpgradesTo1, upgrade.UpgradesTo2, (CardUpgraded)3, "chaoticchaos", upgrade.UpgradesToRare)); ChaoticCorruptionsFunctions.SetCardSourceField(src, "cardClass", (object)(CardClass)9); ChaoticCorruptionsFunctions.SetCardSourceField(src, "energyCost", 0); ChaoticCorruptionsFunctions.SetCardSourceField(src, "cardType", (object)(CardType)0); src.CardManagement.AddCard = 1; src.CardManagement.AddCardChoose = 6; src.CardManagement.AddCardVanish = false; src.CardManagement.AddCardReducedCost = 1; src.CardManagement.AddCardCostTurn = false; src.CardManagement.AddCardPlace = (CardPlace)5; ChaoticCorruptionsFunctions.SetCardSourceField(src, "cardName", "Chaos"); ChaoticCorruptionsFunctions.SetCardSourceField(src, "cardRarity", (object)(CardRarity)3); ChaoticCorruptionsFunctions.SetCardSourceField(src, "playable", true); }); string text3 = "chaosrare"; CardRealtimeData val3 = ChaoticCorruptionsFunctions.AddNewCard("chaotic" + text3, text2, ref ____CardsSource, ref ____Cards, delegate(CardDataNew src) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown UpgradeData upgrade = src.Upgrade; ChaoticCorruptionsFunctions.SetCardSourceField(src, "upgrade", (object)new UpgradeData(upgrade.UpgradesTo1, upgrade.UpgradesTo2, (CardUpgraded)3, "chaoticchaosrare", upgrade.UpgradesToRare)); ChaoticCorruptionsFunctions.SetCardSourceField(src, "cardClass", (object)(CardClass)9); ChaoticCorruptionsFunctions.SetCardSourceField(src, "energyCost", 0); ChaoticCorruptionsFunctions.SetCardSourceField(src, "cardType", (object)(CardType)0); src.CardManagement.AddCard = 1; src.Description.RelatedCards = new List(); src.CardManagement.AddCardChoose = 10; ChaoticCorruptionsFunctions.SetCardSourceField(src, "cardName", "CHAOS!"); src.CardManagement.AddCardVanish = false; src.CardManagement.AddCardReducedCost = 2; src.CardManagement.AddCardCostTurn = false; src.CardManagement.AddCardPlace = (CardPlace)5; ChaoticCorruptionsFunctions.SetCardSourceField(src, "cardRarity", (object)(CardRarity)4); ChaoticCorruptionsFunctions.SetCardSourceField(src, "playable", true); }); if (val2 != (CardRealtimeData)null) { ChaoticCorruptionsFunctions.InitNewCard(val2, ref ____CardItemByType, ref ____CardListByType, ref ____CardListByClass, ref ____CardListNotUpgraded, ref ____CardListNotUpgradedByClass, ref ____CardListByClassType, ref ____CardEnergyCost); } if (val3 != (CardRealtimeData)null) { ChaoticCorruptionsFunctions.InitNewCard(val3, ref ____CardItemByType, ref ____CardListByType, ref ____CardListByClass, ref ____CardListNotUpgraded, ref ____CardListNotUpgradedByClass, ref ____CardListByClassType, ref ____CardEnergyCost); } Traverse.Create((object)Globals.Instance).Field("_CardsSource").SetValue((object)____CardsSource); Traverse.Create((object)Globals.Instance).Field("_Cards").SetValue((object)____Cards); Traverse.Create((object)Globals.Instance).Field("_CardItemByType").SetValue((object)____CardItemByType); Traverse.Create((object)Globals.Instance).Field("_CardListByType").SetValue((object)____CardListByType); Traverse.Create((object)Globals.Instance).Field("_CardListByClass").SetValue((object)____CardListByClass); Traverse.Create((object)Globals.Instance).Field("_CardListNotUpgraded").SetValue((object)____CardListNotUpgraded); Traverse.Create((object)Globals.Instance).Field("_CardListNotUpgradedByClass").SetValue((object)____CardListNotUpgradedByClass); Traverse.Create((object)Globals.Instance).Field("_CardListByClassType").SetValue((object)____CardListByClassType); Traverse.Create((object)Globals.Instance).Field("_CardEnergyCost").SetValue((object)____CardEnergyCost); Plugin.LogDebug("CreateGameContentPostfix - done", "CreateGameContentPostfix"); } catch (Exception ex) { Plugin.LogError("error: " + ex.Message, "CreateGameContentPostfix"); Plugin.LogError("stack trace: " + ex.StackTrace, "CreateGameContentPostfix"); } } [HarmonyPrefix] [HarmonyPatch(typeof(CardCraftManager), "CreateDeck")] public static void CreateDeckPrefix(CardCraftManager __instance, Hero hero, bool fast = false) { Plugin.LogDebug(((Character)hero).SourceName + " cardsL=: " + string.Join(", ", ((Character)hero).Cards), "CreateDeckPrefix"); } [HarmonyPrefix] [HarmonyPatch(typeof(CardCraftManager), "CreateDeck")] public static void SetBlocked(CardCraftManager __instance) { Plugin.LogDebug("SetBlocked", "SetBlocked"); } [HarmonyPrefix] [HarmonyPatch(typeof(CardCraftManager), "RedrawGridLayout")] public static void RedrawGridLayout(CardCraftManager __instance) { Plugin.LogDebug("RedrawGridLayout", "RedrawGridLayout"); } [HarmonyPrefix] [HarmonyPatch(typeof(CardVertical), "SetCard")] public static void SetCardPrefix(CardVertical __instance, string _cardId, int _cardType = 0, Hero _hero = null) { Plugin.LogDebug("SetCardPrefix - " + _cardId + " ", "SetCardPrefix"); CardRealtimeData cardData = Globals.Instance.GetCardData(_cardId.Split('_')[0], false); Plugin.LogDebug(_cardId + " carddata " + cardData.Id + " ", "SetCardPrefix"); } } [BepInPlugin("com.binbin.ChaoticCorruptions", "ChaoticCorruptions", "1.1.1")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInProcess("AcrossTheObelisk.exe")] public class Plugin : BaseUnityPlugin { public static string PluginName; public static string PluginVersion; public static string PluginGUID; internal static int ModDate = int.Parse(DateTime.Today.ToString("yyyyMMdd")); private readonly Harmony harmony = new Harmony("com.binbin.ChaoticCorruptions"); internal static ManualLogSource Log; public static string debugBase = "com.binbin.ChaoticCorruptions "; public static ConfigEntry EnableMod { get; set; } public static ConfigEntry EnableDebugging { get; set; } public static ConfigEntry IncreaseCardCorruptionOdds { get; set; } public static ConfigEntry IncreaseItemCorruptionOdds { get; set; } public static ConfigEntry GuaranteeCorruptCards { get; set; } public static ConfigEntry GuaranteeCorruptItems { get; set; } public static ConfigEntry CorruptStartingDecks { get; set; } public static ConfigEntry CorruptStartingItems { get; set; } public static ConfigEntry RandomizeStartingDecks { get; set; } public static ConfigEntry CompletelyRandomizeStartingDecks { get; set; } public static ConfigEntry PandorasBox { get; set; } public static ConfigEntry CraftableCorruptions { get; set; } public static ConfigEntry CraftableCorruptionsCost { get; set; } public static ConfigEntry PurchaseableCorruptPets { get; set; } public static ConfigEntry PurchaseableCorruptPetsMultiplier { get; set; } public static ConfigEntry OnlyCraftCorrupts { get; set; } public static ConfigEntry DevMode { get; set; } private void Awake() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Expected O, but got Unknown //IL_0039: Expected O, but got Unknown //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Expected O, but got Unknown //IL_0066: Expected O, but got Unknown //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Expected O, but got Unknown //IL_0093: Expected O, but got Unknown //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Expected O, but got Unknown //IL_00c0: Expected O, but got Unknown //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Expected O, but got Unknown //IL_00ed: Expected O, but got Unknown //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Expected O, but got Unknown //IL_011a: Expected O, but got Unknown //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Expected O, but got Unknown //IL_0147: Expected O, but got Unknown //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Expected O, but got Unknown //IL_0174: Expected O, but got Unknown //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Expected O, but got Unknown //IL_01a1: Expected O, but got Unknown //IL_01b3: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Expected O, but got Unknown //IL_01ce: Expected O, but got Unknown //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Expected O, but got Unknown //IL_01fb: Expected O, but got Unknown //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_021e: Unknown result type (might be due to invalid IL or missing references) //IL_0228: Expected O, but got Unknown //IL_0228: Expected O, but got Unknown //IL_023a: Unknown result type (might be due to invalid IL or missing references) //IL_024f: Unknown result type (might be due to invalid IL or missing references) //IL_0259: Expected O, but got Unknown //IL_0259: Expected O, but got Unknown //IL_026b: Unknown result type (might be due to invalid IL or missing references) //IL_027c: Unknown result type (might be due to invalid IL or missing references) //IL_0286: Expected O, but got Unknown //IL_0286: Expected O, but got Unknown //IL_0298: Unknown result type (might be due to invalid IL or missing references) //IL_02a9: Unknown result type (might be due to invalid IL or missing references) //IL_02b3: Expected O, but got Unknown //IL_02b3: Expected O, but got Unknown Log = ((BaseUnityPlugin)this).Logger; string text = "ChaoticCorruptions"; EnableMod = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "EnableMod"), true, new ConfigDescription("Enables the mod. If false, the mod will not work then next time you load the game.", (AcceptableValueBase)null, Array.Empty())); EnableDebugging = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "EnableDebugging"), false, new ConfigDescription("Enables the debugging", (AcceptableValueBase)null, Array.Empty())); IncreaseCardCorruptionOdds = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "IncreaseCardCorruptionOdds"), 0, new ConfigDescription("Adds a second roll to corrupt cards. 100 will make it guaranteed", (AcceptableValueBase)null, Array.Empty())); IncreaseItemCorruptionOdds = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "IncreaseItemCorruptionOdds"), 0, new ConfigDescription("Adds a second roll to corrupt items. 100 will make it guaranteed", (AcceptableValueBase)null, Array.Empty())); GuaranteeCorruptCards = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "GuaranteeCorruptCards"), false, new ConfigDescription("Guarantees all card rewards are corrupted.", (AcceptableValueBase)null, Array.Empty())); GuaranteeCorruptItems = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "GuaranteeCorruptItems"), false, new ConfigDescription("Guarantees all item rewardss are corrupted.", (AcceptableValueBase)null, Array.Empty())); CorruptStartingDecks = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "CorruptStartingDecks"), false, new ConfigDescription("Forces all starting cards to be corrupted.", (AcceptableValueBase)null, Array.Empty())); CorruptStartingItems = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "CorruptStartingItems"), false, new ConfigDescription("Forces all starting items to be corrupted.", (AcceptableValueBase)null, Array.Empty())); RandomizeStartingDecks = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "RandomizeStartingDecks"), true, new ConfigDescription("Randomizes starting decks from all craftable cards. If CorruptStartingDecks is active, they are all corrupted", (AcceptableValueBase)null, Array.Empty())); CompletelyRandomizeStartingDecks = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "CompletelyRandomizeStartingDecks"), true, new ConfigDescription("Randomizes starting decks from all available cards for each hero's class. If CorruptStartingDecks is active, they are all corrupted", (AcceptableValueBase)null, Array.Empty())); PandorasBox = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "PandorasBox"), false, new ConfigDescription("If true, replaces your starting deck with Chaos (discovers a card). If CorruptStartingDecks is active, replaces your deck with CHAOS (discovers a corrupted card). Overrides all other starting deck options.", (AcceptableValueBase)null, Array.Empty())); CraftableCorruptions = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "CraftableCorruptions"), true, new ConfigDescription("Makes corrupted cards craftable", (AcceptableValueBase)null, Array.Empty())); CraftableCorruptionsCost = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "CraftableCorruptionsCost"), 800, new ConfigDescription("The cost added to the regular crafting cost that will be added to the card to craft the corrupted version.", (AcceptableValueBase)null, Array.Empty())); OnlyCraftCorrupts = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "OnlyCraftCorrupts"), false, new ConfigDescription("Makes it so that the only cards you can craft are corrupted cards", (AcceptableValueBase)null, Array.Empty())); DevMode = ((BaseUnityPlugin)this).Config.Bind(new ConfigDefinition(text, "DevMode"), false, new ConfigDescription("Enables all of the things for testing.", (AcceptableValueBase)null, Array.Empty())); PluginName = "ChaoticCorruptions"; PluginVersion = "1.1.1"; PluginGUID = "com.binbin.ChaoticCorruptions"; if (EnableMod.Value) { if (EssentialsCompatibility.Enabled) { EssentialsCompatibility.EssentialsRegister(); } else { LogInfo(PluginGUID + " " + PluginVersion + " has loaded!"); } harmony.PatchAll(); } } internal static void LogDebug(string msg, [CallerMemberName] string caller = "") { if (EnableDebugging.Value) { Log.LogDebug((object)(debugBase + "- " + caller + " - " + msg)); } } internal static void LogInfo(string msg) { Log.LogInfo((object)(debugBase + msg)); } internal static void LogError(string msg, [CallerMemberName] string caller = "") { Log.LogError((object)(debugBase + "- " + caller + " - " + msg)); } public static IEnumerator RunAfter(IEnumerator original, Action action) { while (original.MoveNext()) { yield return original.Current; } action(); } } public static class PluginInfo { public const string PLUGIN_GUID = "com.binbin.ChaoticCorruptions"; public const string PLUGIN_NAME = "ChaoticCorruptions"; public const string PLUGIN_VERSION = "1.1.1"; } }