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 BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Obeliskial_Content;
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.arachnope")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("0.9.2.0")]
[assembly: AssemblyInformationalVersion("0.9.2+f74e44daec641671afab6413d04728beac56e9d4")]
[assembly: AssemblyProduct("Arachnope")]
[assembly: AssemblyTitle("com.binbin.arachnope")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.9.2.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 SpidersBeGone
{
public class CustomFunctions
{
public enum AppliesTo
{
None,
Global,
Monsters,
Heroes,
ThisHero
}
public enum CharacterHas
{
Perk,
Item,
Trait
}
public enum IsAuraOrCurse
{
Aura,
Curse,
Both
}
public static string perkBase = "<RenameThisForPerks>";
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_0066: 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]);
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_004f: 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]);
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_0108: Unknown result type (might be due to invalid IL or missing references)
//IL_010d: Unknown result type (might be due to invalid IL or missing references)
//IL_017e: Unknown result type (might be due to invalid IL or missing references)
//IL_0183: 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]);
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]);
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_0141: 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]);
if (cardData != null)
{
list.Add(cardData);
}
}
}
else
{
for (int j = 0; j < heroHand.Count; j++)
{
CardData cardData2 = MatchManager.Instance.GetCardData(heroHand[j]);
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;
}
}
else
{
switch (characterHas)
{
case CharacterHas.Item:
flag2 = AtOManager.Instance.TeamHaveItem(perkBase + id, -1, false) || AtOManager.Instance.TeamHaveItem(id, -1, false);
break;
case CharacterHas.Perk:
flag2 = AtOManager.Instance.TeamHavePerk(perkBase + id) || AtOManager.Instance.TeamHavePerk(id);
break;
case CharacterHas.Trait:
flag2 = AtOManager.Instance.TeamHaveTrait(perkBase + id) || AtOManager.Instance.TeamHaveTrait(id);
break;
}
}
return flag2 && flag;
}
public static bool TeamHasPerkGACM(Character characterOfInterest, string perkName, AppliesTo appliesTo = AppliesTo.Global, string _type = "", string onlyThisType = "")
{
if (appliesTo == AppliesTo.None || characterOfInterest == null || (Object)(object)AtOManager.Instance == (Object)null)
{
return false;
}
if (_type != "" && onlyThisType != _type)
{
return false;
}
bool flag = (characterOfInterest.IsHero && appliesTo == AppliesTo.Heroes) || (!characterOfInterest.IsHero && appliesTo == AppliesTo.Monsters) || appliesTo == AppliesTo.Global;
bool flag2 = AtOManager.Instance.TeamHavePerk(perkBase + perkName) || AtOManager.Instance.TeamHavePerk(perkName);
return flag2 && flag;
}
public static bool CharacterHasPerkGACM(Character characterOfInterest, string perkName, AppliesTo appliesTo = AppliesTo.Global)
{
if (appliesTo == AppliesTo.None || characterOfInterest == null || (Object)(object)AtOManager.Instance == (Object)null)
{
return false;
}
bool flag = (characterOfInterest.IsHero && appliesTo == AppliesTo.Heroes) || (!characterOfInterest.IsHero && appliesTo == AppliesTo.Monsters) || appliesTo == AppliesTo.Global;
bool flag2 = AtOManager.Instance.CharacterHavePerk(characterOfInterest.SubclassName, perkBase + perkName) || AtOManager.Instance.CharacterHavePerk(characterOfInterest.SubclassName, perkName);
return flag2 && flag;
}
public static bool TeamHasTraitGACM(Character characterOfInterest, string perkName, AppliesTo appliesTo = AppliesTo.Global, string _type = "", string onlyThisType = "")
{
if (appliesTo == AppliesTo.None || characterOfInterest == null || (Object)(object)AtOManager.Instance == (Object)null)
{
return false;
}
if (_type != "" && onlyThisType != _type)
{
return false;
}
bool flag = (characterOfInterest.IsHero && appliesTo == AppliesTo.Heroes) || (!characterOfInterest.IsHero && appliesTo == AppliesTo.Monsters) || appliesTo == AppliesTo.Global;
bool flag2 = AtOManager.Instance.TeamHaveTrait(perkBase + perkName) || AtOManager.Instance.TeamHavePerk(perkName);
return flag2 && flag;
}
public static bool CharacterHasTraitGACM(Character characterOfInterest, string perkName, AppliesTo appliesTo = AppliesTo.Global, string _type = "", string onlyThisType = "")
{
if (appliesTo == AppliesTo.None || characterOfInterest == null || (Object)(object)AtOManager.Instance == (Object)null)
{
return false;
}
if (_type != "" && onlyThisType != _type)
{
return false;
}
bool flag = (characterOfInterest.IsHero && appliesTo == AppliesTo.Heroes) || (!characterOfInterest.IsHero && appliesTo == AppliesTo.Monsters) || appliesTo == AppliesTo.Global;
bool flag2 = AtOManager.Instance.CharacterHaveTrait(characterOfInterest.SubclassName, perkBase + perkName) || AtOManager.Instance.TeamHavePerk(perkName);
return flag2 && flag;
}
public static bool TeamHasPerkForSet(string perkName, bool flag, AtOManager __instance, Character _characterTarget)
{
return _characterTarget != null && __instance.TeamHavePerk(perkBase + perkName) && flag;
}
public static bool TeamHasPerkForConsume(string perkName, bool flag, AtOManager __instance, Character _characterCaster)
{
if ((Object)(object)__instance == (Object)null)
{
return false;
}
return _characterCaster != null && (__instance.TeamHavePerk(perkBase + perkName) || __instance.TeamHavePerk(perkName)) && flag;
}
public static bool CharacterObjectHavePerk(Character _character, string _perkID)
{
if (_character == null || (Object)(object)AtOManager.Instance == (Object)null)
{
return false;
}
return AtOManager.Instance.CharacterHavePerk(_character.SubclassName, perkBase + _perkID) || AtOManager.Instance.CharacterHavePerk(_character.SubclassName, _perkID);
}
public static void PlayCardForFree(string cardToCast)
{
if (cardToCast != null && !((Object)(object)Globals.Instance == (Object)null))
{
CardData cardData = Globals.Instance.GetCardData(cardToCast, true);
if ((Object)(object)cardData == (Object)null)
{
Plugin.LogDebug("Invalid CardName");
}
else
{
((MonoBehaviour)MatchManager.Instance).StartCoroutine(MatchManager.Instance.CastCard((CardItem)null, true, cardData, 0, -1, true));
}
}
}
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.arachnope", "Arachnope", "0.9.2")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInProcess("AcrossTheObelisk.exe")]
public class Plugin : BaseUnityPlugin
{
internal int ModDate = int.Parse(DateTime.Today.ToString("yyyyMMdd"));
private readonly Harmony harmony = new Harmony("com.binbin.arachnope");
internal static ManualLogSource Log;
public static string debugBase = "com.binbin.arachnope Testing - ";
public static ConfigEntry<bool> EnableSpidersBeGone { 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.arachnope 0.9.2 has loaded!");
EnableSpidersBeGone = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("Arachnope", "EnableArachnope"), true, new ConfigDescription("If false, disables the mod. Restart the game upon changing this setting.", (AcceptableValueBase)null, Array.Empty<object>()));
Essentials.RegisterMod("Arachnope", "binbin", "Removes Arachnids", "0.9.2", ModDate, "https://github.com/binbinmods/Spiders-Be-Gone", (string[])null, "Arachnope", 100, (string[])null, "", true);
harmony.PatchAll();
}
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 SpidersBeGone
{
public static Dictionary<string, string> npcsToReplace = new Dictionary<string, string>
{
{ "parasite", "taintedsapling" },
{ "hatchling", "sapling" },
{ "herder", "sheepshearer" },
{ "mutant", "farmer" },
{ "spider", "sheep" },
{ "pendulum", "blacksheep" },
{ "penduluma", "blacksheep" },
{ "tulah", "saul" }
};
public static Dictionary<string, string[]> cardsToRemove = new Dictionary<string, string[]>
{
{
"hatch",
new string[2] { "Wild Call", "naturescall" }
},
{
"parasite",
new string[2] { "Forest Ally", "forestallies" }
},
{
"poisonousbite",
new string[2] { "Wild Bite", "viciousbite" }
},
{
"noxiousinjection",
new string[2] { "Infected Bite", "hydrabite" }
},
{
"paralizingvenom",
new string[2] { "Paralyzing Bite", "hydrabite" }
},
{
"carrioneater",
new string[2] { "Evil Bite", "tantrum" }
},
{
"webweaver",
new string[2] { "Entangle", "entanglingroot" }
},
{
"web",
new string[2] { "Glue", "wollyshell" }
},
{
"broodmother",
new string[2] { "Infected Summon", "forestallies" }
},
{
"venomamulet",
new string[2] { "Toxic Charm", "toxicpuddle" }
},
{
"spiderqueeneye",
new string[2] { "Evil Eye", "maliciouseye" }
},
{
"liante",
new string[2] { "Lianty", "betty" }
},
{
"noxiousparasites",
new string[2] { "Forest Allies", "forestallies" }
}
};
[HarmonyPostfix]
[HarmonyPatch(typeof(Globals), "GetNPCForRandom")]
public static void GetNPCForRandomPostfix(ref Globals __instance, ref NPCData __result)
{
Plugin.LogDebug("GetNPCForRandomPostfix - Start");
if (!Plugin.EnableSpidersBeGone.Value)
{
Plugin.LogDebug("Arachnope Disabled");
return;
}
string name = ((Object)__result.GameObjectAnimated).name;
if (npcsToReplace.ContainsKey(name))
{
Plugin.LogDebug("GetNPCForRandomPostfix - Attempting to Replace NPCData - " + name);
NPCData nPC = Globals.Instance.GetNPC(npcsToReplace[name]);
__result.SpritePortrait = nPC.SpritePortrait;
Traverse.Create((object)__result).Field("spriteSpeed").SetValue((object)nPC.SpriteSpeed);
__result.GameObjectAnimated = nPC.GameObjectAnimated;
__result.ScriptableObjectName = nPC.ScriptableObjectName;
__result.FluffOffsetX = nPC.FluffOffsetX;
__result.FluffOffsetY = nPC.FluffOffsetY;
__result.NPCName = "Infected" + nPC.NPCName;
Plugin.LogDebug("GetNPCForRandomPostfix - Attempting to Replace NPCData - " + name + " HitSounds");
AudioClip value = Traverse.Create((object)nPC).Field("hitSound").GetValue<AudioClip>();
Traverse.Create((object)__result).Field("hitSound").SetValue((object)value);
List<AudioClip> value2 = Traverse.Create((object)nPC).Field("hitSoundRework").GetValue<List<AudioClip>>();
Traverse.Create((object)__result).Field("hitSoundRework").SetValue((object)value2);
Plugin.LogDebug("GetNPCForRandomPostfix - Attempting to Replace NPCData - " + name + " END");
}
}
[HarmonyPostfix]
[HarmonyPatch(typeof(Globals), "GetNPC")]
public static void GetNPCPostfix(ref Globals __instance, ref NPCData __result)
{
if (!Plugin.EnableSpidersBeGone.Value)
{
Plugin.LogDebug("Arachnope Disabled");
return;
}
Plugin.LogDebug("GetNPC - Start");
string name = ((Object)__result.GameObjectAnimated).name;
if (npcsToReplace.ContainsKey(name))
{
Plugin.LogDebug("GetNPC - Attempting to Replace NPCData - " + name);
NPCData nPC = Globals.Instance.GetNPC(npcsToReplace[name]);
__result.SpritePortrait = nPC.SpritePortrait;
Traverse.Create((object)__result).Field("spriteSpeed").SetValue((object)nPC.SpriteSpeed);
__result.GameObjectAnimated = nPC.GameObjectAnimated;
__result.ScriptableObjectName = nPC.ScriptableObjectName;
__result.FluffOffsetX = nPC.FluffOffsetX;
__result.FluffOffsetY = nPC.FluffOffsetY;
Plugin.LogDebug("GetNPC - Attempting to Replace NPCData - " + name + " HitSounds");
AudioClip value = Traverse.Create((object)nPC).Field("hitSound").GetValue<AudioClip>();
Traverse.Create((object)__result).Field("hitSound").SetValue((object)value);
List<AudioClip> value2 = Traverse.Create((object)nPC).Field("hitSoundRework").GetValue<List<AudioClip>>();
Traverse.Create((object)__result).Field("hitSoundRework").SetValue((object)value2);
Plugin.LogDebug("GetNPC - Attempting to Replace NPCData - " + name + " END");
}
}
[HarmonyPrefix]
[HarmonyPatch(typeof(NPCItem), "Init")]
public static void InitPrefix(ref NPCItem __instance)
{
Plugin.LogInfo("InitPrefix");
if (!Plugin.EnableSpidersBeGone.Value)
{
Plugin.LogDebug("Arachnope Disabled");
return;
}
if ((Object)(object)GameManager.Instance == (Object)null || (Object)(object)Globals.Instance == (Object)null)
{
Plugin.LogError("Null instance");
return;
}
string name = ((Object)__instance.NpcData.GameObjectAnimated).name;
if (npcsToReplace.ContainsKey(name))
{
Plugin.LogDebug("Attempting to Replace NPCItem - " + name);
NPCData nPC = Globals.Instance.GetNPC(npcsToReplace[name]);
__instance.NpcData.SpritePortrait = nPC.SpritePortrait;
Traverse.Create((object)__instance.NpcData).Field("spriteSpeed").SetValue((object)nPC.SpriteSpeed);
__instance.NpcData.GameObjectAnimated = nPC.GameObjectAnimated;
__instance.NpcData.ScriptableObjectName = nPC.ScriptableObjectName;
__instance.NpcData.FluffOffsetX = nPC.FluffOffsetX;
__instance.NpcData.FluffOffsetY = nPC.FluffOffsetY;
AudioClip value = Traverse.Create((object)nPC).Field("hitSound").GetValue<AudioClip>();
Traverse.Create((object)__instance.NpcData).Field("hitSound").SetValue((object)value);
List<AudioClip> value2 = Traverse.Create((object)nPC).Field("hitSoundRework").GetValue<List<AudioClip>>();
Traverse.Create((object)__instance.NpcData).Field("hitSoundRework").SetValue((object)value2);
Plugin.LogDebug("Attempting to Replace NPCItem - " + name + " END");
}
}
[HarmonyPostfix]
[HarmonyPatch(typeof(NPC), "InitData")]
public static void InitDataPostfix(ref NPC __instance)
{
if (!Plugin.EnableSpidersBeGone.Value)
{
Plugin.LogDebug("Arachnope Disabled");
return;
}
Plugin.LogInfo("InitDATAPostfix");
if ((Object)(object)GameManager.Instance == (Object)null || (Object)(object)Globals.Instance == (Object)null)
{
Plugin.LogError("Null instance");
return;
}
string name = ((Object)((Character)__instance).NpcData.GameObjectAnimated).name;
Plugin.LogDebug("Attempting to Replace NPC - " + name);
if (npcsToReplace.ContainsKey(name))
{
NPCData nPC = Globals.Instance.GetNPC(npcsToReplace[name]);
((Character)__instance).SpritePortrait = nPC.SpritePortrait;
((Character)__instance).SpriteSpeed = nPC.SpriteSpeed;
((Character)__instance).NpcData.SpritePortrait = nPC.SpritePortrait;
Traverse.Create((object)((Character)__instance).NpcData).Field("spriteSpeed").SetValue((object)nPC.SpriteSpeed);
((Character)__instance).NpcData.GameObjectAnimated = nPC.GameObjectAnimated;
((Character)__instance).NpcData.ScriptableObjectName = nPC.ScriptableObjectName;
((Character)__instance).NpcData.FluffOffsetX = nPC.FluffOffsetX;
((Character)__instance).NpcData.FluffOffsetY = nPC.FluffOffsetY;
AudioClip value = Traverse.Create((object)nPC).Field("hitSound").GetValue<AudioClip>();
Traverse.Create((object)((Character)__instance).NpcData).Field("hitSound").SetValue((object)value);
List<AudioClip> value2 = Traverse.Create((object)nPC).Field("hitSoundRework").GetValue<List<AudioClip>>();
Traverse.Create((object)((Character)__instance).NpcData).Field("hitSoundRework").SetValue((object)value2);
}
Plugin.LogDebug("Attempting to Replace NPC - " + name + " END");
}
[HarmonyPostfix]
[HarmonyPatch(typeof(Globals), "CreateGameContent")]
public static void CreateGameContentPostfix(ref Globals __instance)
{
Plugin.LogDebug("CreateGameContentPostfix");
if (!Plugin.EnableSpidersBeGone.Value)
{
Plugin.LogDebug("Arachnope Disabled");
return;
}
RemoveSpiderNPCs(ref __instance);
RemoveSpiderNPCsSource(ref __instance);
RemoveSpiderNPCsNamed(ref __instance);
RemoveSpiderCards(ref __instance);
RemoveSpiderNodes(ref __instance);
}
[HarmonyPostfix]
[HarmonyPatch(typeof(Texts), "GetText")]
public static void GetTextPostfix(ref Texts __instance, ref string __result, string _id)
{
if (__result.Contains("spider"))
{
Plugin.LogDebug("GetTextPostfix for - " + _id);
}
__result = SpiderReplace(__result);
}
[HarmonyPostfix]
[HarmonyPatch(typeof(Globals), "GetCombatData")]
public static void GetCombatDataPostfix(ref Globals __instance, ref CombatData __result, string id)
{
Plugin.LogDebug("GetCombatDataPostfix");
if (!Plugin.EnableSpidersBeGone.Value)
{
Plugin.LogDebug("Arachnope Disabled");
return;
}
NPCData[] nPCList = __result.NPCList;
NPCData[] array = nPCList;
foreach (NPCData val in array)
{
if (!((Object)(object)val == (Object)null))
{
string name = ((Object)val.GameObjectAnimated).name;
Plugin.LogDebug("GetCombatDataPostfix - Attempting to Replace NPC - " + name);
if (npcsToReplace.ContainsKey(name))
{
NPCData nPC = Globals.Instance.GetNPC(npcsToReplace[name]);
val.SpritePortrait = nPC.SpritePortrait;
Traverse.Create((object)val).Field("spriteSpeed").SetValue((object)nPC.SpriteSpeed);
val.GameObjectAnimated = nPC.GameObjectAnimated;
val.ScriptableObjectName = nPC.ScriptableObjectName;
val.FluffOffsetX = nPC.FluffOffsetX;
val.FluffOffsetY = nPC.FluffOffsetY;
AudioClip value = Traverse.Create((object)nPC).Field("hitSound").GetValue<AudioClip>();
Traverse.Create((object)val).Field("hitSound").SetValue((object)value);
List<AudioClip> value2 = Traverse.Create((object)nPC).Field("hitSoundRework").GetValue<List<AudioClip>>();
Traverse.Create((object)val).Field("hitSoundRework").SetValue((object)value2);
}
}
}
__result.NPCList = nPCList;
}
public static string SpiderReplace(string input)
{
string text = string.Copy(input);
text = text.Replace("spider", "slime");
text = text.Replace("cobweb", "slime");
text = text.Replace("Spider", "Slime");
if (input.Contains("spider") || input.Contains("Spider"))
{
Plugin.LogDebug("Replacing Spider in - " + input);
Plugin.LogDebug("After Replacing Spider - " + text);
}
return text;
}
public static void RemoveSpiderNodes(ref Globals __instance)
{
Plugin.LogDebug("Remove Spider Nodes - Start");
Dictionary<string, NodeData> value = Traverse.Create((object)__instance).Field("_NodeDataSource").GetValue<Dictionary<string, NodeData>>();
Dictionary<string, NodeData> dictionary = new Dictionary<string, NodeData>(value);
foreach (KeyValuePair<string, NodeData> item in value)
{
string key = item.Key;
NodeData value2 = item.Value;
if (key != null && !((Object)(object)value2 == (Object)null))
{
Plugin.LogDebug("Looking at Node - " + key);
value2.NodeName = SpiderReplace(value2.NodeName);
if (key == "aqua_16")
{
Plugin.LogDebug("Looking at Node - " + key + " - " + value2.NodeName);
}
dictionary[key] = value2;
}
}
Traverse.Create((object)__instance).Field("_NodeDataSource").SetValue((object)dictionary);
Plugin.LogDebug("Remove Spider Nodes - End");
}
public static void RemoveSpiderNPCs(ref Globals __instance)
{
Dictionary<string, NPCData> value = Traverse.Create((object)__instance).Field("_NPCs").GetValue<Dictionary<string, NPCData>>();
Plugin.LogDebug("Remove Spider NPCS - Start");
Dictionary<string, NPCData> dictionary = new Dictionary<string, NPCData>(value);
foreach (KeyValuePair<string, NPCData> item in value)
{
string key = item.Key;
NPCData value2 = item.Value;
if (key != null && !((Object)(object)value2 == (Object)null))
{
Plugin.LogDebug("Looking at NPC - " + key);
if (npcsToReplace.ContainsKey(((Object)value2.GameObjectAnimated).name))
{
Plugin.LogDebug("Attempting to Replace NPC - " + key);
NPCData val = value[npcsToReplace[((Object)value2.GameObjectAnimated).name]];
Plugin.LogDebug("Acquired npcToUse - " + ((Object)val).name);
value2.SpritePortrait = val.SpritePortrait;
Traverse.Create((object)value2).Field("spriteSpeed").SetValue((object)val.SpriteSpeed);
value2.GameObjectAnimated = val.GameObjectAnimated;
value2.ScriptableObjectName = val.ScriptableObjectName;
value2.FluffOffsetX = val.FluffOffsetX;
value2.FluffOffsetY = val.FluffOffsetY;
AudioClip value3 = Traverse.Create((object)val).Field("hitSound").GetValue<AudioClip>();
Traverse.Create((object)value2).Field("hitSound").SetValue((object)value3);
List<AudioClip> value4 = Traverse.Create((object)val).Field("hitSoundRework").GetValue<List<AudioClip>>();
Traverse.Create((object)value2).Field("hitSoundRework").SetValue((object)value4);
dictionary[key] = value2;
}
}
}
Traverse.Create((object)__instance).Field("_NPCs").SetValue((object)dictionary);
Plugin.LogDebug("Remove Spider NPCS - End");
}
public static void RemoveSpiderNPCsSource(ref Globals __instance)
{
Dictionary<string, NPCData> value = Traverse.Create((object)__instance).Field("_NPCsNamed").GetValue<Dictionary<string, NPCData>>();
Plugin.LogDebug("Remove Spider NPCS Named - Start");
Dictionary<string, NPCData> dictionary = new Dictionary<string, NPCData>(value);
foreach (KeyValuePair<string, NPCData> item in value)
{
string key = item.Key;
NPCData value2 = item.Value;
if (key != null && !((Object)(object)value2 == (Object)null))
{
Plugin.LogDebug("Looking at NPC - " + key);
if (npcsToReplace.ContainsKey(((Object)value2.GameObjectAnimated).name))
{
Plugin.LogDebug("Attempting to Replace NPCS Named - " + key);
NPCData val = value[npcsToReplace[((Object)value2.GameObjectAnimated).name]];
Plugin.LogDebug("Acquired npcToUse - " + ((Object)val).name);
value2.SpritePortrait = val.SpritePortrait;
Traverse.Create((object)value2).Field("spriteSpeed").SetValue((object)val.SpriteSpeed);
value2.GameObjectAnimated = val.GameObjectAnimated;
value2.ScriptableObjectName = val.ScriptableObjectName;
value2.FluffOffsetX = val.FluffOffsetX;
value2.FluffOffsetY = val.FluffOffsetY;
AudioClip value3 = Traverse.Create((object)val).Field("hitSound").GetValue<AudioClip>();
Traverse.Create((object)value2).Field("hitSound").SetValue((object)value3);
List<AudioClip> value4 = Traverse.Create((object)val).Field("hitSoundRework").GetValue<List<AudioClip>>();
Traverse.Create((object)value2).Field("hitSoundRework").SetValue((object)value4);
dictionary[key] = value2;
}
}
}
Traverse.Create((object)__instance).Field("_NPCsNamed").SetValue((object)dictionary);
Plugin.LogDebug("Remove Spider NPCS Named - End");
}
public static void RemoveSpiderNPCsNamed(ref Globals __instance)
{
Dictionary<string, NPCData> value = Traverse.Create((object)__instance).Field("_NPCsSource").GetValue<Dictionary<string, NPCData>>();
Plugin.LogDebug("Remove Spider NPCS - Start");
Dictionary<string, NPCData> dictionary = new Dictionary<string, NPCData>(value);
foreach (KeyValuePair<string, NPCData> item in value)
{
string key = item.Key;
NPCData value2 = item.Value;
if (key != null && !((Object)(object)value2 == (Object)null))
{
Plugin.LogDebug("Looking at NPC - " + key);
if (npcsToReplace.ContainsKey(((Object)value2.GameObjectAnimated).name))
{
Plugin.LogDebug("Attempting to Replace NPC - " + key);
NPCData val = value[npcsToReplace[((Object)value2.GameObjectAnimated).name]];
Plugin.LogDebug("Acquired npcToUse - " + ((Object)val).name);
value2.SpritePortrait = val.SpritePortrait;
Traverse.Create((object)value2).Field("spriteSpeed").SetValue((object)val.SpriteSpeed);
value2.GameObjectAnimated = val.GameObjectAnimated;
value2.ScriptableObjectName = val.ScriptableObjectName;
value2.FluffOffsetX = val.FluffOffsetX;
value2.FluffOffsetY = val.FluffOffsetY;
AudioClip value3 = Traverse.Create((object)val).Field("hitSound").GetValue<AudioClip>();
Traverse.Create((object)value2).Field("hitSound").SetValue((object)value3);
List<AudioClip> value4 = Traverse.Create((object)val).Field("hitSoundRework").GetValue<List<AudioClip>>();
Traverse.Create((object)value2).Field("hitSoundRework").SetValue((object)value4);
dictionary[key] = value2;
}
}
}
Traverse.Create((object)__instance).Field("_NPCsSource").SetValue((object)dictionary);
Plugin.LogDebug("Remove Spider NPCS - End");
}
public static void RemoveSpiderCards(ref Globals __instance)
{
Plugin.LogDebug("Remove Spider Cards - Start");
Dictionary<string, CardData> value = Traverse.Create((object)__instance).Field("_CardsSource").GetValue<Dictionary<string, CardData>>();
Dictionary<string, CardData> dictionary = new Dictionary<string, CardData>(value);
Plugin.LogDebug("Acquired CardSource");
foreach (KeyValuePair<string, CardData> item in value)
{
string key = item.Key;
CardData value2 = item.Value;
if (key == null || (Object)(object)value2 == (Object)null || (Object)(object)value2.Sprite == (Object)null)
{
continue;
}
Plugin.LogDebug("Looking at Card - " + key);
string key2 = ((Object)value2.Sprite).name.ToLower();
if (cardsToRemove.ContainsKey(key2))
{
Plugin.LogDebug("Removing Card - " + key);
value2.Sprite = (Content.medsSprites.ContainsKey(cardsToRemove[key2][1]) ? Content.medsSprites[cardsToRemove[key2][1]] : null);
value2.CardName = cardsToRemove[key2][0];
dictionary[key] = value2;
}
if (!Content.medsSprites.ContainsKey("tulahspeed"))
{
Plugin.LogDebug("Missing TulahSpeed Portrait - " + key);
continue;
}
string[] source = new string[6] { "spiderqueeneye", "spiderqueeneyerare", "freelover", "freeloverrare", "venomfang", "venomfangrare" };
if (source.Contains(key))
{
if ((Object)(object)value2.Item == (Object)null || (Object)(object)value2.Item.SpriteBossDrop == (Object)null)
{
Plugin.LogDebug("Missing Item for " + key);
}
else
{
value2.Item.SpriteBossDrop = (Content.medsSprites.ContainsKey("reptilianshamanspeed") ? Content.medsSprites["reptilianshamanspeed"] : null);
}
}
}
Traverse.Create((object)__instance).Field("_CardsSource").SetValue((object)dictionary);
Plugin.LogDebug("Remove Spider Cards - End");
}
}
public static class PluginInfo
{
public const string PLUGIN_GUID = "com.binbin.arachnope";
public const string PLUGIN_NAME = "Arachnope";
public const string PLUGIN_VERSION = "0.9.2";
}
}