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 BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
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.definiteseeds")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+9f94eec87355cb15fa15feb344e6aaf3db55e091")]
[assembly: AssemblyProduct("SeedSearcher")]
[assembly: AssemblyTitle("com.binbin.definiteseeds")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.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 SeedSearcher
{
public static class CustomFunctions
{
public enum AppliesTo
{
None,
Global,
Monsters,
Heroes,
ThisHero
}
public enum CharacterHas
{
Perk,
Item,
Trait
}
public enum IsAuraOrCurse
{
Aura,
Curse,
Both
}
public static string debugBase = "<RenameThis>";
public static string perkBase = "<RenameThisForPerks>";
public static string SerializeDictionary(Dictionary<string, List<string>> dict)
{
if (dict == null)
{
throw new ArgumentNullException("dict");
}
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append('{');
List<string> list = dict.Keys.OrderBy((string k) => k).ToList();
for (int i = 0; i < list.Count; i++)
{
string text = list[i];
List<string> list2 = dict[text];
stringBuilder.Append("\"" + text + "\":[");
for (int j = 0; j < list2.Count; j++)
{
stringBuilder.Append("\"" + list2[j] + "\"");
if (j < list2.Count - 1)
{
stringBuilder.Append(',');
}
}
stringBuilder.Append(']');
if (i < list.Count - 1)
{
stringBuilder.Append(',');
}
}
stringBuilder.Append('}');
return stringBuilder.ToString();
}
public static void PLog(string s)
{
Plugin.Log.LogDebug((object)(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);
}
else
{
((CharacterItem)_target.NPCItem).ScrollCombatTextDamageNew(val);
EffectsManager.Instance.PlayEffectAC("healimpactsmall", true, ((CharacterItem)_target.NPCItem).CharImageT, false, 0f);
}
_target.SetEvent((EventActivation)15, (Character)null, 0, "");
_character.SetEvent((EventActivation)14, _target, 0, "");
((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);
}
else
{
((CharacterItem)((Character)_target).NPCItem).ScrollCombatTextDamageNew(val);
EffectsManager.Instance.PlayEffectAC("healimpactsmall", true, ((CharacterItem)((Character)_target).NPCItem).CharImageT, false, 0f);
}
((Character)_target).SetEvent((EventActivation)15, (Character)null, 0, "");
_character.SetEvent((EventActivation)14, (Character)(object)_target, 0, "");
((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)(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)(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)(debugBase + "Null index"));
continue;
}
Character val = array[i];
if (val.Alive && val != null)
{
list.Add(val);
}
}
if (list.Count == 0)
{
return null;
}
int randomIntRange = MatchManager.Instance.GetRandomIntRange(0, list.Count, "default", "");
if (randomIntRange < list.Count)
{
return list[randomIntRange];
}
if (list[randomIntRange] == null)
{
return null;
}
return list[0];
}
public static bool IsLivingHero(Character _character)
{
return _character != null && _character.Alive && _character.IsHero;
}
public static bool IsLivingNPC(Character _character)
{
return _character != null && _character.Alive && !_character.IsHero;
}
public static bool CharacterHasPerkForSet(string perkName, bool flag, AtOManager __instance, Character _characterTarget)
{
return flag && _characterTarget != null && __instance.CharacterHavePerk(_characterTarget.SubclassName, perkBase + perkName);
}
public static bool CharacterHasPerkForConsume(string perkName, bool flag, AtOManager __instance, Character _characterCaster)
{
return flag && _characterCaster != null && __instance.CharacterHavePerk(_characterCaster.SubclassName, perkBase + perkName);
}
public static bool TeamHasPerk(string perkName)
{
if ((Object)(object)AtOManager.Instance == (Object)null)
{
return false;
}
return AtOManager.Instance.TeamHavePerk(perkBase + perkName) || AtOManager.Instance.TeamHavePerk(perkName);
}
public static bool IfCharacterHas(Character characterOfInterest, CharacterHas characterHas, string id, AppliesTo appliesTo = AppliesTo.Global, string _type = "", string onlyThisType = "")
{
if (appliesTo == AppliesTo.None || characterOfInterest == null || (Object)(object)AtOManager.Instance == (Object)null)
{
return false;
}
if (_type != "" && onlyThisType != _type)
{
return false;
}
bool flag = (characterOfInterest.IsHero && appliesTo == AppliesTo.Heroes) || (!characterOfInterest.IsHero && appliesTo == AppliesTo.Monsters) || appliesTo == AppliesTo.Global || (appliesTo == AppliesTo.ThisHero && characterOfInterest.IsHero);
bool flag2 = false;
if (appliesTo == AppliesTo.ThisHero)
{
switch (characterHas)
{
case CharacterHas.Item:
flag2 = AtOManager.Instance.CharacterHaveItem(characterOfInterest.SubclassName, perkBase + id) || AtOManager.Instance.CharacterHaveItem(characterOfInterest.SubclassName, id);
break;
case CharacterHas.Perk:
flag2 = AtOManager.Instance.CharacterHavePerk(characterOfInterest.SubclassName, perkBase + id) || AtOManager.Instance.CharacterHavePerk(characterOfInterest.SubclassName, id);
break;
case CharacterHas.Trait:
flag2 = AtOManager.Instance.CharacterHaveTrait(characterOfInterest.SubclassName, perkBase + id) || AtOManager.Instance.CharacterHaveTrait(characterOfInterest.SubclassName, id);
break;
}
}
else
{
switch (characterHas)
{
case CharacterHas.Item:
flag2 = AtOManager.Instance.TeamHaveItem(perkBase + id, -1, false) || AtOManager.Instance.TeamHaveItem(id, -1, false);
break;
case CharacterHas.Perk:
flag2 = AtOManager.Instance.TeamHavePerk(perkBase + id) || AtOManager.Instance.TeamHavePerk(id);
break;
case CharacterHas.Trait:
flag2 = AtOManager.Instance.TeamHaveTrait(perkBase + id) || AtOManager.Instance.TeamHaveTrait(id);
break;
}
}
return flag2 && flag;
}
public static bool TeamHasPerkGACM(Character characterOfInterest, string perkName, AppliesTo appliesTo = AppliesTo.Global, string _type = "", string onlyThisType = "")
{
if (appliesTo == AppliesTo.None || characterOfInterest == null || (Object)(object)AtOManager.Instance == (Object)null)
{
return false;
}
if (_type != "" && onlyThisType != _type)
{
return false;
}
bool flag = (characterOfInterest.IsHero && appliesTo == AppliesTo.Heroes) || (!characterOfInterest.IsHero && appliesTo == AppliesTo.Monsters) || appliesTo == AppliesTo.Global;
bool flag2 = AtOManager.Instance.TeamHavePerk(perkBase + perkName) || AtOManager.Instance.TeamHavePerk(perkName);
return flag2 && flag;
}
public static bool CharacterHasPerkGACM(Character characterOfInterest, string perkName, AppliesTo appliesTo = AppliesTo.Global)
{
if (appliesTo == AppliesTo.None || characterOfInterest == null || (Object)(object)AtOManager.Instance == (Object)null)
{
return false;
}
bool flag = (characterOfInterest.IsHero && appliesTo == AppliesTo.Heroes) || (!characterOfInterest.IsHero && appliesTo == AppliesTo.Monsters) || appliesTo == AppliesTo.Global;
bool flag2 = AtOManager.Instance.CharacterHavePerk(characterOfInterest.SubclassName, perkBase + perkName) || AtOManager.Instance.CharacterHavePerk(characterOfInterest.SubclassName, perkName);
return flag2 && flag;
}
public static bool TeamHasTraitGACM(Character characterOfInterest, string perkName, AppliesTo appliesTo = AppliesTo.Global, string _type = "", string onlyThisType = "")
{
if (appliesTo == AppliesTo.None || characterOfInterest == null || (Object)(object)AtOManager.Instance == (Object)null)
{
return false;
}
if (_type != "" && onlyThisType != _type)
{
return false;
}
bool flag = (characterOfInterest.IsHero && appliesTo == AppliesTo.Heroes) || (!characterOfInterest.IsHero && appliesTo == AppliesTo.Monsters) || appliesTo == AppliesTo.Global;
bool flag2 = AtOManager.Instance.TeamHaveTrait(perkBase + perkName) || AtOManager.Instance.TeamHavePerk(perkName);
return flag2 && flag;
}
public static bool CharacterHasTraitGACM(Character characterOfInterest, string perkName, AppliesTo appliesTo = AppliesTo.Global, string _type = "", string onlyThisType = "")
{
if (appliesTo == AppliesTo.None || characterOfInterest == null || (Object)(object)AtOManager.Instance == (Object)null)
{
return false;
}
if (_type != "" && onlyThisType != _type)
{
return false;
}
bool flag = (characterOfInterest.IsHero && appliesTo == AppliesTo.Heroes) || (!characterOfInterest.IsHero && appliesTo == AppliesTo.Monsters) || appliesTo == AppliesTo.Global;
bool flag2 = AtOManager.Instance.CharacterHaveTrait(characterOfInterest.SubclassName, perkBase + perkName) || AtOManager.Instance.TeamHavePerk(perkName);
return flag2 && flag;
}
public static bool TeamHasPerkForSet(string perkName, bool flag, AtOManager __instance, Character _characterTarget)
{
return _characterTarget != null && __instance.TeamHavePerk(perkBase + perkName) && flag;
}
public static bool TeamHasPerkForConsume(string perkName, bool flag, AtOManager __instance, Character _characterCaster)
{
if ((Object)(object)__instance == (Object)null)
{
return false;
}
return _characterCaster != null && (__instance.TeamHavePerk(perkBase + perkName) || __instance.TeamHavePerk(perkName)) && flag;
}
public static bool CharacterObjectHavePerk(Character _character, string _perkID)
{
if (_character == null || (Object)(object)AtOManager.Instance == (Object)null)
{
return false;
}
return AtOManager.Instance.CharacterHavePerk(_character.SubclassName, perkBase + _perkID) || AtOManager.Instance.CharacterHavePerk(_character.SubclassName, _perkID);
}
public static void PlayCardForFree(string cardToCast)
{
if (cardToCast != null && !((Object)(object)Globals.Instance == (Object)null))
{
CardData cardData = Globals.Instance.GetCardData(cardToCast, true);
if ((Object)(object)cardData == (Object)null)
{
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);
}
}
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;
}
}
}
}
}
[BepInPlugin("com.binbin.definiteseeds", "SeedSearcher", "1.0.0")]
[BepInProcess("AcrossTheObelisk.exe")]
public class Plugin : BaseUnityPlugin
{
internal int ModDate = int.Parse(DateTime.Today.ToString("yyyyMMdd"));
private readonly Harmony harmony = new Harmony("com.binbin.definiteseeds");
internal static ManualLogSource Log;
public static string debugBase = "com.binbin.definiteseeds ";
public static ConfigEntry<bool> RunSeedSearcher { 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
Log = ((BaseUnityPlugin)this).Logger;
Log.LogInfo((object)"com.binbin.definiteseeds 1.0.0 has loaded!");
RunSeedSearcher = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("RunSeedSearcher", "RunSeedSearcher"), true, new ConfigDescription("If false, disables the mod. Restart the game upon changing this setting.", (AcceptableValueBase)null, Array.Empty<object>()));
LogDebug($"Pre-Log Items {RunSeedSearcher.Value}");
if (RunSeedSearcher.Value)
{
harmony.PatchAll();
}
LogDebug($"Post-Log Items {RunSeedSearcher.Value}");
}
internal static void LogDebug(string msg)
{
Log.LogDebug((object)(debugBase + msg));
}
internal static void LogInfo(string msg)
{
Log.LogInfo((object)(debugBase + msg));
}
internal static void LogError(string msg)
{
Log.LogError((object)(debugBase + msg));
}
}
[HarmonyPatch]
public class SeedSearcher
{
[HarmonyPrefix]
[HarmonyPatch(typeof(AtOManager), "BeginAdventure")]
public static void BeginAdventurePrefix(ref AtOManager __instance, out string __state)
{
Plugin.LogInfo("BeginAdventurePrefix - Start");
__state = __instance.GetGameId();
Plugin.LogInfo("BeginAdventurePrefix - GameID - " + __state);
}
[HarmonyPostfix]
[HarmonyPatch(typeof(AtOManager), "BeginAdventure")]
public static void BeginAdventurePostfix(ref AtOManager __instance, string __state)
{
Plugin.LogInfo("BeginAdventurePostfix - Start");
__instance.SetGameId(__state);
Plugin.LogInfo("BeginAdventurePostfix - GameID - " + __instance.GetGameId());
}
[HarmonyPostfix]
[HarmonyPatch(typeof(Globals), "CreateGameContent")]
public static void CreateGameContentPostfix(ref Globals __instance)
{
Plugin.LogInfo("CreateGameContentPostfix - Start");
Plugin.LogInfo("CreateGameContentPostfix - END ");
}
public static void LogAllItems()
{
Plugin.LogInfo("LogAllItems - Start");
LogCaravanItems();
}
internal static void LogPetItems()
{
Dictionary<string, string> lootNodeMap = new Dictionary<string, string>
{
{ "Jelly", "aquar_41" },
{ "betty", "sen_39" },
{ "blobbleed", "sen_29" },
{ "blobcold", "sewers_13" },
{ "blobdire", "velka_37" },
{ "blobholy", "pyr_12" },
{ "bloblightning", "sahti_30" },
{ "blobmetal", "velka_38" },
{ "blobmind", "dread_7" },
{ "blobpoison", "aquar_44" },
{ "blobselem", "voidlow_28" },
{ "blobshadow", "ulmin_59" },
{ "blobsmyst", "voidlow_28" },
{ "blobsphys", "voidlow_28" },
{ "blobwater", "aquar_45" },
{ "cuby", "pyr_9" },
{ "cubyd", "pyr_9" },
{ "daley", "faen_7" },
{ "fenny", "ulmin_6" },
{ "fishlava", "forge_8" },
{ "inky", "aquar_41" },
{ "liante", "lair_5" },
{ "matey", "sahti_20" },
{ "mimy", "dread_10" },
{ "oculy", "aquar_41" },
{ "sharpy", "aquar_18" },
{ "slimy", "lair_7" },
{ "stormy", "aquar_24" },
{ "wolfy", "sen_46" }
};
int nSeeds = 300;
HandleDropItems(lootNodeMap, nSeeds);
}
internal static void LogBossDropItems()
{
Dictionary<string, string> lootNodeMap = new Dictionary<string, string>
{
{ "Basthet", "pyr_7" },
{ "Dryad_a", "sen_31" },
{ "Dryad_b", "sen_32" },
{ "Faeborg", "faen_38" },
{ "Hydra", "aquar_35" },
{ "Ignidoh", "velka_32" },
{ "Mansionright", "faen_35" },
{ "Mortis", "ulmin_56" },
{ "Tulah", "lair_8" },
{ "Ylmer", "sen_33" },
{ "belphyor", "secta_5" },
{ "belphyorquest", "velka_8" },
{ "burninghand", "velka_25" },
{ "dreadhalfman", "dread_11" },
{ "elvenarmory", "faen_29" },
{ "elvenarmoryplus", "faen_29" },
{ "goblintown", "velka_6" },
{ "harpychest", "velka_27" },
{ "harpyfight", "velka_27" },
{ "khazakdhum", "velka_29" },
{ "kingrat", "sewers_8" },
{ "minotaurcave", "velka_9" },
{ "sahtikraken", "sahti_65" },
{ "sahtikrakenmjolmir", "sahti_65" },
{ "sahtirustkingtreasure", "sahti_62" },
{ "spiderqueen", "sen_1" },
{ "tyrant", "faen_25" },
{ "tyrantbeavers", "faen_25" },
{ "tyrantchampy", "faen_25" },
{ "tyrantchompy", "faen_25" },
{ "tyrantchumpy", "faen_25" },
{ "upripreboss", "uprising_13" },
{ "yogger", "sen_27" }
};
int nSeeds = 300;
HandleDropItems(lootNodeMap, nSeeds);
}
internal static void LogGuaranteedDropItems()
{
Dictionary<string, string> lootNodeMap = new Dictionary<string, string>
{
{ "FrozenSewersElves", "sewers_11" },
{ "FrozenSewersMix", "sewers_11" },
{ "FrozenSewersRatmen", "sewers_11" },
{ "Jewelerrings", "sen_35" },
{ "Mansionleft", "faen_35" },
{ "Mansionleftplus", "faen_35" },
{ "Sailor", "faen_4" },
{ "Stolenitems", "faen_10" },
{ "apprentince", "sen_24" },
{ "balanceblack", "ulmin_52" },
{ "balanceboth", "ulmin_52" },
{ "balancewhite", "ulmin_52" },
{ "battlefield", "aquar_6" },
{ "bridge", "sen_17" },
{ "chappel", "sen_21" },
{ "crane", "velka_21" },
{ "crocoloot", "aquar_7" },
{ "crocosmugglers", "aquar_48" },
{ "desertreliquary", "ulmin_58" },
{ "dreadcosme", "dread_2" },
{ "dreadcuthbert", "dread_2" },
{ "dreadfrancis", "dread_2" },
{ "dreadhoratio", "dread_2" },
{ "dreadjack", "dread_2" },
{ "dreadmimic", "dread_10" },
{ "dreadrhodogor", "dread_2" },
{ "eeriechest_a", "sen_6" },
{ "eeriechest_b", "sen_6" },
{ "lavacascade", "velka_22" },
{ "lootedarmory", "pyr_10" },
{ "lootsepulchralrare", "voidlow_18" },
{ "obsidianall", "forge_3" },
{ "obsidiananvil", "forge_3" },
{ "obsidianboots", "forge_3" },
{ "obsidianrings", "forge_3" },
{ "obsidianrods", "forge_3" },
{ "rift", "velka_40" },
{ "riftsen", "sen_48" },
{ "sahtibernardstash", "sahti_52" },
{ "sahtidomedesert", "sahti_49" },
{ "sahtidomeice", "sahti_49" },
{ "sahtidomemain", "sahti_49" },
{ "sahtidomemountain", "sahti_49" },
{ "sahtidomeswamp", "sahti_49" },
{ "sahtipiratearsenal", "sahti_25" },
{ "sahtipiratewarehouse", "sahti_25" },
{ "sahtiplaguecot", "sahti_11" },
{ "sahtisurgeonarsenal", "sahti_13" },
{ "sahtisurgeonstash", "sahti_13" },
{ "sahtitreasurechamber", "sahti_25" },
{ "sahtivalkyriestash", "sahti_19" },
{ "thorimsrod", "forge_8" },
{ "treasureaquarfall", "aquar_28" },
{ "uprienergy", "uprising_5" },
{ "uprimagma", "uprising_4" },
{ "voidcraftemerald", "voidlow_14" },
{ "voidcraftgolden", "voidlow_14" },
{ "voidcraftobsidian", "voidlow_14" },
{ "voidcraftpearl", "voidlow_14" },
{ "voidcraftring", "voidlow_14" },
{ "voidcraftruby", "voidlow_14" },
{ "voidcraftsapphire", "voidlow_14" },
{ "voidcrafttopaz", "voidlow_14" },
{ "voidtreasurejade", "voidlow_16" },
{ "watermill", "sen_15" }
};
int nSeeds = 300;
HandleDropItems(lootNodeMap, nSeeds);
}
internal static void LogShopItems()
{
Dictionary<string, string> lootNodeMap = new Dictionary<string, string>
{
{ "aquarvendor", "aquar_26" },
{ "elvenemporium", "faen_23" },
{ "felineshop", "ulmin_29" },
{ "firebazaar", "velka_20" }
};
int nSeeds = 300;
HandleDropItems(lootNodeMap, nSeeds);
}
internal static void HandleDropItems(Dictionary<string, string> lootNodeMap, int nSeeds = 300)
{
Dictionary<string, List<string>> itemDict = new Dictionary<string, List<string>>();
foreach (string key in lootNodeMap.Keys)
{
LootData lootData = Globals.Instance.GetLootData(key);
List<string> list = new List<string>();
LootItem[] lootItemTable = lootData.LootItemTable;
foreach (LootItem val in lootItemTable)
{
if (!((Object)(object)val.LootCard == (Object)null) && val.LootCard.CardName != "")
{
list.Add(val.LootCard.Id);
}
}
Plugin.LogDebug("Shop - " + key + " Valid Items - " + string.Join(", ", list));
for (int j = 0; j < nSeeds; j++)
{
string seed = Functions.RandomStringSafe(7f, 0f).ToUpper();
string node = lootNodeMap[key];
List<string> itemsFromSeed = GetItemsFromSeed(seed, key, node, 0, _obeliskChallenge: false, 8, 8);
UpdateItemDictForShops(ref itemDict, itemsFromSeed, list, seed, key);
}
}
Plugin.LogDebug("Shop Items - " + CustomFunctions.SerializeDictionary(itemDict));
}
internal static void LogCaravanItems()
{
Dictionary<string, List<string>> itemDict = new Dictionary<string, List<string>>();
int num = 1000;
for (int i = 0; i < num; i++)
{
string seed = Functions.RandomStringSafe(7f, 0f).ToUpper();
string shop = "caravanshop";
string node = "sen_44";
List<string> itemsFromSeed = GetItemsFromSeed(seed, shop, node, 0, _obeliskChallenge: false, 1);
UpdateItemDict(ref itemDict, itemsFromSeed, seed);
}
Plugin.LogDebug("Dictionary - " + CustomFunctions.SerializeDictionary(itemDict));
}
internal static void UpdateItemDictForShops(ref Dictionary<string, List<string>> itemDict, List<string> itemList, List<string> validItems, string seed, string shopName, int count = 5)
{
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Invalid comparison between Unknown and I4
foreach (string item in itemList)
{
if (!validItems.Contains(item))
{
continue;
}
CardData cardData = Globals.Instance.GetCardData(item, false);
if (!((Object)(object)cardData == (Object)null) && (int)cardData.CardUpgraded == 3)
{
string key = shopName + " - " + cardData.CardName;
if (!itemDict.ContainsKey(key))
{
itemDict.Add(key, new List<string>());
}
if (itemDict[key].Count() < count)
{
itemDict[key].Add(seed);
}
}
}
}
internal static void UpdateItemDict(ref Dictionary<string, List<string>> itemDict, List<string> itemList, string seed, int count = 5)
{
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Invalid comparison between Unknown and I4
foreach (string item in itemList)
{
CardData cardData = Globals.Instance.GetCardData(item, false);
string key = (((int)cardData.CardUpgraded == 3) ? (cardData.CardName + " (Corrupted)") : cardData.CardName);
if (!itemDict.ContainsKey(key))
{
itemDict.Add(key, new List<string>());
}
if (itemDict[key].Count() < count)
{
itemDict[key].Add(seed);
}
}
}
internal static List<string> GetItemsFromSeed(string _seed = "", string _shop = "caravanshop", string _node = "", int _townReroll = 0, bool _obeliskChallenge = false, int _madness = 0, int _corruptorCount = 0, bool _poverty = false)
{
//IL_03b5: Unknown result type (might be due to invalid IL or missing references)
//IL_03bb: Invalid comparison between Unknown and I4
//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
//IL_0201: Invalid comparison between Unknown and I4
//IL_0672: Unknown result type (might be due to invalid IL or missing references)
//IL_0678: Invalid comparison between Unknown and I4
//IL_067c: Unknown result type (might be due to invalid IL or missing references)
//IL_0682: Invalid comparison between Unknown and I4
//IL_069c: Unknown result type (might be due to invalid IL or missing references)
//IL_06a2: Invalid comparison between Unknown and I4
//IL_0255: Unknown result type (might be due to invalid IL or missing references)
//IL_0428: Unknown result type (might be due to invalid IL or missing references)
//IL_042e: Invalid comparison between Unknown and I4
//IL_025e: Unknown result type (might be due to invalid IL or missing references)
//IL_0265: Unknown result type (might be due to invalid IL or missing references)
//IL_045c: Unknown result type (might be due to invalid IL or missing references)
//IL_0462: Invalid comparison between Unknown and I4
//IL_06bc: Unknown result type (might be due to invalid IL or missing references)
//IL_06c2: Invalid comparison between Unknown and I4
//IL_0498: Unknown result type (might be due to invalid IL or missing references)
//IL_049e: Invalid comparison between Unknown and I4
//IL_027c: Unknown result type (might be due to invalid IL or missing references)
//IL_0283: Unknown result type (might be due to invalid IL or missing references)
//IL_04ef: Unknown result type (might be due to invalid IL or missing references)
//IL_04f5: Invalid comparison between Unknown and I4
//IL_04d9: Unknown result type (might be due to invalid IL or missing references)
//IL_04df: Invalid comparison between Unknown and I4
//IL_028c: 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_06dc: Unknown result type (might be due to invalid IL or missing references)
string text = "";
string text2 = _node;
if (_shop == "caravanshop" && text2 == "")
{
text2 = "sen_44";
}
if (_townReroll > 0)
{
}
LootData lootData = Globals.Instance.GetLootData(_shop);
if ((Object)(object)lootData == (Object)null)
{
Plugin.LogError("Unable to get shop items for " + _shop + " (shop does not exist!)");
return null;
}
List<string> list = new List<string>();
List<string> list2 = new List<string>();
for (int i = 0; i < Globals.Instance.CardListByClass[(CardClass)8].Count; i++)
{
list2.Add(Globals.Instance.CardListByClass[(CardClass)8][i]);
}
int deterministicHashCode = Functions.GetDeterministicHashCode(text2 + _seed + text);
Random.InitState(deterministicHashCode);
IListExtensions.Shuffle<string>((IList<string>)list2, deterministicHashCode);
int num = 0;
int num2 = ((!_obeliskChallenge) ? lootData.NumItems : lootData.LootItemTable.Length);
for (int j = 0; j < num2; j++)
{
if (list.Count >= lootData.NumItems)
{
break;
}
if (j >= lootData.LootItemTable.Length)
{
continue;
}
LootItem val = lootData.LootItemTable[j];
if (!((double)Random.Range(0, 100) < (double)val.LootPercent))
{
continue;
}
if ((Object)(object)val.LootCard != (Object)null)
{
list.Add(val.LootCard.Id);
continue;
}
bool flag = false;
int num3 = 0;
CardData val2 = null;
while (!flag && num3 < 10000)
{
if (num >= list2.Count)
{
num = 0;
}
string text3 = list2[num];
if (!list.Contains(text3))
{
val2 = Globals.Instance.GetCardData(text3, false);
if ((Object)(object)val2.Item != (Object)null && !val2.Item.DropOnly)
{
if ((int)val2.CardUpgraded == 3)
{
flag = false;
}
else if (val2.Item.PercentRetentionEndGame > 0 && (_madness > 2 || _obeliskChallenge))
{
flag = false;
}
else if (val2.Item.PercentDiscountShop > 0 && _poverty)
{
flag = false;
}
else if ((int)val.LootType == 0 && val2.CardRarity == val.LootRarity)
{
flag = true;
}
else if (val2.CardType == val.LootType && val2.CardRarity == val.LootRarity)
{
flag = true;
}
}
}
num++;
num3++;
}
if (flag && (Object)(object)val2 != (Object)null)
{
list.Add(val2.Id);
}
}
for (int k = list.Count; k < lootData.NumItems; k++)
{
bool flag2 = false;
int num4 = 0;
CardData val3 = null;
int num5 = Random.Range(0, 100);
while (!flag2 && num4 < 10000)
{
if (num >= list2.Count)
{
num = 0;
}
string text4 = list2[num];
if (!list.Contains(text4))
{
val3 = Globals.Instance.GetCardData(text4, false);
if ((Object)(object)val3.Item != (Object)null && !val3.Item.DropOnly)
{
if ((int)val3.CardUpgraded == 3)
{
flag2 = false;
}
else if (val3.Item.PercentRetentionEndGame > 0 && (_madness > 2 || _obeliskChallenge))
{
flag2 = false;
}
else if (val3.Item.PercentDiscountShop > 0 && _poverty)
{
flag2 = false;
}
else if ((double)num5 < (double)lootData.DefaultPercentMythic)
{
if ((int)val3.CardRarity == 4)
{
flag2 = true;
}
}
else if ((double)num5 < (double)lootData.DefaultPercentEpic + (double)lootData.DefaultPercentMythic)
{
if ((int)val3.CardRarity == 3)
{
flag2 = true;
}
}
else if ((double)num5 < (double)lootData.DefaultPercentRare + (double)lootData.DefaultPercentEpic + (double)lootData.DefaultPercentMythic)
{
if ((int)val3.CardRarity == 2)
{
flag2 = true;
}
}
else if ((double)num5 < (double)lootData.DefaultPercentUncommon + (double)lootData.DefaultPercentRare + (double)lootData.DefaultPercentEpic + (double)lootData.DefaultPercentMythic)
{
if ((int)val3.CardRarity == 1)
{
flag2 = true;
}
}
else if ((int)val3.CardRarity == 0)
{
flag2 = true;
}
}
}
num++;
num4++;
if (!flag2 && num4 % 100 == 0)
{
num5 += 10;
}
}
if (flag2 && (Object)(object)val3 != (Object)null)
{
list.Add(val3.Id);
continue;
}
break;
}
IListExtensions.Shuffle<string>((IList<string>)list, deterministicHashCode);
if (!_shop.Contains("towntier") && ((!_obeliskChallenge && _madness > 0) || _obeliskChallenge))
{
int num6 = 0;
if (_shop.Contains("exoticshop"))
{
num6 += 8;
}
else if (_shop.Contains("rareshop"))
{
num6 += 4;
}
if (_obeliskChallenge)
{
if (_madness > 8)
{
num6 += 4;
}
else if (_madness > 4)
{
num6 += 2;
}
}
else
{
num6 += Functions.FuncRoundToInt(0.2f * (float)(_madness + _corruptorCount));
}
for (int l = 0; l < list.Count; l++)
{
int num7 = Random.Range(0, 100);
CardData cardData = Globals.Instance.GetCardData(list[l], false);
if (!((Object)(object)cardData == (Object)null))
{
bool flag3 = false;
if (((int)cardData.CardRarity == 4 || (int)cardData.CardRarity == 3) && num7 < 3 + num6)
{
flag3 = true;
}
else if ((int)cardData.CardRarity == 2 && num7 < 5 + num6)
{
flag3 = true;
}
else if ((int)cardData.CardRarity == 1 && num7 < 7 + num6)
{
flag3 = true;
}
else if ((int)cardData.CardRarity == 0 && num7 < 9 + num6)
{
flag3 = true;
}
if (flag3 && (Object)(object)cardData.UpgradesToRare != (Object)null)
{
list[l] = cardData.UpgradesToRare.Id;
}
}
}
}
return list;
}
}
public static class PluginInfo
{
public const string PLUGIN_GUID = "com.binbin.definiteseeds";
public const string PLUGIN_NAME = "SeedSearcher";
public const string PLUGIN_VERSION = "1.0.0";
}
}