Decompiled source of ChaosArmorLowRes v14.0.0

BepInEx/plugins/AeehyehssReeper-ChaosArmorLowRes/ChaosArmor.dll

Decompiled 2 weeks ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
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.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using BlacksmithTools;
using HarmonyLib;
using JetBrains.Annotations;
using Jotunn.Configs;
using Jotunn.Entities;
using Jotunn.Managers;
using Jotunn.Utils;
using Newtonsoft.Json;
using UnityEngine;
using UnityEngine.Audio;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
namespace ChaosArmor;

[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("ReepusDeepusDelmeepus4902761.ChaosArmor", "ChaosArmor", "14.0.0")]
public class ReepusDeepusDelmeepusChaosArmor : BaseUnityPlugin
{
	[Serializable]
	public struct ItemConfiguration
	{
		public string Prefab;

		public ItemConfig Config;

		public SetConfiguration? Set;
	}

	[Serializable]
	public struct SetConfiguration
	{
		public string Name;

		public string StatusEffect;

		public int Size;
	}

	[HarmonyPatch]
	public static class AudioManPatch
	{
		private static void SetAudioMixerGroup(GameObject prefab, AudioMixerGroup group)
		{
			AudioSource component = prefab.GetComponent<AudioSource>();
			component.outputAudioMixerGroup = group;
		}

		[HarmonyPatch(typeof(AudioMan), "Awake")]
		[HarmonyPostfix]
		public static void Patch_AudioManAwake(AudioMan __instance)
		{
			if (!((Object)(object)Clanka.prefabStep == (Object)null))
			{
				AudioMixerGroup group = __instance.m_ambientMixer.audioMixer.FindMatchingGroups("Effects/SFX").FirstOrDefault();
				SetAudioMixerGroup(Clanka.prefabStep, group);
				SetAudioMixerGroup(Clanka.prefabRun, group);
				SetAudioMixerGroup(Clanka.prefabDodge, group);
				SetAudioMixerGroup(Clanka.prefabLand, group);
				SetAudioMixerGroup(Clanka.prefabJump, group);
				SetAudioMixerGroup(Clanka.prefabBootRun, group);
				SetAudioMixerGroup(Clanka.prefabBootStep, group);
			}
		}
	}

	private const string ModName = "ChaosArmor";

	private const string ModVersion = "14.0.0";

	private const string ModGUID = "ReepusDeepusDelmeepus4902761.ChaosArmor";

	public static readonly ManualLogSource ArmorLogger = Logger.CreateLogSource("ChaosArmor");

	private const string T0Chest = "T0ChaosPlateArmor";

	private const string T1Chest = "T1ChaosPlateArmor";

	private const string T2Chest = "T2ChaosPlateArmor";

	private const string T3Chest = "ChaosPlateArmorBody";

	private const string T4Chest = "EliteChaosPlateArmor";

	private const string T5UChest = "EliteChaosPlateArmorT2";

	private const string T5Chest = "EliteChaosPlateArmorTzeentch";

	private const string T0ASSLegs = "T0ChaosPlateLegs";

	private const string T1ASSLegs = "T1ChaosPlateLegs";

	private const string T2ASSLegs = "T2ChaosPlateLegs";

	private const string T3ASSLegs = "ChaosPlateLegs";

	private const string T4ASSLegs = "EliteChaosPlateLegs";

	private const string T5UASSLegs = "EliteChaosPlateLegsT2";

	private const string T5ASSLegs = "EliteChaosPlateLegsTzeentch";

	private static string shieldVanilla = "Staff_shield";

	public static int T1Hash;

	public static int T2Hash;

	public static int T3Hash;

	public static int T4Hash;

	public static int T5Hash;

	public static int T5UHash;

	public static HashSet<int> clankyPrefabNames = new HashSet<int>();

	public static SE_Shield staffShield;

	private Dictionary<string, SE_Stats> _statusEffects = new Dictionary<string, SE_Stats>();

	private Assembly assembly;

	private AssetBundle _assetBundle;

	private bool _BSTInstalled = false;

	private static ConfigEntry<bool> doTheRoar;

	public static bool DoTheRoar => doTheRoar.Value;

	public void Awake()
	{
		//IL_0273: Unknown result type (might be due to invalid IL or missing references)
		//IL_0278: Unknown result type (might be due to invalid IL or missing references)
		//IL_027f: Unknown result type (might be due to invalid IL or missing references)
		//IL_028f: Expected O, but got Unknown
		//IL_028f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0294: Unknown result type (might be due to invalid IL or missing references)
		//IL_029b: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ab: Expected O, but got Unknown
		//IL_032b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0331: Expected O, but got Unknown
		assembly = Assembly.GetExecutingAssembly();
		T1Hash = StringExtensionMethods.GetStableHashCode("T1ChaosPlateArmor");
		T2Hash = StringExtensionMethods.GetStableHashCode("T2ChaosPlateArmor");
		T3Hash = StringExtensionMethods.GetStableHashCode("ChaosPlateArmorBody");
		T4Hash = StringExtensionMethods.GetStableHashCode("EliteChaosPlateArmor");
		T5Hash = StringExtensionMethods.GetStableHashCode("EliteChaosPlateArmorTzeentch");
		T5UHash = StringExtensionMethods.GetStableHashCode("EliteChaosPlateArmorT2");
		_assetBundle = AssetUtils.LoadAssetBundleFromResources("chaosarmor", Assembly.GetExecutingAssembly());
		if ((Object)(object)_assetBundle == (Object)null)
		{
			ArmorLogger.LogError((object)"Could not load asset bundle! This mod will not work as expected!");
			return;
		}
		clankyPrefabNames.Add(StringExtensionMethods.GetStableHashCode("T0ChaosPlateArmor"));
		clankyPrefabNames.Add(StringExtensionMethods.GetStableHashCode("T1ChaosPlateArmor"));
		clankyPrefabNames.Add(StringExtensionMethods.GetStableHashCode("T2ChaosPlateArmor"));
		clankyPrefabNames.Add(StringExtensionMethods.GetStableHashCode("ChaosPlateArmorBody"));
		clankyPrefabNames.Add(StringExtensionMethods.GetStableHashCode("EliteChaosPlateArmor"));
		clankyPrefabNames.Add(StringExtensionMethods.GetStableHashCode("EliteChaosPlateArmorTzeentch"));
		clankyPrefabNames.Add(StringExtensionMethods.GetStableHashCode("EliteChaosPlateArmorT2"));
		clankyPrefabNames.Add(StringExtensionMethods.GetStableHashCode("T0ChaosPlateLegs"));
		clankyPrefabNames.Add(StringExtensionMethods.GetStableHashCode("T1ChaosPlateLegs"));
		clankyPrefabNames.Add(StringExtensionMethods.GetStableHashCode("T2ChaosPlateLegs"));
		clankyPrefabNames.Add(StringExtensionMethods.GetStableHashCode("ChaosPlateLegs"));
		clankyPrefabNames.Add(StringExtensionMethods.GetStableHashCode("EliteChaosPlateLegs"));
		clankyPrefabNames.Add(StringExtensionMethods.GetStableHashCode("EliteChaosPlateLegsT2"));
		clankyPrefabNames.Add(StringExtensionMethods.GetStableHashCode("EliteChaosPlateLegsTzeentch"));
		SetStatusEffects();
		PrefabManager.OnVanillaPrefabsAvailable += LoadItems;
		Clanka.prefabStep = _assetBundle.LoadAsset<GameObject>("sfx_reepus_footstepClankChaos");
		Clanka.prefabRun = _assetBundle.LoadAsset<GameObject>("sfx_reepus_footstepClank2Chaos");
		Clanka.prefabDodge = _assetBundle.LoadAsset<GameObject>("sfx_reepus_dodgeChaos");
		Clanka.prefabLand = _assetBundle.LoadAsset<GameObject>("sfx_reepus_landChaos");
		Clanka.prefabJump = _assetBundle.LoadAsset<GameObject>("sfx_reepus_jumpClankChaos");
		Clanka.prefabBootStep = _assetBundle.LoadAsset<GameObject>("sfx_reepus_footstepBootWalkChaos");
		Clanka.prefabBootRun = _assetBundle.LoadAsset<GameObject>("sfx_reepus_footstepBootRunChaos");
		Clanka.jumpData = new EffectData
		{
			m_enabled = true,
			m_prefab = Clanka.prefabJump
		};
		Clanka.dodgeData = new EffectData
		{
			m_enabled = true,
			m_prefab = Clanka.prefabDodge
		};
		PrefabManager.Instance.AddPrefab(Clanka.prefabStep);
		PrefabManager.Instance.AddPrefab(Clanka.prefabRun);
		PrefabManager.Instance.AddPrefab(Clanka.prefabDodge);
		PrefabManager.Instance.AddPrefab(Clanka.prefabLand);
		PrefabManager.Instance.AddPrefab(Clanka.prefabJump);
		PrefabManager.Instance.AddPrefab(Clanka.prefabBootStep);
		PrefabManager.Instance.AddPrefab(Clanka.prefabBootRun);
		ConfigFile val = new ConfigFile(Path.Combine(Paths.ConfigPath, "ReepusDelmeepus.ChaosArmorClank.cfg"), true);
		doTheRoar = val.Bind<bool>("General", "do the clank", true, "Make player go clank-clank if chaos armor is equipped. Not synced with server.");
		_BSTInstalled = Chainloader.PluginInfos.ContainsKey("GoldenJude_BlacksmithTools");
		if (_BSTInstalled)
		{
			RegisterBlacksmithTools();
		}
		Harmony.CreateAndPatchAll(assembly, (string)null);
	}

	private void LoadItems()
	{
		//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f2: Expected O, but got Unknown
		StatusEffect statusEffect = ObjectDB.instance.GetStatusEffect(StringExtensionMethods.GetStableHashCode(shieldVanilla));
		staffShield = (SE_Shield)(object)((statusEffect is SE_Shield) ? statusEffect : null);
		List<ItemConfiguration> list = LoadJsons();
		foreach (ItemConfiguration item in list)
		{
			GameObject val = _assetBundle.LoadAsset<GameObject>(item.Prefab);
			ItemDrop component = val.GetComponent<ItemDrop>();
			if (item.Set.HasValue)
			{
				component.m_itemData.m_shared.m_setName = item.Set.Value.Name;
				component.m_itemData.m_shared.m_setStatusEffect = (StatusEffect)(object)_statusEffects[item.Set.Value.StatusEffect];
				component.m_itemData.m_shared.m_setSize = item.Set.Value.Size;
			}
			ItemManager.Instance.AddItem(new CustomItem(val, false, item.Config));
		}
	}

	private List<ItemConfiguration> LoadJsons()
	{
		string text = AssetUtils.LoadTextFromResources("Configurations.json", Assembly.GetExecutingAssembly());
		try
		{
			return JsonConvert.DeserializeObject<List<ItemConfiguration>>(text);
		}
		catch
		{
			ArmorLogger.LogError((object)"Issue loading items! Contact the mod author.");
		}
		return new List<ItemConfiguration>();
	}

	public static void AttachShieldFx(SE_Shield shield)
	{
		if ((Object)(object)staffShield != (Object)null)
		{
			((StatusEffect)shield).m_startEffects.m_effectPrefabs = ((StatusEffect)staffShield).m_startEffects.m_effectPrefabs.Concat(staffShield.m_hitEffects.m_effectPrefabs).ToArray();
			shield.m_breakEffects = staffShield.m_breakEffects;
			shield.m_hitEffects = staffShield.m_hitEffects;
			((StatusEffect)shield).m_stopEffects = staffShield.m_breakEffects;
		}
	}

	private void SetStatusEffects()
	{
		try
		{
			SE_Stats val = ScriptableObject.CreateInstance<SE_Stats>();
			((Object)val).name = "ChaosT3SetEffect";
			val.m_staminaRegenMultiplier = 1.05f;
			val.m_addMaxCarryWeight = 16f;
			_statusEffects.Add("T3SetStatus", val);
			SE_Stats val2 = ScriptableObject.CreateInstance<SE_Stats>();
			((Object)val2).name = "ChaosT4SetEffect";
			val2.m_staminaRegenMultiplier = 1.15f;
			val2.m_addMaxCarryWeight = 32f;
			_statusEffects.Add("T4SetStatus", val2);
		}
		catch (Exception ex)
		{
			ArmorLogger.LogWarning((object)"Unable to create custom set status effects!");
			ArmorLogger.LogError((object)ex);
		}
	}

	private void RegisterBlacksmithTools()
	{
		try
		{
			List<bodyPart> value = new List<bodyPart>
			{
				(bodyPart)1,
				(bodyPart)2,
				(bodyPart)3,
				(bodyPart)4,
				(bodyPart)5,
				(bodyPart)6,
				(bodyPart)7
			};
			BodypartSystem.bodypartSettings.Add("T0ChaosPlateArmor", value);
			BodypartSystem.bodypartSettings.Add("T1ChaosPlateArmor", value);
			BodypartSystem.bodypartSettings.Add("T2ChaosPlateArmor", value);
			BodypartSystem.bodypartSettings.Add("ChaosPlateArmorBody", value);
			BodypartSystem.bodypartSettings.Add("EliteChaosPlateArmor", value);
			BodypartSystem.bodypartSettings.Add("EliteChaosPlateArmorTzeentch", value);
			BodypartSystem.bodypartSettings.Add("EliteChaosPlateArmorT2", value);
			List<bodyPart> value2 = new List<bodyPart>
			{
				(bodyPart)11,
				(bodyPart)8,
				(bodyPart)12,
				(bodyPart)13,
				(bodyPart)9,
				(bodyPart)10
			};
			BodypartSystem.bodypartSettings.Add("T0ChaosPlateLegs", value2);
			BodypartSystem.bodypartSettings.Add("T1ChaosPlateLegs", value2);
			BodypartSystem.bodypartSettings.Add("T2ChaosPlateLegs", value2);
			BodypartSystem.bodypartSettings.Add("ChaosPlateLegs", value2);
			BodypartSystem.bodypartSettings.Add("EliteChaosPlateLegs", value2);
			BodypartSystem.bodypartSettings.Add("EliteChaosPlateLegsTzeentch", value2);
			BodypartSystem.bodypartSettings.Add("EliteChaosPlateLegsT2", value2);
		}
		catch (Exception)
		{
			ArmorLogger.LogWarning((object)"Blacksmith's Tools failed to register but Chaos Armor should still be functional; keep an eye out for updates to Blacksmith's Tools");
		}
	}
}
public class ButchersNails : MonoBehaviour
{
	private Humanoid wearer;

	public void Start()
	{
		Transform root = ((Component)this).transform.root;
		object obj;
		if (root == null)
		{
			obj = null;
		}
		else
		{
			GameObject gameObject = ((Component)root).gameObject;
			obj = ((gameObject != null) ? gameObject.GetComponent<Player>() : null);
		}
		wearer = (Humanoid)obj;
		if ((Object)(object)wearer != (Object)null)
		{
			Humanoid obj2 = wearer;
			((Character)obj2).m_onDamaged = (Action<float, Character>)Delegate.Combine(((Character)obj2).m_onDamaged, new Action<float, Character>(OnDamaged));
		}
	}

	public void OnDisable()
	{
		if ((Object)(object)wearer != (Object)null)
		{
			Humanoid obj = wearer;
			((Character)obj).m_onDamaged = (Action<float, Character>)Delegate.Remove(((Character)obj).m_onDamaged, new Action<float, Character>(OnDamaged));
		}
		wearer = null;
	}

	public void OnDamaged(float dmg, Character idfkLol)
	{
		float maxHealth = ((Character)wearer).GetMaxHealth();
		if (dmg > Math.Min(50f, maxHealth / 2f))
		{
			((Character)wearer).AddStamina(40f);
		}
		else if (dmg >= 5f)
		{
			((Character)wearer).AddStamina(15f);
		}
	}
}
public class Clanka : MonoBehaviour
{
	public static GameObject prefabStep;

	public static GameObject prefabRun;

	public static GameObject prefabJump;

	public static GameObject prefabDodge;

	public static GameObject prefabLand;

	public static GameObject prefabBootStep;

	public static GameObject prefabBootRun;

	public static EffectData jumpData;

	public static EffectData dodgeData;

	private Player wearer;

	public void Start()
	{
		if (ReepusDeepusDelmeepusChaosArmor.DoTheRoar && !((Object)(object)prefabStep == (Object)null))
		{
			Transform root = ((Component)this).transform.root;
			object obj;
			if (root == null)
			{
				obj = null;
			}
			else
			{
				GameObject gameObject = ((Component)root).gameObject;
				obj = ((gameObject != null) ? gameObject.GetComponent<Player>() : null);
			}
			wearer = (Player)obj;
			if ((Object)(object)wearer != (Object)null)
			{
				MakePlayerClanky(wearer);
			}
		}
	}

	public void OnDisable()
	{
		if (ReepusDeepusDelmeepusChaosArmor.DoTheRoar && !((Object)(object)prefabStep == (Object)null))
		{
			if ((Object)(object)wearer != (Object)null && !ReepusDeepusDelmeepusChaosArmor.clankyPrefabNames.Contains(((Humanoid)wearer).m_visEquipment?.m_currentChestItemHash ?? (-1)) && !ReepusDeepusDelmeepusChaosArmor.clankyPrefabNames.Contains(((Humanoid)wearer).m_visEquipment?.m_currentLegItemHash ?? (-1)))
			{
				UnclankPlayer(wearer);
			}
			wearer = null;
		}
	}

	private static void MakePlayerClanky(Player player)
	{
		//IL_0060: Unknown result type (might be due to invalid IL or missing references)
		//IL_0065: Unknown result type (might be due to invalid IL or missing references)
		//IL_0067: Unknown result type (might be due to invalid IL or missing references)
		//IL_0069: Unknown result type (might be due to invalid IL or missing references)
		//IL_006b: Unknown result type (might be due to invalid IL or missing references)
		//IL_006e: Invalid comparison between Unknown and I4
		//IL_0072: Unknown result type (might be due to invalid IL or missing references)
		//IL_0075: Invalid comparison between Unknown and I4
		//IL_0079: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: Invalid comparison between Unknown and I4
		FootStep component = ((Component)player).GetComponent<FootStep>();
		if ((Object)(object)component == (Object)null || ((Character)player).m_jumpEffects == null || player.m_dodgeEffects == null)
		{
			return;
		}
		foreach (StepEffect effect in component.m_effects)
		{
			HashSet<GameObject> hashSet = new HashSet<GameObject>(effect.m_effectPrefabs);
			bool flag = false;
			MotionType motionType = effect.m_motionType;
			MotionType val = motionType;
			if (((int)val == 2 || (int)val == 8) ? (hashSet.Add(prefabRun) | hashSet.Add(prefabBootRun)) : (((int)val != 32) ? (hashSet.Add(prefabStep) | hashSet.Add(prefabBootStep)) : (hashSet.Add(prefabLand) | hashSet.Add(prefabBootRun))))
			{
				effect.m_effectPrefabs = hashSet.ToArray();
			}
		}
		HashSet<EffectData> hashSet2 = new HashSet<EffectData>(((Character)player).m_jumpEffects.m_effectPrefabs);
		bool flag2 = hashSet2.Add(jumpData);
		HashSet<EffectData> hashSet3 = new HashSet<EffectData>(player.m_dodgeEffects.m_effectPrefabs);
		bool flag3 = hashSet3.Add(dodgeData);
		if (flag2)
		{
			((Character)player).m_jumpEffects.m_effectPrefabs = hashSet2.ToArray();
		}
		if (flag3)
		{
			player.m_dodgeEffects.m_effectPrefabs = hashSet3.ToArray();
		}
	}

	private static void UnclankPlayer(Player player)
	{
		//IL_0060: Unknown result type (might be due to invalid IL or missing references)
		//IL_0065: Unknown result type (might be due to invalid IL or missing references)
		//IL_0067: Unknown result type (might be due to invalid IL or missing references)
		//IL_0069: Unknown result type (might be due to invalid IL or missing references)
		//IL_006b: Unknown result type (might be due to invalid IL or missing references)
		//IL_006e: Invalid comparison between Unknown and I4
		//IL_0072: Unknown result type (might be due to invalid IL or missing references)
		//IL_0075: Invalid comparison between Unknown and I4
		//IL_0079: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: Invalid comparison between Unknown and I4
		FootStep component = ((Component)player).GetComponent<FootStep>();
		if ((Object)(object)component == (Object)null || ((Character)player).m_jumpEffects == null || player.m_dodgeEffects == null)
		{
			return;
		}
		foreach (StepEffect effect in component.m_effects)
		{
			HashSet<GameObject> hashSet = new HashSet<GameObject>(effect.m_effectPrefabs);
			bool flag = false;
			MotionType motionType = effect.m_motionType;
			MotionType val = motionType;
			if (((int)val == 2 || (int)val == 8) ? (hashSet.Remove(prefabRun) | hashSet.Remove(prefabBootRun)) : (((int)val != 32) ? (hashSet.Remove(prefabStep) | hashSet.Remove(prefabBootStep)) : (hashSet.Remove(prefabLand) | hashSet.Remove(prefabBootRun))))
			{
				effect.m_effectPrefabs = hashSet.ToArray();
			}
		}
		HashSet<EffectData> hashSet2 = new HashSet<EffectData>(((Character)player).m_jumpEffects.m_effectPrefabs);
		bool flag2 = hashSet2.Remove(jumpData);
		HashSet<EffectData> hashSet3 = new HashSet<EffectData>(player.m_dodgeEffects.m_effectPrefabs);
		bool flag3 = hashSet3.Remove(dodgeData);
		if (flag2)
		{
			((Character)player).m_jumpEffects.m_effectPrefabs = hashSet2.ToArray();
		}
		if (flag3)
		{
			player.m_dodgeEffects.m_effectPrefabs = hashSet3.ToArray();
		}
	}
}
public class EitrDynamo : MonoBehaviour
{
	private Humanoid wearer;

	public void Start()
	{
		Transform root = ((Component)this).transform.root;
		object obj;
		if (root == null)
		{
			obj = null;
		}
		else
		{
			GameObject gameObject = ((Component)root).gameObject;
			obj = ((gameObject != null) ? gameObject.GetComponent<Player>() : null);
		}
		wearer = (Humanoid)obj;
		if ((Object)(object)wearer != (Object)null)
		{
			Humanoid obj2 = wearer;
			((Character)obj2).m_onDamaged = (Action<float, Character>)Delegate.Combine(((Character)obj2).m_onDamaged, new Action<float, Character>(OnDamaged));
		}
	}

	public void OnDisable()
	{
		if ((Object)(object)wearer != (Object)null)
		{
			Humanoid obj = wearer;
			((Character)obj).m_onDamaged = (Action<float, Character>)Delegate.Remove(((Character)obj).m_onDamaged, new Action<float, Character>(OnDamaged));
		}
		wearer = null;
	}

	public void OnDamaged(float dmg, Character idfkLol)
	{
		bool flag = ((Character)wearer).HaveEitr(0f);
		float maxEitr = ((Character)wearer).GetMaxEitr();
		float maxHealth = ((Character)wearer).GetMaxHealth();
		if (maxEitr > 0f)
		{
			if (dmg > Math.Min(50f, maxHealth / 3f))
			{
				((Character)wearer).AddEitr(70f);
			}
			else if (dmg > 30f)
			{
				((Character)wearer).AddEitr(40f);
			}
			else if (dmg < 20f && !((Character)wearer).m_blocking)
			{
				((Character)wearer).AddEitr(3f);
			}
			else
			{
				((Character)wearer).AddEitr(25f);
			}
		}
	}
}
public class EitrShield : MonoBehaviour
{
	private Humanoid wearer;

	private const string shieldName = "TzeentchReactiveShield";

	private int shieldHash;

	public void Start()
	{
		Transform root = ((Component)this).transform.root;
		object obj;
		if (root == null)
		{
			obj = null;
		}
		else
		{
			GameObject gameObject = ((Component)root).gameObject;
			obj = ((gameObject != null) ? gameObject.GetComponent<Player>() : null);
		}
		wearer = (Humanoid)obj;
		if ((Object)(object)wearer != (Object)null)
		{
			shieldHash = StringExtensionMethods.GetStableHashCode("TzeentchReactiveShield");
			Humanoid obj2 = wearer;
			((Character)obj2).m_onDamaged = (Action<float, Character>)Delegate.Combine(((Character)obj2).m_onDamaged, new Action<float, Character>(OnDamaged));
		}
	}

	public void OnDisable()
	{
		if ((Object)(object)wearer != (Object)null)
		{
			Humanoid obj = wearer;
			((Character)obj).m_onDamaged = (Action<float, Character>)Delegate.Remove(((Character)obj).m_onDamaged, new Action<float, Character>(OnDamaged));
		}
		wearer = null;
	}

	public void OnDamaged(float dmg, Character idfkLol)
	{
		//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
		bool flag = ((Character)wearer).HaveEitr(0f);
		float maxHealth = ((Character)wearer).GetMaxHealth();
		float num = Math.Max(25f, maxHealth / 4f);
		float num2 = (flag ? (((Character)wearer).GetEitrPercentage() * ((Character)wearer).GetMaxEitr()) : 0f);
		bool flag2 = ((Character)wearer).GetHealth() <= num;
		bool flag3 = dmg < 10f;
		SEMan sEMan = ((Character)wearer).GetSEMan();
		if (flag3 && (!flag2 || sEMan.HaveStatusEffect(shieldHash)))
		{
			return;
		}
		SE_Shield val = ScriptableObject.CreateInstance<SE_Shield>();
		((Object)val).name = "TzeentchReactiveShield";
		((StatusEffect)val).m_nameHash = shieldHash;
		((StatusEffect)val).m_ttl = ((flag3 && flag2) ? 5f : (20f + 0.35f * num2));
		val.m_levelUpSkillOnBreak = (SkillType)10;
		val.m_levelUpSkillFactor = 0.5f;
		val.m_absorbDamagePerSkillLevel = 1f;
		val.m_absorbDamage = ((flag3 && flag2) ? 5f : (5f + num2));
		ReepusDeepusDelmeepusChaosArmor.AttachShieldFx(val);
		float num3 = Math.Min(75f, maxHealth / 2f);
		float num4 = Math.Min(25f, maxHealth / 3f);
		if (dmg >= num3)
		{
			val.m_absorbDamage += 120f;
		}
		else
		{
			float num5 = dmg;
			if (num5 < num3 && num5 >= num4)
			{
				val.m_absorbDamage += 70f;
			}
			else
			{
				float num6 = dmg;
				if (num6 < num4 && num6 >= 10f)
				{
					val.m_absorbDamage += 30f;
				}
			}
		}
		val.m_absorbDamage = Math.Min(val.m_absorbDamage, 900f);
		((StatusEffect)val).m_ttl = Math.Min(((StatusEffect)val).m_ttl, 100f);
		sEMan.AddStatusEffect((StatusEffect)(object)val, false, 0, 0f);
	}
}
public class EmergencyShield : MonoBehaviour
{
	private Humanoid wearer;

	private const string shieldName = "UndividedReactiveEmergencyShield";

	private int shieldHash;

	public void Start()
	{
		Transform root = ((Component)this).transform.root;
		object obj;
		if (root == null)
		{
			obj = null;
		}
		else
		{
			GameObject gameObject = ((Component)root).gameObject;
			obj = ((gameObject != null) ? gameObject.GetComponent<Player>() : null);
		}
		wearer = (Humanoid)obj;
		if ((Object)(object)wearer != (Object)null)
		{
			shieldHash = StringExtensionMethods.GetStableHashCode("UndividedReactiveEmergencyShield");
			Humanoid obj2 = wearer;
			((Character)obj2).m_onDamaged = (Action<float, Character>)Delegate.Combine(((Character)obj2).m_onDamaged, new Action<float, Character>(OnDamaged));
		}
	}

	public void OnDisable()
	{
		if ((Object)(object)wearer != (Object)null)
		{
			Humanoid obj = wearer;
			((Character)obj).m_onDamaged = (Action<float, Character>)Delegate.Remove(((Character)obj).m_onDamaged, new Action<float, Character>(OnDamaged));
		}
		wearer = null;
	}

	public void OnDamaged(float dmg, Character idfkLol)
	{
		float maxHealth = ((Character)wearer).GetMaxHealth();
		float num = Math.Max(25f, maxHealth / 4f);
		bool flag = ((Character)wearer).GetHealth() <= num;
		float num2 = Math.Min(50f, maxHealth / 2f);
		bool flag2 = dmg < num2;
		SEMan sEMan = ((Character)wearer).GetSEMan();
		if (!flag2 || (flag && !sEMan.HaveStatusEffect(shieldHash)))
		{
			SE_Shield val = ScriptableObject.CreateInstance<SE_Shield>();
			((Object)val).name = "UndividedReactiveEmergencyShield";
			((StatusEffect)val).m_nameHash = shieldHash;
			((StatusEffect)val).m_ttl = ((flag2 && flag) ? 10f : 25f);
			val.m_absorbDamage = 25f;
			ReepusDeepusDelmeepusChaosArmor.AttachShieldFx(val);
			sEMan.AddStatusEffect((StatusEffect)(object)val, false, 0, 0f);
		}
	}
}
public static class PoiseBois
{
	[HarmonyPatch(typeof(Character), "RPC_Damage")]
	public static class ReduceDamageTaken
	{
		[UsedImplicitly]
		private static void Prefix(Character __instance, HitData hit)
		{
			Player val = (Player)(object)((__instance is Player) ? __instance : null);
			if (val != null)
			{
				if (((Humanoid)val).m_visEquipment.m_currentChestItemHash == ReepusDeepusDelmeepusChaosArmor.T4Hash || ((Humanoid)val).m_visEquipment.m_currentChestItemHash == ReepusDeepusDelmeepusChaosArmor.T5Hash || ((Humanoid)val).m_visEquipment.m_currentChestItemHash == ReepusDeepusDelmeepusChaosArmor.T5UHash)
				{
					hit.m_pushForce *= 0.15f;
					hit.m_staggerMultiplier *= 0.75f;
				}
				else if (((Humanoid)val).m_visEquipment.m_currentChestItemHash == ReepusDeepusDelmeepusChaosArmor.T3Hash)
				{
					hit.m_pushForce *= 0.4f;
					hit.m_staggerMultiplier *= 0.85f;
				}
				else if (((Humanoid)val).m_visEquipment.m_currentChestItemHash == ReepusDeepusDelmeepusChaosArmor.T2Hash || ((Humanoid)val).m_visEquipment.m_currentChestItemHash == ReepusDeepusDelmeepusChaosArmor.T1Hash)
				{
					hit.m_pushForce *= 0.65f;
				}
			}
		}
	}
}