Decompiled source of Valheim Legends Fork v0.7.10

plugins\ValheimLegends.dll

Decompiled 5 days 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.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("ValheimLegendsFork")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ValheimLegendsFork")]
[assembly: AssemblyCopyright("Copyright ©  2021")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("f0baf009-4135-4368-9987-850698809493")]
[assembly: AssemblyFileVersion("0.7.4.0")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.7.4.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[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 ValheimLegends
{
	public class AnimationClipOverrides : List<KeyValuePair<AnimationClip, AnimationClip>>
	{
		public AnimationClip this[string name]
		{
			get
			{
				return Find((KeyValuePair<AnimationClip, AnimationClip> x) => ((Object)x.Key).name == name).Value;
			}
			set
			{
				int num = FindIndex((KeyValuePair<AnimationClip, AnimationClip> x) => ((Object)x.Key).name == name);
				if (num != -1)
				{
					base[num] = new KeyValuePair<AnimationClip, AnimationClip>(base[num].Key, value);
				}
			}
		}

		public AnimationClipOverrides(int capacity)
			: base(capacity)
		{
		}
	}
	public class Class_Berserker
	{
		public static float execute_damagebonus = 1.5f;

		public static float execute_damagebonus_scaling = 0.015f;

		public static float execute_staggerbonus = 1.5f;

		public static float execute_staggerbonus_scaling = 0.01f;

		public static float execute_charges_base = 3f;

		public static float execute_charges_scaling = 0.04f;

		public static float berserk_speedbonus_base = 1.2f;

		public static float berserk_speedbonus_scaling = 0.006f;

		public static float berserk_damagebonus_base = 1.2f;

		public static float berserk_damagebonus_scaling = 0.006f;

		public static float berserk_healthabsorb_base = 0.2f;

		public static float berserk_healthabsorb_scaling = 0.002f;

		private static int Script_Layermask = LayerMask.GetMask(new string[7] { "Default", "static_solid", "Default_small", "piece_nonsolid", "vehicle", "viewblock", "piece" });

		private static int Player_Layermask = LayerMask.GetMask(new string[6] { "Default", "static_solid", "Default_small", "piece_nonsolid", "terrain", "vehicle" });

		private static GameObject GO_CastFX;

		public static void Execute_Dash(Player player, ref float altitude, ref Rigidbody playerBody)
		{
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_0111: Unknown result type (might be due to invalid IL or missing references)
			//IL_011d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			//IL_012e: 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_013b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0143: Unknown result type (might be due to invalid IL or missing references)
			//IL_0148: Unknown result type (might be due to invalid IL or missing references)
			//IL_0172: Unknown result type (might be due to invalid IL or missing references)
			//IL_051e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0532: Unknown result type (might be due to invalid IL or missing references)
			//IL_0534: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_04fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0189: Unknown result type (might be due to invalid IL or missing references)
			//IL_0194: Unknown result type (might be due to invalid IL or missing references)
			//IL_0199: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0256: Unknown result type (might be due to invalid IL or missing references)
			//IL_0261: Unknown result type (might be due to invalid IL or missing references)
			//IL_0266: Unknown result type (might be due to invalid IL or missing references)
			//IL_026d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0272: Unknown result type (might be due to invalid IL or missing references)
			//IL_027a: 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_0288: 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_0510: Unknown result type (might be due to invalid IL or missing references)
			//IL_0209: Unknown result type (might be due to invalid IL or missing references)
			//IL_0210: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0239: Unknown result type (might be due to invalid IL or missing references)
			//IL_023e: Unknown result type (might be due to invalid IL or missing references)
			//IL_032c: Unknown result type (might be due to invalid IL or missing references)
			//IL_032e: Unknown result type (might be due to invalid IL or missing references)
			//IL_033b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0342: Unknown result type (might be due to invalid IL or missing references)
			//IL_0349: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02db: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_030b: Unknown result type (might be due to invalid IL or missing references)
			//IL_030d: Unknown result type (might be due to invalid IL or missing references)
			//IL_036f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0376: Expected O, but got Unknown
			//IL_037e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0383: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03de: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0498: Unknown result type (might be due to invalid IL or missing references)
			//IL_049d: Unknown result type (might be due to invalid IL or missing references)
			Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("sfx_perfectblock"), ((Component)player).transform.position, Quaternion.identity);
			Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("vfx_stonegolem_attack_hit"), ((Component)player).transform.position, Quaternion.identity);
			float level = ((IEnumerable<Skill>)((Character)player).GetSkills().GetSkillList()).FirstOrDefault((Func<Skill, bool>)((Skill x) => x.m_info == ValheimLegends.DisciplineSkillDef)).m_level;
			float num = 0.6f + level * 0.005f * VL_GlobalConfigs.g_DamageModifer * VL_GlobalConfigs.c_berserkerDash;
			if (((Character)player).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("SE_VL_Berserk")) || ((Character)player).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("SE_VL_Execute")))
			{
				SE_Berserk sE_Berserk = (SE_Berserk)(object)((Character)player).GetSEMan().GetStatusEffect(StringExtensionMethods.GetStableHashCode("SE_VL_Berserk"));
				if ((Object)(object)sE_Berserk != (Object)null)
				{
					num *= sE_Berserk.damageModifier;
				}
			}
			Vector3 lookDir = ((Character)player).GetLookDir();
			lookDir.y = 0f;
			((Component)player).transform.rotation = Quaternion.LookRotation(lookDir);
			Vector3 val = default(Vector3);
			Vector3 forward = ((Component)player).transform.forward;
			Vector3 position = ((Component)player).transform.position;
			Vector3 val2 = ((Component)player).transform.position;
			val2.y += 0.1f;
			List<int> list = new List<int>();
			float num2 = 1f;
			int num3;
			for (num3 = 0; num3 <= 10; num3++)
			{
				RaycastHit val3 = default(RaycastHit);
				bool flag = false;
				for (int num4 = 0; num4 <= 10; num4++)
				{
					Vector3 val4 = Vector3.MoveTowards(((Component)player).transform.position, ((Component)player).transform.position + forward * 100f, (float)num3 + (float)num4 * 0.1f);
					val4.y = val2.y;
					if (val4.y < ZoneSystem.instance.GetGroundHeight(val4))
					{
						val2.y = ZoneSystem.instance.GetGroundHeight(val4) + 1f;
						val4.y = val2.y;
					}
					flag = Physics.SphereCast(val4, 0.05f, forward, ref val3, float.PositiveInfinity, Script_Layermask);
					if (flag && Object.op_Implicit((Object)(object)((RaycastHit)(ref val3)).collider))
					{
						val = ((RaycastHit)(ref val3)).point;
						break;
					}
				}
				position = Vector3.MoveTowards(((Component)player).transform.position, ((Component)player).transform.position + forward * 100f, (float)num3);
				position.y = ((ZoneSystem.instance.GetSolidHeight(position) - ZoneSystem.instance.GetGroundHeight(position) <= 1f) ? ZoneSystem.instance.GetSolidHeight(position) : ZoneSystem.instance.GetGroundHeight(position));
				if (flag && Vector3.Distance(new Vector3(position.x, val2.y, position.z), val) <= 1f)
				{
					val2 = Vector3.MoveTowards(val, val2, 1f);
					Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("vfx_beehive_hit"), val2, Quaternion.identity);
					break;
				}
				Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("vfx_beehive_hit"), val2, Quaternion.identity);
				((Vector3)(ref val2))..ctor(position.x, val2.y, position.z);
				foreach (Character allCharacter in Character.GetAllCharacters())
				{
					HitData val5 = new HitData();
					val5.m_damage = ((Humanoid)player).GetCurrentWeapon().GetDamage();
					val5.ApplyModifier(Random.Range(0.8f, 1.2f) * num / num2);
					val5.m_point = allCharacter.GetCenterPoint();
					val5.m_dir = ((Component)allCharacter).transform.position - position;
					val5.m_skill = ValheimLegends.DisciplineSkill;
					float num5 = Vector3.Distance(((Component)allCharacter).transform.position, position);
					if (!BaseAI.IsEnemy(allCharacter, (Character)(object)player) || !(num5 <= 3f) || list.Contains(((Object)allCharacter).GetInstanceID()))
					{
						continue;
					}
					SE_Execute sE_Execute = (SE_Execute)(object)((Character)player).GetSEMan().GetStatusEffect(StringExtensionMethods.GetStableHashCode("SE_VL_Execute"));
					if ((Object)(object)sE_Execute != (Object)null)
					{
						val5.ApplyModifier(sE_Execute.damageBonus);
						sE_Execute.hitCount--;
						if (sE_Execute.hitCount <= 0)
						{
							((Character)player).GetSEMan().RemoveStatusEffect((StatusEffect)(object)sE_Execute, false);
						}
					}
					num2 += 0.6f;
					allCharacter.Damage(val5);
					Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("fx_crit"), allCharacter.GetCenterPoint(), Quaternion.identity);
					list.Add(((Object)allCharacter).GetInstanceID());
				}
			}
			list.Clear();
			if (num3 > 10 && ZoneSystem.instance.GetSolidHeight(val2) - val2.y <= 2f)
			{
				val2.y = ZoneSystem.instance.GetSolidHeight(val2);
			}
			playerBody.position = val2;
			altitude = 0f;
			((Component)player).transform.rotation = Quaternion.LookRotation(forward);
		}

		public static void Process_Input(Player player, ref float altitude)
		{
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0411: 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_0307: Unknown result type (might be due to invalid IL or missing references)
			//IL_0546: Unknown result type (might be due to invalid IL or missing references)
			new Random();
			if (VL_Utility.Ability3_Input_Down)
			{
				if (!((Character)player).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("SE_VL_Ability3_CD")))
				{
					if (player.GetStamina() > VL_Utility.GetDashCost(player))
					{
						StatusEffect val = (StatusEffect)(object)(SE_Ability3_CD)(object)ScriptableObject.CreateInstance(typeof(SE_Ability3_CD));
						val.m_ttl = VL_Utility.GetDashCooldown(player);
						((Character)player).GetSEMan().AddStatusEffect(val, false, 0, 0f);
						((Character)player).UseStamina(VL_Utility.GetDashCost(player));
						((ZSyncAnimation)typeof(Player).GetField("m_zanim", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(player)).SetTrigger("swing_longsword2");
						Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("vfx_Potion_stamina_medium"), ((Component)player).transform.position, Quaternion.identity);
						ValheimLegends.isChargingDash = true;
						ValheimLegends.dashCounter = 0;
						((Character)player).RaiseSkill(ValheimLegends.DisciplineSkill, VL_Utility.GetDashSkillGain(player));
					}
					else
					{
						((Character)player).Message((MessageType)1, "Not enough stamina for Dash: (" + player.GetStamina().ToString("#.#") + "/" + VL_Utility.GetDashCost(player) + ")", 0, (Sprite)null);
					}
				}
				else
				{
					((Character)player).Message((MessageType)1, "Ability not ready", 0, (Sprite)null);
				}
			}
			else if (VL_Utility.Ability2_Input_Down)
			{
				if (!((Character)player).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("SE_VL_Ability2_CD")))
				{
					if (player.GetStamina() > VL_Utility.GetBerserkCost(player))
					{
						StatusEffect val2 = (StatusEffect)(object)(SE_Ability2_CD)(object)ScriptableObject.CreateInstance(typeof(SE_Ability2_CD));
						val2.m_ttl = VL_Utility.GetBerserkCooldown(player);
						((Character)player).GetSEMan().AddStatusEffect(val2, false, 0, 0f);
						((Character)player).UseStamina(VL_Utility.GetBerserkCost(player));
						ValheimLegends.shouldUseGuardianPower = false;
						player.StartEmote("challenge", true);
						Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("fx_GP_Stone"), ((Character)player).GetCenterPoint(), Quaternion.identity);
						float level = ((IEnumerable<Skill>)((Character)player).GetSkills().GetSkillList()).FirstOrDefault((Func<Skill, bool>)((Skill x) => x.m_info == ValheimLegends.AlterationSkillDef)).m_level;
						SE_Berserk sE_Berserk = (SE_Berserk)(object)ScriptableObject.CreateInstance(typeof(SE_Berserk));
						((StatusEffect)sE_Berserk).m_ttl = SE_Berserk.m_baseTTL;
						sE_Berserk.speedModifier = berserk_speedbonus_base + berserk_speedbonus_scaling * level;
						sE_Berserk.damageModifier = berserk_damagebonus_base + berserk_damagebonus_scaling * level * VL_GlobalConfigs.g_DamageModifer * VL_GlobalConfigs.c_berserkerBerserk;
						sE_Berserk.healthAbsorbPercent = berserk_healthabsorb_base + berserk_healthabsorb_scaling * level;
						((StatusEffect)sE_Berserk).m_tooltip = $"Drains hp per second to boost damage by {(int)((sE_Berserk.damageModifier - 1f) * 100f)}%, speed by {(int)((sE_Berserk.speedModifier - 1f) * 100f)}%.\n*Additionally absorbs {(int)((sE_Berserk.healthAbsorbPercent - 1f) * 100f)}% of damage dealt as stamina";
						((Character)player).GetSEMan().AddStatusEffect((StatusEffect)(object)sE_Berserk, false, 0, 0f);
						((Character)player).RaiseSkill(ValheimLegends.AlterationSkill, VL_Utility.GetBerserkSkillGain(player));
					}
					else
					{
						((Character)player).Message((MessageType)1, "Not enough stamina for Berserk: (" + player.GetStamina().ToString("#.#") + "/" + VL_Utility.GetBerserkCost(player) + ")", 0, (Sprite)null);
					}
				}
				else
				{
					((Character)player).Message((MessageType)1, "Ability not ready", 0, (Sprite)null);
				}
			}
			else
			{
				if (!VL_Utility.Ability1_Input_Down)
				{
					return;
				}
				if (!((Character)player).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("SE_VL_Ability1_CD")))
				{
					if (player.GetStamina() > VL_Utility.GetExecuteCost(player))
					{
						StatusEffect val3 = (StatusEffect)(object)(SE_Ability1_CD)(object)ScriptableObject.CreateInstance(typeof(SE_Ability1_CD));
						val3.m_ttl = VL_Utility.GetExecuteCooldown(player);
						((Character)player).GetSEMan().AddStatusEffect(val3, false, 0, 0f);
						((Character)player).UseStamina(VL_Utility.GetExecuteCost(player));
						player.StartEmote("point", true);
						Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("fx_backstab"), ((Character)player).GetCenterPoint(), Quaternion.identity);
						float level2 = ((IEnumerable<Skill>)((Character)player).GetSkills().GetSkillList()).FirstOrDefault((Func<Skill, bool>)((Skill x) => x.m_info == ValheimLegends.DisciplineSkillDef)).m_level;
						SE_Execute sE_Execute = (SE_Execute)(object)ScriptableObject.CreateInstance(typeof(SE_Execute));
						sE_Execute.hitCount = Mathf.RoundToInt(execute_charges_base + execute_charges_scaling * level2);
						sE_Execute.damageBonus = execute_damagebonus + execute_damagebonus_scaling * level2 * VL_GlobalConfigs.g_DamageModifer * VL_GlobalConfigs.c_berserkerExecute;
						sE_Execute.staggerForce = execute_staggerbonus + execute_staggerbonus_scaling * level2;
						((StatusEffect)sE_Execute).m_tooltip = $"Increases damage of next {sE_Execute.hitCount} hits by {(int)((sE_Execute.damageBonus - 1f) * 100f)}%";
						if (((Character)player).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("SE_VL_Execute")))
						{
							StatusEffect statusEffect = ((Character)player).GetSEMan().GetStatusEffect(StringExtensionMethods.GetStableHashCode("SE_VL_Execute"));
							((Character)player).GetSEMan().RemoveStatusEffect(statusEffect, false);
						}
						((Character)player).GetSEMan().AddStatusEffect((StatusEffect)(object)sE_Execute, false, 0, 0f);
						((Character)player).RaiseSkill(ValheimLegends.DisciplineSkill, VL_Utility.GetExecuteSkillGain(player));
					}
					else
					{
						((Character)player).Message((MessageType)1, "Not enough stamina for Execute: (" + player.GetStamina().ToString("#.#") + "/" + VL_Utility.GetExecuteCost(player) + ")", 0, (Sprite)null);
					}
				}
				else
				{
					((Character)player).Message((MessageType)1, "Ability not ready", 0, (Sprite)null);
				}
			}
		}
	}
	public class Class_Druid
	{
		private static int Script_Layermask = LayerMask.GetMask(new string[11]
		{
			"Default", "static_solid", "Default_small", "piece_nonsolid", "terrain", "vehicle", "piece", "viewblock", "character", "character_net",
			"character_ghost"
		});

		private static GameObject GO_CastFX;

		private static GameObject GO_Root;

		private static Projectile P_Root;

		private static StatusEffect SE_Root;

		private static GameObject GO_RootDefender;

		private static int rootCount;

		private static int rootCountTrigger;

		public static void Process_Input(Player player, float altitude)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_06fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_035a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_0150: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			//IL_015f: Unknown result type (might be due to invalid IL or missing references)
			//IL_073f: Unknown result type (might be due to invalid IL or missing references)
			//IL_074b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0750: Unknown result type (might be due to invalid IL or missing references)
			//IL_0753: Unknown result type (might be due to invalid IL or missing references)
			//IL_0759: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0188: Unknown result type (might be due to invalid IL or missing references)
			//IL_0193: Unknown result type (might be due to invalid IL or missing references)
			//IL_019d: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01de: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_026d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0288: Unknown result type (might be due to invalid IL or missing references)
			//IL_028d: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b6: 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_017c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0181: Unknown result type (might be due to invalid IL or missing references)
			//IL_0788: Unknown result type (might be due to invalid IL or missing references)
			//IL_078b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0795: Unknown result type (might be due to invalid IL or missing references)
			//IL_079a: Unknown result type (might be due to invalid IL or missing references)
			//IL_079f: Unknown result type (might be due to invalid IL or missing references)
			//IL_07a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_07a8: Expected O, but got Unknown
			//IL_07d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_07dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_07e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_07e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_07f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_07fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0801: Unknown result type (might be due to invalid IL or missing references)
			//IL_080b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0832: Unknown result type (might be due to invalid IL or missing references)
			//IL_0781: Unknown result type (might be due to invalid IL or missing references)
			//IL_0884: Unknown result type (might be due to invalid IL or missing references)
			//IL_0889: Unknown result type (might be due to invalid IL or missing references)
			//IL_089d: Unknown result type (might be due to invalid IL or missing references)
			//IL_089f: Unknown result type (might be due to invalid IL or missing references)
			//IL_056a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0574: Unknown result type (might be due to invalid IL or missing references)
			//IL_0579: Unknown result type (might be due to invalid IL or missing references)
			//IL_094d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0971: Unknown result type (might be due to invalid IL or missing references)
			//IL_0976: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_05b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_05bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_05c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_05cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_05db: Unknown result type (might be due to invalid IL or missing references)
			//IL_05e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_05f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_05f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_05fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0602: Unknown result type (might be due to invalid IL or missing references)
			//IL_0607: Unknown result type (might be due to invalid IL or missing references)
			//IL_068e: Unknown result type (might be due to invalid IL or missing references)
			//IL_06a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_06c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_06cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0591: Unknown result type (might be due to invalid IL or missing references)
			//IL_0598: Unknown result type (might be due to invalid IL or missing references)
			//IL_059d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0418: Unknown result type (might be due to invalid IL or missing references)
			//IL_0424: Unknown result type (might be due to invalid IL or missing references)
			//IL_0429: 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_0432: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f23: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f28: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f4c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f51: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ffc: Unknown result type (might be due to invalid IL or missing references)
			//IL_09ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_09f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_09fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a01: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a0c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a16: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a1b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a20: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a23: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a2f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a35: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a3f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a44: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a4f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a59: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a63: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a68: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a6d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a70: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a7c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a82: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a8c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a96: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a9b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aa0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aa3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0461: Unknown result type (might be due to invalid IL or missing references)
			//IL_0464: Unknown result type (might be due to invalid IL or missing references)
			//IL_046e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0473: Unknown result type (might be due to invalid IL or missing references)
			//IL_0478: Unknown result type (might be due to invalid IL or missing references)
			//IL_047a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0481: Expected O, but got Unknown
			//IL_04d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_04dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_045a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ab7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0abc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bcb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bd0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b4c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b51: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b96: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b9b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ba8: Unknown result type (might be due to invalid IL or missing references)
			//IL_050c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0518: Unknown result type (might be due to invalid IL or missing references)
			//IL_051d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0527: Unknown result type (might be due to invalid IL or missing references)
			//IL_054e: Unknown result type (might be due to invalid IL or missing references)
			//IL_10b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c65: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c70: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c7a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c7f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c85: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cac: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cb7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cde: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ce3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ce8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ced: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cf0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cf1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0de6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0dc6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0dcb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d91: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d96: Unknown result type (might be due to invalid IL or missing references)
			//IL_0da3: Unknown result type (might be due to invalid IL or missing references)
			new Random();
			Vector3 val = default(Vector3);
			if (VL_Utility.Ability3_Input_Down)
			{
				if (!((Character)player).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("SE_VL_Ability3_CD")))
				{
					ValheimLegends.shouldUseGuardianPower = false;
					if (player.GetStamina() >= VL_Utility.GetRootCost && !ValheimLegends.isChanneling)
					{
						ValheimLegends.isChanneling = true;
						StatusEffect val2 = (StatusEffect)(object)(SE_Ability3_CD)(object)ScriptableObject.CreateInstance(typeof(SE_Ability3_CD));
						val2.m_ttl = VL_Utility.GetRootCooldownTime;
						((Character)player).GetSEMan().AddStatusEffect(val2, false, 0, 0f);
						((Character)player).UseStamina(VL_Utility.GetRootCost);
						ValheimLegends.shouldUseGuardianPower = false;
						((ZSyncAnimation)typeof(Player).GetField("m_zanim", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(Player.m_localPlayer)).SetTrigger("gpower");
						((ZSyncAnimation)typeof(Player).GetField("m_zanim", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(Player.m_localPlayer)).SetSpeed(0.3f);
						float level = ((IEnumerable<Skill>)((Character)player).GetSkills().GetSkillList()).FirstOrDefault((Func<Skill, bool>)((Skill x) => x.m_info == ValheimLegends.ConjurationSkillDef)).m_level;
						rootCount = 0;
						rootCountTrigger = 32 - Mathf.RoundToInt(0.12f * level);
						Vector3 val3 = ((Component)player).transform.right * 2.5f;
						if (Random.Range(0f, 1f) < 0.5f)
						{
							val3 *= -1f;
						}
						val = ((Component)player).transform.position + ((Component)player).transform.up * 3f + ((Character)player).GetLookDir() * 2f + val3;
						GO_Root = Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("gdking_root_projectile"), new Vector3(val.x, val.y, val.z), Quaternion.identity);
						P_Root = GO_Root.GetComponent<Projectile>();
						((Object)P_Root).name = "Root";
						P_Root.m_respawnItemOnHit = false;
						P_Root.m_spawnOnHit = null;
						P_Root.m_ttl = 35f;
						P_Root.m_gravity = 0f;
						P_Root.m_rayRadius = 0.1f;
						Traverse.Create((object)P_Root).Field("m_skill").SetValue((object)ValheimLegends.ConjurationSkill);
						((Component)P_Root).transform.localRotation = Quaternion.LookRotation(((Character)player).GetLookDir());
						GO_Root.transform.localScale = Vector3.one * 1.5f;
						((Character)player).RaiseSkill(ValheimLegends.ConjurationSkill, VL_Utility.GetRootSkillGain);
					}
					else
					{
						((Character)player).Message((MessageType)1, "Not enough stamina to channel Root: (" + player.GetStamina().ToString("#.#") + "/" + VL_Utility.GetRootCost + ")", 0, (Sprite)null);
					}
				}
				else
				{
					((Character)player).Message((MessageType)1, "Ability not ready", 0, (Sprite)null);
				}
			}
			else if (VL_Utility.Ability3_Input_Pressed && player.GetStamina() > VL_Utility.GetRootCostPerUpdate && ValheimLegends.isChanneling && Mathf.Max(0f, altitude - ((Component)player).transform.position.y) <= 2f)
			{
				rootCount++;
				VL_Utility.SetTimer();
				((Character)player).UseStamina(VL_Utility.GetRootCostPerUpdate);
				ValheimLegends.isChanneling = true;
				if (rootCount < rootCountTrigger)
				{
					return;
				}
				((Character)player).RaiseSkill(ValheimLegends.ConjurationSkill, 0.06f);
				float level2 = ((IEnumerable<Skill>)((Character)player).GetSkills().GetSkillList()).FirstOrDefault((Func<Skill, bool>)((Skill x) => x.m_info == ValheimLegends.ConjurationSkillDef)).m_level;
				rootCount = 0;
				if ((Object)(object)GO_Root != (Object)null && (Object)(object)GO_Root.transform != (Object)null)
				{
					RaycastHit val4 = default(RaycastHit);
					Vector3 position = ((Component)player).transform.position;
					Vector3 val5 = ((!Physics.Raycast(((Character)player).GetEyePoint(), ((Character)player).GetLookDir(), ref val4, float.PositiveInfinity, Script_Layermask) || !Object.op_Implicit((Object)(object)((RaycastHit)(ref val4)).collider)) ? (position + ((Character)player).GetLookDir() * 1000f) : ((RaycastHit)(ref val4)).point);
					HitData val6 = new HitData();
					val6.m_damage.m_pierce = Random.Range(10f + 0.6f * level2, 15f + 1.2f * level2) * VL_GlobalConfigs.g_DamageModifer * VL_GlobalConfigs.c_druidVines;
					val6.m_pushForce = 2f;
					Vector3 val7 = Vector3.MoveTowards(GO_Root.transform.position, val5, 1f);
					if ((Object)(object)P_Root != (Object)null && ((Object)P_Root).name == "Root")
					{
						P_Root.Setup((Character)(object)player, (val7 - GO_Root.transform.position) * 75f, -1f, val6, (ItemData)null, (ItemData)null);
						Traverse.Create((object)P_Root).Field("m_skill").SetValue((object)ValheimLegends.ConjurationSkill);
					}
				}
				GO_Root = null;
				Vector3 val8 = ((Component)player).transform.right * 2.5f;
				if (Random.Range(0f, 1f) < 0.5f)
				{
					val8 *= -1f;
				}
				val = ((Component)player).transform.position + ((Component)player).transform.up * 3f + ((Character)player).GetLookDir() * 2f + val8;
				GO_Root = Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("gdking_root_projectile"), new Vector3(val.x, val.y, val.z), Quaternion.identity);
				P_Root = GO_Root.GetComponent<Projectile>();
				((Object)P_Root).name = "Root";
				P_Root.m_respawnItemOnHit = false;
				P_Root.m_spawnOnHit = null;
				P_Root.m_ttl = rootCountTrigger + 1;
				P_Root.m_gravity = 0f;
				P_Root.m_rayRadius = 0.1f;
				Traverse.Create((object)P_Root).Field("m_skill").SetValue((object)ValheimLegends.ConjurationSkill);
				((Component)P_Root).transform.localRotation = Quaternion.LookRotation(((Character)player).GetLookDir());
				GO_Root.transform.localScale = Vector3.one * 1.5f;
			}
			else if (((VL_Utility.Ability3_Input_Up || player.GetStamina() <= VL_Utility.GetRootCostPerUpdate) && ValheimLegends.isChanneling) || Mathf.Max(0f, altitude - ((Component)player).transform.position.y) > 2f)
			{
				if ((Object)(object)GO_Root != (Object)null && (Object)(object)GO_Root.transform != (Object)null)
				{
					RaycastHit val9 = default(RaycastHit);
					Vector3 position2 = ((Component)player).transform.position;
					Vector3 val10 = ((!Physics.Raycast(((Character)player).GetEyePoint(), ((Character)player).GetLookDir(), ref val9, float.PositiveInfinity, Script_Layermask) || !Object.op_Implicit((Object)(object)((RaycastHit)(ref val9)).collider)) ? (position2 + ((Character)player).GetLookDir() * 1000f) : ((RaycastHit)(ref val9)).point);
					HitData val11 = new HitData();
					val11.m_damage.m_pierce = 10f;
					val11.m_pushForce = 10f;
					val11.SetAttacker((Character)(object)player);
					Vector3 val12 = Vector3.MoveTowards(GO_Root.transform.position, val10, 1f);
					P_Root.Setup((Character)(object)player, (val12 - GO_Root.transform.position) * 65f, -1f, val11, (ItemData)null, (ItemData)null);
					Traverse.Create((object)P_Root).Field("m_skill").SetValue((object)ValheimLegends.ConjurationSkill);
				}
				GO_Root = null;
				ValheimLegends.isChanneling = false;
			}
			else if (VL_Utility.Ability2_Input_Down)
			{
				if (!((Character)player).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("SE_VL_Ability2_CD")))
				{
					if (player.GetStamina() >= VL_Utility.GetDefenderCost)
					{
						Vector3 lookDir = ((Character)player).GetLookDir();
						lookDir.y = 0f;
						((Component)player).transform.rotation = Quaternion.LookRotation(lookDir);
						ValheimLegends.shouldUseGuardianPower = false;
						StatusEffect val13 = (StatusEffect)(object)(SE_Ability2_CD)(object)ScriptableObject.CreateInstance(typeof(SE_Ability2_CD));
						val13.m_ttl = VL_Utility.GetDefenderCooldownTime;
						((Character)player).GetSEMan().AddStatusEffect(val13, false, 0, 0f);
						((Character)player).UseStamina(VL_Utility.GetDefenderCost);
						float level3 = ((IEnumerable<Skill>)((Character)player).GetSkills().GetSkillList()).FirstOrDefault((Func<Skill, bool>)((Skill x) => x.m_info == ValheimLegends.ConjurationSkillDef)).m_level;
						ValheimLegends.shouldUseGuardianPower = false;
						((ZSyncAnimation)typeof(Player).GetField("m_zanim", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(Player.m_localPlayer)).SetTrigger("gpower");
						Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("vfx_WishbonePing"), ((Component)player).transform.position, Quaternion.identity);
						GameObject prefab = ZNetScene.instance.GetPrefab("TentaRoot");
						CharacterTimedDestruction component = prefab.GetComponent<CharacterTimedDestruction>();
						if ((Object)(object)component != (Object)null)
						{
							component.m_timeoutMin = 24f + 0.3f * level3;
							component.m_timeoutMax = component.m_timeoutMin;
							component.m_triggerOnAwake = true;
							((Behaviour)component).enabled = true;
						}
						List<Vector3> list = new List<Vector3>();
						list.Clear();
						val = ((Component)player).transform.position + ((Character)player).GetLookDir() * 5f + ((Component)player).transform.right * 5f;
						list.Add(val);
						val = ((Component)player).transform.position + ((Character)player).GetLookDir() * 5f + ((Component)player).transform.right * 5f * -1f;
						list.Add(val);
						val = ((Component)player).transform.position + ((Character)player).GetLookDir() * 5f * -1f;
						list.Add(val);
						for (int num = 0; num < list.Count; num++)
						{
							GO_RootDefender = Object.Instantiate<GameObject>(prefab, list[num], Quaternion.identity);
							Character component2 = GO_RootDefender.GetComponent<Character>();
							if ((Object)(object)component2 != (Object)null)
							{
								SE_RootsBuff sE_RootsBuff = (SE_RootsBuff)(object)ScriptableObject.CreateInstance(typeof(SE_RootsBuff));
								((StatusEffect)sE_RootsBuff).m_ttl = SE_RootsBuff.m_baseTTL;
								sE_RootsBuff.damageModifier = 0.5f + 0.015f * level3 * VL_GlobalConfigs.g_DamageModifer * VL_GlobalConfigs.c_druidDefenders;
								sE_RootsBuff.staminaRegen = 0.5f + 0.05f * level3;
								sE_RootsBuff.summoner = player;
								sE_RootsBuff.centerPoint = ((Component)player).transform.position;
								component2.GetSEMan().AddStatusEffect((StatusEffect)(object)sE_RootsBuff, false, 0, 0f);
								component2.SetMaxHealth(30f + 6f * level3);
								((Component)component2).transform.localScale = (0.75f + 0.005f * level3) * Vector3.one;
								component2.m_faction = (Faction)0;
								component2.SetTamed(true);
							}
							Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("vfx_Potion_stamina_medium"), ((Component)component2).transform.position, Quaternion.identity);
						}
						GameObject prefab2 = ZNetScene.instance.GetPrefab("VL_Deathsquit");
						CharacterTimedDestruction component3 = prefab2.GetComponent<CharacterTimedDestruction>();
						if ((Object)(object)component3 != (Object)null)
						{
							component3.m_timeoutMin = 24f + 0.3f * level3;
							component3.m_timeoutMax = component3.m_timeoutMin;
							component3.m_triggerOnAwake = true;
							((Behaviour)component3).enabled = true;
						}
						int num2 = 2 + Mathf.RoundToInt(0.05f * level3);
						for (int num3 = 0; num3 < num2; num3++)
						{
							val = ((Component)player).transform.position + ((Component)player).transform.up * 4f + (((Character)player).GetLookDir() * Random.Range(0f - (5f + 0.1f * level3), 5f + 0.1f * level3) + ((Component)player).transform.right * Random.Range(0f - (5f + 0.1f * level3), 5f + 0.1f * level3));
							Character component4 = Object.Instantiate<GameObject>(prefab2, val, Quaternion.identity).GetComponent<Character>();
							component4.m_name = "Drusquito";
							if ((Object)(object)component4 != (Object)null)
							{
								SE_Companion sE_Companion = (SE_Companion)(object)ScriptableObject.CreateInstance(typeof(SE_Companion));
								((StatusEffect)sE_Companion).m_ttl = 60f;
								sE_Companion.damageModifier = 0.05f + 0.0075f * level3 * VL_GlobalConfigs.g_DamageModifer * VL_GlobalConfigs.c_druidDefenders;
								sE_Companion.summoner = player;
								component4.GetSEMan().AddStatusEffect((StatusEffect)(object)sE_Companion, false, 0, 0f);
								((Component)component4).transform.localScale = (0.4f + 0.005f * level3) * Vector3.one;
								component4.m_faction = (Faction)0;
								component4.SetTamed(true);
							}
							Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("fx_float_hitwater"), ((Component)component4).transform.position, Quaternion.identity);
						}
						((Character)player).RaiseSkill(ValheimLegends.ConjurationSkill, VL_Utility.GetDefenderSkillGain);
					}
					else
					{
						((Character)player).Message((MessageType)1, "Not enough stamina to summon root defenders: (" + player.GetStamina().ToString("#.#") + "/" + VL_Utility.GetDefenderCost + ")", 0, (Sprite)null);
					}
				}
				else
				{
					((Character)player).Message((MessageType)1, "Ability not ready", 0, (Sprite)null);
				}
			}
			else if (VL_Utility.Ability1_Input_Down)
			{
				if (!((Character)player).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("SE_VL_Ability1_CD")))
				{
					if (player.GetStamina() >= VL_Utility.GetRegenerationCost)
					{
						StatusEffect val14 = (StatusEffect)(object)(SE_Ability1_CD)(object)ScriptableObject.CreateInstance(typeof(SE_Ability1_CD));
						val14.m_ttl = VL_Utility.GetRegenerationCooldownTime;
						((Character)player).GetSEMan().AddStatusEffect(val14, false, 0, 0f);
						((Character)player).UseStamina(VL_Utility.GetRegenerationCost);
						float level4 = ((IEnumerable<Skill>)((Character)player).GetSkills().GetSkillList()).FirstOrDefault((Func<Skill, bool>)((Skill x) => x.m_info == ValheimLegends.AlterationSkillDef)).m_level;
						player.StartEmote("cheer", true);
						GO_CastFX = Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("fx_guardstone_permitted_add"), ((Character)player).GetCenterPoint(), Quaternion.identity);
						GO_CastFX = Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("vfx_WishbonePing"), ((Component)player).transform.position, Quaternion.identity);
						SE_Regeneration sE_Regeneration = (SE_Regeneration)(object)ScriptableObject.CreateInstance(typeof(SE_Regeneration));
						((StatusEffect)sE_Regeneration).m_ttl = SE_Regeneration.m_baseTTL;
						((StatusEffect)sE_Regeneration).m_icon = ZNetScene.instance.GetPrefab("TrophyGreydwarfShaman").GetComponent<ItemDrop>().m_itemData.GetIcon();
						sE_Regeneration.m_HealAmount = 0.5f + 0.4f * level4 * VL_GlobalConfigs.g_DamageModifer * VL_GlobalConfigs.c_druidRegen;
						sE_Regeneration.doOnce = false;
						((StatusEffect)sE_Regeneration).m_tooltip = $"Regenerating {sE_Regeneration.m_HealAmount} hp every second";
						List<Character> list2 = new List<Character>();
						list2.Clear();
						Character.GetCharactersInRange(((Character)player).GetCenterPoint(), 30f + 0.2f * level4, list2);
						foreach (Character item in list2)
						{
							if (!BaseAI.IsEnemy((Character)(object)player, item))
							{
								if ((Object)(object)item == (Object)(object)Player.m_localPlayer)
								{
									item.GetSEMan().AddStatusEffect((StatusEffect)(object)sE_Regeneration, true, 0, 0f);
								}
								else if (item.IsPlayer())
								{
									item.GetSEMan().AddStatusEffect(StringExtensionMethods.GetStableHashCode(((Object)sE_Regeneration).name), true, 0, 0f);
								}
								else
								{
									item.GetSEMan().AddStatusEffect((StatusEffect)(object)sE_Regeneration, true, 0, 0f);
								}
							}
						}
						((Character)player).RaiseSkill(ValheimLegends.AlterationSkill, VL_Utility.GetRegenerationSkillGain);
					}
					else
					{
						((Character)player).Message((MessageType)1, "Not enough stamina for Regeneration: (" + player.GetStamina().ToString("#.#") + "/" + VL_Utility.GetRegenerationCost + ")", 0, (Sprite)null);
					}
				}
				else
				{
					((Character)player).Message((MessageType)1, "Ability not ready", 0, (Sprite)null);
				}
			}
			else
			{
				ValheimLegends.isChanneling = false;
			}
		}
	}
	public class Class_Duelist
	{
		private static int ScriptChar_Layermask = LayerMask.GetMask(new string[11]
		{
			"Default", "static_solid", "Default_small", "piece_nonsolid", "terrain", "vehicle", "piece", "viewblock", "character", "character_net",
			"character_ghost"
		});

		private static GameObject GO_CastFX;

		private static GameObject GO_QuickShot;

		private static Projectile P_QuickShot;

		public static float riposte_returnDamageMultiplier_base = 1.5f;

		public static float riposte_returnDamageMultiplier_scaling = 0.01f;

		public static void Execute_Slash(Player player)
		{
			//IL_0010: 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_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: 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_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f6: 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_0106: Unknown result type (might be due to invalid IL or missing references)
			//IL_010c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Expected O, but got Unknown
			//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_0155: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: Unknown result type (might be due to invalid IL or missing references)
			//IL_0173: Unknown result type (might be due to invalid IL or missing references)
			//IL_0178: Unknown result type (might be due to invalid IL or missing references)
			//IL_017d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0184: Unknown result type (might be due to invalid IL or missing references)
			//IL_0189: Unknown result type (might be due to invalid IL or missing references)
			Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("fx_VL_BlinkStrike"), ((Character)player).GetCenterPoint() + ((Character)player).GetLookDir() * 3f, Quaternion.LookRotation(((Character)player).GetLookDir()));
			float level = ((IEnumerable<Skill>)((Character)player).GetSkills().GetSkillList()).FirstOrDefault((Func<Skill, bool>)((Skill x) => x.m_info == ValheimLegends.DisciplineSkillDef)).m_level;
			float num = 0.8f + level * 0.006f * VL_GlobalConfigs.g_DamageModifer * VL_GlobalConfigs.c_duelistSeismicSlash;
			Vector3 val = ((Character)player).GetEyePoint() + ((Character)player).GetLookDir() * 6f;
			List<Character> list = new List<Character>();
			list.Clear();
			Character.GetCharactersInRange(val, 6f, list);
			foreach (Character item in list)
			{
				if (BaseAI.IsEnemy((Character)(object)player, item) && VL_Utility.LOS_IsValid(item, val, val))
				{
					_ = ((Component)item).transform.position - ((Component)player).transform.position;
					HitData val2 = new HitData();
					val2.m_damage = ((Humanoid)player).GetCurrentWeapon().GetDamage();
					val2.ApplyModifier(Random.Range(0.8f, 1.2f) * num);
					val2.m_pushForce = 25f + 0.1f * level;
					val2.m_point = item.GetEyePoint();
					val2.m_dir = ((Component)player).transform.position - ((Component)item).transform.position;
					val2.m_skill = ValheimLegends.DisciplineSkill;
					item.Damage(val2);
				}
			}
		}

		public static void Process_Input(Player player)
		{
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_020a: Unknown result type (might be due to invalid IL or missing references)
			//IL_020f: 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_03d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0400: Unknown result type (might be due to invalid IL or missing references)
			//IL_0415: Unknown result type (might be due to invalid IL or missing references)
			//IL_0420: 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_042f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0435: Unknown result type (might be due to invalid IL or missing references)
			//IL_043f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0444: Unknown result type (might be due to invalid IL or missing references)
			//IL_0449: Unknown result type (might be due to invalid IL or missing references)
			//IL_045a: Unknown result type (might be due to invalid IL or missing references)
			//IL_045d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0462: Unknown result type (might be due to invalid IL or missing references)
			//IL_0480: Unknown result type (might be due to invalid IL or missing references)
			//IL_0482: Unknown result type (might be due to invalid IL or missing references)
			//IL_050c: Unknown result type (might be due to invalid IL or missing references)
			//IL_050e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0513: Unknown result type (might be due to invalid IL or missing references)
			//IL_0536: Unknown result type (might be due to invalid IL or missing references)
			//IL_0542: Unknown result type (might be due to invalid IL or missing references)
			//IL_0549: Unknown result type (might be due to invalid IL or missing references)
			//IL_054f: Unknown result type (might be due to invalid IL or missing references)
			//IL_057f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0585: Unknown result type (might be due to invalid IL or missing references)
			//IL_058f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0594: Unknown result type (might be due to invalid IL or missing references)
			//IL_0599: Unknown result type (might be due to invalid IL or missing references)
			//IL_059b: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a2: Expected O, but got Unknown
			//IL_05e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_05f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_05f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_05fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0601: Unknown result type (might be due to invalid IL or missing references)
			//IL_0609: Unknown result type (might be due to invalid IL or missing references)
			//IL_0615: Unknown result type (might be due to invalid IL or missing references)
			//IL_061a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0624: Unknown result type (might be due to invalid IL or missing references)
			//IL_064b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0668: Unknown result type (might be due to invalid IL or missing references)
			//IL_0577: Unknown result type (might be due to invalid IL or missing references)
			new Random();
			if (VL_Utility.Ability3_Input_Down)
			{
				if (!((Character)player).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("SE_VL_Ability3_CD")))
				{
					if (player.GetStamina() >= VL_Utility.GetBlinkStrikeCost)
					{
						StatusEffect val = (StatusEffect)(object)(SE_Ability3_CD)(object)ScriptableObject.CreateInstance(typeof(SE_Ability3_CD));
						val.m_ttl = VL_Utility.GetBlinkStrikeCooldownTime;
						((Character)player).GetSEMan().AddStatusEffect(val, false, 0, 0f);
						((Character)player).UseStamina(VL_Utility.GetBlinkStrikeCost);
						((ZSyncAnimation)typeof(Player).GetField("m_zanim", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(player)).SetTrigger("knife_stab1");
						ValheimLegends.isChanneling = true;
						ValheimLegends.isChargingDash = true;
						ValheimLegends.dashCounter = 0;
						((Character)player).RaiseSkill(ValheimLegends.DisciplineSkill, VL_Utility.GetBlinkStrikeSkillGain);
					}
					else
					{
						((Character)player).Message((MessageType)1, "Not enough stamina for S. Slash : (" + player.GetStamina().ToString("#.#") + "/" + VL_Utility.GetBlinkStrikeCost + ")", 0, (Sprite)null);
					}
				}
				else
				{
					((Character)player).Message((MessageType)1, "Ability not ready", 0, (Sprite)null);
				}
			}
			else if (VL_Utility.Ability2_Input_Down)
			{
				if (!((Character)player).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("SE_VL_Ability2_CD")))
				{
					if (player.GetStamina() >= VL_Utility.GetRiposteCost)
					{
						StatusEffect val2 = (StatusEffect)(object)(SE_Ability2_CD)(object)ScriptableObject.CreateInstance(typeof(SE_Ability2_CD));
						val2.m_ttl = VL_Utility.GetRiposteCooldownTime;
						((Character)player).GetSEMan().AddStatusEffect(val2, false, 0, 0f);
						((Character)player).UseStamina(VL_Utility.GetRiposteCost);
						float level = ((IEnumerable<Skill>)((Character)player).GetSkills().GetSkillList()).FirstOrDefault((Func<Skill, bool>)((Skill x) => x.m_info == ValheimLegends.DisciplineSkillDef)).m_level;
						GO_CastFX = Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("sfx_perfectblock"), ((Component)player).transform.position, Quaternion.identity);
						GO_CastFX = Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("fx_backstab"), ((Character)player).GetCenterPoint(), Quaternion.identity);
						SE_Riposte sE_Riposte = (SE_Riposte)(object)ScriptableObject.CreateInstance(typeof(SE_Riposte));
						sE_Riposte.damageMultiplier = riposte_returnDamageMultiplier_base + riposte_returnDamageMultiplier_scaling * level * VL_GlobalConfigs.c_duelistRiposte * VL_GlobalConfigs.g_DamageModifer;
						((StatusEffect)sE_Riposte).m_tooltip = $"Ready to riposte an enemy attack. Parrying an enemy will automatically return {(int)((sE_Riposte.damageMultiplier - 1f) * 100f)}% of the damage blocked while following up with the equipped weapon";
						((Character)player).GetSEMan().AddStatusEffect((StatusEffect)(object)sE_Riposte, false, 0, 0f);
						((Character)player).RaiseSkill(ValheimLegends.DisciplineSkill, VL_Utility.GetRiposteSkillGain);
					}
					else
					{
						((Character)player).Message((MessageType)1, "Not enough stamina for Riposte: (" + player.GetStamina().ToString("#.#") + "/" + VL_Utility.GetRiposteCost + ")", 0, (Sprite)null);
					}
				}
				else
				{
					((Character)player).Message((MessageType)1, "Ability not ready", 0, (Sprite)null);
				}
			}
			else if (VL_Utility.Ability1_Input_Down)
			{
				if (!((Character)player).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("SE_VL_Ability1_CD")))
				{
					if (player.GetStamina() >= VL_Utility.GetQuickShotCost)
					{
						float level2 = ((IEnumerable<Skill>)((Character)player).GetSkills().GetSkillList()).FirstOrDefault((Func<Skill, bool>)((Skill x) => x.m_info == ValheimLegends.DisciplineSkillDef)).m_level;
						StatusEffect val3 = (StatusEffect)(object)(SE_Ability1_CD)(object)ScriptableObject.CreateInstance(typeof(SE_Ability1_CD));
						val3.m_ttl = VL_Utility.GetQuickShotCooldownTime;
						((Character)player).GetSEMan().AddStatusEffect(val3, false, 0, 0f);
						((Character)player).UseStamina(VL_Utility.GetQuickShotCost + 0.5f * level2);
						((ZSyncAnimation)typeof(Player).GetField("m_zanim", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(player)).SetTrigger("interact");
						GO_CastFX = Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("sfx_smelter_add"), ((Component)player).transform.position, Quaternion.identity);
						Vector3 val4 = ((Component)player).transform.position + ((Component)player).transform.up * 1.2f + ((Character)player).GetLookDir() * 0.5f;
						GO_CastFX = Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("fx_VL_QuickShot"), val4, Quaternion.LookRotation(((Character)player).GetLookDir()));
						GO_QuickShot = Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("Greydwarf_throw_projectile"), val4, Quaternion.identity);
						P_QuickShot = GO_QuickShot.GetComponent<Projectile>();
						((Object)P_QuickShot).name = "QuickShot";
						P_QuickShot.m_respawnItemOnHit = false;
						P_QuickShot.m_spawnOnHit = null;
						P_QuickShot.m_ttl = 10f;
						P_QuickShot.m_gravity = 1.2f;
						P_QuickShot.m_rayRadius = 0.05f;
						P_QuickShot.m_hitNoise = 20f;
						((Component)P_QuickShot).transform.localRotation = Quaternion.LookRotation(((Humanoid)player).GetAimDir(val4));
						GO_QuickShot.transform.localScale = new Vector3(0.6f, 0.6f, 0.6f);
						RaycastHit val5 = default(RaycastHit);
						Vector3 val6 = ((!Physics.Raycast(((Character)player).GetEyePoint(), ((Character)player).GetLookDir(), ref val5, float.PositiveInfinity, ScriptChar_Layermask) || !Object.op_Implicit((Object)(object)((RaycastHit)(ref val5)).collider)) ? (((Character)player).GetEyePoint() + ((Character)player).GetLookDir() * 1000f) : ((RaycastHit)(ref val5)).point);
						HitData val7 = new HitData();
						val7.m_damage.m_pierce = Random.Range(5f + 1f * level2, 30f + 1f * level2) * VL_GlobalConfigs.g_DamageModifer * VL_GlobalConfigs.c_duelistHipShot;
						val7.m_pushForce = 1f;
						val7.m_skill = ValheimLegends.DisciplineSkill;
						Vector3 val8 = Vector3.MoveTowards(val4, val6, 1f);
						P_QuickShot.Setup((Character)(object)player, (val8 - GO_QuickShot.transform.position) * 100f, -1f, val7, (ItemData)null, (ItemData)null);
						Traverse.Create((object)P_QuickShot).Field("m_skill").SetValue((object)ValheimLegends.DisciplineSkill);
						GO_QuickShot = null;
						VL_Utility.RotatePlayerToTarget(player);
						((Character)player).RaiseSkill(ValheimLegends.DisciplineSkill, VL_Utility.GetQuickShotSkillGain);
					}
					else
					{
						((Character)player).Message((MessageType)1, "Not enough stamina to for Hip Shot: (" + player.GetStamina().ToString("#.#") + "/" + VL_Utility.GetQuickShotCost + ")", 0, (Sprite)null);
					}
				}
				else
				{
					((Character)player).Message((MessageType)1, "Ability not ready", 0, (Sprite)null);
				}
			}
			else
			{
				ValheimLegends.isChanneling = false;
			}
		}
	}
	public class Class_Enchanter
	{
		public enum EnchanterAttackType
		{
			Charm = 10,
			Shock = 8,
			None = 0
		}

		private static int Script_Layermask = LayerMask.GetMask(new string[8] { "Default", "static_solid", "Default_small", "piece_nonsolid", "terrain", "vehicle", "piece", "viewblock" });

		private static int ScriptChar_Layermask = LayerMask.GetMask(new string[14]
		{
			"Default", "static_solid", "Default_small", "piece_nonsolid", "piece", "terrain", "vehicle", "viewblock", "character", "character_noenv",
			"character_trigger", "character_net", "character_ghost", "Water"
		});

		private static bool zonechargeCharging = false;

		private static float zonechargeCount;

		private static int zonechargeChargeAmount;

		private static int zonechargeChargeAmountMax;

		private static float zonechargeSkillGain = 0f;

		public static EnchanterAttackType QueuedAttack;

		public static StatusEffect HasZoneBuffTime(Player p)
		{
			foreach (StatusEffect statusEffect in ((Character)p).GetSEMan().GetStatusEffects())
			{
				if (statusEffect.m_name.StartsWith("VL_Biome"))
				{
					return statusEffect;
				}
			}
			return null;
		}

		public static void Execute_Attack(Player player, ref Rigidbody playerBody, ref float altitude)
		{
			//IL_0042: 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_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: 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_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: 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_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_010c: Unknown result type (might be due to invalid IL or missing references)
			//IL_010d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: 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_012e: Unknown result type (might be due to invalid IL or missing references)
			//IL_013a: 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_0141: Unknown result type (might be due to invalid IL or missing references)
			//IL_0143: Unknown result type (might be due to invalid IL or missing references)
			//IL_0233: Unknown result type (might be due to invalid IL or missing references)
			//IL_0239: Unknown result type (might be due to invalid IL or missing references)
			//IL_0243: Unknown result type (might be due to invalid IL or missing references)
			//IL_0248: Unknown result type (might be due to invalid IL or missing references)
			//IL_0253: Unknown result type (might be due to invalid IL or missing references)
			//IL_025d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0262: Unknown result type (might be due to invalid IL or missing references)
			//IL_0268: Unknown result type (might be due to invalid IL or missing references)
			//IL_026d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0172: Unknown result type (might be due to invalid IL or missing references)
			//IL_0175: Unknown result type (might be due to invalid IL or missing references)
			//IL_017f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0184: Unknown result type (might be due to invalid IL or missing references)
			//IL_02af: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0189: Unknown result type (might be due to invalid IL or missing references)
			//IL_018b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0192: Expected O, but got Unknown
			//IL_0194: Unknown result type (might be due to invalid IL or missing references)
			//IL_0199: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_016b: Unknown result type (might be due to invalid IL or missing references)
			//IL_030d: Unknown result type (might be due to invalid IL or missing references)
			//IL_030f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0322: Unknown result type (might be due to invalid IL or missing references)
			//IL_032d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0332: 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_0339: Unknown result type (might be due to invalid IL or missing references)
			//IL_0340: Expected O, but got Unknown
			//IL_0391: Unknown result type (might be due to invalid IL or missing references)
			//IL_0396: 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_039f: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bd: Unknown result type (might be due to invalid IL or missing references)
			if (QueuedAttack == EnchanterAttackType.Charm)
			{
				float level = ((IEnumerable<Skill>)((Character)player).GetSkills().GetSkillList()).FirstOrDefault((Func<Skill, bool>)((Skill x) => x.m_info == ValheimLegends.AlterationSkillDef)).m_level;
				Vector3 val = ((Character)player).GetEyePoint() + ((Component)player).transform.up * 0.1f + ((Character)player).GetLookDir() * 0.5f + ((Component)player).transform.right * 0.25f;
				GameObject val2 = Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("VL_Charm"), val, Quaternion.identity);
				Projectile component = val2.GetComponent<Projectile>();
				((Object)component).name = "VL_Charm";
				component.m_respawnItemOnHit = false;
				component.m_spawnOnHit = null;
				component.m_ttl = 30f * VL_GlobalConfigs.c_enchanterCharm;
				component.m_gravity = 0f;
				component.m_rayRadius = 0.01f;
				component.m_aoe = 1f + 0.01f * level;
				((Component)component).transform.localRotation = Quaternion.LookRotation(((Humanoid)player).GetAimDir(val));
				val2.transform.localScale = Vector3.zero;
				RaycastHit val3 = default(RaycastHit);
				Vector3 position = ((Component)player).transform.position;
				Vector3 val4 = ((!Physics.Raycast(val, ((Character)player).GetLookDir(), ref val3, 1000f, ScriptChar_Layermask) || !Object.op_Implicit((Object)(object)((RaycastHit)(ref val3)).collider)) ? (position + ((Character)player).GetLookDir() * 1000f) : ((RaycastHit)(ref val3)).point);
				HitData val5 = new HitData();
				val5.m_skill = ValheimLegends.AlterationSkill;
				Vector3 val6 = Vector3.MoveTowards(val2.transform.position, val4, 1f);
				component.Setup((Character)(object)player, (val6 - val2.transform.position) * 40f, -1f, val5, (ItemData)null, (ItemData)null);
				Traverse.Create((object)component).Field("m_skill").SetValue((object)ValheimLegends.AlterationSkill);
			}
			else
			{
				if (QueuedAttack != EnchanterAttackType.Shock)
				{
					return;
				}
				StatusEffect val7 = HasZoneBuffTime(player);
				if (!((Object)(object)val7 != (Object)null))
				{
					return;
				}
				Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("fx_VL_Shock"), ((Character)player).GetEyePoint() + ((Character)player).GetLookDir() * 2.5f + ((Component)player).transform.right * 0.25f, Quaternion.LookRotation(((Character)player).GetLookDir()));
				float level2 = ((IEnumerable<Skill>)((Character)player).GetSkills().GetSkillList()).FirstOrDefault((Func<Skill, bool>)((Skill x) => x.m_info == ValheimLegends.AlterationSkillDef)).m_level;
				Vector3 val8 = ((Character)player).GetEyePoint() + ((Character)player).GetLookDir() * 4f;
				List<Character> list = new List<Character>();
				list.Clear();
				Character.GetCharactersInRange(val8, 4f, list);
				foreach (Character item in list)
				{
					if (BaseAI.IsEnemy((Character)(object)player, item) && VL_Utility.LOS_IsValid(item, val8, val8))
					{
						Vector3 dir = ((Component)item).transform.position - ((Component)player).transform.position;
						HitData val9 = new HitData();
						val9.m_damage.m_lightning = 15f + level2 + val7.m_ttl * Random.Range(0.03f, 0.06f) * (1f + 0.1f * level2) * VL_GlobalConfigs.c_enchanterBiomeShock;
						val9.m_pushForce = 0f;
						val9.m_point = item.GetEyePoint();
						val9.m_dir = dir;
						val9.m_skill = ValheimLegends.AlterationSkill;
						item.Damage(val9);
						item.Stagger(val9.m_dir);
					}
				}
				if (((Object)val7).name == "SE_VL_BiomeSwamp")
				{
					SE_BiomeSwamp sE_BiomeSwamp = val7 as SE_BiomeSwamp;
					if ((Object)(object)sE_BiomeSwamp.biomeLight != (Object)null)
					{
						Object.Destroy((Object)(object)sE_BiomeSwamp.biomeLight);
					}
				}
				((Character)player).GetSEMan().RemoveStatusEffect(val7, false);
			}
		}

		public static void Process_Input(Player player, ref float altitude)
		{
			//IL_0240: Unknown result type (might be due to invalid IL or missing references)
			//IL_0316: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_038f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0394: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f0: Invalid comparison between Unknown and I4
			//IL_0d6d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d83: Unknown result type (might be due to invalid IL or missing references)
			//IL_050a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0510: Invalid comparison between Unknown and I4
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			//IL_0158: Unknown result type (might be due to invalid IL or missing references)
			//IL_061e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0624: Invalid comparison between Unknown and I4
			//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ed2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ee3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0eef: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ef4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ef7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0efd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0738: Unknown result type (might be due to invalid IL or missing references)
			//IL_073e: Invalid comparison between Unknown and I4
			//IL_0f2c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f2f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f39: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f3e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0867: Unknown result type (might be due to invalid IL or missing references)
			//IL_086e: Invalid comparison between Unknown and I4
			//IL_0f43: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f54: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f56: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f25: Unknown result type (might be due to invalid IL or missing references)
			//IL_096d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0977: Invalid comparison between Unknown and I4
			//IL_0cae: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a76: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a80: Invalid comparison between Unknown and I4
			//IL_0f7b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f86: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f9a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f9f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fa4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b7f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b86: Invalid comparison between Unknown and I4
			//IL_04da: Unknown result type (might be due to invalid IL or missing references)
			//IL_04df: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_05f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0708: Unknown result type (might be due to invalid IL or missing references)
			//IL_070d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0837: Unknown result type (might be due to invalid IL or missing references)
			//IL_083c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1052: Unknown result type (might be due to invalid IL or missing references)
			//IL_1057: Unknown result type (might be due to invalid IL or missing references)
			//IL_1059: Unknown result type (might be due to invalid IL or missing references)
			//IL_105e: Unknown result type (might be due to invalid IL or missing references)
			//IL_10d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_093d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0942: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a46: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a4b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b4f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b54: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c55: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c5a: Unknown result type (might be due to invalid IL or missing references)
			if (VL_Utility.Ability3_Input_Down && !zonechargeCharging)
			{
				StatusEffect val = HasZoneBuffTime(player);
				if ((Object)(object)val != (Object)null && val.m_ttl > 0f && QueuedAttack != EnchanterAttackType.Shock)
				{
					QueuedAttack = EnchanterAttackType.Shock;
					ValheimLegends.isChargingDash = true;
					ValheimLegends.dashCounter = 0;
					VL_Utility.RotatePlayerToTarget(player);
					((ZSyncAnimation)typeof(Player).GetField("m_zanim", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(player)).SetTrigger("unarmed_attack0");
				}
				else if (!((Character)player).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("SE_VL_Ability3_CD")) && !zonechargeCharging)
				{
					if (player.GetStamina() >= VL_Utility.GetZoneChargeCost)
					{
						float level = ((IEnumerable<Skill>)((Character)player).GetSkills().GetSkillList()).FirstOrDefault((Func<Skill, bool>)((Skill x) => x.m_info == ValheimLegends.AbjurationSkillDef)).m_level;
						player.StartEmote("challenge", true);
						ValheimLegends.isChanneling = true;
						ValheimLegends.shouldUseGuardianPower = false;
						StatusEffect val2 = (StatusEffect)(object)(SE_Ability3_CD)(object)ScriptableObject.CreateInstance(typeof(SE_Ability3_CD));
						val2.m_ttl = VL_Utility.GetZoneChargeCooldownTime;
						((Character)player).GetSEMan().AddStatusEffect(val2, false, 0, 0f);
						((Character)player).UseStamina(VL_Utility.GetZoneChargeCost);
						Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("fx_VL_ParticleTailField"), ((Component)player).transform.position, Quaternion.identity);
						zonechargeCharging = true;
						zonechargeChargeAmount = 0;
						zonechargeChargeAmountMax = Mathf.RoundToInt(15f * (1f - level * 0.005f));
						zonechargeCount = 10f;
						zonechargeSkillGain += VL_Utility.GetZoneChargeSkillGain;
					}
					else
					{
						((Character)player).Message((MessageType)1, "Not enough stamina to begin Zone Charge : (" + player.GetStamina().ToString("#.#") + "/" + VL_Utility.GetZoneChargeCost + ")", 0, (Sprite)null);
					}
				}
				else
				{
					((Character)player).Message((MessageType)1, "Ability not ready", 0, (Sprite)null);
				}
			}
			else if (VL_Utility.Ability3_Input_Pressed && player.GetStamina() > 1f && player.GetStamina() > VL_Utility.GetZoneChargeCostPerUpdate && Mathf.Max(0f, altitude - ((Component)player).transform.position.y) <= 1f && zonechargeCharging && ValheimLegends.isChanneling)
			{
				VL_Utility.SetTimer();
				ValheimLegends.isChanneling = true;
				zonechargeChargeAmount++;
				((Character)player).UseStamina(VL_Utility.GetZoneChargeCostPerUpdate);
				if (zonechargeChargeAmount >= zonechargeChargeAmountMax)
				{
					zonechargeCount += 2f;
					zonechargeChargeAmount = 0;
					Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("fx_VL_ParticleTailField"), ((Component)player).transform.position, Quaternion.identity);
					zonechargeSkillGain += 0.2f;
				}
			}
			else if ((VL_Utility.Ability3_Input_Up || player.GetStamina() <= 1f || player.GetStamina() <= VL_Utility.GetZoneChargeCostPerUpdate || Mathf.Max(0f, altitude - ((Component)player).transform.position.y) >= 1f) && zonechargeCharging && ValheimLegends.isChanneling)
			{
				float level2 = ((IEnumerable<Skill>)((Character)player).GetSkills().GetSkillList()).FirstOrDefault((Func<Skill, bool>)((Skill x) => x.m_info == ValheimLegends.AbjurationSkillDef)).m_level;
				Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("fx_VL_ParticleFieldBurst"), ((Component)player).transform.position, Quaternion.identity);
				List<Character> list = new List<Character>();
				list.Clear();
				Character.GetCharactersInRange(((Component)player).transform.position, 30f + 0.2f * level2, list);
				float num = (3f * level2 + 2f * zonechargeCount) * VL_GlobalConfigs.c_enchanterBiome;
				if ((int)player.GetCurrentBiome() == 1)
				{
					GameObject prefab = ZNetScene.instance.GetPrefab("vfx_Potion_stamina_medium");
					foreach (Character item in list)
					{
						SE_BiomeMeadows sE_BiomeMeadows = (SE_BiomeMeadows)(object)ScriptableObject.CreateInstance(typeof(SE_BiomeMeadows));
						((StatusEffect)sE_BiomeMeadows).m_ttl = SE_BiomeMeadows.m_baseTTL + num;
						sE_BiomeMeadows.regenBonus = (1f + 0.1f * level2) * VL_GlobalConfigs.g_DamageModifer;
						sE_BiomeMeadows.doOnce = false;
						if (!BaseAI.IsEnemy(item, (Character)(object)player))
						{
							if ((Object)(object)item == (Object)(object)Player.m_localPlayer)
							{
								item.GetSEMan().AddStatusEffect((StatusEffect)(object)sE_BiomeMeadows, true, 0, 0f);
							}
							else if (item.IsPlayer())
							{
								item.GetSEMan().AddStatusEffect(StringExtensionMethods.GetStableHashCode(((Object)sE_BiomeMeadows).name), true, 0, 0f);
							}
							else
							{
								item.GetSEMan().AddStatusEffect((StatusEffect)(object)sE_BiomeMeadows, true, 0, 0f);
							}
							Object.Instantiate<GameObject>(prefab, item.GetCenterPoint(), Quaternion.identity);
						}
					}
				}
				else if ((int)player.GetCurrentBiome() == 8)
				{
					GameObject prefab2 = ZNetScene.instance.GetPrefab("fx_Potion_frostresist");
					foreach (Character item2 in list)
					{
						SE_BiomeBlackForest sE_BiomeBlackForest = (SE_BiomeBlackForest)(object)ScriptableObject.CreateInstance(typeof(SE_BiomeBlackForest));
						((StatusEffect)sE_BiomeBlackForest).m_ttl = SE_BiomeBlackForest.m_baseTTL + num;
						sE_BiomeBlackForest.carryModifier = 50f + level2;
						sE_BiomeBlackForest.doOnce = false;
						if (!BaseAI.IsEnemy(item2, (Character)(object)player))
						{
							if ((Object)(object)item2 == (Object)(object)Player.m_localPlayer)
							{
								item2.GetSEMan().AddStatusEffect((StatusEffect)(object)sE_BiomeBlackForest, true, 0, 0f);
							}
							else if (item2.IsPlayer())
							{
								item2.GetSEMan().AddStatusEffect(StringExtensionMethods.GetStableHashCode(((Object)sE_BiomeBlackForest).name), true, 0, 0f);
							}
							else
							{
								item2.GetSEMan().AddStatusEffect((StatusEffect)(object)sE_BiomeBlackForest, true, 0, 0f);
							}
							Object.Instantiate<GameObject>(prefab2, item2.GetCenterPoint(), Quaternion.identity);
						}
					}
				}
				else if ((int)player.GetCurrentBiome() == 2)
				{
					GameObject prefab3 = ZNetScene.instance.GetPrefab("vfx_Potion_health_medium");
					foreach (Character item3 in list)
					{
						SE_BiomeSwamp sE_BiomeSwamp = (SE_BiomeSwamp)(object)ScriptableObject.CreateInstance(typeof(SE_BiomeSwamp));
						((StatusEffect)sE_BiomeSwamp).m_ttl = SE_BiomeSwamp.m_baseTTL + num;
						sE_BiomeSwamp.resistModifier = 0.8f - 0.002f * level2;
						sE_BiomeSwamp.doOnce = false;
						if (!BaseAI.IsEnemy(item3, (Character)(object)player))
						{
							if ((Object)(object)item3 == (Object)(object)Player.m_localPlayer)
							{
								item3.GetSEMan().AddStatusEffect((StatusEffect)(object)sE_BiomeSwamp, true, 0, 0f);
							}
							else if (item3.IsPlayer())
							{
								item3.GetSEMan().AddStatusEffect(StringExtensionMethods.GetStableHashCode(((Object)sE_BiomeSwamp).name), true, 0, 0f);
							}
							else
							{
								item3.GetSEMan().AddStatusEffect((StatusEffect)(object)sE_BiomeSwamp, true, 0, 0f);
							}
							Object.Instantiate<GameObject>(prefab3, item3.GetCenterPoint(), Quaternion.identity);
						}
					}
				}
				else if ((int)player.GetCurrentBiome() == 4)
				{
					GameObject prefab4 = ZNetScene.instance.GetPrefab("fx_Potion_frostresist");
					foreach (Character item4 in list)
					{
						SE_BiomeMountain sE_BiomeMountain = (SE_BiomeMountain)(object)ScriptableObject.CreateInstance(typeof(SE_BiomeMountain));
						((StatusEffect)sE_BiomeMountain).m_ttl = SE_BiomeMountain.m_baseTTL + num;
						sE_BiomeMountain.resistModifier = 1f + 0.1f * level2;
						sE_BiomeMountain.staminaRegen = 5f + 0.075f * level2;
						sE_BiomeMountain.doOnce = false;
						if (!BaseAI.IsEnemy(item4, (Character)(object)player))
						{
							if ((Object)(object)item4 == (Object)(object)Player.m_localPlayer)
							{
								item4.GetSEMan().AddStatusEffect((StatusEffect)(object)sE_BiomeMountain, true, 0, 0f);
							}
							else if (item4.IsPlayer())
							{
								item4.GetSEMan().AddStatusEffect(StringExtensionMethods.GetStableHashCode(((Object)sE_BiomeMountain).name), true, 0, 0f);
							}
							else
							{
								item4.GetSEMan().AddStatusEffect((StatusEffect)(object)sE_BiomeMountain, true, 0, 0f);
							}
							Object.Instantiate<GameObject>(prefab4, item4.GetCenterPoint(), Quaternion.identity);
						}
					}
				}
				else if ((int)player.GetCurrentBiome() == 16)
				{
					GameObject prefab5 = ZNetScene.instance.GetPrefab("vfx_Potion_stamina_medium");
					foreach (Character item5 in list)
					{
						SE_BiomePlains sE_BiomePlains = (SE_BiomePlains)(object)ScriptableObject.CreateInstance(typeof(SE_BiomePlains));
						((StatusEffect)sE_BiomePlains).m_ttl = SE_BiomePlains.m_baseTTL + num;
						sE_BiomePlains.doOnce = false;
						if (!BaseAI.IsEnemy(item5, (Character)(object)player))
						{
							if ((Object)(object)item5 == (Object)(object)Player.m_localPlayer)
							{
								item5.GetSEMan().AddStatusEffect((StatusEffect)(object)sE_BiomePlains, true, 0, 0f);
							}
							else if (item5.IsPlayer())
							{
								item5.GetSEMan().AddStatusEffect(StringExtensionMethods.GetStableHashCode(((Object)sE_BiomePlains).name), true, 0, 0f);
							}
							else
							{
								item5.GetSEMan().AddStatusEffect((StatusEffect)(object)sE_BiomePlains, true, 0, 0f);
							}
							Object.Instantiate<GameObject>(prefab5, item5.GetCenterPoint(), Quaternion.identity);
						}
					}
				}
				else if ((int)player.GetCurrentBiome() == 256)
				{
					GameObject prefab6 = ZNetScene.instance.GetPrefab("fx_Potion_frostresist");
					foreach (Character item6 in list)
					{
						SE_BiomeOcean sE_BiomeOcean = (SE_BiomeOcean)(object)ScriptableObject.CreateInstance(typeof(SE_BiomeOcean));
						((StatusEffect)sE_BiomeOcean).m_ttl = SE_BiomeOcean.m_baseTTL + num;
						sE_BiomeOcean.doOnce = false;
						if (!BaseAI.IsEnemy(item6, (Character)(object)player))
						{
							if ((Object)(object)item6 == (Object)(object)Player.m_localPlayer)
							{
								item6.GetSEMan().AddStatusEffect((StatusEffect)(object)sE_BiomeOcean, true, 0, 0f);
							}
							else if (item6.IsPlayer())
							{
								item6.GetSEMan().AddStatusEffect(StringExtensionMethods.GetStableHashCode(((Object)sE_BiomeOcean).name), true, 0, 0f);
							}
							else
							{
								item6.GetSEMan().AddStatusEffect((StatusEffect)(object)sE_BiomeOcean, true, 0, 0f);
							}
							Object.Instantiate<GameObject>(prefab6, item6.GetCenterPoint(), Quaternion.identity);
						}
					}
				}
				else if ((int)player.GetCurrentBiome() == 512)
				{
					GameObject prefab7 = ZNetScene.instance.GetPrefab("fx_Potion_frostresist");
					foreach (Character item7 in list)
					{
						SE_BiomeMist sE_BiomeMist = (SE_BiomeMist)(object)ScriptableObject.CreateInstance(typeof(SE_BiomeMist));
						((StatusEffect)sE_BiomeMist).m_ttl = SE_BiomeMist.m_baseTTL + num;
						sE_BiomeMist.doOnce = false;
						if (!BaseAI.IsEnemy(item7, (Character)(object)player))
						{
							if ((Object)(object)item7 == (Object)(object)Player.m_localPlayer)
							{
								item7.GetSEMan().AddStatusEffect((StatusEffect)(object)sE_BiomeMist, true, 0, 0f);
							}
							else if (item7.IsPlayer())
							{
								item7.GetSEMan().AddStatusEffect(StringExtensionMethods.GetStableHashCode(((Object)sE_BiomeMist).name), true, 0, 0f);
							}
							else
							{
								item7.GetSEMan().AddStatusEffect((StatusEffect)(object)sE_BiomeMist, true, 0, 0f);
							}
							Object.Instantiate<GameObject>(prefab7, item7.GetCenterPoint(), Quaternion.identity);
						}
					}
				}
				else if ((int)player.GetCurrentBiome() == 32)
				{
					GameObject prefab8 = ZNetScene.instance.GetPrefab("vfx_Potion_health_medium");
					foreach (Character item8 in list)
					{
						SE_BiomeAsh sE_BiomeAsh = (SE_BiomeAsh)(object)ScriptableObject.CreateInstance(typeof(SE_BiomeAsh));
						((StatusEffect)sE_BiomeAsh).m_ttl = SE_BiomeAsh.m_baseTTL + num;
						sE_BiomeAsh.doOnce = false;
						if (!BaseAI.IsEnemy(item8, (Character)(object)player))
						{
							if ((Object)(object)item8 == (Object)(object)Player.m_localPlayer)
							{
								item8.GetSEMan().AddStatusEffect((StatusEffect)(object)sE_BiomeAsh, true, 0, 0f);
							}
							else if (item8.IsPlayer())
							{
								item8.GetSEMan().AddStatusEffect(StringExtensionMethods.GetStableHashCode(((Object)sE_BiomeAsh).name), true, 0, 0f);
							}
							else
							{
								item8.GetSEMan().AddStatusEffect((StatusEffect)(object)sE_BiomeAsh, true, 0, 0f);
							}
							Object.Instantiate<GameObject>(prefab8, item8.GetCenterPoint(), Quaternion.identity);
						}
					}
				}
				else
				{
					ZLog.Log((object)"Biome invalid.");
				}
				zonechargeCharging = false;
				zonechargeCount = 0f;
				zonechargeChargeAmount = 0;
				ValheimLegends.isChanneling = false;
				QueuedAttack = EnchanterAttackType.None;
				((Character)player).RaiseSkill(ValheimLegends.AbjurationSkill, zonechargeSkillGain);
				zonechargeSkillGain = 0f;
			}
			else if (VL_Utility.Ability2_Input_Down)
			{
				if (!((Character)player).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("SE_VL_Ability2_CD")))
				{
					if (player.GetStamina() >= VL_Utility.GetCharmCost)
					{
						StatusEffect val3 = (StatusEffect)(object)(SE_Ability2_CD)(object)ScriptableObject.CreateInstance(typeof(SE_Ability2_CD));
						val3.m_ttl = VL_Utility.GetCharmCooldownTime;
						((Character)player).GetSEMan().AddStatusEffect(val3, false, 0, 0f);
						((Character)player).UseStamina(VL_Utility.GetCharmCost);
						ValheimLegends.isChargingDash = true;
						ValheimLegends.dashCounter = 0;
						QueuedAttack = EnchanterAttackType.Charm;
						((ZSyncAnimation)typeof(Player).GetField("m_zanim", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(player)).SetTrigger("knife_stab0");
						VL_Utility.RotatePlayerToTarget(player);
						((Character)player).RaiseSkill(ValheimLegends.AlterationSkill, VL_Utility.GetCharmSkillGain);
					}
					else
					{
						((Character)player).Message((MessageType)1, "Not enough stamina for Charm: (" + player.GetStamina().ToString("#.#") + "/" + VL_Utility.GetCharmCost + ")", 0, (Sprite)null);
					}
				}
				else
				{
					((Character)player).Message((MessageType)1, "Ability not ready", 0, (Sprite)null);
				}
			}
			else if (VL_Utility.Ability1_Input_Down)
			{
				if (!((Character)player).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("SE_VL_Ability1_CD")))
				{
					if (player.GetStamina() >= VL_Utility.GetWeakenCost)
					{
						ValheimLegends.shouldUseGuardianPower = false;
						float level3 = ((IEnumerable<Skill>)((Character)player).GetSkills().GetSkillList()).FirstOrDefault((Func<Skill, bool>)((Skill x) => x.m_info == ValheimLegends.AlterationSkillDef)).m_level;
						StatusEffect val4 = (StatusEffect)(object)(SE_Ability1_CD)(object)ScriptableObject.CreateInstance(typeof(SE_Ability1_CD));
						val4.m_ttl = VL_Utility.GetWeakenCooldownTime;
						((Character)player).GetSEMan().AddStatusEffect(val4, false, 0, 0f);
						((Character)player).UseStamina(VL_Utility.GetWeakenCost + 0.5f * level3);
						ValheimLegends.shouldUseGuardianPower = false;
						((ZSyncAnimation)typeof(Player).GetField("m_zanim", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(player)).SetTrigger("gpower");
						RaycastHit val5 = default(RaycastHit);
						Vector3 position = ((Component)player).transform.position;
						Vector3 val6 = ((!Physics.Raycast(((Character)player).GetEyePoint(), ((Character)player).GetLookDir(), ref val5, float.PositiveInfinity, ScriptChar_Layermask) || !Object.op_Implicit((Object)(object)((RaycastHit)(ref val5)).collider)) ? (position + ((Character)player).GetLookDir() * 1000f) : ((RaycastHit)(ref val5)).point);
						Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("fx_VL_Weaken"), val6, Quaternion.identity);
						for (int num2 = 0; num2 < 4; num2++)
						{
							Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("fx_VL_WeakenStatus"), ((Component)player).transform.position + ((Component)player).transform.up * Random.Range(0.4f, 1.1f), Quaternion.identity);
						}
						SE_Weaken sE_Weaken = (SE_Weaken)(object)ScriptableObject.CreateInstance(typeof(SE_Weaken));
						((StatusEffect)sE_Weaken).m_ttl = SE_