Decompiled source of The Rat in Frozen Dark v1.1.8

BepInEx/plugins/com.shazixnar.TheRatinFrozenDarkTraits.dll

Decompiled a week ago
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_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.TheRatinFrozenDarkTraits")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("The Rat in Frozen Dark Traits, made by Shazixnar")]
[assembly: AssemblyFileVersion("1.1.8.0")]
[assembly: AssemblyInformationalVersion("1.1.8+5070cc5204eb5e8ca165628a7ce5d93ed3f3b73d")]
[assembly: AssemblyProduct("The Rat in Frozen Dark")]
[assembly: AssemblyTitle("com.shazixnar.TheRatinFrozenDarkTraits")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.1.8.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] { "zekdarkfeast", "zekcursepower", "zekfrozendark" };

		private static readonly Traits _instance = new Traits();

		[HarmonyPrefix]
		[HarmonyPatch(typeof(Character), "IndirectDamage")]
		public static void IndirectDamagePrefix(ref Character __instance, ref int damage, ref DamageType damageType, ref string effect)
		{
			if ((int)damageType == 9 && AtOManager.Instance.TeamHaveTrait("zekdarkestabyss") && !__instance.IsHero && effect == "dark")
			{
				int auraCharges = __instance.GetAuraCharges("dark");
				damage += Functions.FuncRoundToInt((float)damage * 0.05f * (float)auraCharges);
				damage += Functions.FuncRoundToInt((float)damage * 0.3f);
			}
		}

		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 "zekdarkfeast":
				_instance.zekdarkfeast(evt, character, target, auxInt, auxString, castedCard, trait);
				break;
			case "zekcursepower":
				_instance.zekcursepower(evt, character, target, auxInt, auxString, castedCard, trait);
				break;
			case "zekfrozendark":
				_instance.zekfrozendark(evt, character, target, auxInt, auxString, castedCard, trait);
				break;
			}
		}

		public void zekdarkfeast(EventActivation evt, Character character, Character target, int auxInt, string auxString, CardData castedCard, string trait)
		{
			if (character == null || (Object)(object)character.HeroData == (Object)null)
			{
				return;
			}
			int num = character.EffectCharges("dark");
			int num2 = 0;
			if (num >= 5 && num < 20)
			{
				num2 = 1;
			}
			else if (num >= 20)
			{
				num2 = 2;
			}
			if (num2 <= 0)
			{
				return;
			}
			List<string> heroHand = MatchManager.Instance.GetHeroHand(character.HeroIndex);
			List<CardData> list = new List<CardData>();
			foreach (string item in heroHand)
			{
				CardData cardData = MatchManager.Instance.GetCardData(item, true);
				if (cardData.GetCardFinalCost() > 0)
				{
					list.Add(cardData);
				}
			}
			foreach (CardData item2 in list)
			{
				item2.EnergyReductionTemporal += num2;
				MatchManager.Instance.UpdateHandCards();
				CardItem cardFromTableByIndex = MatchManager.Instance.GetCardFromTableByIndex(item2.InternalId);
				if (cardFromTableByIndex != null)
				{
					cardFromTableByIndex.PlayDissolveParticle();
				}
				if (cardFromTableByIndex != null)
				{
					cardFromTableByIndex.ShowEnergyModification(-num2);
				}
				HeroItem heroItem = character.HeroItem;
				if (heroItem != null)
				{
					((CharacterItem)heroItem).ScrollCombatText(Texts.Instance.GetText("traits_Dark Feast", ""), (CombatScrollEffectType)7);
				}
				MatchManager.Instance.CreateLogCardModification(item2.InternalId, MatchManager.Instance.GetHero(character.HeroIndex));
			}
		}

		public void zekcursepower(EventActivation evt, Character character, Character target, int auxInt, string auxString, CardData castedCard, string trait)
		{
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Expected O, but got Unknown
			if (character != null && character.GetHp() > 0)
			{
				int num = Functions.FuncRoundToInt((float)auxInt * 0.15f);
				CardClass val = (CardClass)((!((Object)(object)castedCard != (Object)null)) ? 11 : ((int)castedCard.CardClass));
				num = character.HealWithCharacterBonus(num, val, 0);
				num = character.HealReceivedFinal(num, false, (CardData)null);
				character.ModifyHp(num, true, true);
				CastResolutionForCombatText val2 = new CastResolutionForCombatText
				{
					heal = num
				};
				if ((Object)(object)character.HeroItem != (Object)null)
				{
					((CharacterItem)character.HeroItem).ScrollCombatTextDamageNew(val2);
				}
				else if ((Object)(object)character.NPCItem != (Object)null)
				{
					((CharacterItem)character.NPCItem).ScrollCombatTextDamageNew(val2);
				}
			}
		}

		public void zekfrozendark(EventActivation evt, Character character, Character target, int auxInt, string auxString, CardData castedCard, string trait)
		{
			if (character == null || (Object)(object)castedCard == (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;
			}
			bool flag = castedCard.HasCardType((CardType)6);
			bool flag2 = castedCard.HasCardType((CardType)9);
			if ((!flag && !flag2) || (Object)(object)character.HeroData == (Object)null)
			{
				return;
			}
			MatchManager.Instance.activatedTraits[trait] = num + 1;
			MatchManager.Instance.SetTraitInfoText();
			if (flag)
			{
				character.ModifyEnergy(1, true);
				HeroItem heroItem = character.HeroItem;
				if (heroItem != null)
				{
					((CharacterItem)heroItem).ScrollCombatText(Texts.Instance.GetText("traits_Frozen Dark", "") + Functions.TextChargesLeft(num + 1, traitData.TimesPerTurn), (CombatScrollEffectType)7);
				}
				EffectsManager instance = EffectsManager.Instance;
				HeroItem heroItem2 = character.HeroItem;
				instance.PlayEffectAC("energy", true, (heroItem2 != null) ? ((CharacterItem)heroItem2).CharImageT : null, false, 0f, false);
				NPC[] teamNPC = MatchManager.Instance.GetTeamNPC();
				NPC[] array = teamNPC;
				foreach (NPC val in array)
				{
					if (val != null && ((Character)val).Alive)
					{
						((Character)val).SetAuraTrait(character, "dark", 1);
					}
				}
			}
			else
			{
				if (!flag2)
				{
					return;
				}
				NPC[] teamNPC2 = MatchManager.Instance.GetTeamNPC();
				NPC[] array2 = teamNPC2;
				foreach (NPC val2 in array2)
				{
					if (val2 != null && ((Character)val2).Alive)
					{
						((Character)val2).SetAuraTrait(character, "scourge", 1);
						((Character)val2).SetAuraTrait(character, "chill", 1);
					}
				}
			}
		}

		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;
			}
			float num = 2f;
			if (_acId == "dark")
			{
				if (_type == "set")
				{
					if (!flag2)
					{
						if (__instance.TeamHaveTrait("zekdarkfeast"))
						{
							__result.ResistModifiedPercentagePerStack = -1.5f;
						}
						if (__instance.TeamHaveTrait("malukahshadowform"))
						{
							num += 0.5f;
						}
						if (__instance.TeamHavePerk("mainperkdark2c"))
						{
							num += 0.7f;
						}
						if (__instance.TeamHavePerk("mainperkChill2d"))
						{
							int auraCharges = _characterTarget.GetAuraCharges("chill");
							num += (float)(auraCharges / 20) * 0.1f;
						}
					}
					else if (flag2 && _characterTarget != null && __instance.CharacterHaveTrait(_characterTarget.SubclassName, "zekcursepower"))
					{
						__result.AuraDamageType = (DamageType)10;
						__result.ExplodeAtStacks = 44;
						__result.AuraDamageIncreasedPercentPerStack = 10f;
						__result.Removable = false;
						__result.ResistModifiedPercentagePerStack = 0f;
					}
				}
				else if (_type == "consume" && !flag)
				{
					if (__instance.TeamHaveTrait("malukahshadowform"))
					{
						num += 0.5f;
					}
					if (__instance.TeamHavePerk("mainperkdark2c"))
					{
						num += 0.7f;
					}
					if (__instance.TeamHavePerk("mainperkChill2d"))
					{
						int auraCharges2 = _characterCaster.GetAuraCharges("chill");
						num += (float)(auraCharges2 / 20) * 0.1f;
					}
				}
				__result.DamageWhenConsumedPerCharge = num;
			}
			else
			{
				if (!(_acId == "chill") || !(_type == "set"))
				{
					return;
				}
				if (!flag2)
				{
					if (__instance.TeamHaveTrait("zekfrozendark"))
					{
						__result.MaxCharges = 100;
						__result.MaxMadnessCharges = 100;
					}
				}
				else if (_characterTarget != null && __instance.CharacterHavePerk(_characterTarget.SubclassName, "mainperkChill2d"))
				{
					__result.CharacterStatChargesMultiplierNeededForOne = 5;
				}
			}
		}
	}
}
namespace TheRatinFrozenDark
{
	[BepInPlugin("com.shazixnar.TheRatinFrozenDarkTraits", "The Rat in Frozen Dark", "1.1.8")]
	[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.TheRatinFrozenDarkTraits");

		internal static ManualLogSource Log;

		private void Awake()
		{
			Log = ((BaseUnityPlugin)this).Logger;
			Log.LogInfo((object)"com.shazixnar.TheRatinFrozenDarkTraits 1.1.8 has loaded!");
			Essentials.RegisterMod("The Rat in Frozen Dark", "Shazixnar", "Zek is better at curse or corrupting Cold cards now.", "1.1.8", 20251211, "https://across-the-obelisk.thunderstore.io/package/Shazixnar/The_Rat_in_Frozen_Dark/", (string[])null, "The Rat in Frozen Dark", 100, new string[5] { "content", "hero", "trait", "card", "perk" }, "", true);
			Essentials.medsTexts["custommainperkdark2c"] = "Dark explosion on enemies deals 0.7 more damage per charge.";
			Essentials.medsTexts["custommainperkchill2d"] = "Chill on enemies increases Dark explosion 0.1 more damage per 20 charges and this hero grants 1 Reinforce per 14 charges at the end of the turn.";
			harmony.PatchAll();
		}
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "com.shazixnar.TheRatinFrozenDarkTraits";

		public const string PLUGIN_NAME = "The Rat in Frozen Dark";

		public const string PLUGIN_VERSION = "1.1.8";
	}
}