Decompiled source of Lemurian v8.0.3

plugins/Lemurian/Lemurian.dll

Decompiled a month ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using EntityStates;
using EntityStates.Commando;
using EntityStates.Commando.CommandoWeapon;
using EntityStates.Croco;
using EntityStates.FalseSon;
using EntityStates.GolemMonster;
using EntityStates.ImpBossMonster;
using EntityStates.ImpMonster;
using EntityStates.LemurianBruiserMonster;
using EntityStates.LemurianMonster;
using EntityStates.LunarExploderMonster;
using EntityStates.TitanMonster;
using EntityStates.Toolbot;
using EntityStates.VoidRaidCrab;
using HG.BlendableTypes;
using KinematicCharacterController;
using On.RoR2;
using R2API;
using R2API.Utils;
using RiskOfOptions;
using RiskOfOptions.OptionConfigs;
using RiskOfOptions.Options;
using RoR2;
using RoR2.ContentManagement;
using RoR2.Navigation;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.UI;
using ThreeEyedGames;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using Zio.FileSystems;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyCompany("Lemurian")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Lemurian")]
[assembly: AssemblyTitle("Lemurian")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace Lemurian;

internal static class Files
{
	public static PluginInfo PluginInfo;

	internal static string assemblyDir => Path.GetDirectoryName(PluginInfo.Location);

	internal static void Init(PluginInfo info)
	{
		PluginInfo = info;
	}

	internal static string GetPathToFile(string folderName, string fileName)
	{
		return Path.Combine(assemblyDir, folderName, fileName);
	}
}
public static class Horns
{
	public class ApplyLemurianHorns : MonoBehaviour
	{
		private CharacterModel model;

		private ChildLocator childLocator;

		private DisplayRuleGroup Horns;

		public void OnEnable()
		{
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00da: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_010f: Unknown result type (might be due to invalid IL or missing references)
			//IL_013f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_0174: Unknown result type (might be due to invalid IL or missing references)
			//IL_0179: 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_01ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_021c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0221: Unknown result type (might be due to invalid IL or missing references)
			model = ((Component)this).GetComponentInChildren<CharacterModel>();
			childLocator = ((Component)this).GetComponentInChildren<ChildLocator>();
			if (Loader.Hornchoser.Value == Loader.HornChoser.Fire)
			{
				Horns = model.itemDisplayRuleSet.FindDisplayRuleGroup((Object)(object)Equipment.AffixRed);
			}
			else if (Loader.Hornchoser.Value == Loader.HornChoser.Ice)
			{
				Horns = model.itemDisplayRuleSet.FindDisplayRuleGroup((Object)(object)Equipment.AffixWhite);
			}
			else if (Loader.Hornchoser.Value == Loader.HornChoser.Thunder)
			{
				Horns = model.itemDisplayRuleSet.FindDisplayRuleGroup((Object)(object)Equipment.AffixBlue);
			}
			else if (Loader.Hornchoser.Value == Loader.HornChoser.Haunted)
			{
				Horns = model.itemDisplayRuleSet.FindDisplayRuleGroup((Object)(object)Equipment.AffixHaunted);
			}
			else if (Loader.Hornchoser.Value == Loader.HornChoser.Poison)
			{
				Horns = model.itemDisplayRuleSet.FindDisplayRuleGroup((Object)(object)Equipment.AffixPoison);
			}
			else if (Loader.Hornchoser.Value == Loader.HornChoser.Gold)
			{
				Horns = model.itemDisplayRuleSet.FindDisplayRuleGroup((Object)(object)Equipment.EliteAurelioniteEquipment);
			}
			else if (Loader.Hornchoser.Value == Loader.HornChoser.Lunar)
			{
				Horns = model.itemDisplayRuleSet.FindDisplayRuleGroup((Object)(object)Equipment.AffixLunar);
			}
			else if (Loader.Hornchoser.Value == Loader.HornChoser.Void)
			{
				Horns = model.itemDisplayRuleSet.FindDisplayRuleGroup((Object)(object)Equipment.EliteVoidEquipment);
			}
			else if (Loader.Hornchoser.Value == Loader.HornChoser.Antler)
			{
				Horns = model.itemDisplayRuleSet.FindDisplayRuleGroup((Object)(object)Addressables.LoadAssetAsync<EquipmentDef>((object)"RoR2/DLC1/EliteEarth/EliteEarthEquipment.asset").WaitForCompletion());
			}
			else if (Loader.Hornchoser.Value == Loader.HornChoser.Bead)
			{
				Horns = model.itemDisplayRuleSet.FindDisplayRuleGroup((Object)(object)Equipment.EliteBeadEquipment);
			}
			Debug.LogError((object)"DoingAddhorns");
			if (Loader.EliteHorns.Value)
			{
				AddHorns();
			}
		}

		public void AddHorns()
		{
			//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_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_013d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_016a: 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_0189: Unknown result type (might be due to invalid IL or missing references)
			//IL_018e: Unknown result type (might be due to invalid IL or missing references)
			//IL_019a: Unknown result type (might be due to invalid IL or missing references)
			//IL_019f: 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_01b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f1: 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_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_0118: Unknown result type (might be due to invalid IL or missing references)
			//IL_0124: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)model))
			{
				return;
			}
			DisplayRuleGroup horns = Horns;
			if (horns.rules.Length > 1)
			{
				Transform val = childLocator.FindChild(horns.rules[0].childName);
				if (Object.op_Implicit((Object)(object)val))
				{
					Apply(model, horns.rules[0].followerPrefab, val, horns.rules[0].localPos, Quaternion.Euler(horns.rules[0].localAngles), horns.rules[0].localScale);
				}
				if (Object.op_Implicit((Object)(object)childLocator.FindChild(horns.rules[1].childName)))
				{
					Apply(model, horns.rules[1].followerPrefab, val, horns.rules[1].localPos, Quaternion.Euler(horns.rules[1].localAngles), horns.rules[1].localScale);
				}
			}
			else
			{
				Transform val2 = childLocator.FindChild(horns.rules[0].childName);
				if (Object.op_Implicit((Object)(object)val2))
				{
					Apply(model, horns.rules[0].followerPrefab, val2, horns.rules[0].localPos, Quaternion.Euler(horns.rules[0].localAngles), horns.rules[0].localScale);
				}
			}
		}

		public void Apply(CharacterModel characterModel, GameObject prefab, Transform parent, Vector3 localPosition, Quaternion localRotation, Vector3 localScale)
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: 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)
			GameObject val = Object.Instantiate<GameObject>(prefab.gameObject, parent);
			val.transform.localPosition = localPosition;
			val.transform.localRotation = localRotation;
			val.transform.localScale = localScale;
			LimbMatcher component = val.GetComponent<LimbMatcher>();
			if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)childLocator))
			{
				component.SetChildLocator(childLocator);
			}
		}
	}

	public class ApplyElderHorns : MonoBehaviour
	{
		private CharacterModel model2;

		private ChildLocator childLocator2;

		public void Start()
		{
			model2 = ((Component)this).GetComponentInChildren<CharacterModel>();
			childLocator2 = ((Component)this).GetComponentInChildren<ChildLocator>();
			AddHorns2();
		}

		public void AddHorns2()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: 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_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: 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_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_0122: Unknown result type (might be due to invalid IL or missing references)
			//IL_0127: Unknown result type (might be due to invalid IL or missing references)
			//IL_0133: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)model2))
			{
				return;
			}
			DisplayRuleGroup val = model2.itemDisplayRuleSet.FindDisplayRuleGroup((Object)(object)Equipment.AffixRed);
			if (val.rules.Length > 1)
			{
				Transform val2 = childLocator2.FindChild(val.rules[0].childName);
				if (Object.op_Implicit((Object)(object)val2))
				{
					Apply2(model2, val.rules[0].followerPrefab, val2, val.rules[0].localPos, Quaternion.Euler(val.rules[0].localAngles), val.rules[0].localScale);
				}
				if (Object.op_Implicit((Object)(object)childLocator2.FindChild(val.rules[1].childName)))
				{
					Apply2(model2, val.rules[1].followerPrefab, val2, val.rules[1].localPos, Quaternion.Euler(val.rules[1].localAngles), val.rules[1].localScale);
				}
			}
		}

		public void Apply2(CharacterModel characterModel, GameObject prefab, Transform parent, Vector3 localPosition, Quaternion localRotation, Vector3 localScale)
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: 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)
			GameObject val = Object.Instantiate<GameObject>(prefab.gameObject, parent);
			val.transform.localPosition = localPosition;
			val.transform.localRotation = localRotation;
			val.transform.localScale = localScale;
			LimbMatcher component = val.GetComponent<LimbMatcher>();
			if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)childLocator2))
			{
				component.SetChildLocator(childLocator2);
			}
		}
	}
}
public static class LemPrefabs
{
	public static GameObject LemChprefab;

	public static GameObject LemLaserPrimCh;

	public static GameObject LemSpecialCh;

	public static GameObject LemPodprefab;

	public static GameObject ImpChPrefab;

	public static GameObject LunarChPrefab;

	public static GameObject LemFireCharge;

	public static GameObject LemPrim2Explo;

	public static GameObject LemJumpUtil2;

	public static GameObject LemExploUtil1;

	public static GameObject LemJumpUtil1;

	public static GameObject FlameEffect;

	public static GameObject LemExploCharge;

	public static GameObject LemExploSpecial2Charge;

	public static GameObject LemExploSpecial2Magma;

	public static GameObject chargeFireBall;

	public static GameObject ImpSecLaser;

	public static GameObject ImpSpecialBlink;

	public static GameObject ImpSpecialSlam;

	public static GameObject NullifierExlpo;

	public static GameObject LunGolDeath;

	public static GameObject LunGolShieldCharge;

	public static Material FireBuffMat;

	public static Material LunarSphereMat;

	public static GameObject SwitchEffect;

	public static GameObject LemDicator;

	public static GameObject LunDicator;

	internal static void PrefabSetup()
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_000b: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: 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_0067: Unknown result type (might be due to invalid IL or missing references)
		//IL_0079: Unknown result type (might be due to invalid IL or missing references)
		//IL_007e: 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_00bd: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_0102: Unknown result type (might be due to invalid IL or missing references)
		//IL_0107: Unknown result type (might be due to invalid IL or missing references)
		//IL_013d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0166: 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_0196: Unknown result type (might be due to invalid IL or missing references)
		//IL_019b: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f8: 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_021b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0220: Unknown result type (might be due to invalid IL or missing references)
		//IL_023d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0242: Unknown result type (might be due to invalid IL or missing references)
		//IL_025f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0264: Unknown result type (might be due to invalid IL or missing references)
		//IL_0281: Unknown result type (might be due to invalid IL or missing references)
		//IL_0286: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a3: 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_02d0: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d5: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f7: Unknown result type (might be due to invalid IL or missing references)
		//IL_0314: Unknown result type (might be due to invalid IL or missing references)
		//IL_0319: Unknown result type (might be due to invalid IL or missing references)
		//IL_0336: 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_0358: Unknown result type (might be due to invalid IL or missing references)
		//IL_035d: Unknown result type (might be due to invalid IL or missing references)
		//IL_037a: Unknown result type (might be due to invalid IL or missing references)
		//IL_037f: Unknown result type (might be due to invalid IL or missing references)
		//IL_039c: Unknown result type (might be due to invalid IL or missing references)
		//IL_03a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_03be: Unknown result type (might be due to invalid IL or missing references)
		//IL_03c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_03e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_03e5: Unknown result type (might be due to invalid IL or missing references)
		//IL_03f7: Unknown result type (might be due to invalid IL or missing references)
		//IL_03fc: Unknown result type (might be due to invalid IL or missing references)
		//IL_040e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0413: Unknown result type (might be due to invalid IL or missing references)
		//IL_0430: 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_0472: Unknown result type (might be due to invalid IL or missing references)
		//IL_0477: Unknown result type (might be due to invalid IL or missing references)
		//IL_04b9: Unknown result type (might be due to invalid IL or missing references)
		//IL_04c3: Expected O, but got Unknown
		//IL_04ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_04d8: Expected O, but got Unknown
		//IL_04e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_04ed: Expected O, but got Unknown
		//IL_04f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0502: Expected O, but got Unknown
		//IL_050d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0517: Expected O, but got Unknown
		//IL_0522: Unknown result type (might be due to invalid IL or missing references)
		//IL_052c: Expected O, but got Unknown
		//IL_0537: Unknown result type (might be due to invalid IL or missing references)
		//IL_0541: Expected O, but got Unknown
		//IL_054c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0556: Expected O, but got Unknown
		//IL_0561: Unknown result type (might be due to invalid IL or missing references)
		//IL_056b: Expected O, but got Unknown
		//IL_0576: Unknown result type (might be due to invalid IL or missing references)
		//IL_0580: Expected O, but got Unknown
		//IL_058b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0595: Expected O, but got Unknown
		//IL_05a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_05aa: Expected O, but got Unknown
		//IL_05b5: Unknown result type (might be due to invalid IL or missing references)
		//IL_05bf: Expected O, but got Unknown
		//IL_05ca: Unknown result type (might be due to invalid IL or missing references)
		//IL_05d4: Expected O, but got Unknown
		//IL_05df: Unknown result type (might be due to invalid IL or missing references)
		//IL_05e9: Expected O, but got Unknown
		//IL_05f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_05fe: Expected O, but got Unknown
		//IL_0609: Unknown result type (might be due to invalid IL or missing references)
		//IL_0613: Expected O, but got Unknown
		//IL_061e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0628: Expected O, but got Unknown
		LemChprefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Croco/CrocoCrosshair.prefab").WaitForCompletion();
		LemLaserPrimCh = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/Seeker/SeekerCrosshair.prefab").WaitForCompletion();
		LemSpecialCh = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Junk/Bandit/BanditCrosshair.prefab").WaitForCompletion();
		ImpChPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/UI/SimpleDotCrosshair.prefab").WaitForCompletion();
		LunarChPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/UI/SimpleDotCrosshair.prefab").WaitForCompletion();
		LemFireCharge = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Lemurian/LemurianChargeFire.prefab").WaitForCompletion();
		CreateEffect(LemFireCharge);
		LemExploCharge = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/Child/ChargeChildTrackingSparkBall.prefab").WaitForCompletion();
		CreateEffect(LemExploCharge);
		LemPodprefab = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidSurvivor/VoidSurvivorBody.prefab").WaitForCompletion().GetComponent<CharacterBody>()
			.preferredPodPrefab, "LemPodPrefab", true);
			((Renderer)((Component)LemPodprefab.transform.Find("Base/mdlVoidSurvivorPod/mdlVoidSurvivorPod")).GetComponentInChildren<SkinnedMeshRenderer>()).sharedMaterial = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/FireballsOnHit/matFireballsOnHit.mat").WaitForCompletion();
			((Component)LemPodprefab.transform.Find("Base/mdlVoidSurvivorPod")).transform.localScale = new Vector3(2f, 2f, 2f);
			((Component)LemPodprefab.transform.Find("Base/mdlVoidSurvivorPod/VoidSurvivorPodArmature/ROOT/Body/Decal (1)")).GetComponentInChildren<Decal>().Material = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/Molotov/matMolotovDecal.mat").WaitForCompletion();
			((Renderer)((Component)LemPodprefab.transform.Find("Base/mdlVoidSurvivorPod/VoidSurvivorPodArmature/ROOT/Body/Flames (1)")).GetComponentInChildren<ParticleSystemRenderer>()).sharedMaterial = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Common/VFX/mageMageFireStarburst.mat").WaitForCompletion();
			((Renderer)((Component)LemPodprefab.transform.Find("Base/mdlVoidSurvivorPod/VoidSurvivorPodArmature/ROOT/Body/FallingFX")).GetComponentInChildren<ParticleSystemRenderer>()).sharedMaterial = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Common/VFX/mageMageFireStarburst.mat").WaitForCompletion();
			((Component)LemPodprefab.transform.Find("Base/mdlVoidSurvivorPod/VoidSurvivorPodArmature/ROOT/Body/FallingFX")).GetComponentInChildren<ParticleSystemRenderer>().trailMaterial = Addressables.LoadAssetAsync<Material>((object)"RoR2/Junk/Bandit/matThermiteFlame.mat").WaitForCompletion();
			CreateEffect(LemPodprefab);
			LemPrim2Explo = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LemurianBruiser/OmniExplosionVFXLemurianBruiserFireballImpact.prefab").WaitForCompletion();
			CreateEffect(LemPrim2Explo);
			LemJumpUtil1 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Junk/ArchWisp/OmniExplosionVFXArchWispCannonImpact.prefab").WaitForCompletion();
			CreateEffect(LemJumpUtil1);
			LemJumpUtil2 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LemurianBruiser/OmniExplosionVFXLemurianBruiserFireballImpact.prefab").WaitForCompletion();
			CreateEffect(LemJumpUtil2);
			LemExploUtil1 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/FusionCellDestructible/FusionCellExplosion.prefab").WaitForCompletion();
			CreateEffect(LemExploUtil1);
			FlameEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Drones/DroneFlamethrowerEffect.prefab").WaitForCompletion(), "Prefabs/SpecialFlame", true);
			CreateEffect(FlameEffect);
			LemExploSpecial2Charge = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/skymeadow/ArtifactworldPortalPrespawnEffect.prefab").WaitForCompletion();
			CreateEffect(LemExploSpecial2Charge);
			LemExploSpecial2Magma = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/MagmaWorm/MagmaOrbExplosion.prefab").WaitForCompletion();
			CreateEffect(LemExploSpecial2Magma);
			ImpSecLaser = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Golem/TracerGolem.prefab").WaitForCompletion();
			CreateEffect(ImpSecLaser);
			ImpSpecialBlink = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ImpBoss/ImpBossBlink.prefab").WaitForCompletion();
			CreateEffect(ImpSpecialBlink);
			ImpSpecialSlam = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ImpBoss/ImpBossGroundSlam.prefab").WaitForCompletion();
			CreateEffect(ImpSpecialSlam);
			LunGolShieldCharge = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarGolem/LunarGolemShieldCharge.prefab").WaitForCompletion();
			CreateEffect(LunGolShieldCharge);
			NullifierExlpo = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Nullifier/NullifierExplosion.prefab").WaitForCompletion();
			CreateEffect(NullifierExlpo);
			LunGolDeath = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarGolem/LunarGolemDeath.prefab").WaitForCompletion();
			CreateEffect(LunGolDeath);
			FireBuffMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Common/matOnFire.mat").WaitForCompletion();
			LunarSphereMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/BurnNearby/matOnHelfire.mat").WaitForCompletion();
			SwitchEffect = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/Items/MeteorAttackOnHighDamage/RunicMeteorStrikeImpact.prefab").WaitForCompletion();
			CreateEffect(SwitchEffect);
			LemDicator = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Huntress/HuntressArrowRainIndicator.prefab").WaitForCompletion(), "Prefabs/LemDicator", true);
			((Renderer)LemDicator.GetComponentInChildren<MeshRenderer>()).sharedMaterial = FireBuffMat;
			CreateEffect(LemDicator);
			LunDicator = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Huntress/HuntressArrowRainIndicator.prefab").WaitForCompletion(), "Prefabs/LunDicator", true);
			((Renderer)LunDicator.GetComponentInChildren<MeshRenderer>()).sharedMaterial = LunarSphereMat;
			CreateEffect(LunDicator);
			Loader.effectPrefabs.Add(new EffectDef(LemFireCharge));
			Loader.effectPrefabs.Add(new EffectDef(LemExploCharge));
			Loader.effectPrefabs.Add(new EffectDef(LemPodprefab));
			Loader.effectPrefabs.Add(new EffectDef(LemPrim2Explo));
			Loader.effectPrefabs.Add(new EffectDef(LemJumpUtil1));
			Loader.effectPrefabs.Add(new EffectDef(LemJumpUtil2));
			Loader.effectPrefabs.Add(new EffectDef(LemExploUtil1));
			Loader.effectPrefabs.Add(new EffectDef(FlameEffect));
			Loader.effectPrefabs.Add(new EffectDef(LemExploSpecial2Charge));
			Loader.effectPrefabs.Add(new EffectDef(ImpSecLaser));
			Loader.effectPrefabs.Add(new EffectDef(ImpSpecialBlink));
			Loader.effectPrefabs.Add(new EffectDef(ImpSpecialSlam));
			Loader.effectPrefabs.Add(new EffectDef(LunGolShieldCharge));
			Loader.effectPrefabs.Add(new EffectDef(NullifierExlpo));
			Loader.effectPrefabs.Add(new EffectDef(LunGolDeath));
			Loader.effectPrefabs.Add(new EffectDef(LemDicator));
			Loader.effectPrefabs.Add(new EffectDef(SwitchEffect));
			Loader.effectPrefabs.Add(new EffectDef(LunDicator));
		}

		public static void CreateEffect(GameObject effectPrfab)
		{
			if (!Object.op_Implicit((Object)(object)effectPrfab.GetComponent<EffectComponent>()))
			{
				effectPrfab.AddComponent<EffectComponent>();
			}
			if (!Object.op_Implicit((Object)(object)effectPrfab.GetComponent<VFXAttributes>()))
			{
				effectPrfab.AddComponent<VFXAttributes>();
			}
			if (!Object.op_Implicit((Object)(object)effectPrfab.GetComponent<NetworkIdentity>()))
			{
				effectPrfab.AddComponent<NetworkIdentity>();
			}
		}
	}
	public static class Tokens
	{
		public static SubFileSystem fileSystem;

		internal static string languageRoot => Path.Combine(assemblyDir, "language");

		internal static string assemblyDir => Path.GetDirectoryName(Files.PluginInfo.Location);

		public static void RegisterLanguageTokens()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			Language.SetFolders += new hook_SetFolders(fixme);
		}

		private static void fixme(orig_SetFolders orig, Language self, IEnumerable<string> newFolders)
		{
			if (Directory.Exists(languageRoot))
			{
				IEnumerable<string> second = Directory.EnumerateDirectories(Path.Combine(languageRoot), self.name);
				orig.Invoke(self, newFolders.Union(second));
			}
			else
			{
				orig.Invoke(self, newFolders);
			}
		}
	}
	public class LunarExploderMain : GenericCharacterMain
	{
		private float stopWatch;

		private GameObject deathPreExplosionInstance;

		private Transform muzzleTransform;

		private Animator animator;

		public GameObject projectilePrefab;

		public static GameObject exploprefab;

		private GameObject aimSphere;

		public override void OnEnter()
		{
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			((GenericCharacterMain)this).OnEnter();
			CrosshairUtils.RequestOverrideForBody(((EntityState)this).characterBody, LemPrefabs.LunarChPrefab, (OverridePriority)0);
			animator = ((EntityState)this).GetModelAnimator();
			aimSphere = Object.Instantiate<GameObject>(LemPrefabs.LemDicator);
			aimSphere.transform.localScale = new Vector3(2.5f, 2.5f, 2.5f);
		}

		public override void Update()
		{
			((GenericCharacterMain)this).Update();
			if (!LunarExploder.sprintingenabled.Value & ((EntityState)this).characterBody.isSprinting)
			{
				animator.SetBool("isSprinting", false);
			}
		}

		public override void FixedUpdate()
		{
			//IL_0062: 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_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0117: Unknown result type (might be due to invalid IL or missing references)
			//IL_011e: Expected O, but got Unknown
			//IL_0134: Unknown result type (might be due to invalid IL or missing references)
			//IL_0139: Unknown result type (might be due to invalid IL or missing references)
			//IL_0140: Unknown result type (might be due to invalid IL or missing references)
			//IL_014b: Unknown result type (might be due to invalid IL or missing references)
			//IL_015c: Expected O, but got Unknown
			//IL_0162: 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_016e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0179: Unknown result type (might be due to invalid IL or missing references)
			//IL_018a: Expected O, but got Unknown
			//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_01af: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fb: Invalid comparison between Unknown and I4
			//IL_024e: Unknown result type (might be due to invalid IL or missing references)
			//IL_026a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0276: Unknown result type (might be due to invalid IL or missing references)
			//IL_029f: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c8: Expected O, but got Unknown
			((GenericCharacterMain)this).FixedUpdate();
			if (((EntityState)this).characterBody.healthComponent.isHealthLow && !Object.op_Implicit((Object)(object)deathPreExplosionInstance) && !((EntityState)this).characterBody.HasBuff(Buffs.ExplodeBuff))
			{
				muzzleTransform = ((BaseState)this).FindModelChild(DeathState.muzzleName);
				deathPreExplosionInstance = Object.Instantiate<GameObject>(DeathState.deathPreExplosionVFX, muzzleTransform.position, muzzleTransform.rotation);
				deathPreExplosionInstance.transform.parent = muzzleTransform;
				deathPreExplosionInstance.transform.localScale = Vector3.one * DeathState.deathExplosionRadius;
				ScaleParticleSystemDuration component = deathPreExplosionInstance.GetComponent<ScaleParticleSystemDuration>();
				if (Object.op_Implicit((Object)(object)component))
				{
					component.newDuration = 2f;
				}
			}
			if (!Object.op_Implicit((Object)(object)deathPreExplosionInstance))
			{
				return;
			}
			stopWatch += Time.fixedDeltaTime;
			if (!(stopWatch >= 2f))
			{
				return;
			}
			DeathState val = new DeathState();
			exploprefab = Object.Instantiate<GameObject>(val.explosionEffectPrefab);
			EffectManager.SpawnEffect(exploprefab, new EffectData
			{
				origin = ((EntityState)this).transform.position,
				scale = 100f
			}, true);
			EffectManager.SpawnEffect(LemPrefabs.LunGolShieldCharge, new EffectData
			{
				origin = ((EntityState)this).transform.position,
				scale = 100f
			}, false);
			if (NetworkServer.active)
			{
				Vector3 corePosition = ((EntityState)this).characterBody.corePosition;
				LayerIndex defaultLayer = LayerIndex.defaultLayer;
				Collider[] array = Physics.OverlapSphere(corePosition, 100f, LayerMask.op_Implicit(((LayerIndex)(ref defaultLayer)).mask));
				for (int i = 0; i < array.Length; i++)
				{
					HealthComponent component2 = ((Component)array[i]).GetComponent<HealthComponent>();
					if (!Object.op_Implicit((Object)(object)component2))
					{
						continue;
					}
					TeamComponent component3 = ((Component)component2).GetComponent<TeamComponent>();
					if ((int)component3.teamIndex != 1)
					{
						CharacterBody body = component2.body;
						if (Object.op_Implicit((Object)(object)body))
						{
							projectilePrefab = LunarExploder.LunarDot;
							((Component)projectilePrefab.GetComponent<ProjectileDotZone>()).transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
							ProjectileManager.instance.FireProjectile(LunarExploder.LunarDot, ((Component)body).transform.position, ((Component)body).transform.rotation, ((EntityState)this).gameObject, ((BaseState)this).damageStat, 0f, false, (DamageColorIndex)0, (GameObject)null, -1f);
							EffectManager.SpawnEffect(exploprefab, new EffectData
							{
								origin = ((Component)body).transform.position,
								scale = 2.5f
							}, true);
							body.AddTimedBuff(Buffs.Cripple, 10f);
						}
					}
				}
			}
			((EntityState)this).characterBody.AddTimedBuff(Buffs.ExplodeBuff, 60f);
			EntityState.Destroy((Object)(object)deathPreExplosionInstance);
			stopWatch = 0f;
		}

		public override void OnExit()
		{
			((GenericCharacterMain)this).OnExit();
		}
	}
	public static class LunarExploderItemDisplays
	{
		internal static ItemDisplayRuleSet itemDisplayRuleSet;

		internal static List<KeyAssetRuleGroup> itemDisplayRules;

		private static Dictionary<string, GameObject> itemDisplayPrefabs = new Dictionary<string, GameObject>();

		internal static void InitializeItemDisplays()
		{
			PopulateDisplays();
			CharacterModel componentInChildren = LunarExploder.myCharacter.GetComponentInChildren<CharacterModel>();
			itemDisplayRuleSet = ScriptableObject.CreateInstance<ItemDisplayRuleSet>();
			((Object)itemDisplayRuleSet).name = "idrsLunarExploder";
			componentInChildren.itemDisplayRuleSet = itemDisplayRuleSet;
		}

		internal static void SetItemDisplays()
		{
			//IL_0012: 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_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: 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_0117: 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_0133: Unknown result type (might be due to invalid IL or missing references)
			//IL_0138: Unknown result type (might be due to invalid IL or missing references)
			//IL_0146: 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_0164: Unknown result type (might be due to invalid IL or missing references)
			//IL_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0180: Unknown result type (might be due to invalid IL or missing references)
			//IL_0185: 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_01ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c8: 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_01d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0215: Unknown result type (might be due to invalid IL or missing references)
			//IL_021a: Unknown result type (might be due to invalid IL or missing references)
			//IL_021f: Unknown result type (might be due to invalid IL or missing references)
			//IL_022d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0246: Unknown result type (might be due to invalid IL or missing references)
			//IL_024b: 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_0267: Unknown result type (might be due to invalid IL or missing references)
			//IL_026c: 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_0293: Unknown result type (might be due to invalid IL or missing references)
			//IL_0298: 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_02b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c7: 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_02d9: 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_02f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0309: Unknown result type (might be due to invalid IL or missing references)
			//IL_030e: 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_031b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0320: Unknown result type (might be due to invalid IL or missing references)
			//IL_032f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0345: Unknown result type (might be due to invalid IL or missing references)
			//IL_0357: Unknown result type (might be due to invalid IL or missing references)
			//IL_0360: Unknown result type (might be due to invalid IL or missing references)
			//IL_0393: Unknown result type (might be due to invalid IL or missing references)
			//IL_0398: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ae: 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_03c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03db: Unknown result type (might be due to invalid IL or missing references)
			//IL_03dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ed: 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_0411: Unknown result type (might be due to invalid IL or missing references)
			//IL_0423: Unknown result type (might be due to invalid IL or missing references)
			//IL_042c: Unknown result type (might be due to invalid IL or missing references)
			//IL_045f: 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_047a: Unknown result type (might be due to invalid IL or missing references)
			//IL_047f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0495: Unknown result type (might be due to invalid IL or missing references)
			//IL_049a: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b9: Unknown result type (might be due to invalid IL or missing references)
			itemDisplayRules = new List<KeyAssetRuleGroup>();
			itemDisplayRules.Add(new KeyAssetRuleGroup
			{
				keyAsset = (Object)(object)Equipment.AffixRed,
				displayRuleGroup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarExploder/LunarExploderBody.prefab").WaitForCompletion().GetComponentInChildren<CharacterModel>()
					.itemDisplayRuleSet.FindDisplayRuleGroup((Object)(object)Equipment.AffixRed)
			});
			itemDisplayRules.Add(new KeyAssetRuleGroup
			{
				keyAsset = (Object)(object)Equipment.AffixBlue,
				displayRuleGroup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarExploder/LunarExploderBody.prefab").WaitForCompletion().GetComponentInChildren<CharacterModel>()
					.itemDisplayRuleSet.FindDisplayRuleGroup((Object)(object)Equipment.AffixBlue)
			});
			itemDisplayRules.Add(new KeyAssetRuleGroup
			{
				keyAsset = (Object)(object)Equipment.AffixWhite,
				displayRuleGroup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarExploder/LunarExploderBody.prefab").WaitForCompletion().GetComponentInChildren<CharacterModel>()
					.itemDisplayRuleSet.FindDisplayRuleGroup((Object)(object)Equipment.AffixWhite)
			});
			itemDisplayRules.Add(new KeyAssetRuleGroup
			{
				keyAsset = (Object)(object)Equipment.AffixPoison,
				displayRuleGroup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarExploder/LunarExploderBody.prefab").WaitForCompletion().GetComponentInChildren<CharacterModel>()
					.itemDisplayRuleSet.FindDisplayRuleGroup((Object)(object)Equipment.AffixPoison)
			});
			itemDisplayRules.Add(new KeyAssetRuleGroup
			{
				keyAsset = (Object)(object)Equipment.AffixHaunted,
				displayRuleGroup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarExploder/LunarExploderBody.prefab").WaitForCompletion().GetComponentInChildren<CharacterModel>()
					.itemDisplayRuleSet.FindDisplayRuleGroup((Object)(object)Equipment.AffixHaunted)
			});
			itemDisplayRules.Add(new KeyAssetRuleGroup
			{
				keyAsset = (Object)(object)Equipment.AffixLunar,
				displayRuleGroup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarExploder/LunarExploderBody.prefab").WaitForCompletion().GetComponentInChildren<CharacterModel>()
					.itemDisplayRuleSet.FindDisplayRuleGroup((Object)(object)Equipment.AffixLunar)
			});
			itemDisplayRules.Add(new KeyAssetRuleGroup
			{
				keyAsset = (Object)(object)Equipment.EliteVoidEquipment,
				displayRuleGroup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarExploder/LunarExploderBody.prefab").WaitForCompletion().GetComponentInChildren<CharacterModel>()
					.itemDisplayRuleSet.FindDisplayRuleGroup((Object)(object)Equipment.EliteVoidEquipment)
			});
			itemDisplayRules.Add(new KeyAssetRuleGroup
			{
				keyAsset = (Object)(object)Equipment.EliteAurelioniteEquipment,
				displayRuleGroup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarExploder/LunarExploderBody.prefab").WaitForCompletion().GetComponentInChildren<CharacterModel>()
					.itemDisplayRuleSet.FindDisplayRuleGroup((Object)(object)Equipment.EliteAurelioniteEquipment)
			});
			itemDisplayRules.Add(new KeyAssetRuleGroup
			{
				keyAsset = (Object)(object)Equipment.EliteBeadEquipment,
				displayRuleGroup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarExploder/LunarExploderBody.prefab").WaitForCompletion().GetComponentInChildren<CharacterModel>()
					.itemDisplayRuleSet.FindDisplayRuleGroup((Object)(object)Equipment.EliteBeadEquipment)
			});
			itemDisplayRules.Add(new KeyAssetRuleGroup
			{
				keyAsset = (Object)(object)Addressables.LoadAssetAsync<EquipmentDef>((object)"RoR2/DLC1/EliteEarth/EliteEarthEquipment.asset").WaitForCompletion(),
				displayRuleGroup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarExploder/LunarExploderBody.prefab").WaitForCompletion().GetComponentInChildren<CharacterModel>()
					.itemDisplayRuleSet.FindDisplayRuleGroup((Object)(object)Addressables.LoadAssetAsync<EquipmentDef>((object)"RoR2/DLC1/EliteEarth/EliteEarthEquipment.asset").WaitForCompletion())
			});
			itemDisplayRules.Add(new KeyAssetRuleGroup
			{
				keyAsset = (Object)(object)Equipment.Jetpack,
				displayRuleGroup = new DisplayRuleGroup
				{
					rules = (ItemDisplayRule[])(object)new ItemDisplayRule[1]
					{
						new ItemDisplayRule
						{
							ruleType = (ItemDisplayRuleType)0,
							followerPrefab = LoadDisplay("DisplayBugWings"),
							childName = "MuzzleCore",
							localPos = new Vector3(0f, -1f, -0.5f),
							localAngles = new Vector3(205f, 0f, 0f),
							localScale = new Vector3(0f, 0f, 0f),
							limbMask = (LimbFlags)0
						}
					}
				}
			});
			itemDisplayRules.Add(new KeyAssetRuleGroup
			{
				keyAsset = (Object)(object)Equipment.GoldGat,
				displayRuleGroup = new DisplayRuleGroup
				{
					rules = (ItemDisplayRule[])(object)new ItemDisplayRule[1]
					{
						new ItemDisplayRule
						{
							ruleType = (ItemDisplayRuleType)0,
							followerPrefab = LoadDisplay("DisplayGoldGat"),
							childName = "MuzzleCore",
							localPos = new Vector3(0f, 0f, 0f),
							localAngles = new Vector3(0f, -90f, 0f),
							localScale = new Vector3(0f, 0f, 0f),
							limbMask = (LimbFlags)0
						}
					}
				}
			});
			itemDisplayRuleSet.keyAssetRuleGroups = itemDisplayRules.ToArray();
			itemDisplayRuleSet.GenerateRuntimeValues();
		}

		internal static void PopulateDisplays()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			ItemDisplayRuleSet val = ((Component)Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Commando/CommandoBody.prefab").WaitForCompletion().GetComponent<ModelLocator>()
				.modelTransform).GetComponent<CharacterModel>().itemDisplayRuleSet;
			KeyAssetRuleGroup[] keyAssetRuleGroups = val.keyAssetRuleGroups;
			for (int i = 0; i < keyAssetRuleGroups.Length; i++)
			{
				ItemDisplayRule[] rules = keyAssetRuleGroups[i].displayRuleGroup.rules;
				for (int j = 0; j < rules.Length; j++)
				{
					GameObject followerPrefab = rules[j].followerPrefab;
					if (Object.op_Implicit((Object)(object)followerPrefab))
					{
						string key = ((Object)followerPrefab).name?.ToLower();
						if (!itemDisplayPrefabs.ContainsKey(key))
						{
							itemDisplayPrefabs[key] = followerPrefab;
						}
					}
				}
			}
		}

		internal static GameObject LoadDisplay(string name)
		{
			if (itemDisplayPrefabs.ContainsKey(name.ToLower()) && Object.op_Implicit((Object)(object)itemDisplayPrefabs[name.ToLower()]))
			{
				return itemDisplayPrefabs[name.ToLower()];
			}
			return null;
		}
	}
	public static class LunarExploderSkins
	{
		private static GameObjectActivation[] getActivations(GameObject[] allObjects, params GameObject[] activatedObjects)
		{
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			List<GameObjectActivation> list = new List<GameObjectActivation>();
			for (int i = 0; i < allObjects.Length; i++)
			{
				bool shouldActivate = activatedObjects.Contains(allObjects[i]);
				list.Add(new GameObjectActivation
				{
					gameObject = allObjects[i],
					shouldActivate = shouldActivate
				});
			}
			return list.ToArray();
		}

		public static void RegisterSkins()
		{
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: 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_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_010f: 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_01ae: 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_01ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0213: Unknown result type (might be due to invalid IL or missing references)
			//IL_0227: Unknown result type (might be due to invalid IL or missing references)
			//IL_0270: 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_0155: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f4: 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_034c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0360: Unknown result type (might be due to invalid IL or missing references)
			//IL_0374: Unknown result type (might be due to invalid IL or missing references)
			//IL_0388: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b1: 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_0440: Unknown result type (might be due to invalid IL or missing references)
			//IL_045b: 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_04ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d4: 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_0412: Unknown result type (might be due to invalid IL or missing references)
			//IL_0417: Unknown result type (might be due to invalid IL or missing references)
			//IL_058c: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_05e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_05f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_060c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0620: Unknown result type (might be due to invalid IL or missing references)
			//IL_0669: Unknown result type (might be due to invalid IL or missing references)
			//IL_055e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0563: Unknown result type (might be due to invalid IL or missing references)
			//IL_06d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_06f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0730: Unknown result type (might be due to invalid IL or missing references)
			//IL_0744: Unknown result type (might be due to invalid IL or missing references)
			//IL_0758: Unknown result type (might be due to invalid IL or missing references)
			//IL_076c: Unknown result type (might be due to invalid IL or missing references)
			//IL_07b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_06aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_06af: Unknown result type (might be due to invalid IL or missing references)
			//IL_0824: Unknown result type (might be due to invalid IL or missing references)
			//IL_07f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_07fb: Unknown result type (might be due to invalid IL or missing references)
			GameObject myCharacter = LunarExploder.myCharacter;
			GameObject gameObject = ((Component)myCharacter.GetComponentInChildren<ModelLocator>().modelTransform).gameObject;
			CharacterModel component = gameObject.GetComponent<CharacterModel>();
			ModelSkinController val = gameObject.AddComponent<ModelSkinController>();
			ChildLocator component2 = gameObject.GetComponent<ChildLocator>();
			SkinnedMeshRenderer fieldValue = Reflection.GetFieldValue<SkinnedMeshRenderer>((object)component, "mainSkinnedMeshRenderer");
			LanguageAPI.Add("LunarExploder_DEFAULT_SKIN", "Default Exploder");
			SkinDefInfo val2 = default(SkinDefInfo);
			val2.BaseSkins = Array.Empty<SkinDef>();
			val2.MinionSkinReplacements = (MinionSkinReplacement[])(object)new MinionSkinReplacement[0];
			val2.ProjectileGhostReplacements = (ProjectileGhostReplacement[])(object)new ProjectileGhostReplacement[0];
			val2.Icon = Skins.CreateSkinIcon(new Color(0.6f, 0.4f, 1f), new Color(0.5019608f, 0f, 0f), new Color(0.6f, 0.4f, 1f), new Color(0.5019608f, 0f, 0f));
			val2.MeshReplacements = (MeshReplacement[])(object)new MeshReplacement[0];
			val2.Name = "LunarExploder_DEFAULT_SKIN";
			val2.NameToken = "LunarExploder_DEFAULT_SKIN";
			val2.RendererInfos = component.baseRendererInfos;
			val2.RootObject = gameObject;
			RendererInfo[] rendererInfos = val2.RendererInfos;
			RendererInfo[] array = (RendererInfo[])(object)new RendererInfo[rendererInfos.Length];
			rendererInfos.CopyTo(array, 0);
			Material defaultMaterial = array[0].defaultMaterial;
			if (Object.op_Implicit((Object)(object)defaultMaterial))
			{
				defaultMaterial = Object.Instantiate<Material>(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarExploder/LunarExploderBody.prefab").WaitForCompletion().GetComponentInChildren<CharacterModel>()
					.baseRendererInfos[0].defaultMaterial);
				array[0].defaultMaterial = defaultMaterial;
			}
			val2.RendererInfos = array;
			SkinDef item = Skins.CreateNewSkinDef(val2);
			LanguageAPI.Add("LunarExploder_Lunar_SKIN", "Lunar");
			SkinDefInfo val3 = default(SkinDefInfo);
			val3.BaseSkins = Array.Empty<SkinDef>();
			val3.MinionSkinReplacements = (MinionSkinReplacement[])(object)new MinionSkinReplacement[0];
			val3.ProjectileGhostReplacements = (ProjectileGhostReplacement[])(object)new ProjectileGhostReplacement[0];
			val3.Icon = Skins.CreateSkinIcon(new Color(0.6f, 0.4f, 1f), new Color(0.8f, 0.7019608f, 1f), new Color(0.6f, 0.4f, 1f), new Color(0.8f, 0.7019608f, 1f));
			val3.MeshReplacements = (MeshReplacement[])(object)new MeshReplacement[0];
			val3.Name = "LunarExploder_Lunar_SKIN";
			val3.NameToken = "LunarExploder_Lunar_SKIN";
			val3.RendererInfos = component.baseRendererInfos;
			val3.RootObject = gameObject;
			rendererInfos = val2.RendererInfos;
			array = (RendererInfo[])(object)new RendererInfo[rendererInfos.Length];
			rendererInfos.CopyTo(array, 0);
			defaultMaterial = array[0].defaultMaterial;
			if (Object.op_Implicit((Object)(object)defaultMaterial))
			{
				defaultMaterial = Object.Instantiate<Material>(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarGolem/LunarGolemBody.prefab").WaitForCompletion().GetComponentInChildren<CharacterModel>()
					.baseRendererInfos[0].defaultMaterial);
				array[0].defaultMaterial = defaultMaterial;
			}
			val3.RendererInfos = array;
			SkinDef item2 = Skins.CreateNewSkinDef(val3);
			LanguageAPI.Add("LunarExploder_Aurelionite_SKIN", "Aurelionite");
			SkinDefInfo val4 = default(SkinDefInfo);
			val4.BaseSkins = Array.Empty<SkinDef>();
			val4.MinionSkinReplacements = (MinionSkinReplacement[])(object)new MinionSkinReplacement[0];
			val4.ProjectileGhostReplacements = (ProjectileGhostReplacement[])(object)new ProjectileGhostReplacement[0];
			val4.Icon = Skins.CreateSkinIcon(new Color(1f, 67f / 85f, 0.1254902f), new Color(74f / 85f, 39f / 85f, 0f), new Color(0.14509805f, 4f / 85f, 0f), new Color(0.9843137f, 82f / 85f, 79f / 85f));
			val4.MeshReplacements = (MeshReplacement[])(object)new MeshReplacement[0];
			val4.Name = "LunarExploder_Aurelionite_SKIN";
			val4.NameToken = "LunarExploder_Aurelionite_SKIN";
			val4.RendererInfos = component.baseRendererInfos;
			val4.RootObject = gameObject;
			rendererInfos = val2.RendererInfos;
			array = (RendererInfo[])(object)new RendererInfo[rendererInfos.Length];
			rendererInfos.CopyTo(array, 0);
			defaultMaterial = array[0].defaultMaterial;
			if (Object.op_Implicit((Object)(object)defaultMaterial))
			{
				defaultMaterial = Object.Instantiate<Material>(Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC2/matAurelioniteGeode.mat").WaitForCompletion());
				array[0].defaultMaterial = defaultMaterial;
			}
			val4.RendererInfos = array;
			SkinDef item3 = Skins.CreateNewSkinDef(val4);
			LanguageAPI.Add("LunarExploder_Engine_SKIN", "Engine");
			SkinDefInfo val5 = default(SkinDefInfo);
			val5.BaseSkins = Array.Empty<SkinDef>();
			val5.MinionSkinReplacements = (MinionSkinReplacement[])(object)new MinionSkinReplacement[0];
			val5.ProjectileGhostReplacements = (ProjectileGhostReplacement[])(object)new ProjectileGhostReplacement[0];
			val5.Icon = Skins.CreateSkinIcon(new Color(0.83137256f, 56f / 85f, 20f / 51f), new Color(4f / 15f, 46f / 85f, 0.6431373f), new Color(0.4f, 33f / 85f, 8f / 15f), new Color(13f / 85f, 0.1764706f, 0.32156864f));
			val5.MeshReplacements = (MeshReplacement[])(object)new MeshReplacement[0];
			val5.Name = "LunarExploder_Engine_SKIN";
			val5.NameToken = "LunarExploder_Engine_SKIN";
			val5.RendererInfos = component.baseRendererInfos;
			val5.RootObject = gameObject;
			rendererInfos = val2.RendererInfos;
			array = (RendererInfo[])(object)new RendererInfo[rendererInfos.Length];
			rendererInfos.CopyTo(array, 0);
			defaultMaterial = array[0].defaultMaterial;
			if (Object.op_Implicit((Object)(object)defaultMaterial))
			{
				defaultMaterial = Object.Instantiate<Material>(Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC2/Seeker/matSeeker.mat").WaitForCompletion());
				array[0].defaultMaterial = defaultMaterial;
			}
			val5.RendererInfos = array;
			SkinDef item4 = Skins.CreateNewSkinDef(val5);
			LanguageAPI.Add("LunarExploder_False_SKIN", "Mysterious");
			SkinDefInfo val6 = default(SkinDefInfo);
			val6.BaseSkins = Array.Empty<SkinDef>();
			val6.MinionSkinReplacements = (MinionSkinReplacement[])(object)new MinionSkinReplacement[0];
			val6.ProjectileGhostReplacements = (ProjectileGhostReplacement[])(object)new ProjectileGhostReplacement[0];
			val6.Icon = Skins.CreateSkinIcon(new Color(0.56078434f, 0.20784314f, 19f / 85f), new Color(43f / 51f, 0.8901961f, 0.9411765f), new Color(1f / 3f, 24f / 85f, 29f / 85f), new Color(26f / 51f, 0.64705884f, 53f / 85f));
			val6.MeshReplacements = (MeshReplacement[])(object)new MeshReplacement[0];
			val6.Name = "LunarExploder_False_SKIN";
			val6.NameToken = "LunarExploder_False_SKIN";
			val6.RendererInfos = component.baseRendererInfos;
			val6.RootObject = gameObject;
			rendererInfos = val2.RendererInfos;
			array = (RendererInfo[])(object)new RendererInfo[rendererInfos.Length];
			rendererInfos.CopyTo(array, 0);
			defaultMaterial = array[0].defaultMaterial;
			if (Object.op_Implicit((Object)(object)defaultMaterial))
			{
				defaultMaterial = Object.Instantiate<Material>(Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC2/FalseSon/matFalseSon.mat").WaitForCompletion());
				array[0].defaultMaterial = defaultMaterial;
			}
			val6.RendererInfos = array;
			SkinDef item5 = Skins.CreateNewSkinDef(val6);
			LanguageAPI.Add("LunarExploder_Scorch_SKIN", "Scorching");
			SkinDefInfo val7 = default(SkinDefInfo);
			val7.BaseSkins = Array.Empty<SkinDef>();
			val7.MinionSkinReplacements = (MinionSkinReplacement[])(object)new MinionSkinReplacement[0];
			val7.ProjectileGhostReplacements = (ProjectileGhostReplacement[])(object)new ProjectileGhostReplacement[0];
			val7.Icon = Skins.CreateSkinIcon(new Color(0.99607843f, 0.827451f, 0.41960785f), new Color(1f, 0.4f, 0.003921569f), new Color(41f / 51f, 0f, 3f / 85f), new Color(0.6313726f, 0.19215687f, 0f));
			val7.MeshReplacements = (MeshReplacement[])(object)new MeshReplacement[0];
			val7.Name = "LunarExploder_Scorch_SKIN";
			val7.NameToken = "LunarExploder_Scorch_SKIN";
			val7.RendererInfos = component.baseRendererInfos;
			val7.RootObject = gameObject;
			rendererInfos = val2.RendererInfos;
			array = (RendererInfo[])(object)new RendererInfo[rendererInfos.Length];
			rendererInfos.CopyTo(array, 0);
			defaultMaterial = array[0].defaultMaterial;
			if (Object.op_Implicit((Object)(object)defaultMaterial))
			{
				defaultMaterial = Object.Instantiate<Material>(Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC2/Scorchling/matScorchling.mat").WaitForCompletion());
				array[0].defaultMaterial = defaultMaterial;
			}
			val7.RendererInfos = array;
			SkinDef item6 = Skins.CreateNewSkinDef(val7);
			List<SkinDef> list = new List<SkinDef> { item, item2, item3, item4, item5, item6 };
			val.skins = list.ToArray();
		}
	}
	public class ElderLemurianUtility : BaseState
	{
		public float stopWatch;

		public override void OnEnter()
		{
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			((EntityState)this).characterBody.SetAimTimer(0.2f);
			((EntityState)this).PlayAnimation("Gesture, Override", "Flamebreath", "Flamebreath.playbackRate", 0.5f, 0f);
			Util.PlayAttackSpeedSound(ChargeMegaFireball.attackString, ((EntityState)this).gameObject, base.attackSpeedStat);
			if (((EntityState)this).isAuthority)
			{
				ProjectileManager.instance.FireProjectile(ElderLemurian.ElderUtilProjectile, ((Component)((Component)((EntityState)this).GetModelTransform()).GetComponent<ChildLocator>().FindChild("MuzzleMouth")).transform.position, ((Component)((EntityState)this).characterMotor.characterDirection).transform.rotation, ((EntityState)this).gameObject, base.damageStat * Primary1.damageCoefficient, Primary1.force, Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master), (DamageColorIndex)0, (GameObject)null, 0f);
			}
		}

		public override void OnExit()
		{
			((EntityState)this).PlayCrossfade("Gesture, Override", "BufferEmpty", 0.1f);
			((EntityState)this).OnExit();
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			stopWatch += Time.fixedDeltaTime;
			if (stopWatch >= 0.5f)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)1;
		}
	}
	public class LemurianMain : GenericCharacterMain
	{
		public override void OnEnter()
		{
			((GenericCharacterMain)this).OnEnter();
			if (Lemurian.transformer < (float)Run.instance.loopClearCount)
			{
				((EntityState)this).characterBody.AddBuff(Buffs.TransformBuff);
			}
			SkillDef skillDef = ((EntityState)this).characterBody.skillLocator.primary.skillDef;
			bool flag = skillDef.skillNameToken == "Primary3_NAME";
			if (flag)
			{
				CrosshairUtils.RequestOverrideForBody(((EntityState)this).characterBody, LemPrefabs.LemLaserPrimCh, (OverridePriority)0);
			}
			if (!flag)
			{
				CrosshairUtils.RequestOverrideForBody(((EntityState)this).characterBody, LemPrefabs.LemChprefab, (OverridePriority)0);
			}
		}

		public override void Update()
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			((GenericCharacterMain)this).Update();
			KeyboardShortcut value = Lemurian.switchKey.Value;
			if (Input.GetKeyDown(((KeyboardShortcut)(ref value)).MainKey) && ((EntityState)this).characterBody.HasBuff(Buffs.TransformBuff) && ((EntityState)this).isAuthority)
			{
				Lemurian.transformer = Run.instance.loopClearCount;
				Switch nextState = new Switch();
				((EntityState)this).outer.SetNextState((EntityState)(object)nextState);
			}
		}

		public override void FixedUpdate()
		{
			((GenericCharacterMain)this).FixedUpdate();
		}

		public override void OnExit()
		{
			((GenericCharacterMain)this).OnExit();
		}
	}
	public class BleedDistance : BaseState
	{
		public static float baseDuration = 0.8f;

		public static float damageCoefficient = 0.75f;

		public static float procCoefficient;

		public static float selfForce = 2f;

		public static float forceMagnitude = 16f;

		public static GameObject hitEffectPrefab;

		public static GameObject swipeEffectPrefab;

		public static string enterSoundString;

		public static string slashSoundString;

		private OverlapAttack attack;

		private Animator modelAnimator;

		private float duration;

		private int spikesfired;

		private Transform modelTransform;

		public float stopWatch;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			duration = baseDuration / base.attackSpeedStat;
			modelAnimator = ((EntityState)this).GetModelAnimator();
			modelTransform = ((EntityState)this).GetModelTransform();
			((EntityState)this).characterBody.SetAimTimer(duration);
			Util.PlayAttackSpeedSound(DoubleSlash.enterSoundString, ((EntityState)this).gameObject, base.attackSpeedStat);
			if (Object.op_Implicit((Object)(object)modelAnimator))
			{
				((EntityState)this).PlayAnimation("Gesture, Additive", "DoubleSlash", "DoubleSlash.playbackRate", duration * 0.9f, 0f);
				((EntityState)this).PlayAnimation("Gesture, Override", "DoubleSlash", "DoubleSlash.playbackRate", duration * 0.9f, 0f);
			}
			spikesfired = 0;
			stopWatch = 0f;
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
		}

		private void HandleSlash(string animatorParamName, string muzzleName, string hitBoxGroupName)
		{
			if (modelAnimator.GetFloat(animatorParamName) > 0.1f)
			{
				Util.PlaySound(DoubleSlash.slashSoundString, ((EntityState)this).gameObject);
				EffectManager.SimpleMuzzleFlash(DoubleSlash.swipeEffectPrefab, ((EntityState)this).gameObject, muzzleName, true);
				attack.Fire((List<HurtBox>)null);
			}
		}

		public override void FixedUpdate()
		{
			//IL_001b: 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_005b: 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_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			stopWatch += Time.fixedDeltaTime;
			Ray aimRay = ((BaseState)this).GetAimRay();
			if (stopWatch >= duration * 0.4f && spikesfired == 0 && ((EntityState)this).isAuthority)
			{
				ProjectileManager.instance.FireProjectile(Imp.VoidSpike, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction), ((EntityState)this).gameObject, base.damageStat * BleedSec.damageCoefficient, 0f, Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master), (DamageColorIndex)0, (GameObject)null, 150f);
				spikesfired++;
			}
			if (stopWatch >= duration * 0.5f && spikesfired < 2 && ((EntityState)this).isAuthority)
			{
				ProjectileManager.instance.FireProjectile(Imp.VoidSpike, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction), ((EntityState)this).gameObject, base.damageStat * BleedSec.damageCoefficient, 0f, Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master), (DamageColorIndex)0, (GameObject)null, 150f);
				spikesfired++;
			}
			if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)2;
		}
	}
	public class BleedMelee : BaseState
	{
		public static float baseDuration = 0.75f;

		public static float damageCoefficient = 1.2f;

		public static float procCoefficient;

		public static float selfForce = 2f;

		public static float forceMagnitude = 16f;

		public static GameObject hitEffectPrefab;

		public static GameObject swipeEffectPrefab;

		public static string enterSoundString;

		public static string slashSoundString;

		private OverlapAttack attack;

		private Animator modelAnimator;

		private float duration;

		private int slashCount;

		private Transform modelTransform;

		public override void OnEnter()
		{
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Expected O, but got Unknown
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_0117: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			duration = baseDuration / base.attackSpeedStat;
			modelAnimator = ((EntityState)this).GetModelAnimator();
			modelTransform = ((EntityState)this).GetModelTransform();
			attack = new OverlapAttack();
			attack.attacker = ((EntityState)this).gameObject;
			attack.inflictor = ((EntityState)this).gameObject;
			attack.teamIndex = TeamComponent.GetObjectTeam(attack.attacker);
			if (((EntityState)this).characterBody.HasBuff(Buffs.SlashBuff))
			{
				attack.damage = 1.5f * damageCoefficient * base.damageStat;
			}
			else
			{
				attack.damage = damageCoefficient * base.damageStat;
			}
			attack.hitEffectPrefab = DoubleSlash.hitEffectPrefab;
			attack.isCrit = Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master);
			attack.procCoefficient = 1.01f;
			attack.damageType = DamageTypeCombo.op_Implicit((DamageType)0);
			((EntityState)this).characterBody.SetAimTimer(duration);
			Util.PlayAttackSpeedSound(DoubleSlash.enterSoundString, ((EntityState)this).gameObject, base.attackSpeedStat);
			if (Object.op_Implicit((Object)(object)modelAnimator))
			{
				((EntityState)this).PlayAnimation("Gesture, Additive", "DoubleSlash", "DoubleSlash.playbackRate", duration * 0.9f, 0f);
				((EntityState)this).PlayAnimation("Gesture, Override", "DoubleSlash", "DoubleSlash.playbackRate", duration * 0.9f, 0f);
			}
		}

		public override void OnExit()
		{
			if (((EntityState)this).characterBody.HasBuff(Buffs.SlashBuff))
			{
				((EntityState)this).characterBody.ClearTimedBuffs(Buffs.SlashBuff);
			}
			((EntityState)this).OnExit();
		}

		private void HandleSlash(string animatorParamName, string muzzleName, string hitBoxGroupName)
		{
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: 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_010b: 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)
			if (!(modelAnimator.GetFloat(animatorParamName) > 0.1f))
			{
				return;
			}
			Util.PlaySound(DoubleSlash.slashSoundString, ((EntityState)this).gameObject);
			EffectManager.SimpleMuzzleFlash(DoubleSlash.swipeEffectPrefab, ((EntityState)this).gameObject, muzzleName, true);
			slashCount++;
			if (Object.op_Implicit((Object)(object)modelTransform))
			{
				attack.hitBoxGroup = Array.Find(((Component)modelTransform).GetComponents<HitBoxGroup>(), (HitBoxGroup element) => element.groupName == hitBoxGroupName);
			}
			if (Object.op_Implicit((Object)(object)((EntityState)this).healthComponent))
			{
				((EntityState)this).healthComponent.TakeDamageForce(((EntityState)this).characterDirection.forward * selfForce, true, false);
			}
			attack.ResetIgnoredHealthComponents();
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection))
			{
				attack.forceVector = ((EntityState)this).characterDirection.forward * DoubleSlash.forceMagnitude;
			}
			if (attack.Fire((List<HurtBox>)null) && Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && !((EntityState)this).characterMotor.isGrounded)
			{
				((BaseState)this).SmallHop(((EntityState)this).characterMotor, 8f);
			}
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).isAuthority && Object.op_Implicit((Object)(object)modelAnimator))
			{
				switch (slashCount)
				{
				case 1:
					HandleSlash("HandL.hitBoxActive", "SwipeLeft", "HandL");
					break;
				case 0:
					HandleSlash("HandR.hitBoxActive", "SwipeRight", "HandR");
					break;
				}
			}
			if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)2;
		}
	}
	public class BleedSec : BaseState
	{
		public static float damageCoefficient = 0.75f;

		public static float baseDuration = 0.2f;

		public static GameObject hitEffectPrefab;

		public static GameObject swipeEffectPrefab;

		public static string enterSoundString;

		public static string attackSoundString;

		public int projectileCount;

		public int projectilesfired;

		public static float projectileYawSpread;

		public static float projectileDamageCoefficient;

		public static float projectileSpeed;

		public static float projectileSpeedPerProjectile;

		public static GameObject projectilePrefab;

		private OverlapAttack attack;

		private Animator modelAnimator;

		private float duration;

		private int slashCount;

		private Transform modelTransform;

		public int attacktype;

		public float stopwatch;

		public GameObject chargeInstance;

		public bool charger;

		public static float damagecoeff = 0.5f;

		public override void OnEnter()
		{
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			duration = 2f / base.attackSpeedStat;
			modelAnimator = ((EntityState)this).GetModelAnimator();
			modelTransform = ((EntityState)this).GetModelTransform();
			projectileCount = 5;
			Transform val = ((Component)((EntityState)this).GetModelTransform()).GetComponent<ChildLocator>().FindChild("Center");
			if (Object.op_Implicit((Object)(object)val))
			{
				chargeInstance = Object.Instantiate<GameObject>(ChargeMegaFireball.chargeEffectPrefab, val.position, val.rotation);
				chargeInstance.transform.parent = val;
				ScaleParticleSystemDuration component = chargeInstance.GetComponent<ScaleParticleSystemDuration>();
				if (Object.op_Implicit((Object)(object)component))
				{
					component.newDuration = duration;
				}
			}
			Util.PlaySound(FireVoidspikes.enterSoundString, ((EntityState)this).gameObject);
			projectilesfired = 0;
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody))
			{
				((EntityState)this).characterBody.SetAimTimer(duration);
			}
		}

		public override void OnExit()
		{
			if (Object.op_Implicit((Object)(object)chargeInstance))
			{
				EntityState.Destroy((Object)(object)chargeInstance);
			}
			((EntityState)this).OnExit();
		}

		public override void FixedUpdate()
		{
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_017c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			float num = ((!(base.attackSpeedStat > 4f)) ? duration : 0.5f);
			stopwatch += Time.fixedDeltaTime;
			Ray aimRay = ((BaseState)this).GetAimRay();
			if (!((EntityState)this).inputBank.skill2.down && ((EntityState)this).isAuthority)
			{
				if (Object.op_Implicit((Object)(object)modelAnimator) && projectilesfired < projectileCount)
				{
					((EntityState)this).PlayAnimation("Gesture, Override", "DoubleSlash", "DoubleSlash.playbackRate", baseDuration / base.attackSpeedStat, 0f);
					EffectManager.SimpleMuzzleFlash(FireVoidspikes.swipeEffectPrefab, ((EntityState)this).gameObject, "FireVoidspikesL", true);
					Util.PlaySound(FireVoidspikes.attackSoundString, ((EntityState)this).gameObject);
					Ray aimRay2 = ((BaseState)this).GetAimRay();
					FireSpike(aimRay2, 0f, 0f, 175f);
					projectilesfired++;
				}
				if (projectilesfired >= projectileCount && ((EntityState)this).isAuthority)
				{
					((EntityState)this).outer.SetNextStateToMain();
					return;
				}
			}
			if (((EntityState)this).isAuthority && ((EntityState)this).inputBank.skill2.down && stopwatch >= num)
			{
				Util.PlaySound(FireLaser.attackSoundString, ((EntityState)this).gameObject);
				FireLaser(((Ray)(ref aimRay)).direction);
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		private void FireLaser(Vector3 direction)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00da: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: 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_0127: Unknown result type (might be due to invalid IL or missing references)
			//IL_012c: Unknown result type (might be due to invalid IL or missing references)
			//IL_012d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0134: 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_013d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0142: 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_014b: 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_0155: Unknown result type (might be due to invalid IL or missing references)
			//IL_0160: 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_017d: 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_01af: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ba: 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_01c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d3: 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_01e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_020b: 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_0215: Unknown result type (might be due to invalid IL or missing references)
			//IL_0216: Unknown result type (might be due to invalid IL or missing references)
			//IL_021d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0224: Unknown result type (might be due to invalid IL or missing references)
			//IL_0226: Unknown result type (might be due to invalid IL or missing references)
			//IL_022b: Unknown result type (might be due to invalid IL or missing references)
			//IL_022c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0231: Unknown result type (might be due to invalid IL or missing references)
			//IL_0234: 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_0249: Unknown result type (might be due to invalid IL or missing references)
			//IL_025b: 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_0271: 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_0298: Unknown result type (might be due to invalid IL or missing references)
			//IL_029f: 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_02a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b1: 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_02c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e9: 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_02f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0302: Unknown result type (might be due to invalid IL or missing references)
			//IL_0304: Unknown result type (might be due to invalid IL or missing references)
			//IL_0309: Unknown result type (might be due to invalid IL or missing references)
			//IL_030a: 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_0312: Unknown result type (might be due to invalid IL or missing references)
			//IL_0317: Unknown result type (might be due to invalid IL or missing references)
			//IL_031c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0327: 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_0344: Unknown result type (might be due to invalid IL or missing references)
			//IL_034f: Unknown result type (might be due to invalid IL or missing references)
			//IL_036b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0376: Unknown result type (might be due to invalid IL or missing references)
			//IL_037d: Unknown result type (might be due to invalid IL or missing references)
			//IL_037f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0384: 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_03a0: 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_03c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d1: 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_03d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0405: Unknown result type (might be due to invalid IL or missing references)
			//IL_0417: Unknown result type (might be due to invalid IL or missing references)
			//IL_0422: Unknown result type (might be due to invalid IL or missing references)
			//IL_042d: 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_0454: Unknown result type (might be due to invalid IL or missing references)
			//IL_045b: 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)
			BulletAttack val = new BulletAttack
			{
				owner = ((EntityState)this).gameObject,
				weapon = ((EntityState)this).gameObject,
				origin = ((Component)((Component)((EntityState)this).GetModelTransform()).GetComponent<ChildLocator>().FindChild("Neck")).transform.position,
				aimVector = direction,
				bulletCount = 1u,
				falloffModel = (FalloffModel)0
			};
			LayerIndex world = LayerIndex.world;
			val.stopperMask = ((LayerIndex)(ref world)).mask;
			val.procCoefficient = 1.01f;
			val.damage = damagecoeff * base.damageStat;
			val.force = 1000f;
			val.tracerEffectPrefab = LemPrefabs.ImpSecLaser;
			val.hitEffectPrefab = FireLaser.hitEffectPrefab;
			val.isCrit = Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master);
			val.radius = 1f;
			val.smartCollision = true;
			val.damageType = DamageTypeCombo.op_Implicit((DamageType)0);
			val.Fire();
			BulletAttack val2 = new BulletAttack
			{
				owner = ((EntityState)this).gameObject,
				weapon = ((EntityState)this).gameObject,
				origin = ((Component)((Component)((EntityState)this).GetModelTransform()).GetComponent<ChildLocator>().FindChild("Neck")).transform.position,
				aimVector = direction,
				bulletCount = 1u,
				falloffModel = (FalloffModel)0
			};
			world = LayerIndex.world;
			val2.stopperMask = ((LayerIndex)(ref world)).mask;
			val2.procCoefficient = 1.01f;
			val2.damage = damagecoeff * base.damageStat;
			val2.force = 1000f;
			val2.tracerEffectPrefab = LemPrefabs.ImpSecLaser;
			val2.hitEffectPrefab = FireLaser.hitEffectPrefab;
			val2.isCrit = Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master);
			val2.radius = 1f;
			val2.smartCollision = true;
			val2.damageType = DamageTypeCombo.op_Implicit((DamageType)0);
			val2.Fire();
			BulletAttack val3 = new BulletAttack
			{
				owner = ((EntityState)this).gameObject,
				weapon = ((EntityState)this).gameObject,
				origin = ((Component)((Component)((EntityState)this).GetModelTransform()).GetComponent<ChildLocator>().FindChild("Neck")).transform.position,
				aimVector = direction,
				bulletCount = 1u,
				falloffModel = (FalloffModel)0
			};
			world = LayerIndex.world;
			val3.stopperMask = ((LayerIndex)(ref world)).mask;
			val3.procCoefficient = 1.01f;
			val3.damage = damagecoeff * base.damageStat;
			val3.force = 1000f;
			val3.hitEffectPrefab = FireLaser.hitEffectPrefab;
			val3.isCrit = Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master);
			val3.radius = 1f;
			val3.smartCollision = true;
			val3.damageType = DamageTypeCombo.op_Implicit((DamageType)0);
			val3.Fire();
			BulletAttack val4 = new BulletAttack
			{
				owner = ((EntityState)this).gameObject,
				weapon = ((EntityState)this).gameObject,
				origin = ((Component)((Component)((EntityState)this).GetModelTransform()).GetComponent<ChildLocator>().FindChild("Neck")).transform.position,
				aimVector = direction,
				bulletCount = 1u,
				falloffModel = (FalloffModel)0
			};
			world = LayerIndex.world;
			val4.stopperMask = ((LayerIndex)(ref world)).mask;
			val4.procCoefficient = 1.01f;
			val4.damage = damagecoeff * base.damageStat;
			val4.force = 1000f;
			val4.hitEffectPrefab = FireLaser.hitEffectPrefab;
			val4.isCrit = Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master);
			val4.radius = 1f;
			val4.smartCollision = true;
			val4.damageType = DamageTypeCombo.op_Implicit((DamageType)0);
			val4.Fire();
			BulletAttack val5 = new BulletAttack
			{
				owner = ((EntityState)this).gameObject,
				weapon = ((EntityState)this).gameObject,
				origin = ((Component)((Component)((EntityState)this).GetModelTransform()).GetComponent<ChildLocator>().FindChild("Neck")).transform.position,
				aimVector = direction,
				bulletCount = 1u,
				falloffModel = (FalloffModel)0
			};
			world = LayerIndex.world;
			val5.stopperMask = ((LayerIndex)(ref world)).mask;
			val5.procCoefficient = 1.01f;
			val5.damage = damagecoeff * base.damageStat;
			val5.force = 1000f;
			val5.hitEffectPrefab = FireLaser.hitEffectPrefab;
			val5.isCrit = Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master);
			val5.radius = 1f;
			val5.smartCollision = true;
			val5.damageType = DamageTypeCombo.op_Implicit((DamageType)0);
			val5.Fire();
		}

		private void FireSpike(Ray aimRay, float bonusPitch, float bonusYaw, float speed)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: 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_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			Vector3 val = Util.ApplySpread(((Ray)(ref aimRay)).direction, 0f, 5f, 1f, 1f, 0f, 0f);
			ProjectileManager.instance.FireProjectile(Imp.VoidSpike, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(val), ((EntityState)this).gameObject, base.damageStat * damageCoefficient, 0f, Util.CheckRoll(base.critStat, ((EntityState)thi