Decompiled source of Cape And Torch Resistance Rework And New Water And Cold Resistance v1.0.3

CapeAndTorchResistanceChanges.dll

Decompiled 7 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text.RegularExpressions;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using UnityEngine;
using UnityEngine.SceneManagement;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("CapeAndTorchResistanceChanges")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CapeAndTorchResistanceChanges")]
[assembly: AssemblyCopyright("Copyright ©  2022")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("537a77b1-f957-47ac-a3d3-2814f59d3b72")]
[assembly: AssemblyFileVersion("1.0.3.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.6.2", FrameworkDisplayName = ".NET Framework 4.6.2")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.3.0")]
[module: UnverifiableCode]
namespace CapeAndTorchResistanceChanges;

[BepInIncompatibility("castix_FireIsHot")]
[BepInIncompatibility("SSyl.ToastyTorches")]
[BepInIncompatibility("aedenthorn.CustomArmorStats")]
[BepInIncompatibility("goldenrevolver.TeleportWeatherWetAndColdFixes")]
[BepInIncompatibility("goldenrevolver.TrollArmorSetBonusWithoutCape")]
[BepInPlugin("goldenrevolver.CapeAndTorchResistanceChanges", "Cape and Torch Resistance Changes - Water and Cold Resistance", "1.0.3")]
public class CapeAndTorchResistanceChangesPlugin : BaseUnityPlugin
{
	public enum CapeChanges
	{
		Disabled,
		ResistanceChanges,
		MovementSpeedBuffs,
		Both
	}

	public enum TorchChanges
	{
		Disabled,
		ResistanceChanges,
		ResistanceChangesAndDurability
	}

	public enum WaterResistance
	{
		Disabled,
		Resistant,
		ImmuneExceptSwimming,
		Immune
	}

	public enum ColdResistance
	{
		ImmuneWhileNotWet,
		Immune
	}

	public const string NAME = "Cape and Torch Resistance Changes - Water and Cold Resistance";

	public const string VERSION = "1.0.3";

	public static ConfigEntry<CapeChanges> EnableCapeChanges;

	public static ConfigEntry<TorchChanges> EnableTorchChanges;

	public static ConfigEntry<bool> EnableTrollArmorSetBonusChange;

	public static ConfigEntry<WaterResistance> TrollCapeWaterResistance;

	public static ConfigEntry<ColdResistance> LoxCapeColdResistance;

	public static ConfigEntry<TeleportChange> TeleportInstantlyUpdatesWeather;

	public static ConfigEntry<bool> TeleportGrantsTemporaryWetAndColdImmunity;

	public static ConfigEntry<string> WaterModifierLabel;

	public static ConfigEntry<string> ColdModifierLabel;

	protected void Awake()
	{
		LoadConfig();
		Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), (string)null);
	}

	private void LoadConfig()
	{
		string text = "0 - Teleporting";
		TeleportInstantlyUpdatesWeather = ((BaseUnityPlugin)this).Config.Bind<TeleportChange>(text, "TeleportInstantlyUpdatesWeather", TeleportChange.InstantlyUpdateWeatherAndClearWetAndColdDebuff, string.Empty);
		TeleportGrantsTemporaryWetAndColdImmunity = ((BaseUnityPlugin)this).Config.Bind<bool>(text, "TeleportGrantsTemporaryWetAndColdImmunity", false, string.Empty);
		text = "1 - Requires Restart";
		EnableCapeChanges = ((BaseUnityPlugin)this).Config.Bind<CapeChanges>(text, "EnableCapeChanges", CapeChanges.Both, string.Empty);
		EnableTorchChanges = ((BaseUnityPlugin)this).Config.Bind<TorchChanges>(text, "EnableTorchChanges", TorchChanges.ResistanceChangesAndDurability, string.Empty);
		EnableTrollArmorSetBonusChange = ((BaseUnityPlugin)this).Config.Bind<bool>(text, "EnableTrollArmorSetBonusChange", true, string.Empty);
		TrollCapeWaterResistance = ((BaseUnityPlugin)this).Config.Bind<WaterResistance>(text, "TrollCapeWaterResistance", WaterResistance.ImmuneExceptSwimming, string.Empty);
		LoxCapeColdResistance = ((BaseUnityPlugin)this).Config.Bind<ColdResistance>(text, "LoxCapeColdResistance", ColdResistance.Immune, string.Empty);
		text = "9 - Localization";
		WaterModifierLabel = ((BaseUnityPlugin)this).Config.Bind<string>(text, "WaterModifierLabel", "Water", string.Empty);
		ColdModifierLabel = ((BaseUnityPlugin)this).Config.Bind<string>(text, "ColdModifierLabel", "Cold", string.Empty);
	}
}
[HarmonyPatch(typeof(Humanoid), "DrainEquipedItemDurability")]
internal static class Humanoid_DrainEquipedItemDurability_Patch
{
	private static void Postfix(Humanoid __instance, ref ItemData item, ref float dt)
	{
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Invalid comparison between Unknown and I4
		if (CapeAndTorchResistanceChangesPlugin.EnableTorchChanges.Value != CapeAndTorchResistanceChangesPlugin.TorchChanges.ResistanceChangesAndDurability || !((Character)__instance).IsPlayer())
		{
			return;
		}
		Player val = (Player)(object)((__instance is Player) ? __instance : null);
		if (val != null && (int)item.m_shared.m_itemType == 15)
		{
			bool flag = val.InShelter();
			bool flag2 = EnvMan.instance.IsFreezing();
			bool flag3 = EnvMan.instance.IsCold();
			bool flag4 = EnvMan.instance.IsWet();
			bool flag5 = (flag3 || flag2) && !flag;
			bool flag6 = flag4 && !val.m_underRoof;
			if (flag6 || flag5)
			{
				ItemData obj = item;
				obj.m_durability -= item.m_shared.m_durabilityDrain * dt;
			}
		}
	}
}
[HarmonyPatch(typeof(ObjectDB))]
internal static class PatchObjectDB
{
	internal static SE_Stats teleportBuff;

	private static readonly string[] trollSet = new string[3] { "HelmetTrollLeather", "ArmorTrollLeatherChest", "ArmorTrollLeatherLegs" };

	private static DamageModifier ParseWaterResistance(CapeAndTorchResistanceChangesPlugin.WaterResistance res)
	{
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0028: Unknown result type (might be due to invalid IL or missing references)
		return (DamageModifier)(res switch
		{
			CapeAndTorchResistanceChangesPlugin.WaterResistance.Resistant => 1, 
			CapeAndTorchResistanceChangesPlugin.WaterResistance.Immune => 3, 
			CapeAndTorchResistanceChangesPlugin.WaterResistance.ImmuneExceptSwimming => 5, 
			_ => 0, 
		});
	}

	[HarmonyPatch("Awake")]
	[HarmonyPostfix]
	public static void Awake_Postfix(ObjectDB __instance)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_0055: Unknown result type (might be due to invalid IL or missing references)
		//IL_005d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0062: Unknown result type (might be due to invalid IL or missing references)
		//IL_006c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0079: Unknown result type (might be due to invalid IL or missing references)
		//IL_0081: Unknown result type (might be due to invalid IL or missing references)
		//IL_0086: Unknown result type (might be due to invalid IL or missing references)
		//IL_0106: Unknown result type (might be due to invalid IL or missing references)
		//IL_0113: Unknown result type (might be due to invalid IL or missing references)
		//IL_011b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0120: Unknown result type (might be due to invalid IL or missing references)
		//IL_012a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0137: Unknown result type (might be due to invalid IL or missing references)
		//IL_013f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0144: Unknown result type (might be due to invalid IL or missing references)
		//IL_0214: Unknown result type (might be due to invalid IL or missing references)
		//IL_0221: Unknown result type (might be due to invalid IL or missing references)
		//IL_0232: Unknown result type (might be due to invalid IL or missing references)
		//IL_0237: Unknown result type (might be due to invalid IL or missing references)
		//IL_023c: Unknown result type (might be due to invalid IL or missing references)
		//IL_039d: Unknown result type (might be due to invalid IL or missing references)
		//IL_03aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_03b2: Unknown result type (might be due to invalid IL or missing references)
		//IL_03b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_0337: Unknown result type (might be due to invalid IL or missing references)
		//IL_0344: Unknown result type (might be due to invalid IL or missing references)
		//IL_034c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0351: Unknown result type (might be due to invalid IL or missing references)
		//IL_047d: Unknown result type (might be due to invalid IL or missing references)
		//IL_048a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0492: Unknown result type (might be due to invalid IL or missing references)
		//IL_0497: Unknown result type (might be due to invalid IL or missing references)
		//IL_040a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0416: Unknown result type (might be due to invalid IL or missing references)
		//IL_0423: Unknown result type (might be due to invalid IL or missing references)
		//IL_042a: Unknown result type (might be due to invalid IL or missing references)
		//IL_042c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0431: Unknown result type (might be due to invalid IL or missing references)
		Scene activeScene = SceneManager.GetActiveScene();
		if (((Scene)(ref activeScene)).name != "main")
		{
			return;
		}
		SE_Stats val = ScriptableObject.CreateInstance<SE_Stats>();
		((Object)val).name = "GoldensTeleportBuff";
		((StatusEffect)val).m_ttl = 5f;
		val.m_mods = new List<DamageModPair>
		{
			new DamageModPair
			{
				m_type = (DamageType)2048,
				m_modifier = (DamageModifier)3
			},
			new DamageModPair
			{
				m_type = (DamageType)1024,
				m_modifier = (DamageModifier)3
			}
		};
		teleportBuff = val;
		__instance.m_StatusEffects.Add((StatusEffect)(object)val);
		foreach (GameObject item in __instance.m_items)
		{
			if (CapeAndTorchResistanceChangesPlugin.EnableTorchChanges.Value != 0 && ((Object)item).name == "Torch")
			{
				SharedData shared = item.GetComponent<ItemDrop>().m_itemData.m_shared;
				shared.m_damageModifiers = new List<DamageModPair>
				{
					new DamageModPair
					{
						m_type = (DamageType)2048,
						m_modifier = (DamageModifier)1
					},
					new DamageModPair
					{
						m_type = (DamageType)1024,
						m_modifier = (DamageModifier)1
					}
				};
			}
			bool flag = CapeAndTorchResistanceChangesPlugin.EnableCapeChanges.Value == CapeAndTorchResistanceChangesPlugin.CapeChanges.MovementSpeedBuffs || CapeAndTorchResistanceChangesPlugin.EnableCapeChanges.Value == CapeAndTorchResistanceChangesPlugin.CapeChanges.Both;
			bool flag2 = CapeAndTorchResistanceChangesPlugin.EnableCapeChanges.Value == CapeAndTorchResistanceChangesPlugin.CapeChanges.ResistanceChanges || CapeAndTorchResistanceChangesPlugin.EnableCapeChanges.Value == CapeAndTorchResistanceChangesPlugin.CapeChanges.Both;
			if (((Object)item).name == "CapeTrollHide")
			{
				SharedData shared2 = item.GetComponent<ItemDrop>().m_itemData.m_shared;
				if (CapeAndTorchResistanceChangesPlugin.EnableTrollArmorSetBonusChange.Value)
				{
					shared2.m_setName = string.Empty;
					shared2.m_setSize = 0;
					shared2.m_setStatusEffect = null;
				}
				if (flag)
				{
					shared2.m_movementModifier = 0.05f;
				}
				if (flag2)
				{
					shared2.m_damageModifiers = new List<DamageModPair>
					{
						new DamageModPair
						{
							m_type = (DamageType)1024,
							m_modifier = ParseWaterResistance(CapeAndTorchResistanceChangesPlugin.TrollCapeWaterResistance.Value)
						}
					};
				}
			}
			if (CapeAndTorchResistanceChangesPlugin.EnableTrollArmorSetBonusChange.Value && trollSet.Contains(((Object)item).name))
			{
				item.GetComponent<ItemDrop>().m_itemData.m_shared.m_setSize = 3;
			}
			if (CapeAndTorchResistanceChangesPlugin.EnableCapeChanges.Value == CapeAndTorchResistanceChangesPlugin.CapeChanges.Disabled)
			{
				continue;
			}
			if (((Object)item).name == "CapeDeerHide" && flag)
			{
				item.GetComponent<ItemDrop>().m_itemData.m_shared.m_movementModifier = 0.03f;
			}
			if (((Object)item).name == "CapeLinen")
			{
				SharedData shared3 = item.GetComponent<ItemDrop>().m_itemData.m_shared;
				if (flag)
				{
					shared3.m_movementModifier = 0.1f;
				}
				if (flag2)
				{
					shared3.m_damageModifiers = new List<DamageModPair>
					{
						new DamageModPair
						{
							m_type = (DamageType)2048,
							m_modifier = (DamageModifier)1
						}
					};
				}
			}
			if (((Object)item).name == "CapeWolf")
			{
				SharedData shared4 = item.GetComponent<ItemDrop>().m_itemData.m_shared;
				if (flag2)
				{
					shared4.m_damageModifiers = new List<DamageModPair>
					{
						new DamageModPair
						{
							m_type = (DamageType)2048,
							m_modifier = (DamageModifier)5
						}
					};
				}
			}
			if (((Object)item).name == "CapeLox")
			{
				SharedData shared5 = item.GetComponent<ItemDrop>().m_itemData.m_shared;
				if (flag2)
				{
					DamageModifier modifier = (DamageModifier)((CapeAndTorchResistanceChangesPlugin.LoxCapeColdResistance.Value == CapeAndTorchResistanceChangesPlugin.ColdResistance.Immune) ? 3 : 5);
					shared5.m_damageModifiers = new List<DamageModPair>
					{
						new DamageModPair
						{
							m_type = (DamageType)2048,
							m_modifier = modifier
						}
					};
				}
			}
			if (((Object)item).name == "CapeFeather")
			{
				SharedData shared6 = item.GetComponent<ItemDrop>().m_itemData.m_shared;
				if (flag2)
				{
					shared6.m_damageModifiers = new List<DamageModPair>
					{
						new DamageModPair
						{
							m_type = (DamageType)2048,
							m_modifier = (DamageModifier)5
						}
					};
				}
			}
		}
	}
}
internal static class ResistanceHelper
{
	private static readonly int[] modifierCompare = new int[7] { 6, 3, 5, 1, 0, 2, 4 };

	internal static bool IsAtLeastResistant(DamageModifier damageModifier)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_0004: Unknown result type (might be due to invalid IL or missing references)
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Invalid comparison between Unknown and I4
		//IL_000b: Unknown result type (might be due to invalid IL or missing references)
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_000f: Invalid comparison between Unknown and I4
		if ((int)damageModifier == 1 || damageModifier - 3 <= 2)
		{
			return true;
		}
		return false;
	}

	internal static DamageModifier GetNewDamageTypeModifier(NewResistances.NewDamageTypes type, Player player)
	{
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_003c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		//IL_004c: Invalid comparison between Unknown and I4
		//IL_005a: Unknown result type (might be due to invalid IL or missing references)
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0060: Unknown result type (might be due to invalid IL or missing references)
		//IL_0062: Unknown result type (might be due to invalid IL or missing references)
		//IL_0073: Unknown result type (might be due to invalid IL or missing references)
		//IL_0075: Unknown result type (might be due to invalid IL or missing references)
		//IL_0170: Unknown result type (might be due to invalid IL or missing references)
		//IL_0171: Unknown result type (might be due to invalid IL or missing references)
		//IL_0176: Unknown result type (might be due to invalid IL or missing references)
		//IL_017a: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
		//IL_0101: Unknown result type (might be due to invalid IL or missing references)
		//IL_0104: Unknown result type (might be due to invalid IL or missing references)
		//IL_0106: Unknown result type (might be due to invalid IL or missing references)
		//IL_010c: Invalid comparison between Unknown and I4
		//IL_011a: Unknown result type (might be due to invalid IL or missing references)
		//IL_011b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0120: Unknown result type (might be due to invalid IL or missing references)
		//IL_0122: Unknown result type (might be due to invalid IL or missing references)
		//IL_0133: Unknown result type (might be due to invalid IL or missing references)
		//IL_0135: Unknown result type (might be due to invalid IL or missing references)
		DamageModPair val = default(DamageModPair);
		foreach (ItemData equippedItem in ((Humanoid)player).m_inventory.GetEquippedItems())
		{
			foreach (DamageModPair damageModifier in equippedItem.m_shared.m_damageModifiers)
			{
				if ((int)damageModifier.m_type == (int)type && ShouldOverride(val.m_modifier, damageModifier.m_modifier))
				{
					val = damageModifier;
				}
			}
		}
		foreach (StatusEffect statusEffect in ((Character)player).m_seman.m_statusEffects)
		{
			SE_Stats val2 = (SE_Stats)(object)((statusEffect is SE_Stats) ? statusEffect : null);
			if (val2 == null)
			{
				continue;
			}
			foreach (DamageModPair mod in val2.m_mods)
			{
				if ((int)mod.m_type == (int)type && ShouldOverride(val.m_modifier, mod.m_modifier))
				{
					val = mod;
				}
			}
		}
		return val.m_modifier;
	}

	private static bool ShouldOverride(DamageModifier oldModifier, DamageModifier newModifier)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		if (TryShouldOverride(oldModifier, newModifier, out var shouldOverride))
		{
			return shouldOverride;
		}
		return ShouldOverrideOld(oldModifier, newModifier);
	}

	internal static bool TryShouldOverride(DamageModifier oldModifier, DamageModifier newModifier, out bool shouldOverride)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0003: Expected I4, but got Unknown
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_0005: Expected I4, but got Unknown
		int num = (int)oldModifier;
		int num2 = (int)newModifier;
		if (num >= 0 && num <= 6 && num2 >= 0 && num2 <= 6)
		{
			shouldOverride = modifierCompare[num2] < modifierCompare[num];
			return true;
		}
		shouldOverride = false;
		return false;
	}

	private static bool ShouldOverrideOld(DamageModifier oldMod, DamageModifier newMod)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0003: Invalid comparison between Unknown and I4
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Invalid comparison between Unknown and I4
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_000b: Invalid comparison between Unknown and I4
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Invalid comparison between Unknown and I4
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_000f: Invalid comparison between Unknown and I4
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Invalid comparison between Unknown and I4
		return (int)oldMod != 4 && ((int)newMod == 3 || (((int)oldMod != 5 || (int)newMod != 1) && ((int)oldMod != 6 || (int)newMod != 2)));
	}
}
internal static class NewResistances
{
	internal enum NewDamageTypes
	{
		Water = 0x400,
		Cold = 0x800
	}

	[HarmonyPatch(typeof(SEMan), "AddStatusEffect", new Type[]
	{
		typeof(int),
		typeof(bool),
		typeof(int),
		typeof(float)
	})]
	private static class SEMan_AddStatusEffectByName_Patch
	{
		private static bool Prefix(SEMan __instance, int nameHash, bool resetTime, ref StatusEffect __result)
		{
			StatusEffect statusEffect = ObjectDB.instance.GetStatusEffect(nameHash);
			if ((Object)(object)statusEffect == (Object)null || !resetTime || CanAddStatusEffectOverride(((Object)statusEffect).name, __instance.m_character))
			{
				return true;
			}
			__result = null;
			return false;
		}
	}

	[HarmonyPatch(typeof(SEMan), "AddStatusEffect", new Type[]
	{
		typeof(StatusEffect),
		typeof(bool),
		typeof(int),
		typeof(float)
	})]
	private static class SEMan_AddStatusEffectByType_Patch
	{
		private static bool Prefix(SEMan __instance, StatusEffect statusEffect, ref StatusEffect __result)
		{
			if (CanAddStatusEffectOverride(((Object)statusEffect).name, __instance.m_character))
			{
				return true;
			}
			__result = null;
			return false;
		}
	}

	[HarmonyPatch(typeof(SE_Wet), "UpdateStatusEffect")]
	private static class SE_Wet_UpdateStatusEffect_Patch
	{
		private static void Postfix(SE_Wet __instance, float dt)
		{
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Invalid comparison between Unknown and I4
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Invalid comparison between Unknown and I4
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Invalid comparison between Unknown and I4
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Invalid comparison between Unknown and I4
			if (!((StatusEffect)__instance).m_character.IsPlayer())
			{
				return;
			}
			Character character = ((StatusEffect)__instance).m_character;
			Player val = (Player)(object)((character is Player) ? character : null);
			if (val != null)
			{
				DamageModifier newDamageTypeModifier = ResistanceHelper.GetNewDamageTypeModifier(NewDamageTypes.Water, val);
				if ((int)newDamageTypeModifier == 1 || (int)newDamageTypeModifier == 5)
				{
					((StatusEffect)__instance).m_time = ((StatusEffect)__instance).m_time + dt * 3f / 2f;
				}
				else if ((int)newDamageTypeModifier == 2)
				{
					((StatusEffect)__instance).m_time = ((StatusEffect)__instance).m_time - dt / 3f;
				}
				else if ((int)newDamageTypeModifier == 6)
				{
					((StatusEffect)__instance).m_time = ((StatusEffect)__instance).m_time - dt * 2f / 3f;
				}
			}
		}
	}

	[HarmonyPatch(typeof(Player), "UpdateEnvStatusEffects")]
	private static class Player_UpdateEnvStatusEffects_Patch
	{
		private static bool Prefix(Player __instance, float dt)
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0131: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			//IL_0138: Unknown result type (might be due to invalid IL or missing references)
			//IL_0149: Unknown result type (might be due to invalid IL or missing references)
			//IL_014c: Invalid comparison between Unknown and I4
			//IL_014e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0151: Invalid comparison between Unknown and I4
			__instance.m_nearFireTimer += dt;
			DamageModifiers damageModifiers = ((Character)__instance).GetDamageModifiers((WeakSpot)null);
			bool flag = __instance.m_nearFireTimer < 0.25f;
			bool flag2 = ((Character)__instance).m_seman.HaveStatusEffect("Burning");
			bool flag3 = __instance.InShelter();
			DamageModifier modifier = ((DamageModifiers)(ref damageModifiers)).GetModifier((DamageType)64);
			bool flag4 = EnvMan.instance.IsFreezing();
			bool flag5 = EnvMan.instance.IsCold();
			bool flag6 = EnvMan.instance.IsWet();
			bool flag7 = __instance.IsSensed();
			bool flag8 = ((Character)__instance).IsSitting();
			bool flag9 = Object.op_Implicit((Object)(object)EffectArea.IsPointInsideArea(((Component)__instance).transform.position, (Type)64, 1f));
			bool flag10 = flag4 && !flag && !flag3;
			bool flag11 = (flag5 && !flag) || (flag4 && flag && !flag3) || (flag4 && !flag && flag3);
			if (flag6 && !__instance.m_underRoof)
			{
				((Character)__instance).m_seman.AddStatusEffect(Player.s_statusEffectWet, true, 0, 0f);
			}
			bool flag12 = ((Character)__instance).m_seman.HaveStatusEffect("Wet");
			if (ResistanceHelper.IsAtLeastResistant(modifier) || flag9 || flag2)
			{
				flag10 = false;
				flag11 = false;
			}
			else
			{
				DamageModifier newDamageTypeModifier = ResistanceHelper.GetNewDamageTypeModifier(NewDamageTypes.Cold, __instance);
				if (ResistanceHelper.IsAtLeastResistant(newDamageTypeModifier))
				{
					flag11 = false;
					if ((int)newDamageTypeModifier != 1 && ((int)newDamageTypeModifier != 5 || !flag12))
					{
						flag10 = false;
					}
				}
			}
			if (flag3)
			{
				((Character)__instance).m_seman.AddStatusEffect(Player.s_statusEffectShelter, false, 0, 0f);
			}
			else
			{
				((Character)__instance).m_seman.RemoveStatusEffect(Player.s_statusEffectShelter, false);
			}
			if (flag)
			{
				((Character)__instance).m_seman.AddStatusEffect(Player.s_statusEffectCampFire, false, 0, 0f);
			}
			else
			{
				((Character)__instance).m_seman.RemoveStatusEffect(Player.s_statusEffectCampFire, false);
			}
			bool flag13 = !flag7 && (flag8 || flag3) && !flag11 && !flag10 && (!flag12 || flag9) && !flag2 && flag;
			if (flag13)
			{
				((Character)__instance).m_seman.AddStatusEffect(Player.s_statusEffectResting, false, 0, 0f);
			}
			else
			{
				((Character)__instance).m_seman.RemoveStatusEffect(Player.s_statusEffectResting, false);
			}
			__instance.m_safeInHome = flag13 && flag3 && (float)__instance.GetBaseValue() >= 1f;
			if (flag10)
			{
				if (!((Character)__instance).m_seman.RemoveStatusEffect(Player.s_statusEffectCold, true))
				{
					((Character)__instance).m_seman.AddStatusEffect(Player.s_statusEffectFreezing, false, 0, 0f);
					return false;
				}
			}
			else if (flag11)
			{
				if (!((Character)__instance).m_seman.RemoveStatusEffect(Player.s_statusEffectFreezing, true) && Object.op_Implicit((Object)(object)((Character)__instance).m_seman.AddStatusEffect(Player.s_statusEffectCold, false, 0, 0f)))
				{
					__instance.ShowTutorial("cold", false);
					return false;
				}
			}
			else
			{
				((Character)__instance).m_seman.RemoveStatusEffect(Player.s_statusEffectCold, false);
				((Character)__instance).m_seman.RemoveStatusEffect(Player.s_statusEffectFreezing, false);
			}
			return false;
		}
	}

	[HarmonyPatch(typeof(SE_Stats), "GetDamageModifiersTooltipString")]
	private static class SE_Stats_GetDamageModifiersTooltipString_Patch
	{
		private static void Postfix(ref string __result, List<DamageModPair> mods)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Invalid comparison between Unknown and I4
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Invalid comparison between Unknown and I4
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Expected I4, but got Unknown
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f5: Invalid comparison between Unknown and I4
			//IL_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_011f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Invalid comparison between Unknown and I4
			__result = Regex.Replace(__result, "\\n.*<color=orange></color>", "");
			foreach (DamageModPair mod in mods)
			{
				if (!Enum.IsDefined(typeof(DamageType), mod.m_type) && (int)mod.m_modifier != 4 && (int)mod.m_modifier > 0)
				{
					DamageModifier modifier = mod.m_modifier;
					DamageModifier val = modifier;
					switch (val - 1)
					{
					case 0:
						__result += "\n$inventory_dmgmod: <color=orange>$inventory_resistant</color> VS ";
						break;
					case 1:
						__result += "\n$inventory_dmgmod: <color=orange>$inventory_weak</color> VS ";
						break;
					case 2:
						__result += "\n$inventory_dmgmod: <color=orange>$inventory_immune</color> VS ";
						break;
					case 4:
						__result += "\n$inventory_dmgmod: <color=orange>$inventory_veryresistant</color> VS ";
						break;
					case 5:
						__result += "\n$inventory_dmgmod: <color=orange>$inventory_veryweak</color> VS ";
						break;
					}
					if ((int)mod.m_type == 1024)
					{
						__result = __result + "<color=orange>" + CapeAndTorchResistanceChangesPlugin.WaterModifierLabel.Value + "</color>";
					}
					else if ((int)mod.m_type == 2048)
					{
						__result = __result + "<color=orange>" + CapeAndTorchResistanceChangesPlugin.ColdModifierLabel.Value + "</color>";
					}
				}
			}
		}
	}

	private static bool CanAddStatusEffectOverride(string name, Character character)
	{
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0052: Invalid comparison between Unknown and I4
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Invalid comparison between Unknown and I4
		//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b6: Invalid comparison between Unknown and I4
		//IL_0067: Unknown result type (might be due to invalid IL or missing references)
		//IL_006a: Invalid comparison between Unknown and I4
		//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bb: Invalid comparison between Unknown and I4
		if (!character.IsPlayer())
		{
			return true;
		}
		Player val = (Player)(object)((character is Player) ? character : null);
		if (val == null)
		{
			return true;
		}
		if (name == "Wet")
		{
			DamageModifier newDamageTypeModifier = ResistanceHelper.GetNewDamageTypeModifier(NewDamageTypes.Water, val);
			if ((int)newDamageTypeModifier == 4 || (int)newDamageTypeModifier == 3)
			{
				return false;
			}
			if ((int)newDamageTypeModifier == 5 && !((Character)val).InLiquidSwimDepth())
			{
				return false;
			}
		}
		if (name == "Cold" || name == "Freezing")
		{
			DamageModifier newDamageTypeModifier2 = ResistanceHelper.GetNewDamageTypeModifier(NewDamageTypes.Cold, val);
			if ((int)newDamageTypeModifier2 == 4 || (int)newDamageTypeModifier2 == 3)
			{
				return false;
			}
		}
		return true;
	}
}
[HarmonyPatch(typeof(Player), "UpdateTeleport")]
internal static class PatchPlayer
{
	public static void Prefix(Player __instance, ref bool __state)
	{
		__state = __instance.m_teleporting;
		if (CapeAndTorchResistanceChangesPlugin.TeleportInstantlyUpdatesWeather.Value != 0 && __instance.m_distantTeleport && __instance.m_teleporting && __instance.m_teleportTimer == 0f)
		{
			TeleportHelper.RemoveAndBackupTransition(ref EnvMan.instance.m_wetTransitionDuration, ref TeleportHelper.oldWetTransitionDuration);
			TeleportHelper.RemoveAndBackupTransition(ref EnvMan.instance.m_windTransitionDuration, ref TeleportHelper.oldWindTransitionDuration);
			TeleportHelper.RemoveAndBackupTransition(ref EnvMan.instance.m_transitionDuration, ref TeleportHelper.oldTransitionDuration);
		}
	}

	public static void Postfix(Player __instance, ref bool __state)
	{
		if (__instance.m_distantTeleport && __state && !__instance.m_teleporting)
		{
			if (CapeAndTorchResistanceChangesPlugin.TeleportGrantsTemporaryWetAndColdImmunity.Value)
			{
				((Character)__instance).m_seman.AddStatusEffect((StatusEffect)(object)PatchObjectDB.teleportBuff, false, 0, 0f);
			}
			if (CapeAndTorchResistanceChangesPlugin.TeleportInstantlyUpdatesWeather.Value != 0)
			{
				TeleportHelper.ResetTransition(ref EnvMan.instance.m_wetTransitionDuration, ref TeleportHelper.oldWetTransitionDuration, 15f);
				TeleportHelper.ResetTransition(ref EnvMan.instance.m_windTransitionDuration, ref TeleportHelper.oldWindTransitionDuration, 10f);
				TeleportHelper.ResetTransition(ref EnvMan.instance.m_transitionDuration, ref TeleportHelper.oldTransitionDuration, 10f);
			}
			if (CapeAndTorchResistanceChangesPlugin.TeleportInstantlyUpdatesWeather.Value == TeleportChange.InstantlyUpdateWeatherAndClearWetAndColdDebuff)
			{
				((Character)__instance).m_seman.RemoveStatusEffect(Player.s_statusEffectWet, false);
				((Character)__instance).m_seman.RemoveStatusEffect(Player.s_statusEffectCold, false);
				((Character)__instance).m_seman.RemoveStatusEffect(Player.s_statusEffectFreezing, false);
			}
		}
	}
}
public enum TeleportChange
{
	Disabled,
	InstantlyUpdateWeather,
	InstantlyUpdateWeatherAndClearWetAndColdDebuff
}
internal static class TeleportHelper
{
	internal static float oldWetTransitionDuration = float.Epsilon;

	internal static float oldTransitionDuration = float.Epsilon;

	internal static float oldWindTransitionDuration = float.Epsilon;

	internal static void ResetTransition(ref float transitionDuration, ref float preTeleportDuration, float defaultValue)
	{
		if (transitionDuration == float.Epsilon)
		{
			if (preTeleportDuration != float.Epsilon)
			{
				transitionDuration = preTeleportDuration;
				preTeleportDuration = float.Epsilon;
			}
			else
			{
				transitionDuration = defaultValue;
			}
		}
	}

	internal static void RemoveAndBackupTransition(ref float transitionDuration, ref float backup)
	{
		if (transitionDuration != float.Epsilon)
		{
			backup = transitionDuration;
			transitionDuration = float.Epsilon;
		}
	}
}