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.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.shazixnar.AssassinThulsTraits")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("assassin thuls, made by Shazixnar")]
[assembly: AssemblyFileVersion("1.0.1.0")]
[assembly: AssemblyInformationalVersion("1.0.1+1a20280c15b9d5b17346f3ac75b6a5ff7d9a312b")]
[assembly: AssemblyProduct("Assassin Thuls")]
[assembly: AssemblyTitle("com.shazixnar.AssassinThulsTraits")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.1.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
{
public static string[] myTraitList = new string[4] { "shazixnarnightstalker", "shazixnarsilentfang", "shazixnarvenomousshade", "shazixnarvenomshadow" };
public static CardData currentCard;
public static Dictionary<string, int> stealthUsesThisTurn = new Dictionary<string, int>();
public static HashSet<string> shadowExecutionUsed = new HashSet<string>();
public static void myDoTrait(string _trait, ref Trait __instance)
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
EventActivation value = Traverse.Create((object)__instance).Field("theEvent").GetValue<EventActivation>();
Character value2 = Traverse.Create((object)__instance).Field("character").GetValue<Character>();
Character value3 = Traverse.Create((object)__instance).Field("target").GetValue<Character>();
int value4 = Traverse.Create((object)__instance).Field("auxInt").GetValue<int>();
string value5 = Traverse.Create((object)__instance).Field("auxString").GetValue<string>();
CardData value6 = Traverse.Create((object)__instance).Field("castedCard").GetValue<CardData>();
Traverse.Create((object)__instance).Field("character").SetValue((object)value2);
Traverse.Create((object)__instance).Field("target").SetValue((object)value3);
Traverse.Create((object)__instance).Field("theEvent").SetValue((object)value);
Traverse.Create((object)__instance).Field("auxInt").SetValue((object)value4);
Traverse.Create((object)__instance).Field("auxString").SetValue((object)value5);
Traverse.Create((object)__instance).Field("castedCard").SetValue((object)value6);
TraitData traitData = Globals.Instance.GetTraitData(_trait);
List<CardData> list = new List<CardData>();
List<string> heroHand = MatchManager.Instance.GetHeroHand(value2.HeroIndex);
Hero[] teamHero = MatchManager.Instance.GetTeamHero();
NPC[] teamNPC = MatchManager.Instance.GetTeamNPC();
switch (_trait)
{
case "shazixnarnightstalker":
{
value2.SetAuraTrait(value2, "stealth", 2);
int num = 2;
if (value2.HaveTrait("shazixnarvenomousshade"))
{
num += 2;
}
if (value2.HaveTrait("shazixnarshadowexecution"))
{
num += 2;
}
traitData.TimesPerTurn = num;
if ((Object)(object)value2.HeroItem != (Object)null)
{
((CharacterItem)value2.HeroItem).ScrollCombatText(Texts.Instance.GetText("traits_shazixnarnightstalker", ""), (CombatScrollEffectType)7);
EffectsManager.Instance.PlayEffectAC("stealth", true, ((CharacterItem)value2.HeroItem).CharImageT, false, 0f);
}
MatchManager.Instance.activatedTraits["shazixnarnightstalker"] = 0;
HeroItem heroItem = value2.HeroItem;
if (heroItem != null)
{
((CharacterItem)heroItem).ScrollCombatText(Texts.Instance.GetText("traits_shazixnarnightstalker", "") + Functions.TextChargesLeft(0, num), (CombatScrollEffectType)7);
}
MatchManager.Instance.SetTraitInfoText();
break;
}
case "shazixnarsilentfang":
{
if (!((Object)(object)MatchManager.Instance != (Object)null) || !((Object)(object)value6 != (Object)null))
{
break;
}
int num2 = 6;
if (value2.HaveTrait("shazixnarvenomshadow"))
{
num2 += 2;
}
traitData.TimesPerTurn = num2;
if ((MatchManager.Instance.activatedTraits == null || !MatchManager.Instance.activatedTraits.ContainsKey("shazixnarsilentfang") || MatchManager.Instance.activatedTraits["shazixnarsilentfang"] <= num2) && value6.GetCardTypes().Contains((CardType)14) && (Object)(object)value2.HeroData != (Object)null)
{
if (!MatchManager.Instance.activatedTraits.ContainsKey("shazixnarsilentfang"))
{
MatchManager.Instance.activatedTraits.Add("shazixnarsilentfang", 1);
}
else
{
MatchManager.Instance.activatedTraits["shazixnarsilentfang"]++;
}
float num3 = 0.95f;
if (value2.HaveTrait("shazixnarvenomshadow"))
{
num3 = 0.9f;
}
string text = ((Random.value < num3) ? "silentfangnick" : "silentfangnickrare");
MatchManager.Instance.GenerateNewCard(1, text, true, (CardPlace)5, (CardData)null, (CardData)null, -1, true, 0);
((CharacterItem)value2.HeroItem).ScrollCombatText(Texts.Instance.GetText("traits_shazixnarsilentfang", "") + Functions.TextChargesLeft(MatchManager.Instance.activatedTraits["shazixnarsilentfang"], num2), (CombatScrollEffectType)7);
MatchManager.Instance.SetTraitInfoText();
}
break;
}
case "shazixnarvenomousshade":
{
if (!((Object)(object)MatchManager.Instance != (Object)null) || !(value5 == "stealth"))
{
break;
}
NPC[] teamNPC2 = MatchManager.Instance.GetTeamNPC();
for (int i = 0; i < teamNPC2.Length; i++)
{
if (teamNPC2[i] != null && ((Character)teamNPC2[i]).Alive)
{
((Character)teamNPC2[i]).SetAuraTrait(value2, "poison", 5);
((CharacterItem)value2.HeroItem).ScrollCombatText(Texts.Instance.GetText("traits_shazixnarvenomousshade", ""), (CombatScrollEffectType)7);
}
}
break;
}
case "shazixnarvenomshadow":
if (value3 != null && value3.Alive)
{
value3.SetAuraTrait(value2, "poison", 1);
((CharacterItem)value2.HeroItem).ScrollCombatText(Texts.Instance.GetText("traits_shazixnarvenomousshade", ""), (CombatScrollEffectType)7);
}
break;
}
}
[HarmonyPrefix]
[HarmonyPatch(typeof(Trait), "DoTrait")]
public static bool DoTrait(EventActivation _theEvent, string _trait, Character _character, Character _target, int _auxInt, string _auxString, CardData _castedCard, ref Trait __instance)
{
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)MatchManager.Instance == (Object)null)
{
return false;
}
Traverse.Create((object)__instance).Field("character").SetValue((object)_character);
Traverse.Create((object)__instance).Field("target").SetValue((object)_target);
Traverse.Create((object)__instance).Field("theEvent").SetValue((object)_theEvent);
Traverse.Create((object)__instance).Field("auxInt").SetValue((object)_auxInt);
Traverse.Create((object)__instance).Field("auxString").SetValue((object)_auxString);
Traverse.Create((object)__instance).Field("castedCard").SetValue((object)_castedCard);
if (Content.medsCustomTraitsSource.Contains(_trait) && myTraitList.Contains(_trait))
{
myDoTrait(_trait, ref __instance);
return false;
}
return true;
}
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 == "poison"))
{
return;
}
if (_type == "set")
{
if (!flag2)
{
if (__instance.TeamHaveTrait("shazixnarsilentfang"))
{
__result.DamageWhenConsumedPerCharge = 0.5f;
__result.ConsumedAtTurnBegin = true;
}
if (__instance.TeamHaveTrait("shazixnarvenomousshade"))
{
__result.ResistModifiedPercentagePerStack = -0.3f;
__result.ResistModified = (DamageType)10;
__result.DamageWhenConsumedPerCharge = 0f;
__result.ConsumedAtTurn = false;
}
if (__instance.TeamHaveTrait("shazixnarvenomshadow"))
{
__result.IncreasedDamageReceivedType = (DamageType)10;
__result.IncreasedDirectDamageReceivedPerStack = 0.1f;
}
}
}
else if (_type == "consume" && !flag)
{
if (__instance.TeamHaveTrait("shazixnarsilentfang"))
{
__result.DamageWhenConsumedPerCharge = 0.5f;
__result.ConsumedAtTurnBegin = true;
}
if (__instance.TeamHaveTrait("shazixnarvenomousshade"))
{
__result.ResistModifiedPercentagePerStack = -0.3f;
__result.ResistModified = (DamageType)10;
__result.DamageWhenConsumedPerCharge = 0f;
__result.ConsumedAtTurn = false;
}
if (__instance.TeamHaveTrait("shazixnarvenomshadow"))
{
__result.IncreasedDamageReceivedType = (DamageType)10;
__result.IncreasedDirectDamageReceivedPerStack = 0.1f;
}
}
}
[HarmonyPatch(typeof(MatchManager), "CastCard")]
[HarmonyPrefix]
public static void CastCard_Prefix(ref CardItem theCardItem, ref CardData _card)
{
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: Invalid comparison between Unknown and I4
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Invalid comparison between Unknown and I4
CardData val = (((Object)(object)theCardItem != (Object)null) ? theCardItem.CardData : _card);
if (!val.AutoplayDraw && !val.AutoplayEndTurn && ((int)val.CardClass != 9 || ((int)val.CardClass == 9 && val.Playable)))
{
currentCard = val;
}
}
[HarmonyPatch(typeof(Character), "HealAuraCurse")]
[HarmonyPrefix]
public static bool HealAuraCurse_Prefix(AuraCurseData AC, Character __instance)
{
if ((Object)(object)AC != (Object)null && AC.Id == "stealth")
{
Hero val = (Hero)(object)((__instance is Hero) ? __instance : null);
if (val != null && (Object)(object)currentCard != (Object)null && __instance.HaveTrait("shazixnarnightstalker"))
{
HeroItem value = Traverse.Create((object)__instance).Field("heroItem").GetValue<HeroItem>();
string value2 = Traverse.Create((object)__instance).Field("subclassName").GetValue<string>();
bool flag = __instance.HaveTrait("shazixnarshadowexecution");
bool flag2 = currentCard.HasCardType((CardType)1);
bool flag3 = currentCard.HasCardType((CardType)16) || currentCard.HasCardType((CardType)28);
if (flag && flag2 && !shadowExecutionUsed.Contains(value2))
{
shadowExecutionUsed.Add(value2);
if (!MatchManager.Instance.activatedTraits.ContainsKey("shazixnarshadowexecution"))
{
MatchManager.Instance.activatedTraits["shazixnarshadowexecution"] = 1;
}
else
{
MatchManager.Instance.activatedTraits["shazixnarshadowexecution"]++;
}
((CharacterItem)value).ScrollCombatText(Texts.Instance.GetText("traits_shazixnarshadowexecution", "") + Functions.TextChargesLeft(MatchManager.Instance.ItemExecutedInThisCombat(value2, "shazixnarshadowexecution"), 1), (CombatScrollEffectType)7);
Debug.Log((object)"[潜行保留] 触发 shazixnarshadowexecution");
MatchManager.Instance.SetTraitInfoText();
return false;
}
if (__instance.HaveTrait("shazixnarnightstalker") && flag3)
{
int num = 2;
if (__instance.HaveTrait("shazixnarvenomousshade"))
{
num += 2;
}
if (__instance.HaveTrait("shazixnarshadowexecution"))
{
num += 2;
}
Globals.Instance.GetTraitData("shazixnarnightstalker").TimesPerTurn = num;
if (!stealthUsesThisTurn.ContainsKey(value2))
{
stealthUsesThisTurn[value2] = 0;
}
if (stealthUsesThisTurn[value2] < num)
{
stealthUsesThisTurn[value2]++;
if (!MatchManager.Instance.activatedTraits.ContainsKey("shazixnarnightstalker"))
{
MatchManager.Instance.activatedTraits["shazixnarnightstalker"] = 1;
}
else
{
MatchManager.Instance.activatedTraits["shazixnarnightstalker"]++;
}
if (value != null)
{
((CharacterItem)value).ScrollCombatText(Texts.Instance.GetText("traits_shazixnarnightstalker", "") + Functions.TextChargesLeft(MatchManager.Instance.activatedTraits["shazixnarnightstalker"], num), (CombatScrollEffectType)7);
}
MatchManager.Instance.SetTraitInfoText();
Debug.Log((object)$"[潜行保留] 使用次数 {stealthUsesThisTurn[value2]}/{num}");
return false;
}
}
}
}
return true;
}
[HarmonyPatch(typeof(Character), "BeginTurn")]
[HarmonyPostfix]
public static void Character_BeginTurn_Postfix(Character __instance)
{
Hero val = (Hero)(object)((__instance is Hero) ? __instance : null);
if (val != null && (Object)(object)((Character)val).HeroData != (Object)null && __instance.HaveTrait("shazixnarnightstalker"))
{
string value = Traverse.Create((object)__instance).Field("subclassName").GetValue<string>();
stealthUsesThisTurn[value] = 0;
Debug.Log((object)("[潜行次数已重置] " + value));
}
}
}
}
namespace AssassinThuls
{
[BepInPlugin("com.shazixnar.AssassinThulsTraits", "Assassin Thuls", "1.0.1")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInProcess("AcrossTheObelisk.exe")]
public class Plugin : BaseUnityPlugin
{
internal const int ModDate = 20250806;
private readonly Harmony harmony = new Harmony("com.shazixnar.AssassinThulsTraits");
internal static ManualLogSource Log;
private void Awake()
{
Log = ((BaseUnityPlugin)this).Logger;
Log.LogInfo((object)"com.shazixnar.AssassinThulsTraits 1.0.1 has loaded!");
Essentials.RegisterMod("Assassin Thuls", "Shazixnar", "Redone Thuls' traits and element cards.", "1.0.1", 20250806, "https://across-the-obelisk.thunderstore.io/package/Shazixnar/Assassin_Thuls/", (string[])null, "Assassin Thuls", 100, new string[5] { "content", "hero", "trait", "card", "perk" }, "", true);
harmony.PatchAll();
}
}
public static class PluginInfo
{
public const string PLUGIN_GUID = "com.shazixnar.AssassinThulsTraits";
public const string PLUGIN_NAME = "Assassin Thuls";
public const string PLUGIN_VERSION = "1.0.1";
}
}