Decompiled source of RaincoatRestored v0.1.2

RaincoatRestored.dll

Decompiled 2 weeks ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security.Permissions;
using BepInEx;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using RoR2;
using RoR2.Items;
using UnityEngine;
using UnityEngine.AddressableAssets;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.1.2.0")]
[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 Prototype
{
	[BepInPlugin("prototype.raincoat", "RaincoatRestored", "0.1.2")]
	public class RaincoatRestored : BaseUnityPlugin
	{
		public const string identifier = "prototype.raincoat";

		public const string version = "0.1.2";

		[HarmonyPatch(typeof(ImmuneToDebuffBehavior), "TryApplyOverride")]
		[HarmonyPrefix]
		private static bool TryApplyOverride(CharacterBody body, ref bool __result)
		{
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			ImmuneToDebuffBehavior component = ((Component)body).GetComponent<ImmuneToDebuffBehavior>();
			__result = Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component.healthComponent);
			if (__result)
			{
				EffectManager.SimpleImpactEffect(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/ImmuneToDebuff/ImmuneToDebuffEffect.prefab").WaitForCompletion(), body.corePosition, Vector3.up, true);
			}
			return false;
		}

		[HarmonyPatch(typeof(ImmuneToDebuffBehavior), "OverrideDebuff", new Type[]
		{
			typeof(BuffDef),
			typeof(CharacterBody)
		})]
		[HarmonyPrefix]
		private static bool OverrideDebuff(BuffDef buffDef, ref bool __result)
		{
			return __result = (Object)(object)Buffs.PermanentCurse != (Object)(object)buffDef;
		}

		[HarmonyPatch(typeof(CharacterBody), "RecalculateStats")]
		[HarmonyTranspiler]
		private static IEnumerable<CodeInstruction> RecalculateStats(IEnumerable<CodeInstruction> instructions)
		{
			MethodInfo target = typeof(CharacterBody).GetProperty("maxHealth").SetMethod;
			foreach (CodeInstruction instruction in instructions)
			{
				if ((object)target != null && CodeInstructionExtensions.Calls(instruction, target))
				{
					target = null;
					yield return new CodeInstruction(OpCodes.Ldarg_0, (object)null);
					yield return Transpilers.EmitDelegate<Func<float, CharacterBody, float>>((Func<float, CharacterBody, float>)((float health, CharacterBody body) => (!Object.op_Implicit((Object)(object)body.inventory)) ? health : (health + (float)(body.inventory.GetItemCount(Items.ImmuneToDebuff) * 100))));
				}
				yield return instruction;
			}
		}

		[HarmonyPatch(typeof(CharacterBody), "AddBuff", new Type[] { typeof(BuffIndex) })]
		[HarmonyPrefix]
		private static void AddBuff(CharacterBody __instance, ref BuffIndex buffType)
		{
			if (ImmuneToDebuffBehavior.OverrideDebuff(buffType, __instance))
			{
				buffType = (BuffIndex)(-1);
			}
		}

		public void Awake()
		{
			Harmony.CreateAndPatchAll(((object)this).GetType(), (string)null);
			Language.onCurrentLanguageChanged += delegate
			{
				Language currentLanguage = Language.currentLanguage;
				string text = currentLanguage?.name;
				if (text != null)
				{
					string text2;
					string text3;
					switch (text.Length)
					{
					default:
						return;
					case 2:
						switch (text[0])
						{
						default:
							return;
						case 'e':
							if (!(text == "en"))
							{
								return;
							}
							text2 = "Become immune to all debuffs. Increase maximum health.";
							text3 = "Whenever you would receive a <style=cIsDamage>debuff</style>, prevent it. Increases <style=cIsHealing>maximum health</style> by <style=cIsHealing>100</style> <style=cStack>(+100 per stack)</style>.";
							break;
						case 'd':
							if (!(text == "de"))
							{
								return;
							}
							text2 = "Werde immun gegen alle Debuffs. Erhöhe die maximale Gesundheit.";
							text3 = "Wann immer du einen <style=cIsDamage>Debuff</style> erhalten würdest, wehre ihn ab. Erhöht <style=cIsHealing>maximale Gesundheit</style> um <style=cIsHealing>100</style> <style=cStack>(+100 pro Stapel)</style>.";
							break;
						case 'F':
							if (!(text == "FR"))
							{
								return;
							}
							text2 = "Devenez immunisé à tous les affaiblissements. Augmente les PV max.";
							text3 = "Quand vous êtes sur le point de subir un <style=cIsDamage>affaiblissement</style>, évitez-le. Améliore les <style=cIsHealing>PV max</style> de <style=cIsHealing>100</style> <style=cStack>(+100 par cumul)</style>.";
							break;
						case 'I':
							if (!(text == "IT"))
							{
								return;
							}
							text2 = "Diventa immune a tutti i debuff. Aumenta la salute massima.";
							text3 = "Ogni volta che riceveresti un <style=cIsDamage>debuff</style>, previenilo. Aumenta la <style=cIsHealing>salute massima</style> di <style=cIsHealing>100</style> <style=cStack>(+100 per accumulo)</style>.";
							break;
						case 'j':
							if (!(text == "ja"))
							{
								return;
							}
							text2 = "すべてのデバフの影響を受けない。最大ヘルスが上昇。";
							text3 = "<style=cIsDamage>デバフ</style>を受けるといつも、それを防ぐ。<style=cIsHealing>最大ヘルス</style>を <style=cIsHealing>100</style> <style=cStack>(スタックごとに +100)</style> 増やす。";
							break;
						case 'k':
							if (!(text == "ko"))
							{
								return;
							}
							text2 = "모든 디버프에 면역이 됩니다. 최대 체력이 증가합니다.";
							text3 = "<style=cIsDamage>디버프</style>를 방지합니다. <style=cIsHealing>최대 체력</style>이 <style=cIsHealing>100</style><style=cStack>(중첩당 +100)</style> 증가합니다.";
							break;
						case 'R':
							if (!(text == "RU"))
							{
								return;
							}
							text2 = "Получает невосприимчивость ко всем отрицательным эффектам. Увеличивает максимальный запас здоровья.";
							text3 = "Отменяет получаемый <style=cIsDamage>отрицательный эффект</style>. Увеличивает <style=cIsHealing>максимальный запас здоровья</style> на <style=cIsHealing>100</style> <style=cStack>(+100 за шт.)</style>.";
							break;
						case 't':
							if (!(text == "tr"))
							{
								return;
							}
							text2 = "Tüm düşürücülere karşı bağışıklık kazan. Maksimum sağlığı artırır.";
							text3 = "Ne zaman bir <style=cIsDamage>düşürücü</style> alırsan, onu önle. <style=cIsHealing>Maksimum sağlığı</style> <style=cIsHealing>100</style> <style=cStack>(birikim başına +100)</style> artırır.";
							break;
						}
						break;
					case 5:
						switch (text[0])
						{
						default:
							return;
						case 'e':
							if (!(text == "es-ES"))
							{
								return;
							}
							text2 = "Te vuelve inmune a todas las penalizaciones. Aumenta la salud máxima.";
							text3 = "Siempre que recibes una <style=cIsDamage>penalización</style>, la anula. Aumenta la <style=cIsHealing>salud máxima</style> en <style=cIsHealing>100</style> <style=cStack>(+100 por acumulación)</style>.";
							break;
						case 'p':
							if (!(text == "pt-BR"))
							{
								return;
							}
							text2 = "Concede imunidade a todas as penalidades. Aumenta a saúde máxima.";
							text3 = "Sempre que receber uma <style=cIsDamage>penalidade</style>, anule-a. Aumenta a <style=cIsHealing>saúde máxima</style> em <style=cIsHealing>100</style> <style=cStack>(+100 por acúmulo)</style>.";
							break;
						case 'z':
							if (!(text == "zh-CN"))
							{
								return;
							}
							text2 = "免疫所有减益效果。增加最大生命值。";
							text3 = "防止你获得<style=cIsDamage>减益</style>效果。使<style=cIsHealing>最大生命值</style>增加<style=cIsHealing>100</style><style=cStack>(每层+100)</style>。";
							break;
						}
						break;
					}
					currentLanguage.SetStringByToken("ITEM_IMMUNETODEBUFF_PICKUP", text2);
					currentLanguage.SetStringByToken("ITEM_IMMUNETODEBUFF_DESC", text3);
				}
			};
		}

		[HarmonyPatch(typeof(ImmuneToDebuffBehavior), "FixedUpdate")]
		[HarmonyPrefix]
		private static bool FixedUpdate()
		{
			return false;
		}
	}
}