Decompiled source of Xenologist v1.0.3

Xenologist.dll

Decompiled 4 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using EntityStates;
using EntityStates.AI;
using EntityStates.AI.Walker;
using EntityStates.BrotherMonster.Weapon;
using EntityStates.Commando;
using EntityStates.Huntress;
using EntityStates.Mage.Weapon;
using EntityStates.Merc;
using EntityStates.NewtMonster;
using EntityStates.VoidInfestor;
using JetBrains.Annotations;
using KinematicCharacterController;
using On.RoR2;
using On.RoR2.UI;
using R2API;
using R2API.Utils;
using Rewired.ComponentControls.Effects;
using RoR2;
using RoR2.CharacterAI;
using RoR2.Orbs;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.UI;
using TMPro;
using Unity;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Bindings;
using UnityEngine.Events;
using UnityEngine.Networking;
using UnityEngine.Rendering;
using UnityEngine.Rendering.PostProcessing;
using UnityEngine.UI;

[assembly: AssemblyCompany("Xenologist")]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = "")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: CompilationRelaxations(8)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: AssemblyTitle("Xenologist")]
[assembly: AssemblyProduct("Xenologist")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace Xenologist
{
	internal class Assets
	{
		public static AssetBundle MainAssetBundle;

		public static void PopulateAssets()
		{
			if ((Object)(object)MainAssetBundle == (Object)null)
			{
				using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Xenologist.xenoassets"))
				{
					MainAssetBundle = AssetBundle.LoadFromStream(stream);
				}
			}
		}
	}
	internal class AIFollowProjectile : MonoBehaviour
	{
		private BaseAI ai;

		private AISkillDriver driver;

		private EntityStateMachine machine;

		public GameObject target;

		private void Start()
		{
			//IL_0087: 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_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: 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_0145: 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)
			machine = ((Component)this).GetComponent<EntityStateMachine>();
			if (Object.op_Implicit((Object)(object)machine))
			{
				machine.SetNextState((EntityState)(object)new AIFolowProjectileState());
			}
			ai = ((Component)this).GetComponent<BaseAI>();
			if (Object.op_Implicit((Object)(object)ai))
			{
				ai.currentEnemy.Reset();
				driver = ((Component)this).gameObject.AddComponent<AISkillDriver>();
				driver.customName = "FollowProjectile";
				driver.moveTargetType = (TargetType)3;
				driver.movementType = (MovementType)1;
				driver.aimType = (AimType)4;
				driver.ignoreNodeGraph = true;
				driver.buttonPressType = (ButtonPressType)0;
				driver.skillSlot = (SkillSlot)(-1);
				ai.currentEnemy.gameObject = target;
				ai.customTarget.gameObject = target;
				ai.selectedSkilldriverName = "FollowProjectile";
				ai.skillDriverEvaluation = new SkillDriverEvaluation
				{
					aimTarget = ai.customTarget,
					target = ai.customTarget,
					dominantSkillDriver = driver
				};
			}
		}

		private void FixedUpdate()
		{
			if (!Object.op_Implicit((Object)(object)target))
			{
				Object.Destroy((Object)(object)this);
			}
			if (Object.op_Implicit((Object)(object)ai))
			{
				ai.skillDriverUpdateTimer = 0.1f;
			}
		}

		private void OnDisable()
		{
			if (Object.op_Implicit((Object)(object)ai))
			{
				ai.customTarget.gameObject = null;
				ai.currentEnemy.Reset();
			}
			if (Object.op_Implicit((Object)(object)driver))
			{
				Object.Destroy((Object)(object)driver);
			}
		}
	}
	internal class BoomerangVoidBehaviour : MonoBehaviour
	{
		public GameObject projectile;

		public GameObject projectileGhost;

		public CharacterBody attacker;

		public float damage;

		public HealthComponent target;

		public int count;

		private void Start()
		{
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0093: Expected O, but got Unknown
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)projectile))
			{
				projectileGhost = ((Component)projectile.GetComponent<ProjectileController>().ghost).gameObject;
				projectileGhost.SetActive(false);
				projectile.SetActive(false);
			}
			if (Object.op_Implicit((Object)(object)target) && Object.op_Implicit((Object)(object)target.body))
			{
				Util.PlaySound("Play_item_void_critGlasses", ((Component)this).gameObject);
				if (NetworkServer.active)
				{
					DamageInfo val = new DamageInfo();
					val.attacker = ((Component)attacker).gameObject;
					val.damage = damage;
					val.damageType = (DamageType)0;
					val.damageColorIndex = (DamageColorIndex)9;
					val.position = target.body.corePosition;
					val.crit = attacker.RollCrit();
					val.rejected = false;
					target.TakeDamage(val);
					GlobalEventManager.instance.OnHitEnemy(val, ((Component)target).gameObject);
					GlobalEventManager.instance.OnHitAll(val, ((Component)target).gameObject);
				}
			}
		}

		public HealthComponent PickNextTarget(TeamIndex team, float dist = 160f)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: 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_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_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Invalid comparison between Unknown and I4
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			BullseyeSearch val = new BullseyeSearch();
			val.searchOrigin = ((Component)this).transform.position;
			val.searchDirection = Vector3.zero;
			val.teamMaskFilter = TeamMask.allButNeutral;
			if ((int)team != -1)
			{
				((TeamMask)(ref val.teamMaskFilter)).RemoveTeam(team);
			}
			val.filterByLoS = false;
			val.sortMode = (SortMode)1;
			val.maxDistanceFilter = dist;
			val.RefreshCandidates();
			HurtBox val2 = val.GetResults().FirstOrDefault();
			return Object.op_Implicit((Object)(object)val2) ? val2.healthComponent : null;
		}

		private void OnDisable()
		{
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_009c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			if (count > 0)
			{
				if (Object.op_Implicit((Object)(object)attacker))
				{
					HealthComponent val = null;
					val = ((Object.op_Implicit((Object)(object)target) && target.alive) ? target : PickNextTarget(attacker.teamComponent.teamIndex));
					if (Object.op_Implicit((Object)(object)val) && NetworkServer.active)
					{
						GameObject val2 = Object.Instantiate<GameObject>(Prefabs.boomerangVoidHitEffect, Object.op_Implicit((Object)(object)val.body) ? val.body.corePosition : ((Component)this).transform.position, Quaternion.identity);
						BoomerangVoidBehaviour component = val2.GetComponent<BoomerangVoidBehaviour>();
						component.count = count - 1;
						component.projectile = projectile;
						component.damage = damage;
						component.attacker = attacker;
						component.target = val;
						NetworkServer.Spawn(val2);
					}
				}
			}
			else
			{
				projectileGhost.SetActive(true);
				projectile.SetActive(true);
			}
		}
	}
	internal class DisplayBehaviour : MonoBehaviour
	{
		private uint ID;

		public bool Switch = true;

		private float stopwatch;

		public float lerpDuration = 6f;

		public float yPos = 0.1f;

		private Vector3 startPos = Vector3.zero;

		private AnimationCurve curve = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f);

		public CharacterModel model;

		private void OnEnable()
		{
			ID = AkSoundEngine.PostEvent("Play_roboBall_spawn", ((Component)this).gameObject);
			TemporaryOverlay val = ((Component)this).gameObject.AddComponent<TemporaryOverlay>();
			val.duration = 1.2f;
			val.destroyComponentOnEnd = true;
			val.originalMaterial = Prefabs.Load<Material>("RoR2/Base/RoboBallBoss/matSummonRoboBall.mat");
			val.inspectorCharacterModel = model;
			val.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
			val.animateShaderAlpha = true;
		}

		private void FixedUpdate()
		{
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: 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_008f: Unknown result type (might be due to invalid IL or missing references)
			stopwatch += Time.fixedDeltaTime;
			float num = curve.Evaluate(stopwatch / lerpDuration);
			Vector3 val = default(Vector3);
			((Vector3)(ref val))..ctor(0f, Switch ? yPos : (0f - yPos), 0f);
			((Component)this).transform.localPosition = Vector3.Lerp(startPos, val, num);
			if (((Component)this).transform.localPosition == val)
			{
				startPos = ((Component)this).transform.localPosition;
				stopwatch = 0f;
				Switch = !Switch;
			}
		}

		private void OnDisable()
		{
			AkSoundEngine.StopPlayingID(ID);
		}
	}
	internal class MalachiteTargetFinder : MonoBehaviour
	{
		public float stopwatch;

		public SyringeBehaviour behaviour;

		public ProjectileSteerTowardTarget steer;

		public ProjectileTargetComponent target;

		public bool On;

		public int count;

		public HurtBox PickNextTarget(GameObject filter, int count)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Expected O, but got Unknown
			//IL_0016: 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_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: 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)
			float num = 1 + count / 10;
			BullseyeSearch val = new BullseyeSearch();
			val.searchOrigin = ((Component)this).transform.position;
			val.searchDirection = ((Component)this).transform.forward;
			val.teamMaskFilter = TeamMask.allButNeutral;
			val.sortMode = (SortMode)3;
			val.maxDistanceFilter = 25f * num;
			val.minAngleFilter = 0f;
			val.maxAngleFilter = 20f * num;
			val.RefreshCandidates();
			if (Object.op_Implicit((Object)(object)filter))
			{
				val.FilterOutGameObject(filter);
			}
			return val.GetResults().FirstOrDefault();
		}

		public void Start()
		{
			behaviour = ((Component)this).GetComponent<SyringeBehaviour>();
			steer = ((Component)this).GetComponent<ProjectileSteerTowardTarget>();
			target = ((Component)this).GetComponent<ProjectileTargetComponent>();
		}

		public void FixedUpdate()
		{
			if (!On)
			{
				if (Object.op_Implicit((Object)(object)behaviour) && behaviour.sampleModifiers.Contains(5) && Object.op_Implicit((Object)(object)behaviour.behaviour))
				{
					count = behaviour.behaviour.GetSampleCount(5);
					On = count > 0;
				}
				return;
			}
			stopwatch += Time.fixedDeltaTime;
			if (!(stopwatch >= 0.1f) || !Object.op_Implicit((Object)(object)behaviour) || !Object.op_Implicit((Object)(object)behaviour.owner) || !Object.op_Implicit((Object)(object)steer) || !Object.op_Implicit((Object)(object)target))
			{
				return;
			}
			stopwatch = 0f;
			if (!Object.op_Implicit((Object)(object)target.target))
			{
				steer.rotationSpeed = 60 + 30 * count;
				HurtBox val = PickNextTarget(behaviour.owner, count);
				if (Object.op_Implicit((Object)(object)val))
				{
					target.target = ((Component)val).transform;
				}
			}
		}
	}
	internal class OverloadBounce : MonoBehaviour
	{
		public int remainingBounces;
	}
	internal class SampleInteraction : NetworkBehaviour, IInteractable, IDisplayNameProvider
	{
		[SyncVar]
		public int sampleIndex;

		public Renderer renderer;

		public Material sampleMat;

		private bool available = true;

		public string sampleName => sampleIndex switch
		{
			0 => "Neutral", 
			1 => "Blazing", 
			2 => "Overloading", 
			3 => "Glacial", 
			4 => "Mending", 
			5 => "Malachite", 
			6 => "Celestine", 
			7 => "Perfected", 
			8 => "Voidtouched", 
			_ => "", 
		};

		public int NetworksampleIndex
		{
			get
			{
				return sampleIndex;
			}
			[param: In]
			set
			{
				((NetworkBehaviour)this).SetSyncVar<int>(value, ref sampleIndex, 1u);
			}
		}

		private void Start()
		{
			if (Object.op_Implicit((Object)(object)renderer))
			{
				switch (sampleIndex)
				{
				case 0:
					sampleMat = Prefabs.neutral;
					break;
				case 1:
					sampleMat = Prefabs.blazing;
					break;
				case 2:
					sampleMat = Prefabs.overloading;
					break;
				case 3:
					sampleMat = Prefabs.glacial;
					break;
				case 4:
					sampleMat = Prefabs.mending;
					break;
				case 5:
					sampleMat = Prefabs.malachite;
					break;
				case 6:
					sampleMat = Prefabs.celestine;
					break;
				case 7:
					sampleMat = Prefabs.perfected;
					break;
				case 8:
					sampleMat = Prefabs.voidtouched;
					break;
				}
				renderer.material = sampleMat;
			}
		}

		public string GetContextString([NotNull] Interactor activator)
		{
			return "Pick up " + sampleName + " Sample";
		}

		public void OnInteractionBegin([NotNull] Interactor activator)
		{
			//IL_0159: Unknown result type (might be due to invalid IL or missing references)
			//IL_0199: Unknown result type (might be due to invalid IL or missing references)
			//IL_019e: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a7: 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_01b5: 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_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_01d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01df: 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_01ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0200: Unknown result type (might be due to invalid IL or missing references)
			//IL_0209: Unknown result type (might be due to invalid IL or missing references)
			//IL_020e: 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)
			if (!available)
			{
				return;
			}
			CharacterBody component = ((Component)activator).GetComponent<CharacterBody>();
			if (!Object.op_Implicit((Object)(object)component))
			{
				return;
			}
			XenoSampleBehaviour component2 = ((Component)activator).GetComponent<XenoSampleBehaviour>();
			if (Object.op_Implicit((Object)(object)component2))
			{
				available = false;
				component2.CallRpcAddSample(sampleIndex);
				switch (sampleIndex)
				{
				case 1:
					component.AddTimedBuff(Prefabs.blazingPickup, 2f);
					break;
				case 2:
					component.AddTimedBuff(Prefabs.overloadingPickup, 2f);
					break;
				case 3:
					component.AddTimedBuff(Prefabs.glacialPickup, 2f);
					break;
				case 4:
					component.AddTimedBuff(Prefabs.mendingPickup, 2f);
					break;
				case 5:
					component.AddTimedBuff(Prefabs.malachitePickup, 2f);
					break;
				case 6:
					component.AddTimedBuff(Prefabs.celestinePickup, 2f);
					component.AddTimedBuff(Buffs.Cloak, 2f);
					break;
				case 7:
					component.AddTimedBuff(Prefabs.perfectedPickup, 2f);
					break;
				case 8:
					component.AddTimedBuff(Prefabs.voidtouchedPickup, 2f);
					component.AddTimedBuff(Buffs.BearVoidReady, 2f);
					break;
				}
			}
			else
			{
				BuffIndex val = (BuffIndex)(-1);
				switch (sampleIndex)
				{
				case 0:
					val = Prefabs.neutralSampleBuff.buffIndex;
					break;
				case 1:
					val = Buffs.AffixRed.buffIndex;
					break;
				case 2:
					val = Buffs.AffixBlue.buffIndex;
					break;
				case 3:
					val = Buffs.AffixWhite.buffIndex;
					break;
				case 4:
					val = Buffs.EliteEarth.buffIndex;
					break;
				case 5:
					val = Buffs.AffixPoison.buffIndex;
					break;
				case 6:
					val = Buffs.AffixHaunted.buffIndex;
					break;
				case 7:
					val = Buffs.AffixLunar.buffIndex;
					break;
				case 8:
					val = Buffs.EliteVoid.buffIndex;
					break;
				}
				component.AddTimedBuff(val, 10f);
			}
			NetworkServer.Destroy(((Component)this).gameObject);
		}

		public Interactability GetInteractability([NotNull] Interactor activator)
		{
			//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 (Interactability)2;
		}

		public bool ShouldIgnoreSpherecastForInteractibility([NotNull] Interactor activator)
		{
			return false;
		}

		public bool ShouldShowOnScanner()
		{
			return false;
		}

		public string GetDisplayName()
		{
			return "Sample";
		}

		private void UNetVersion()
		{
		}

		public override bool OnSerialize(NetworkWriter writer, bool forceAll)
		{
			if (forceAll)
			{
				writer.WritePackedUInt32((uint)sampleIndex);
				return true;
			}
			bool flag = false;
			if ((((NetworkBehaviour)this).syncVarDirtyBits & (true ? 1u : 0u)) != 0)
			{
				if (!flag)
				{
					writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits);
					flag = true;
				}
				writer.WritePackedUInt32((uint)sampleIndex);
			}
			if (!flag)
			{
				writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits);
			}
			return flag;
		}

		public override void OnDeserialize(NetworkReader reader, bool initialState)
		{
			if (initialState)
			{
				sampleIndex = (int)reader.ReadPackedUInt32();
				return;
			}
			int num = (int)reader.ReadPackedUInt32();
			if (((uint)num & (true ? 1u : 0u)) != 0)
			{
				sampleIndex = (int)reader.ReadPackedUInt32();
			}
		}
	}
	internal class SampleTracker : MonoBehaviour
	{
		public BaseAI droneAI;

		public CharacterMaster droneMaster;

		public List<int> sampleList = new List<int> { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

		public List<int> sampleCount = new List<int>();

		public int currentSampleIndex = -1;

		public XenoDroneBehaviour droneBehaviour;

		public CharacterBody body;

		public float crosshairRotation;
	}
	internal class SoundLooper : MonoBehaviour
	{
		public string startSound;

		public string loopSound;

		public string endSound;

		private uint ID;

		private void Start()
		{
			if (!Utility.IsNullOrWhiteSpace(startSound))
			{
				AkSoundEngine.PostEvent(startSound, ((Component)this).gameObject);
			}
			if (!Utility.IsNullOrWhiteSpace(loopSound))
			{
				ID = AkSoundEngine.PostEvent(loopSound, ((Component)this).gameObject);
			}
		}

		private void OnDisable()
		{
			if (!Utility.IsNullOrWhiteSpace(loopSound))
			{
				AkSoundEngine.StopPlayingID(ID);
			}
			if (!Utility.IsNullOrWhiteSpace(endSound))
			{
				AkSoundEngine.PostEvent(endSound, ((Component)this).gameObject);
			}
		}
	}
	internal class SpecialExecuteTracker : HuntressTracker
	{
		public HealthComponent target;

		private CharacterBody body;

		private float stopwatch;

		private void Awake()
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Expected O, but got Unknown
			body = ((Component)this).GetComponent<CharacterBody>();
			base.indicator = new Indicator(((Component)this).gameObject, Prefabs.Load<GameObject>("RoR2/Base/Lightning/LightningIndicator.prefab"));
		}

		private void OnEnable()
		{
			((HuntressTracker)this).OnEnable();
			if (Object.op_Implicit((Object)(object)base.indicator.visualizerInstance))
			{
				Debug.LogWarning((object)"visualizer");
				base.indicator.visualizerInstance.GetComponentInChildren<InputBindingDisplayController>().actionName = "Special";
			}
			base.trackerUpdateFrequency = 10f;
			base.maxTrackingDistance = 1000f;
		}

		private void FixedUpdate()
		{
			//IL_00d4: 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_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_010f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0114: Unknown result type (might be due to invalid IL or missing references)
			//IL_0120: Unknown result type (might be due to invalid IL or missing references)
			((HuntressTracker)this).FixedUpdate();
			if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)body.skillLocator) && Object.op_Implicit((Object)(object)body.skillLocator.special) && Object.op_Implicit((Object)(object)body.skillLocator.special.skillDef))
			{
				base.indicator.active = (Object)(object)body.skillLocator.special.skillDef == (Object)(object)SpecialPickerState.perfected;
			}
			base.trackerUpdateStopwatch = 0f;
			stopwatch += Time.fixedDeltaTime;
			if (stopwatch >= 0.1f)
			{
				stopwatch = 0f;
				Ray val = default(Ray);
				((Ray)(ref val))..ctor(base.inputBank.aimOrigin, base.inputBank.aimDirection);
				base.search.filterByLoS = true;
				base.search.searchOrigin = ((Ray)(ref val)).origin;
				base.search.searchDirection = ((Ray)(ref val)).direction;
				base.search.sortMode = (SortMode)1;
				base.search.maxDistanceFilter = base.maxTrackingDistance;
				base.search.maxAngleFilter = base.maxTrackingAngle;
				base.search.RefreshCandidates();
				base.search.FilterOutGameObject(((Component)this).gameObject);
				base.search.FilterByHealthPercentage(Configs.specialPerfectedExecuteThreshold.Value);
				base.trackingTarget = base.search.GetResults().FirstOrDefault();
				base.indicator.targetTransform = (Object.op_Implicit((Object)(object)base.trackingTarget) ? ((Component)base.trackingTarget).transform : null);
				target = (Object.op_Implicit((Object)(object)base.trackingTarget) ? base.trackingTarget.healthComponent : null);
			}
		}
	}
	internal class SpecialMalachiteDotBehaviour : MonoBehaviour
	{
		public CharacterBody attacker;

		public CharacterBody victim;

		private float stopwatch;

		private float lifetime;

		private void Start()
		{
			victim = ((Component)this).GetComponent<CharacterBody>();
		}

		private void FixedUpdate()
		{
			//IL_0107: 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_0118: Unknown result type (might be due to invalid IL or missing references)
			//IL_011e: Expected O, but got Unknown
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			//IL_0158: Unknown result type (might be due to invalid IL or missing references)
			//IL_0174: 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_01a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a7: 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)
			lifetime += Time.fixedDeltaTime;
			if (Object.op_Implicit((Object)(object)attacker) && Object.op_Implicit((Object)(object)victim) && Object.op_Implicit((Object)(object)victim.healthComponent) && Object.op_Implicit((Object)(object)victim.healthComponent.body))
			{
				stopwatch += Time.fixedDeltaTime;
				if (stopwatch >= Configs.specialMalachiteRate.Value)
				{
					stopwatch = 0f;
					if ((lifetime >= 2f && Object.op_Implicit((Object)(object)victim.characterMotor) && victim.characterMotor.isGrounded) || !victim.healthComponent.alive)
					{
						Object.Destroy((Object)(object)this);
					}
					EffectManager.SimpleEffect(Prefabs.Load<GameObject>("RoR2/Base/ElitePoison/OmniExplosionVFXUrchin.prefab"), victim.healthComponent.body.corePosition, Quaternion.identity, true);
					DamageInfo val = new DamageInfo();
					val.damage = attacker.damage * Configs.specialMalachiteDamage.Value;
					val.attacker = ((Component)this).gameObject;
					val.inflictor = ((Component)this).gameObject;
					val.force = Vector3.zero;
					val.crit = attacker.RollCrit();
					val.procChainMask = default(ProcChainMask);
					val.procCoefficient = Configs.specialMalachiteRate.Value;
					val.position = victim.healthComponent.body.corePosition;
					val.damageColorIndex = (DamageColorIndex)4;
					val.damageType = (DamageType)0;
					victim.healthComponent.TakeDamage(val);
					GlobalEventManager.instance.OnHitEnemy(val, ((Component)victim).gameObject);
					GlobalEventManager.instance.OnHitAll(val, ((Component)victim).gameObject);
				}
			}
			if (!Object.op_Implicit((Object)(object)attacker))
			{
				Object.Destroy((Object)(object)this);
			}
		}
	}
	internal class SyringeBehaviour : MonoBehaviour, IProjectileImpactBehavior
	{
		public ProjectileController controller;

		public List<int> sampleModifiers = new List<int>();

		public float damage;

		public BullseyeSearch search = new BullseyeSearch();

		public GameObject owner;

		public XenoSampleBehaviour behaviour;

		public HurtBox PickNextTarget(GameObject filter, TeamIndex team)
		{
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0053: Invalid comparison between Unknown and I4
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Expected O, but got Unknown
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			if (search == null)
			{
				search = new BullseyeSearch();
			}
			search.searchOrigin = ((Component)this).transform.position;
			search.searchDirection = Vector3.zero;
			search.teamMaskFilter = TeamMask.allButNeutral;
			if ((int)team != -1)
			{
				((TeamMask)(ref search.teamMaskFilter)).RemoveTeam(team);
			}
			search.filterByLoS = false;
			search.sortMode = (SortMode)1;
			search.maxDistanceFilter = 60f;
			search.RefreshCandidates();
			if (Object.op_Implicit((Object)(object)filter))
			{
				search.FilterOutGameObject(filter);
			}
			return search.GetResults().FirstOrDefault();
		}

		public void Start()
		{
			controller = ((Component)this).GetComponent<ProjectileController>();
		}

		public void FixedUpdate()
		{
			if (!Object.op_Implicit((Object)(object)owner) && Object.op_Implicit((Object)(object)controller))
			{
				owner = controller.owner;
				behaviour = controller.owner.GetComponent<XenoSampleBehaviour>();
			}
		}

		public void OnProjectileImpact(ProjectileImpactInfo impactInfo)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_0379: Unknown result type (might be due to invalid IL or missing references)
			//IL_037e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0385: Unknown result type (might be due to invalid IL or missing references)
			//IL_0390: Unknown result type (might be due to invalid IL or missing references)
			//IL_0397: 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_03a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b4: Expected O, but got Unknown
			//IL_03b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cb: 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_03f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0401: Unknown result type (might be due to invalid IL or missing references)
			//IL_0406: Unknown result type (might be due to invalid IL or missing references)
			//IL_0408: Unknown result type (might be due to invalid IL or missing references)
			//IL_040d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0418: Unknown result type (might be due to invalid IL or missing references)
			//IL_0420: Unknown result type (might be due to invalid IL or missing references)
			//IL_0427: Unknown result type (might be due to invalid IL or missing references)
			//IL_042c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0431: Unknown result type (might be due to invalid IL or missing references)
			//IL_0433: Unknown result type (might be due to invalid IL or missing references)
			//IL_0438: 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_0445: Unknown result type (might be due to invalid IL or missing references)
			//IL_044a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0274: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_04fb: 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_02c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_0289: Unknown result type (might be due to invalid IL or missing references)
			//IL_028a: Unknown result type (might be due to invalid IL or missing references)
			//IL_029a: 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_02a8: 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_02e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0303: Unknown result type (might be due to invalid IL or missing references)
			//IL_0308: Unknown result type (might be due to invalid IL or missing references)
			//IL_030d: Unknown result type (might be due to invalid IL or missing references)
			//IL_030f: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_054e: Unknown result type (might be due to invalid IL or missing references)
			//IL_05b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_05c0: Expected O, but got Unknown
			//IL_05cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_05fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0602: Unknown result type (might be due to invalid IL or missing references)
			//IL_0618: Unknown result type (might be due to invalid IL or missing references)
			//IL_063b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0583: Unknown result type (might be due to invalid IL or missing references)
			Collider collider = impactInfo.collider;
			if (!Object.op_Implicit((Object)(object)collider))
			{
				return;
			}
			HurtBox component = ((Component)collider).GetComponent<HurtBox>();
			if (!Object.op_Implicit((Object)(object)component) || !Object.op_Implicit((Object)(object)component.healthComponent) || !Object.op_Implicit((Object)(object)component.healthComponent.body) || !Object.op_Implicit((Object)(object)controller) || !Object.op_Implicit((Object)(object)controller.owner))
			{
				return;
			}
			CharacterBody component2 = controller.owner.GetComponent<CharacterBody>();
			bool flag = FriendlyFireManager.ShouldDirectHitProceed(component.healthComponent, ((Component)this).GetComponent<TeamFilter>().teamIndex);
			if (!Object.op_Implicit((Object)(object)behaviour))
			{
				return;
			}
			for (int i = 0; i < sampleModifiers.Count; i++)
			{
				int sampleCount = behaviour.GetSampleCount(sampleModifiers[i]);
				if (sampleCount <= 0)
				{
					continue;
				}
				switch (sampleModifiers[i])
				{
				case 1:
				{
					if (!NetworkServer.active)
					{
						break;
					}
					if (flag)
					{
						DotController.InflictDot(((Component)component.healthComponent.body).gameObject, controller.owner, (DotIndex)1, 10f, Configs.primaryBlazingDamage.Value * (float)sampleCount, (uint?)null);
						break;
					}
					for (int n = 0; n < sampleCount; n++)
					{
						component.healthComponent.body.AddTimedBuff(Prefabs.dmgUp, 6f, sampleCount);
					}
					break;
				}
				case 2:
				{
					bool flag2 = false;
					OverloadBounce component3 = ((Component)this).GetComponent<OverloadBounce>();
					if (!Object.op_Implicit((Object)(object)component3))
					{
						Prefabs.syringeOverloadProjectile.GetComponent<OverloadBounce>().remainingBounces = sampleCount - 1;
						flag2 = true;
					}
					else if (component3.remainingBounces > 0)
					{
						Prefabs.syringeOverloadProjectile.GetComponent<OverloadBounce>().remainingBounces = component3.remainingBounces - 1;
						flag2 = true;
					}
					if (flag2)
					{
						SyringeBehaviour component4 = Prefabs.syringeOverloadProjectile.GetComponent<SyringeBehaviour>();
						component4.sampleModifiers = sampleModifiers;
						component4.damage = damage;
						HurtBox val = PickNextTarget(((Component)component.healthComponent.body).gameObject, component2.teamComponent.teamIndex);
						Vector3 val2;
						Vector3 normalized;
						if (!Object.op_Implicit((Object)(object)val))
						{
							val2 = impactInfo.estimatedPointOfImpact - component.healthComponent.body.corePosition;
							normalized = ((Vector3)(ref val2)).normalized;
						}
						else
						{
							val2 = ((Component)val).transform.position - ((Component)this).transform.position;
							normalized = ((Vector3)(ref val2)).normalized;
						}
						Vector3 val3 = normalized;
						ProjectileManager.instance.FireProjectile(Prefabs.syringeOverloadProjectile, ((Component)this).transform.position + val3 * (component.healthComponent.body.radius * 2.5f), Util.QuaternionSafeLookRotation(val3), controller.owner, damage, 240f, component2.RollCrit(), (DamageColorIndex)0, (GameObject)null, 100f);
					}
					break;
				}
				case 3:
					if (flag)
					{
						if (NetworkServer.active)
						{
							float num = Configs.primaryGlacialRadius.Value * (float)sampleCount;
							EffectManager.SpawnEffect(Prefabs.Load<GameObject>("RoR2/Base/EliteIce/AffixWhiteExplosion.prefab"), new EffectData
							{
								origin = ((Component)this).transform.position,
								rotation = Util.QuaternionSafeLookRotation(((Component)this).transform.forward),
								scale = num
							}, true);
							new BlastAttack
							{
								attacker = controller.owner,
								baseDamage = component2.damage * (Configs.primaryGlacialDamageMult.Value * (float)sampleCount),
								baseForce = 200f,
								crit = component2.RollCrit(),
								damageType = (DamageType)0,
								falloffModel = (FalloffModel)0,
								procCoefficient = 1f,
								radius = num,
								position = ((Component)this).transform.position,
								attackerFiltering = (AttackerFiltering)2,
								teamIndex = component2.teamComponent.teamIndex
							}.Fire();
						}
					}
					else
					{
						GenericSkill[] allSkills = component.healthComponent.body.skillLocator.allSkills;
						foreach (GenericSkill val4 in allSkills)
						{
							val4.RunRecharge((float)sampleCount);
						}
					}
					break;
				case 4:
					if (!flag && NetworkServer.active)
					{
						EffectManager.SimpleEffect(Prefabs.Load<GameObject>("RoR2/Base/Fruit/FruitHealEffect.prefab"), component.healthComponent.body.corePosition, Quaternion.identity, true);
						component.healthComponent.Heal(component.healthComponent.fullHealth * Configs.primaryMendingAllyHeal.Value * (float)sampleCount, default(ProcChainMask), true);
					}
					break;
				case 5:
				{
					if (flag || !NetworkServer.active)
					{
						break;
					}
					HurtBox val5 = null;
					for (int l = 0; l < sampleCount; l++)
					{
						if (Object.op_Implicit((Object)(object)val5))
						{
							val5 = PickNextTarget(((Component)val5.healthComponent).gameObject, component2.teamComponent.teamIndex);
							if (!Object.op_Implicit((Object)(object)val5))
							{
								val5 = PickNextTarget(((Component)component.healthComponent.body).gameObject, component2.teamComponent.teamIndex);
							}
						}
						else
						{
							val5 = PickNextTarget(((Component)component.healthComponent.body).gameObject, component2.teamComponent.teamIndex);
						}
						DevilOrb val6 = new DevilOrb();
						((Orb)val6).origin = component.healthComponent.body.corePosition;
						val6.damageValue = component.healthComponent.fullHealth * Configs.primaryMalachiteDamage.Value;
						val6.teamIndex = TeamComponent.GetObjectTeam(((Component)component2).gameObject);
						val6.attacker = ((Component)component2).gameObject;
						val6.damageColorIndex = (DamageColorIndex)4;
						val6.scale = 1f;
						((ProcChainMask)(ref val6.procChainMask)).AddProc((ProcType)10);
						val6.effectType = (EffectType)0;
						if (Object.op_Implicit((Object)(object)val5))
						{
							((Orb)val6).target = val5;
							val6.isCrit = component2.RollCrit();
							OrbManager.instance.AddOrb((Orb)(object)val6);
						}
					}
					break;
				}
				case 6:
					if (!NetworkServer.active)
					{
						break;
					}
					if (flag)
					{
						for (int m = 0; m < sampleCount; m++)
						{
							component.healthComponent.body.AddTimedBuff(Prefabs.slow, 3f, sampleCount);
						}
					}
					else
					{
						component.healthComponent.body.AddTimedBuff(Buffs.Cloak, (float)sampleCount);
					}
					break;
				case 7:
					if (NetworkServer.active)
					{
						for (int j = 0; j < sampleCount; j++)
						{
							component.healthComponent.body.AddTimedBuff(Prefabs.curse, 10f, sampleCount);
						}
					}
					break;
				case 8:
					if (!flag && RoR2Application.rng.RangeFloat(0f, 1f) <= Configs.primaryVoidtouchedKOChance.Value * (float)sampleCount)
					{
						Object.Destroy((Object)(object)component.healthComponent.body.AddItemBehavior<BearVoidBehavior>(1), (float)sampleCount);
					}
					break;
				}
			}
		}
	}
	internal class XenoBoomerang : MonoBehaviour
	{
		public ProjectileController controller;

		public GameObject owner;

		public CharacterBody ownerBody;

		public Rigidbody rigid;

		public XenoSampleBehaviour behaviour;

		public ProjectileOverlapAttack overlap;

		public BoomerangProjectile boomerang;

		public List<int> sampleModifiers = new List<int>();

		public BoomerangState currentState;

		public float damage;

		public float speedReduction;

		public float idealSpeed;

		public float fireRingRange;

		public int perfectedCount;

		public int malachiteCount;

		public int blazingCount;

		public int mendingCount;

		public int voidCount;

		private float perfectedStopwatch;

		private float malachiteFireStopwatch;

		private float stopStopwatch;

		private float mendingStopwatch;

		private Transform fireRing;

		private HitBox hitbox;

		public HurtBox PickNextTarget(GameObject filter, TeamIndex team, float dist = 160f)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: 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_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_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Invalid comparison between Unknown and I4
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			BullseyeSearch val = new BullseyeSearch();
			val.searchOrigin = ((Component)this).transform.position;
			val.searchDirection = Vector3.zero;
			val.teamMaskFilter = TeamMask.allButNeutral;
			if ((int)team != -1)
			{
				((TeamMask)(ref val.teamMaskFilter)).RemoveTeam(team);
			}
			val.filterByLoS = false;
			val.sortMode = (SortMode)1;
			val.maxDistanceFilter = dist;
			val.RefreshCandidates();
			if (Object.op_Implicit((Object)(object)filter))
			{
				val.FilterOutGameObject(filter);
			}
			return val.GetResults().FirstOrDefault();
		}

		public IEnumerable<HurtBox> PickTargets(GameObject filter, TeamIndex team, float dist = 160f)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: 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_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_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Invalid comparison between Unknown and I4
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			BullseyeSearch val = new BullseyeSearch();
			val.searchOrigin = ((Component)this).transform.position;
			val.searchDirection = Vector3.zero;
			val.teamMaskFilter = TeamMask.allButNeutral;
			if ((int)team != -1)
			{
				((TeamMask)(ref val.teamMaskFilter)).RemoveTeam(team);
			}
			val.filterByLoS = false;
			val.sortMode = (SortMode)1;
			val.maxDistanceFilter = dist;
			val.RefreshCandidates();
			if (Object.op_Implicit((Object)(object)filter))
			{
				val.FilterOutGameObject(filter);
			}
			return val.GetResults();
		}

		public void Start()
		{
			hitbox = ((Component)this).GetComponentInChildren<HitBox>();
			controller = ((Component)this).GetComponent<ProjectileController>();
			overlap = ((Component)this).GetComponent<ProjectileOverlapAttack>();
			rigid = ((Component)this).GetComponent<Rigidbody>();
			boomerang = ((Component)this).GetComponent<BoomerangProjectile>();
		}

		public void Update()
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Invalid comparison between Unknown and I4
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)overlap) && overlap.attack != null && (int)overlap.attack.damageType != 262144)
			{
				overlap.attack.damageType = (DamageType)262144;
			}
		}

		private void OnDisable()
		{
			if (Object.op_Implicit((Object)(object)behaviour))
			{
				behaviour.boomerangBehaviour = null;
				behaviour.boomerangProjectile = null;
			}
		}

		public void FixedUpdate()
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Invalid comparison between Unknown and I4
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Invalid comparison between Unknown and I4
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0408: Unknown result type (might be due to invalid IL or missing references)
			//IL_040d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0426: Unknown result type (might be due to invalid IL or missing references)
			//IL_0432: Unknown result type (might be due to invalid IL or missing references)
			//IL_043c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0629: Unknown result type (might be due to invalid IL or missing references)
			//IL_050e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0513: Unknown result type (might be due to invalid IL or missing references)
			//IL_0520: Unknown result type (might be due to invalid IL or missing references)
			//IL_0535: Unknown result type (might be due to invalid IL or missing references)
			//IL_053c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0551: Unknown result type (might be due to invalid IL or missing references)
			//IL_0567: Unknown result type (might be due to invalid IL or missing references)
			//IL_0584: Unknown result type (might be due to invalid IL or missing references)
			//IL_058b: Unknown result type (might be due to invalid IL or missing references)
			//IL_05b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0820: Unknown result type (might be due to invalid IL or missing references)
			//IL_0825: Unknown result type (might be due to invalid IL or missing references)
			//IL_082f: Unknown result type (might be due to invalid IL or missing references)
			//IL_083d: Unknown result type (might be due to invalid IL or missing references)
			//IL_011b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0120: Unknown result type (might be due to invalid IL or missing references)
			//IL_015b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0860: Unknown result type (might be due to invalid IL or missing references)
			//IL_0865: Unknown result type (might be due to invalid IL or missing references)
			//IL_0868: Unknown result type (might be due to invalid IL or missing references)
			//IL_0875: Expected O, but got Unknown
			//IL_0888: Unknown result type (might be due to invalid IL or missing references)
			//IL_088d: Unknown result type (might be due to invalid IL or missing references)
			//IL_089e: Unknown result type (might be due to invalid IL or missing references)
			//IL_08ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_08c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_08c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_08cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_08dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_08df: Unknown result type (might be due to invalid IL or missing references)
			//IL_08e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_08f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_08f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_08f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_08fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_08fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0902: Unknown result type (might be due to invalid IL or missing references)
			//IL_0905: Unknown result type (might be due to invalid IL or missing references)
			//IL_090a: Unknown result type (might be due to invalid IL or missing references)
			//IL_090f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0915: Unknown result type (might be due to invalid IL or missing references)
			//IL_091b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0926: Unknown result type (might be due to invalid IL or missing references)
			//IL_0928: Unknown result type (might be due to invalid IL or missing references)
			//IL_092d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0938: Unknown result type (might be due to invalid IL or missing references)
			//IL_0183: 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_0193: Unknown result type (might be due to invalid IL or missing references)
			//IL_0198: Unknown result type (might be due to invalid IL or missing references)
			//IL_019c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0175: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_073d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0743: Invalid comparison between Unknown and I4
			if (Object.op_Implicit((Object)(object)boomerang))
			{
				if (boomerang.stopwatch >= boomerang.maxFlyStopwatch && (int)currentState != 2)
				{
					currentState = (BoomerangState)2;
				}
				if ((int)currentState == 2)
				{
					if (Object.op_Implicit((Object)(object)rigid) && malachiteCount > 0)
					{
						stopStopwatch += Time.fixedDeltaTime;
						if (stopStopwatch <= Configs.secondaryMalachiteStopDuration.Value * (float)malachiteCount)
						{
							rigid.isKinematic = true;
							if (malachiteFireStopwatch == 0f || malachiteFireStopwatch >= Configs.secondaryMalachiteFireDelay.Value)
							{
								malachiteFireStopwatch = 0f;
								Util.PlaySound(FireLunarShards.fireSound, ((Component)this).gameObject);
								Object.Destroy((Object)(object)Object.Instantiate<GameObject>(Prefabs.Load<GameObject>("RoR2/Base/ElitePoison/UrchinMinigunVFX.prefab"), ((Component)this).transform.position, Quaternion.identity), 0.3f);
								if (NetworkServer.active)
								{
									HurtBox val = PickNextTarget(((Component)ownerBody).gameObject, ownerBody.teamComponent.teamIndex);
									Vector3 val2;
									if (!Object.op_Implicit((Object)(object)val))
									{
										val2 = Random.insideUnitSphere;
									}
									else
									{
										Vector3 val3 = ((Component)val).transform.position - ((Component)this).transform.position;
										val2 = ((Vector3)(ref val3)).normalized;
									}
									Vector3 val4 = val2;
									ProjectileManager.instance.FireProjectile(Prefabs.Load<GameObject>("RoR2/Base/ElitePoison/UrchinSeekingProjectile.prefab"), ((Component)this).transform.position, Util.QuaternionSafeLookRotation(val4), controller.owner, ownerBody.damage * (Configs.secondaryMalachiteDamage.Value * (float)malachiteCount), 240f, ownerBody.RollCrit(), (DamageColorIndex)0, (GameObject)null, 100f);
								}
							}
							malachiteFireStopwatch += Time.fixedDeltaTime;
						}
						else
						{
							rigid.isKinematic = false;
						}
					}
					if (boomerang.transitionDuration != 1f)
					{
						boomerang.transitionDuration = 1f;
					}
				}
			}
			if (!Object.op_Implicit((Object)(object)owner) && Object.op_Implicit((Object)(object)controller))
			{
				owner = controller.owner;
				if (Object.op_Implicit((Object)(object)owner))
				{
					ownerBody = owner.GetComponent<CharacterBody>();
					behaviour = owner.GetComponent<XenoSampleBehaviour>();
					behaviour.boomerangProjectile = ((Component)this).gameObject;
					behaviour.boomerangBehaviour = this;
					boomerang.travelSpeed = 60f * (1f + Configs.secondaryNeutralSpeed.Value * (float)behaviour.GetSampleCount(0));
					boomerang.transitionDuration = 1f * (1f + Configs.secondaryGlacialLifetimeMult.Value * (float)behaviour.GetSampleCount(3));
					idealSpeed = boomerang.travelSpeed;
					Debug.LogWarning((object)idealSpeed);
					Debug.LogWarning((object)boomerang.transitionDuration);
					BoomerangProjectile obj = boomerang;
					obj.travelSpeed -= idealSpeed * speedReduction;
					Debug.LogWarning((object)boomerang.travelSpeed);
					int sampleCount = behaviour.GetSampleCount(6);
					if (sampleCount > 0)
					{
						RadialForce val5 = ((Component)this).gameObject.AddComponent<RadialForce>();
						val5.radius = Configs.secondaryCelestinePullRadius.Value * (float)sampleCount;
						val5.forceMagnitude = -10000f;
						GameObject val6 = Object.Instantiate<GameObject>(Prefabs.gravSphere, ((Component)this).transform.position, Quaternion.identity, ((Component)this).transform);
						val6.GetComponentInChildren<ObjectScaleCurve>().baseScale = Vector3.one * val5.radius / 3f;
					}
					perfectedCount = behaviour.GetSampleCount(7);
					malachiteCount = behaviour.GetSampleCount(5);
					blazingCount = behaviour.GetSampleCount(1);
					mendingCount = behaviour.GetSampleCount(4);
					voidCount = behaviour.GetSampleCount(8);
					if (Object.op_Implicit((Object)(object)controller.ghost))
					{
						fireRing = ((Component)((Component)controller.ghost).GetComponentsInChildren<MeshRenderer>()[2]).transform;
						if (Object.op_Implicit((Object)(object)fireRing))
						{
							if (Object.op_Implicit((Object)(object)hitbox))
							{
								Vector3 localScale = ((Component)hitbox).transform.localScale;
								((Component)hitbox).transform.localScale = new Vector3(localScale.x + 0.8f * (float)blazingCount, localScale.y, localScale.z + 0.8f * (float)blazingCount);
								float num = ((Component)hitbox).transform.localScale.x * 0.16949153f;
								((Component)fireRing).transform.localScale = Vector3.one * num;
							}
							if (blazingCount == 0)
							{
								((Component)fireRing).transform.localScale = Vector3.zero;
							}
						}
					}
				}
			}
			if (Object.op_Implicit((Object)(object)ownerBody) && mendingCount > 0)
			{
				mendingStopwatch += Time.fixedDeltaTime;
				if (mendingStopwatch >= 0.1f)
				{
					mendingStopwatch = 0f;
					IEnumerable<HurtBox> enumerable = PickTargets(null, ownerBody.teamComponent.teamIndex, Configs.secondaryMendingRange.Value * (float)mendingCount);
					foreach (HurtBox item in enumerable)
					{
						if (!Object.op_Implicit((Object)(object)item.healthComponent) || !Object.op_Implicit((Object)(object)item.healthComponent.body) || !Object.op_Implicit((Object)(object)item.healthComponent.body.masterObject))
						{
							continue;
						}
						AIFollowProjectile aIFollowProjectile = item.healthComponent.body.masterObject.GetComponent<AIFollowProjectile>();
						if (!Object.op_Implicit((Object)(object)aIFollowProjectile))
						{
							aIFollowProjectile = item.healthComponent.body.masterObject.AddComponent<AIFollowProjectile>();
						}
						aIFollowProjectile.target = ((Component)this).gameObject;
						if (!NetworkServer.active)
						{
							continue;
						}
						for (int i = 0; i < mendingCount; i++)
						{
							item.healthComponent.body.AddTimedBuff(Prefabs.enemySpeedBuff, 1f, mendingCount);
							if (Object.op_Implicit((Object)(object)boomerang) && (int)boomerang.boomerangState == 2)
							{
								item.healthComponent.body.AddTimedBuff(Prefabs.sunder, Configs.secondaryMendingWeakenBuffDuration.Value, mendingCount);
							}
						}
					}
				}
			}
			if (!Object.op_Implicit((Object)(object)ownerBody) || perfectedCount <= 0)
			{
				return;
			}
			perfectedStopwatch += Time.fixedDeltaTime;
			if (perfectedStopwatch >= Configs.secondaryPerfectedFireDelay.Value / (float)perfectedCount)
			{
				perfectedStopwatch = 0f;
				Ray val7 = default(Ray);
				((Ray)(ref val7))..ctor(((Component)this).transform.position, Vector3.down);
				RaycastHit val8 = default(RaycastHit);
				if (Physics.Raycast(val7, ref val8, 1000f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask)) && NetworkServer.active)
				{
					EffectData val9 = new EffectData
					{
						origin = ((RaycastHit)(ref val8)).point
					};
					EffectManager.SpawnEffect(Prefabs.Load<GameObject>("RoR2/Base/Meteor/MeteorStrikeImpact.prefab"), val9, true);
					new BlastAttack
					{
						inflictor = ((Component)ownerBody).gameObject,
						baseDamage = ownerBody.damage * Configs.secondaryPerfectedDamage.Value,
						baseForce = 4000f,
						attackerFiltering = (AttackerFiltering)1,
						crit = ownerBody.RollCrit(),
						falloffModel = (FalloffModel)1,
						attacker = owner,
						bonusForce = Vector3.zero,
						damageColorIndex = (DamageColorIndex)3,
						position = ((RaycastHit)(ref val8)).point,
						procChainMask = default(ProcChainMask),
						procCoefficient = 1f,
						teamIndex = (TeamIndex)(-1),
						radius = 8f
					}.Fire();
				}
			}
		}

		public void Recall()
		{
			//IL_005b: 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_0105: 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_0117: Unknown result type (might be due to invalid IL or missing references)
			//IL_0131: Expected O, but got Unknown
			//IL_00ce: 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_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_014e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: 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_0183: 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_019f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ad: 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_01b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01de: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e8: 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_01fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0200: Unknown result type (might be due to invalid IL or missing references)
			//IL_0205: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)boomerang) || !Object.op_Implicit((Object)(object)overlap) || !Object.op_Implicit((Object)(object)behaviour) || !Object.op_Implicit((Object)(object)ownerBody))
			{
				return;
			}
			boomerang.travelSpeed = idealSpeed;
			boomerang.boomerangState = (BoomerangState)2;
			if (sampleModifiers.Contains(4))
			{
			}
			if (Object.op_Implicit((Object)(object)overlap))
			{
				overlap.ResetOverlapAttack();
			}
			if (blazingCount > 0)
			{
				if (Object.op_Implicit((Object)(object)hitbox) && Object.op_Implicit((Object)(object)fireRing))
				{
					Transform transform = ((Component)hitbox).transform;
					transform.localScale *= 2f;
					Transform obj = fireRing;
					obj.localScale *= 2f;
				}
				EffectData val = new EffectData
				{
					origin = ((Component)this).transform.position,
					scale = Configs.secondaryBlazingRange.Value * (float)blazingCount
				};
				EffectManager.SpawnEffect(Prefabs.boomerangBlazingExplosion, val, false);
				if (NetworkServer.active)
				{
					new BlastAttack
					{
						attacker = ((Component)this).gameObject,
						baseDamage = ownerBody.damage * (Configs.secondaryBlazingDamageMult.Value * (float)blazingCount),
						baseForce = 1200f,
						crit = ownerBody.RollCrit(),
						damageType = (DamageType)0,
						damageColorIndex = (DamageColorIndex)3,
						falloffModel = (FalloffModel)0,
						procCoefficient = 1f,
						radius = Configs.secondaryBlazingRange.Value * (float)blazingCount,
						position = ((Component)this).transform.position,
						attackerFiltering = (AttackerFiltering)2,
						teamIndex = ownerBody.teamComponent.teamIndex
					}.Fire();
				}
			}
		}
	}
	internal class XenoCrosshairBehaviour : CrosshairController
	{
		private void Start()
		{
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			HudElement component = ((Component)this).GetComponent<HudElement>();
			if (!Object.op_Implicit((Object)(object)component) || !Object.op_Implicit((Object)(object)component.targetBodyObject) || !Util.HasEffectiveAuthority(component.targetBodyObject))
			{
				return;
			}
			XenoSampleBehaviour component2 = component.targetBodyObject.GetComponent<XenoSampleBehaviour>();
			component2.dotRoot = ((Component)this).GetComponent<ChildLocator>().FindChild("root");
			component2.dots = ((Component)component2.dotRoot).GetComponentsInChildren<RawImage>();
			if (Object.op_Implicit((Object)(object)component2.tracker))
			{
				for (int i = 0; i < component2.tracker.sampleList.Count; i++)
				{
					((Graphic)component2.dots[i]).color = component2.dotColor(component2.tracker.sampleList[i]);
				}
			}
		}
	}
	internal class XenoDroneBehaviour : MonoBehaviour
	{
		public GameObject ownerBodyObject;

		public CharacterMaster ownerMaster;

		public EntityStateMachine machine;

		public BaseAI ai;

		public CharacterMaster master;

		public SampleTracker tracker;

		public AISkillDriver hover;

		public float collectedDamage;

		private void Start()
		{
			ai = ((Component)this).GetComponent<BaseAI>();
			master = ((Component)this).GetComponent<CharacterMaster>();
			if (!Object.op_Implicit((Object)(object)master) || !Object.op_Implicit((Object)(object)master.minionOwnership) || !Object.op_Implicit((Object)(object)master.minionOwnership.ownerMaster))
			{
				return;
			}
			master.ToggleGod();
			tracker = ((Component)master.minionOwnership.ownerMaster).GetComponent<SampleTracker>();
			if (Object.op_Implicit((Object)(object)tracker))
			{
				tracker.droneMaster = master;
				tracker.droneBehaviour = this;
				tracker.droneAI = ai;
			}
			ownerBodyObject = master.minionOwnership.ownerMaster.GetBodyObject();
			ownerMaster = master.minionOwnership.ownerMaster;
			if (Object.op_Implicit((Object)(object)ownerBodyObject))
			{
				XenoSampleBehaviour component = ownerBodyObject.GetComponent<XenoSampleBehaviour>();
				if (!Object.op_Implicit((Object)(object)component))
				{
				}
			}
			machine = Array.Find(ownerBodyObject.GetComponents<EntityStateMachine>(), (EntityStateMachine x) => x.customName == "Drone");
			hover = Array.Find(((Component)this).GetComponents<AISkillDriver>(), (AISkillDriver x) => x.customName == "HoverEnemies");
		}
	}
	internal class XenoSampleBehaviour : NetworkBehaviour
	{
		public float maxTrackingDistance = 20f;

		public float maxTrackingAngle = 20f;

		public float trackerUpdateFrequency = 10f;

		public HurtBox trackingTarget;

		public CharacterBody characterBody;

		public TeamComponent teamComponent;

		public InputBankTest inputBank;

		public float trackerUpdateStopwatch;

		public Indicator indicator;

		private readonly BullseyeSearch search = new BullseyeSearch();

		private GameObject samplePanel;

		private CharacterBody body;

		private SkillLocator skillLocator;

		public TextMeshProUGUI[] sampleCounters;

		public RawImage[] dots;

		public GameObject boomerangProjectile;

		public XenoBoomerang boomerangBehaviour;

		public SampleTracker tracker;

		public bool canExecute = true;

		public List<int> sampleCount = new List<int> { 0, 0, 0, 0, 0, 0, 0, 0, 0 };

		public MeshRenderer[] displaySamples;

		public string sound = "Play_ui_obj_nullWard_activate";

		public float crosshairRotation = 0f;

		public Transform dotRoot;

		public float rotSpeed = -0.6f;

		private static int kCmdCmdAddEliteBuff;

		private static int kCmdCmdRemoveEliteBuff;

		private static int kRpcRpcAddSample;

		private static int kCmdCmdUpdateSampleCount;

		private static int kRpcRpcUpdateSampleCount;

		public Action<List<int>, List<int>> onSampleUpdated { get; set; }

		public HurtBox target => Object.op_Implicit((Object)(object)trackingTarget) ? trackingTarget : null;

		private void SearchForTarget(Ray aimRay)
		{
			//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_0017: 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_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			search.teamMaskFilter = TeamMask.GetUnprotectedTeams(teamComponent.teamIndex);
			search.filterByLoS = true;
			search.searchOrigin = ((Ray)(ref aimRay)).origin;
			search.searchDirection = ((Ray)(ref aimRay)).direction;
			search.sortMode = (SortMode)1;
			search.maxDistanceFilter = maxTrackingDistance;
			search.maxAngleFilter = maxTrackingAngle;
			search.RefreshCandidates();
			search.FilterOutGameObject(((Component)this).gameObject);
			trackingTarget = search.GetResults().FirstOrDefault();
		}

		public Color dotColor(int sampleIndex)
		{
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0096: 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_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			return (Color)(sampleIndex switch
			{
				0 => MainPlugin.neutralColor, 
				1 => MainPlugin.blazingColor, 
				2 => MainPlugin.overloadingColor, 
				3 => new Color(0.5254902f, 0.9098039f, 0.9490196f), 
				4 => MainPlugin.mendingColor, 
				5 => new Color(0.2627451f, 48f / 85f, 0.2980392f), 
				6 => new Color(0.2627451f, 0.6039216f, 0.5803922f), 
				7 => MainPlugin.perfectedColor, 
				8 => MainPlugin.voidtouchedColor, 
				_ => MainPlugin.neutralColor, 
			});
		}

		private Material getSampleMaterial(int sampleIndex)
		{
			return (Material)(sampleIndex switch
			{
				1 => Prefabs.blazing, 
				2 => Prefabs.overloading, 
				3 => Prefabs.glacial, 
				4 => Prefabs.mending, 
				5 => Prefabs.malachite, 
				6 => Prefabs.celestine, 
				7 => Prefabs.perfected, 
				8 => Prefabs.voidtouched, 
				_ => Prefabs.neutral, 
			});
		}

		private void Awake()
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Expected O, but got Unknown
			indicator = new Indicator(((Component)this).gameObject, Prefabs.scanIndicator);
		}

		private void OnEnable()
		{
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bc: Expected O, but got Unknown
			maxTrackingDistance = 50f;
			indicator.active = true;
			body = ((Component)this).GetComponent<CharacterBody>();
			if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)body.modelLocator) && Object.op_Implicit((Object)(object)body.modelLocator.modelTransform))
			{
				ChildLocator component = ((Component)body.modelLocator.modelTransform).GetComponent<ChildLocator>();
				if (Object.op_Implicit((Object)(object)component))
				{
					displaySamples = ((Component)component.FindChild("Chest")).GetComponentsInChildren<MeshRenderer>();
				}
			}
			skillLocator = body.skillLocator;
			HUD.Update += new hook_Update(HUD_Update);
		}

		private void OnDisable()
		{
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Expected O, but got Unknown
			indicator.active = false;
			HUD.Update -= new hook_Update(HUD_Update);
			if (Object.op_Implicit((Object)(object)samplePanel))
			{
				Object.Destroy((Object)(object)samplePanel);
			}
		}

		private void Start()
		{
			//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: 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_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: 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_00e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0106: Expected O, but got Unknown
			//IL_0131: Unknown result type (might be due to invalid IL or missing references)
			//IL_013b: Expected O, but got Unknown
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			//IL_015d: Expected O, but got Unknown
			//IL_016b: Unknown result type (might be due to invalid IL or missing references)
			characterBody = ((Component)this).GetComponent<CharacterBody>();
			inputBank = ((Component)this).GetComponent<InputBankTest>();
			teamComponent = ((Component)this).GetComponent<TeamComponent>();
			if (Object.op_Implicit((Object)(object)body.masterObject))
			{
				SampleTracker component = body.masterObject.GetComponent<SampleTracker>();
				if (Object.op_Implicit((Object)(object)component))
				{
					tracker = component;
				}
				else
				{
					tracker = body.masterObject.AddComponent<SampleTracker>();
				}
				if (NetworkServer.active && !Object.op_Implicit((Object)(object)tracker.droneMaster))
				{
					MasterSummon val = new MasterSummon
					{
						masterPrefab = Prefabs.droneMaster,
						position = ((Component)this).transform.position + ((Component)this).transform.forward * 3f,
						rotation = Util.QuaternionSafeLookRotation(((Component)this).transform.forward),
						summonerBodyObject = ((Component)this).gameObject,
						ignoreTeamMemberLimit = true
					};
					tracker.droneMaster = val.Perform();
					Deployable val2 = ((Component)tracker.droneMaster).gameObject.AddComponent<Deployable>();
					val2.onUndeploy = new UnityEvent();
					val2.onUndeploy.AddListener(new UnityAction(tracker.droneMaster.TrueKill));
					characterBody.master.AddDeployable(val2, Prefabs.drone);
				}
			}
			if (!Object.op_Implicit((Object)(object)tracker))
			{
				return;
			}
			if (tracker.crosshairRotation != 0f)
			{
				crosshairRotation = tracker.crosshairRotation;
				if (Object.op_Implicit((Object)(object)dotRoot))
				{
					((Component)dotRoot).transform.localRotation = Quaternion.Euler(0f, 0f, crosshairRotation);
				}
			}
			for (int i = 0; i < tracker.sampleList.Count; i++)
			{
				int index = tracker.sampleList[i];
				sampleCount[index]++;
			}
			tracker.sampleCount = sampleCount;
			if (Object.op_Implicit((Object)(object)tracker.droneBehaviour) && !Object.op_Implicit((Object)(object)tracker.droneBehaviour.machine))
			{
				tracker.droneBehaviour.machine = Array.Find(((Component)this).GetComponents<EntityStateMachine>(), (EntityStateMachine x) => x.customName == "Drone");
			}
			tracker.body = body;
			for (int j = 0; j < tracker.sampleList.Count; j++)
			{
				((Renderer)displaySamples[j]).material = getSampleMaterial(tracker.sampleList[j]);
			}
			List<int> sampleList = tracker.sampleList;
			for (int k = 0; k < sampleList.Count; k++)
			{
				int index2 = sampleList[k];
				int num = sampleCount[index2];
				SkillDef val3 = SpecialPickerState.indexSkillDef(index2);
				if (num == 10)
				{
					body.skillLocator.special.SetSkillOverride((object)((Component)this).gameObject, val3, (SkillOverridePriority)4);
				}
			}
		}

		public int GetSampleCount(int sampleIndex)
		{
			return sampleCount[sampleIndex];
		}

		[Command]
		public void CmdAddEliteBuff(int buffIndex)
		{
			body.AddBuff((BuffIndex)buffIndex);
		}

		[Command]
		public void CmdRemoveEliteBuff(int buffIndex)
		{
			body.RemoveBuff((BuffIndex)buffIndex);
		}

		[ClientRpc]
		public void RpcAddSample(int sampleIndex)
		{
			//IL_010d: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)tracker) && !tracker.sampleList.IsNullOrEmpty() && !dots.IsNullOrEmpty() && !displaySamples.IsNullOrEmpty() && !sampleCount.IsNullOrEmpty() && !tracker.sampleCount.IsNullOrEmpty() && !sampleCounters.IsNullOrEmpty())
			{
				if (tracker.currentSampleIndex != 9)
				{
					tracker.currentSampleIndex++;
				}
				else
				{
					tracker.currentSampleIndex = 0;
				}
				tracker.sampleList[tracker.currentSampleIndex] = sampleIndex;
				if (dots != null && dots.Length != 0 && Object.op_Implicit((Object)(object)dots[tracker.currentSampleIndex]))
				{
					((Graphic)dots[tracker.currentSampleIndex]).color = dotColor(sampleIndex);
				}
				if (displaySamples != null && displaySamples.Length != 0 && Object.op_Implicit((Object)(object)displaySamples[tracker.currentSampleIndex]))
				{
					((Renderer)displaySamples[tracker.currentSampleIndex]).material = getSampleMaterial(sampleIndex);
				}
				for (int i = 0; i < sampleCount.Count; i++)
				{
					sampleCount[i] = 0;
				}
				for (int j = 0; j < tracker.sampleList.Count; j++)
				{
					int index = tracker.sampleList[j];
					sampleCount[index]++;
				}
				tracker.sampleCount = sampleCount;
				CallCmdUpdateSampleCount(sampleCount.ToArray());
				for (int k = 0; k < sampleCounters.Length; k++)
				{
					int num = sampleCount[k];
					((TMP_Text)sampleCounters[k]).text = ((num > 0) ? ("x" + num) : "");
				}
				crosshairRotation += -36f;
				tracker.crosshairRotation = crosshairRotation;
				onSampleUpdated?.Invoke(tracker.sampleList, sampleCount);
			}
		}

		[Command]
		public void CmdUpdateSampleCount(int[] s)
		{
			CallRpcUpdateSampleCount(s);
		}

		[ClientRpc]
		public void RpcUpdateSampleCount(int[] s)
		{
			List<int> list = s.ToList();
			if (sampleCount != list)
			{
				sampleCount = list;
				tracker.sampleCount = sampleCount;
			}
		}

		private void FixedUpdate()
		{
			//IL_0057: 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_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0121: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			//IL_014d: Unknown result type (might be due to invalid IL or missing references)
			trackerUpdateStopwatch += Time.fixedDeltaTime;
			if (trackerUpdateStopwatch >= 1f / trackerUpdateFrequency)
			{
				trackerUpdateStopwatch -= 1f / trackerUpdateFrequency;
				HurtBox val = trackingTarget;
				Ray aimRay = default(Ray);
				((Ray)(ref aimRay))..ctor(inputBank.aimOrigin, inputBank.aimDirection);
				SearchForTarget(aimRay);
				indicator.targetTransform = (Object.op_Implicit((Object)(object)trackingTarget) ? ((Component)trackingTarget).transform : null);
			}
			if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)body.skillLocator) && Object.op_Implicit((Object)(object)body.skillLocator.utility))
			{
				indicator.active = body.skillLocator.utility.CanExecute();
			}
			if (Object.op_Implicit((Object)(object)dotRoot))
			{
				((Component)dotRoot).transform.localRotation = Quaternion.Lerp(((Component)dotRoot).transform.localRotation, Quaternion.Euler(0f, 0f, crosshairRotation), -36f * rotSpeed * Time.fixedDeltaTime);
			}
		}

		private void HUD_Update(orig_Update orig, HUD self)
		{
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self);
			if (Object.op_Implicit((Object)(object)samplePanel) || !Object.op_Implicit((Object)(object)self.targetBodyObject) || !((Object)(object)self.targetBodyObject == (Object)(object)((Component)this).gameObject) || !Object.op_Implicit((Object)(object)self.mainUIPanel) || !Util.HasEffectiveAuthority(((Component)this).gameObject) || !Object.op_Implicit((Object)(object)self.skillIcons[3]))
			{
				return;
			}
			GameObject gameObject = ((Component)self.skillIcons[3]).gameObject;
			samplePanel = Object.Instantiate<GameObject>(Prefabs.samplePanel, gameObject.transform.parent);
			samplePanel.transform.localPosition = Vector2.op_Implicit(new Vector2(-100f, 300f));
			sampleCounters = samplePanel.GetComponentsInChildren<TextMeshProUGUI>();
			int i;
			for (i = 0; i < sampleCounters.Length; i++)
			{
				int num = tracker.sampleList.Count((int x) => x == i);
				((TMP_Text)sampleCounters[i]).text = ((num > 0) ? ("x" + num) : "");
			}
		}

		private void UNetVersion()
		{
		}

		protected static void InvokeCmdCmdAddEliteBuff(NetworkBehaviour obj, NetworkReader reader)
		{
			if (!NetworkServer.active)
			{
				Debug.LogError((object)"Command CmdAddEliteBuff called on client.");
			}
			else
			{
				((XenoSampleBehaviour)(object)obj).CmdAddEliteBuff((int)reader.ReadPackedUInt32());
			}
		}

		protected static void InvokeCmdCmdRemoveEliteBuff(NetworkBehaviour obj, NetworkReader reader)
		{
			if (!NetworkServer.active)
			{
				Debug.LogError((object)"Command CmdRemoveEliteBuff called on client.");
			}
			else
			{
				((XenoSampleBehaviour)(object)obj).CmdRemoveEliteBuff((int)reader.ReadPackedUInt32());
			}
		}

		protected static void InvokeCmdCmdUpdateSampleCount(NetworkBehaviour obj, NetworkReader reader)
		{
			if (!NetworkServer.active)
			{
				Debug.LogError((object)"Command CmdUpdateSampleCount called on client.");
			}
			else
			{
				((XenoSampleBehaviour)(object)obj).CmdUpdateSampleCount(GeneratedNetworkCode._ReadArrayInt32_None(reader));
			}
		}

		public void CallCmdAddEliteBuff(int buffIndex)
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			if (!NetworkClient.active)
			{
				Debug.LogError((object)"Command function CmdAddEliteBuff called on server.");
				return;
			}
			if (((NetworkBehaviour)this).isServer)
			{
				CmdAddEliteBuff(buffIndex);
				return;
			}
			NetworkWriter val = new NetworkWriter();
			val.Write((short)0);
			val.Write((short)5);
			val.WritePackedUInt32((uint)kCmdCmdAddEliteBuff);
			val.Write(((Component)this).GetComponent<NetworkIdentity>().netId);
			val.WritePackedUInt32((uint)buffIndex);
			((NetworkBehaviour)this).SendCommandInternal(val, 0, "CmdAddEliteBuff");
		}

		public void CallCmdRemoveEliteBuff(int buffIndex)
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			if (!NetworkClient.active)
			{
				Debug.LogError((object)"Command function CmdRemoveEliteBuff called on server.");
				return;
			}
			if (((NetworkBehaviour)this).isServer)
			{
				CmdRemoveEliteBuff(buffIndex);
				return;
			}
			NetworkWriter val = new NetworkWriter();
			val.Write((short)0);
			val.Write((short)5);
			val.WritePackedUInt32((uint)kCmdCmdRemoveEliteBuff);
			val.Write(((Component)this).GetComponent<NetworkIdentity>().netId);
			val.WritePackedUInt32((uint)buffIndex);
			((NetworkBehaviour)this).SendCommandInternal(val, 0, "CmdRemoveEliteBuff");
		}

		public void CallCmdUpdateSampleCount(int[] s)
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			if (!NetworkClient.active)
			{
				Debug.LogError((object)"Command function CmdUpdateSampleCount called on server.");
				return;
			}
			if (((NetworkBehaviour)this).isServer)
			{
				CmdUpdateSampleCount(s);
				return;
			}
			NetworkWriter val = new NetworkWriter();
			val.Write((short)0);
			val.Write((short)5);
			val.WritePackedUInt32((uint)kCmdCmdUpdateSampleCount);
			val.Write(((Component)this).GetComponent<NetworkIdentity>().netId);
			GeneratedNetworkCode._WriteArrayInt32_None(val, s);
			((NetworkBehaviour)this).SendCommandInternal(val, 0, "CmdUpdateSampleCount");
		}

		protected static void InvokeRpcRpcAddSample(NetworkBehaviour obj, NetworkReader reader)
		{
			if (!NetworkClient.active)
			{
				Debug.LogError((object)"RPC RpcAddSample called on server.");
			}
			else
			{
				((XenoSampleBehaviour)(object)obj).RpcAddSample((int)reader.ReadPackedUInt32());
			}
		}

		protected static void InvokeRpcRpcUpdateSampleCount(NetworkBehaviour obj, NetworkReader reader)
		{
			if (!NetworkClient.active)
			{
				Debug.LogError((object)"RPC RpcUpdateSampleCount called on server.");
			}
			else
			{
				((XenoSampleBehaviour)(object)obj).RpcUpdateSampleCount(GeneratedNetworkCode._ReadArrayInt32_None(reader));
			}
		}

		public void CallRpcAddSample(int sampleIndex)
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			if (!NetworkServer.active)
			{
				Debug.LogError((object)"RPC Function RpcAddSample called on client.");
				return;
			}
			NetworkWriter val = new NetworkWriter();
			val.Write((short)0);
			val.Write((short)2);
			val.WritePackedUInt32((uint)kRpcRpcAddSample);
			val.Write(((Component)this).GetComponent<NetworkIdentity>().netId);
			val.WritePackedUInt32((uint)sampleIndex);
			((NetworkBehaviour)this).SendRPCInternal(val, 0, "RpcAddSample");
		}

		public void CallRpcUpdateSampleCount(int[] s)
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			if (!NetworkServer.active)
			{
				Debug.LogError((object)"RPC Function RpcUpdateSampleCount called on client.");
				return;
			}
			NetworkWriter val = new NetworkWriter();
			val.Write((short)0);
			val.Write((short)2);
			val.WritePackedUInt32((uint)kRpcRpcUpdateSampleCount);
			val.Write(((Component)this).GetComponent<NetworkIdentity>().netId);
			GeneratedNetworkCode._WriteArrayInt32_None(val, s);
			((NetworkBehaviour)this).SendRPCInternal(val, 0, "RpcUpdateSampleCount");
		}

		static XenoSampleBehaviour()
		{
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Expected O, but got Unknown
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Expected O, but got Unknown
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Expected O, but got Unknown
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Expected O, but got Unknown
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Expected O, but got Unknown
			kCmdCmdAddEliteBuff = -1770257014;
			NetworkBehaviour.RegisterCommandDelegate(typeof(XenoSampleBehaviour), kCmdCmdAddEliteBuff, new CmdDelegate(InvokeCmdCmdAddEliteBuff));
			kCmdCmdRemoveEliteBuff = 895178653;
			NetworkBehaviour.RegisterCommandDelegate(typeof(XenoSampleBehaviour), kCmdCmdRemoveEliteBuff, new CmdDelegate(InvokeCmdCmdRemoveEliteBuff));
			kCmdCmdUpdateSampleCount = -1854395273;
			NetworkBehaviour.RegisterCommandDelegate(typeof(XenoSampleBehaviour), kCmdCmdUpdateSampleCount, new CmdDelegate(InvokeCmdCmdUpdateSampleCount));
			kRpcRpcAddSample = 138843408;
			NetworkBehaviour.RegisterRpcDelegate(typeof(XenoSampleBehaviour), kRpcRpcAddSample, new CmdDelegate(InvokeRpcRpcAddSample));
			kRpcRpcUpdateSampleCount = -460886175;
			NetworkBehaviour.RegisterRpcDelegate(typeof(XenoSampleBehaviour), kRpcRpcUpdateSampleCount, new CmdDelegate(InvokeRpcRpcUpdateSampleCount));
			NetworkCRC.RegisterBehaviour("XenoSampleBehaviour", 0);
		}

		public override bool OnSerialize(NetworkWriter writer, bool forceAll)
		{
			bool result = default(bool);
			return result;
		}

		public override void OnDeserialize(NetworkReader reader, bool initialState)
		{
		}
	}
	internal class Configs
	{
		internal static ConfigFile primary;

		internal static ConfigFile secondary;

		internal static ConfigFile utility;

		internal static ConfigFile special;

		internal static ConfigEntry<float> primaryBaseDamage;

		internal static ConfigEntry<int> primaryBaseFireCount;

		internal static ConfigEntry<float> primaryNeutralDamageReduction;

		internal static ConfigEntry<float> primaryNeutralSpeedIncrease;

		internal static ConfigEntry<float> primaryBlazingDamage;

		internal static ConfigEntry<float> primaryBlazingAllyDamage;

		internal static ConfigEntry<float> primaryOverloadingSpeed;

		internal static ConfigEntry<float> primaryGlacialRadius;

		internal static ConfigEntry<float> primaryGlacialDamageMult;

		internal static ConfigEntry<float> primaryMendingLSMult;

		internal static ConfigEntry<float> primaryMendingAllyHeal;

		internal static ConfigEntry<float> primaryMalachiteDamage;

		internal static ConfigEntry<float> primaryCelestineSlowMult;

		internal static ConfigEntry<float> primaryCelestineArmorReduction;

		internal static ConfigEntry<float> primaryPerfectedCurseMult;

		internal static ConfigEntry<float> primaryPerfectedDamageMult;

		internal static ConfigEntry<float> primaryVoidtouchedKOChance;

		internal static ConfigEntry<float> primaryVoidtouchedKODamage;

		internal static ConfigEntry<float> secondaryBaseDamage;

		internal static ConfigEntry<float> secondaryNeutralSpeed;

		internal static ConfigEntry<float> secondaryBlazingRange;

		internal static ConfigEntry<float> secondaryBlazingDamageMult;

		internal static ConfigEntry<float> secondaryOverloadingCDReduction;

		internal static ConfigEntry<float> secondaryOverloadingDashMult;

		internal static ConfigEntry<float> secondaryOverloadingDashDamageMult;

		internal static ConfigEntry<float> secondaryGlacialLifetimeMult;

		internal static ConfigEntry<float> secondaryGlacialSpeedReduction;

		internal static ConfigEntry<float> secondaryMendingRange;

		internal static ConfigEntry<float> secondaryMendingSpeedBuff;

		internal static ConfigEntry<float> secondaryMendingWeakenBuff;

		internal static ConfigEntry<float> secondaryMendingWeakenBuffDuration;

		internal static ConfigEntry<float> secondaryMalachiteStopDuration;

		internal static ConfigEntry<float> secondaryMalachiteFireDelay;

		internal static ConfigEntry<float> secondaryMalachiteDamage;

		internal static ConfigEntry<float> secondaryCelestinePullRadius;

		internal static ConfigEntry<float> secondaryPerfectedFireDelay;

		internal static ConfigEntry<float> secondaryPerfectedDamage;

		internal static ConfigEntry<int> secondaryVoidtouchedHitCount;

		internal static ConfigEntry<float> utilityBaseTargetDuration;

		internal static ConfigEntry<float> utilityBaseTargetCD;

		internal static ConfigEntry<float> utilityNeutralCrit;

		internal static ConfigEntry<float> utilityBlazingDamage;

		internal static ConfigEntry<float> utilityOverloadingLightningChance;

		internal static ConfigEntry<float> utilityOverloadingLightningDamage;

		internal static ConfigEntry<float> utilityOverloadingLightningRange;

		internal static ConfigEntry<float> utilityGlacialFreezeChance;

		internal static ConfigEntry<float> utilityMendingDamage;

		internal static ConfigEntry<float> utilityMendingHeal;

		internal static ConfigEntry<float> utilityMalachiteDamage;

		internal static ConfigEntry<float> utilityCelestineChance;

		internal static ConfigEntry<float> utilityCelestineDuration;

		internal static ConfigEntry<float> utilityPerfectedDMGMult;

		internal static ConfigEntry<float> utilityVoidtouchedChance;

		internal static ConfigEntry<float> specialBaseDamage;

		internal static ConfigEntry<float> specialNeutralDamage;

		internal static ConfigEntry<float> specialBlazingDamage;

		internal static ConfigEntry<int> specialBlazingHitCount;

		internal static ConfigEntry<float> specialBlazingBurnDamage;

		internal static ConfigEntry<float> specialOverloadingDamage;

		internal static ConfigEntry<float> specialGlacialDamage;

		internal static ConfigEntry<float> specialGlacialRadius;

		internal static ConfigEntry<float> specialMendingHeal;

		internal static ConfigEntry<float> specialMalachiteDamage;

		internal static ConfigEntry<float> specialMalachiteForce;

		internal static ConfigEntry<float> specialMalachiteRate;

		internal static ConfigEntry<int> specialCelestineArmor;

		internal static ConfigEntry<float> specialCelestineSpeed;

		internal static ConfigEntry<float> specialCelestineDuration;

		internal static ConfigEntry<float> specialPerfectedExecuteThreshold;

		internal static ConfigEntry<int> specialVoidtouchedHPLeft;

		internal static void SetConfigs()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Expected O, but got Unknown
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Expected O, but got Unknown
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Expected O, but got Unknown
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Expected O, but got Unknown
			//IL_0097: Expected O, but got Unknown
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Expected O, but got Unknown
			//IL_00c6: Expected O, but got Unknown
			//IL_00da: 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_00f9: Expected O, but got Unknown
			//IL_00f9: Expected O, but got Unknown
			//IL_010d: 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_012c: Expected O, but got Unknown
			//IL_012c: Expected O, but got Unknown
			//IL_0140: 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_015f: Expected O, but got Unknown
			//IL_015f: Expected O, but got Unknown
			//IL_0173: 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_0192: Expected O, but got Unknown
			//IL_0192: Expected O, but got Unknown
			//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c5: Expected O, but got Unknown
			//IL_01c5: Expected O, but got Unknown
			//IL_01d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f8: Expected O, but got Unknown
			//IL_01f8: Expected O, but got Unknown
			//IL_020c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0221: Unknown result type (might be due to invalid IL or missing references)
			//IL_022b: Expected O, but got Unknown
			//IL_022b: Expected O, but got Unknown
			//IL_023f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0254: Unknown result type (might be due to invalid IL or missing references)
			//IL_025e: Expected O, but got Unknown
			//IL_025e: Expected O, but got Unknown
			//IL_0272: Unknown result type (might be due to invalid IL or missing references)
			//IL_0287: Unknown result type (might be due to invalid IL or missing references)
			//IL_0291: Expected O, but got Unknown
			//IL_0291: Expected O, but got Unknown
			//IL_02a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c4: Expected O, but got Unknown
			//IL_02c4: Expected O, but got Unknown
			//IL_02d8: 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_02f7: Expected O, but got Unknown
			//IL_02f7: Expected O, but got Unknown
			//IL_030b: 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_032a: Expected O, but got Unknown
			//IL_032a: Expected O, but got Unknown
			//IL_033e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0353: Unknown result type (might be due to invalid IL or missing references)
			//IL_035d: Expected O, but got Unknown
			//IL_035d: Expected O, but got Unknown
			//IL_0371: Unknown result type (might be due to invalid IL or missing references)
			//IL_0386: Unknown result type (might be due to invalid IL or missing references)
			//IL_0390: Expected O, but got Unknown
			//IL_0390: Expected O, but got Unknown
			//IL_03a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c3: Expected O, but got Unknown
			//IL_03c3: Expected O, but got Unknown
			//IL_03d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f6: Expected O, but got Unknown
			//IL_03f6: Expected O, but got Unknown
			//IL_040a: Unknown result type (might be due to invalid IL or missing references)
			//IL_041f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0429: Expected O, but got Unknown
			//IL_0429: Expected O, but got Unknown
			//IL_043d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0452: Unknown result type (might be due to invalid IL or missing references)
			//IL_045c: Expected O, but got Unknown
			/