using System;
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.Logging;
using Cards;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Obeliskial_Essentials;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("com.shazixnar.MagicArcherTraits")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("Magic Archer Traits, made by Shazixnar")]
[assembly: AssemblyFileVersion("2.0.9.0")]
[assembly: AssemblyInformationalVersion("2.0.9+54d39ed1a398fc345635ca93ef11be095ab2fd4c")]
[assembly: AssemblyProduct("Magic Archer Sylvie")]
[assembly: AssemblyTitle("com.shazixnar.MagicArcherTraits")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("2.0.9.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 TraitMod
{
[HarmonyPatch]
internal class Traits
{
[HarmonyPatch(typeof(Trait), "DoTrait")]
public static class Trait_DoTrait_Patch
{
[HarmonyPrefix]
public static bool Prefix(EventActivation __0, string __1, Character __2, Character __3, int __4, string __5, CardData __6, Trait __instance)
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
if (myTraitList.Contains(__1))
{
myDoTrait(__1, __0, __2, __3, __4, __5, __6);
return false;
}
return true;
}
}
public static string[] myTraitList = new string[3] { "sylviearchersintuition", "sylvieelementlock", "sylviearrowwithhawk" };
private static readonly Traits _instance = new Traits();
[HarmonyPostfix]
[HarmonyPatch(typeof(Hero), "AssignTrait")]
public static void AssignTraitPostfix(ref string traitName, ref Hero __instance)
{
if (traitName == "sylviearrowwithhawk")
{
((Character)__instance).Pet = "harleyrare";
}
}
public static void myDoTrait(string trait, EventActivation evt, Character character, Character target, int auxInt, string auxString, CardData castedCard)
{
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
switch (trait)
{
case "sylviearchersintuition":
_instance.sylviearchersintuition(evt, character, target, auxInt, auxString, castedCard, trait);
break;
case "sylvieelementlock":
_instance.sylvieelementlock(evt, character, target, auxInt, auxString, castedCard, trait);
break;
case "sylviearrowwithhawk":
_instance.sylviearrowwithhawk(evt, character, target, auxInt, auxString, castedCard, trait);
break;
}
}
public void sylviearchersintuition(EventActivation evt, Character character, Character target, int auxInt, string auxString, CardData castedCard, string trait)
{
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Invalid comparison between Unknown and I4
if (character == null || (Object)(object)castedCard == (Object)null || (int)evt != 7 || !castedCard.HasCardType((CardType)2) || (Object)(object)character.HeroData == (Object)null)
{
return;
}
TraitData traitData = Globals.Instance.GetTraitData(trait);
int num = (MatchManager.Instance.activatedTraits.ContainsKey(trait) ? MatchManager.Instance.activatedTraits[trait] : 0);
if (num >= traitData.TimesPerTurn)
{
return;
}
MatchManager.Instance.activatedTraits[trait] = num + 1;
MatchManager.Instance.SetTraitInfoText();
character.ModifyEnergy(1, true);
HeroItem heroItem = character.HeroItem;
if (heroItem != null)
{
((CharacterItem)heroItem).ScrollCombatText(Texts.Instance.GetText("traits_Archer's Intuition", "") + Functions.TextChargesLeft(num + 1, traitData.TimesPerTurn), (CombatScrollEffectType)7);
}
NPC[] teamNPC = MatchManager.Instance.GetTeamNPC();
NPC[] array = teamNPC;
foreach (NPC val in array)
{
if (val != null && ((Character)val).Alive)
{
((Character)val).SetAuraTrait(character, "sight", 3);
}
}
}
public void sylvieelementlock(EventActivation evt, Character character, Character target, int auxInt, string auxString, CardData castedCard, string trait)
{
if (character != null && target != null && target.Alive && (!(auxString != "burn") || !(auxString != "chill") || !(auxString != "spark")))
{
int num = Functions.FuncRoundToInt((float)auxInt);
target.SetAuraTrait(target, "sight", num);
HeroItem heroItem = character.HeroItem;
if (heroItem != null)
{
((CharacterItem)heroItem).ScrollCombatText(Texts.Instance.GetText("traits_Indomitable", ""), (CombatScrollEffectType)7);
}
}
}
public void sylviearrowwithhawk(EventActivation evt, Character character, Character target, int auxInt, string auxString, CardData castedCard, string trait)
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Invalid comparison between Unknown and I4
if (character == null || (Object)(object)castedCard == (Object)null || (int)evt != 7 || !castedCard.HasCardType((CardType)2) || (Object)(object)character.HeroData == (Object)null)
{
return;
}
TraitData traitData = Globals.Instance.GetTraitData(trait);
int num = (MatchManager.Instance.activatedTraits.ContainsKey(trait) ? MatchManager.Instance.activatedTraits[trait] : 0);
if (num >= traitData.TimesPerTurn)
{
return;
}
if (MatchManager.Instance.CountHeroHand(-1) >= 10)
{
Debug.Log((object)"[TRAIT EXECUTION] Broke because player at max cards");
return;
}
MatchManager.Instance.activatedTraits[trait] = num + 1;
MatchManager.Instance.SetTraitInfoText();
int randomIntRange = MatchManager.Instance.GetRandomIntRange(0, 100, "trait", "");
int randomIntRange2 = MatchManager.Instance.GetRandomIntRange(0, Globals.Instance.CardListByType[(CardType)2].Count, "trait", "");
string text = Globals.Instance.CardListByType[(CardType)2][randomIntRange2];
text = Functions.GetCardByRarity(randomIntRange, Globals.Instance.GetCardData(text, false), false);
string text2 = MatchManager.Instance.CreateCardInDictionary(text, "", false);
CardData cardData = MatchManager.Instance.GetCardData(text2, true);
cardData.Vanish = true;
cardData.EnergyReductionToZeroPermanent = true;
MatchManager.Instance.GenerateNewCard(1, text2, false, (CardPlace)5, (CardData)null, (CardData)null, -1, true, 0, (CopyConfig)null);
HeroItem heroItem = character.HeroItem;
if (heroItem != null)
{
((CharacterItem)heroItem).ScrollCombatText(Texts.Instance.GetText("traits_Arrow with Hawk", "") + Functions.TextChargesLeft(num + 1, traitData.TimesPerTurn), (CombatScrollEffectType)7);
}
MatchManager.Instance.ItemTraitActivated(true);
MatchManager.Instance.CreateLogCardModification(cardData.InternalId, MatchManager.Instance.GetHero(character.HeroIndex));
}
public static string TextChargesLeft(int currentCharges, int chargesTotal)
{
int num = currentCharges;
int num2 = chargesTotal;
return "<br><color=#FFF>" + num + "/" + num2 + "</color>";
}
[HarmonyPostfix]
[HarmonyPatch(typeof(AtOManager), "GlobalAuraCurseModificationByTraitsAndItems")]
public static void GlobalAuraCurseModificationByTraitsAndItemsPostfix(ref AtOManager __instance, ref AuraCurseData __result, string _type, string _acId, Character _characterCaster, Character _characterTarget)
{
bool flag = false;
bool flag2 = false;
if (_characterCaster != null && _characterCaster.IsHero)
{
flag = _characterCaster.IsHero;
}
if (_characterTarget != null && _characterTarget.IsHero)
{
flag2 = true;
}
if (_acId == "burn" && _type == "set" && !flag2 && __instance.TeamHaveTrait("sylviepowerfulenchantment"))
{
__result.ResistModifiedPercentagePerStack = -0.7f;
__result.ResistModified3 = (DamageType)3;
__result.ResistModifiedPercentagePerStack3 = -0.3f;
}
if (_acId == "chill" && _type == "set" && !flag2 && __instance.TeamHaveTrait("sylviepowerfulenchantment"))
{
__result.IncreasedDamageReceivedType = (DamageType)3;
__result.IncreasedDirectDamageChargesMultiplierNeededForOne = 5;
__result.IncreasedDirectDamageReceivedPerStack = 1f;
__result.IncreasedDamageReceivedType2 = (DamageType)5;
__result.IncreasedDirectDamageChargesMultiplierNeededForOne2 = 5;
__result.IncreasedDirectDamageReceivedPerStack2 = 1f;
}
}
[HarmonyPrefix]
[HarmonyPatch(typeof(Character), "SetEvent")]
public static void SetEventPrefix(ref Character __instance, ref EventActivation theEvent, Character target = null)
{
if ((int)theEvent == 9 && !__instance.IsHero && target != null && target.IsHero && target.HaveTrait("sylviepowerfulenchantment") && __instance.HasEffect("spark"))
{
__instance.IndirectDamage((DamageType)6, Functions.FuncRoundToInt((float)__instance.GetAuraCharges("spark") * 0.15f), (AudioClip)null, "", "", "");
}
}
}
}
namespace MagicArcherSylvie
{
[BepInPlugin("com.shazixnar.MagicArcherTraits", "Magic Archer Sylvie", "2.0.9")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInProcess("AcrossTheObelisk.exe")]
public class Plugin : BaseUnityPlugin
{
internal const int ModDate = 20251211;
private readonly Harmony harmony = new Harmony("com.shazixnar.MagicArcherTraits");
internal static ManualLogSource Log;
private void Awake()
{
Log = ((BaseUnityPlugin)this).Logger;
Log.LogInfo((object)"com.shazixnar.MagicArcherTraits 2.0.9 has loaded!");
Essentials.RegisterMod("Magic Archer Sylvie", "Shazixnar", "Redo two enchantments for Sylvie to make her arrows deal magic damage. Redo ranged attack cards and Sylvie's initial cards and traits to make them more fitting.", "2.0.9", 20251211, "https://across-the-obelisk.thunderstore.io/package/Shazixnar/Magic_Archer_Sylvie/", (string[])null, "Magic Archer Sylvie", 100, new string[4] { "content", "hero", "trait", "card" }, "", true);
harmony.PatchAll();
}
}
public static class PluginInfo
{
public const string PLUGIN_GUID = "com.shazixnar.MagicArcherTraits";
public const string PLUGIN_NAME = "Magic Archer Sylvie";
public const string PLUGIN_VERSION = "2.0.9";
}
}