Decompiled source of AerosSkills v2.4.0

AerosSkills.dll

Decompiled 2 days ago
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using AncientScepter;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using EntityStates;
using EntityStates.Bandit2;
using EntityStates.Captain.Weapon;
using EntityStates.Commando.CommandoWeapon;
using EntityStates.Engi.EngiWeapon;
using EntityStates.FalseSon;
using EntityStates.Huntress;
using EntityStates.Huntress.HuntressWeapon;
using EntityStates.Huntress.Weapon;
using EntityStates.Loader;
using EntityStates.Mage.Weapon;
using EntityStates.Merc;
using EntityStates.Merc.Weapon;
using EntityStates.Railgunner.Backpack;
using EntityStates.Railgunner.Weapon;
using EntityStates.Seeker;
using EntityStates.Toolbot;
using HG;
using KinematicCharacterController;
using On.RoR2;
using R2API;
using R2API.Utils;
using Rewired.ComponentControls.Effects;
using RoR2;
using RoR2.Audio;
using RoR2.CharacterAI;
using RoR2.Navigation;
using RoR2.Networking;
using RoR2.Orbs;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.UI;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Events;
using UnityEngine.Networking;
using UnityEngine.Rendering;
using UnityEngine.Rendering.PostProcessing;
using UnityEngine.UI;

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

internal class Assets
{
	public static AssetBundle MainAssetBundle;

	public static T Load<T>(string name) where T : Object
	{
		return MainAssetBundle.LoadAsset<T>(name);
	}

	public static void PopulateAssets()
	{
		Assembly executingAssembly = Assembly.GetExecutingAssembly();
		if ((Object)(object)MainAssetBundle == (Object)null)
		{
			using Stream stream = executingAssembly.GetManifestResourceStream("AerosSkills.AssetBundle." + "AerosSkills".ToLower() + "assets");
			MainAssetBundle = AssetBundle.LoadFromStream(stream);
		}
		using Stream stream2 = executingAssembly.GetManifestResourceStream("AerosSkills.AerosSkills.bnk");
		byte[] array = new byte[stream2.Length];
		stream2.Read(array, 0, array.Length);
		SoundBanks.Add(array);
	}
}
internal class CrosshairSwap : MonoBehaviour
{
	private CharacterBody body;

	private void Awake()
	{
		body = ((Component)this).GetComponent<CharacterBody>();
	}

	private void Start()
	{
		if (body.skillLocator.primary.skillNameToken == "AEROS__M1")
		{
			body.spreadBloomCurve = Prefabs.spreadBloomCurve;
			body._defaultCrosshairPrefab = Prefabs.Load<GameObject>("RoR2/Base/UI/StandardCrosshair.prefab");
		}
	}
}
internal class DebugHelper : MonoBehaviour
{
}
[DefaultExecutionOrder(100)]
internal class eee : MonoBehaviour
{
	private Tracer tracer;

	public float zPos = 13f;

	private void Start()
	{
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		tracer = ((Component)this).GetComponent<Tracer>();
		Vector3 localPosition = tracer.beamObject.transform.localPosition;
		Vector3 val = default(Vector3);
		((Vector3)(ref val))..ctor(localPosition.x, localPosition.y, localPosition.z + zPos);
	}
}
internal class ForcePos : MonoBehaviour
{
	private void LateUpdate()
	{
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		((Component)this).transform.localPosition = Vector3.up * 4f;
	}
}
internal class MercHitboxScale : MonoBehaviour
{
	private bool scaled;

	public void Scale()
	{
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_003e: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: Unknown result type (might be due to invalid IL or missing references)
		//IL_005f: Unknown result type (might be due to invalid IL or missing references)
		if (!scaled)
		{
			scaled = true;
			Transform transform = ((Component)((Component)((Component)this).GetComponent<ModelLocator>().modelTransform).GetComponent<HitBoxGroup>().hitBoxes[0]).transform;
			transform.localPosition += Vector3.up;
			transform.localScale += Vector3.up * 2f;
		}
	}
}
internal class MissileSearchTweak : MonoBehaviour
{
	public float maxAngle = 75f;

	private MissileController missile;

	private void Start()
	{
		missile = ((Component)this).GetComponent<MissileController>();
		missile.search.maxAngleFilter = 20f;
	}
}
internal class MultDroneBehaviour : MonoBehaviour
{
	private CharacterBody body;

	private CharacterMaster master;

	public MultTracker tracker;

	public BaseAI ai;

	public AISkillDriver hover;

	private bool setMat;

	private void Awake()
	{
		master = ((Component)this).GetComponent<CharacterMaster>();
	}

	private void Start()
	{
	}

	private void FixedUpdate()
	{
		if (!Object.op_Implicit((Object)(object)body))
		{
			body = master.GetBody();
			if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)master.minionOwnership.ownerMaster))
			{
				CharacterBody val = master.minionOwnership.ownerMaster.GetBody();
				MultTracker multTracker = (Object.op_Implicit((Object)(object)val) ? ((Component)val).GetComponent<MultTracker>() : null);
				if (Object.op_Implicit((Object)(object)multTracker))
				{
					tracker = multTracker;
					tracker.droneAI = ((Component)master).GetComponent<BaseAI>();
					tracker.droneSkill = body.skillLocator.primary;
				}
			}
		}
		else if (!setMat && Object.op_Implicit((Object)(object)tracker) && Object.op_Implicit((Object)(object)tracker.baseMat))
		{
			setMat = true;
			((Component)((Component)body.modelLocator.modelTransform).GetComponent<ChildLocator>().FindChild("drone")).GetComponent<Renderer>().material = tracker.baseMat;
		}
	}

	public void EndScan()
	{
		if (Object.op_Implicit((Object)(object)tracker))
		{
			tracker.endScanning = true;
		}
	}
}
internal class MultTracker : HuntressTracker
{
	public BaseAI droneAI;

	public GenericSkill droneSkill;

	private bool enable;

	public bool endScanning;

	private CharacterMaster droneMaster;

	public Material baseMat;

	private CharacterModel model;

	private float stopwatch;

	public bool exitSkill { get; set; }

	public void SelectTarget()
	{
		if (Object.op_Implicit((Object)(object)base.trackingTarget) && Object.op_Implicit((Object)(object)droneAI) && Object.op_Implicit((Object)(object)droneSkill))
		{
			droneAI.currentEnemy.gameObject = ((Component)base.trackingTarget.healthComponent).gameObject;
			droneSkill.ExecuteIfReady();
		}
	}

	public void DisableScanning()
	{
		endScanning = true;
	}

	private void Start()
	{
		//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_0052: Unknown result type (might be due to invalid IL or missing references)
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		//IL_005f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0064: Unknown result type (might be due to invalid IL or missing references)
		//IL_0069: Unknown result type (might be due to invalid IL or missing references)
		//IL_006a: Unknown result type (might be due to invalid IL or missing references)
		//IL_006f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_0080: Unknown result type (might be due to invalid IL or missing references)
		//IL_0088: Expected O, but got Unknown
		((HuntressTracker)this).Start();
		enable = base.characterBody.skillLocator.secondary.skillNameToken == "AEROS_MULT_SEC";
		if (enable && NetworkServer.active)
		{
			MasterSummon val = new MasterSummon
			{
				masterPrefab = Prefabs.droneMaster,
				position = Utils.FindNearestNodePosition(((Component)this).transform.position, (GraphType)0),
				rotation = Quaternion.identity,
				summonerBodyObject = ((Component)this).gameObject,
				ignoreTeamMemberLimit = true
			};
			droneMaster = val.Perform();
		}
		model = ((Component)base.characterBody.modelLocator.modelTransform).GetComponent<CharacterModel>();
		AkBankManager.LoadBankAsync("char_captain", (BankCallback)null);
	}

	private void FixedUpdate()
	{
		//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b8: 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_00e8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
		if (!Object.op_Implicit((Object)(object)baseMat) && Object.op_Implicit((Object)(object)model) && model.baseRendererInfos.Length > 1)
		{
			baseMat = model.baseRendererInfos[1].defaultMaterial;
		}
		if (!enable)
		{
			base.indicator.active = false;
			return;
		}
		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.trackingTarget = base.search.GetResults().FirstOrDefault();
			base.indicator.targetTransform = (Object.op_Implicit((Object)(object)base.trackingTarget) ? ((Component)base.trackingTarget).transform : null);
		}
	}

	private void OnDestroy()
	{
		if (Object.op_Implicit((Object)(object)droneMaster))
		{
			droneMaster.DestroyBody();
			Object.Destroy((Object)(object)((Component)droneMaster).gameObject);
		}
	}
}
internal class RadialBuff : MonoBehaviour
{
	private TeamFilter teamFilter;

	private void OnCollisionEnter(Collision collision)
	{
		//IL_00ce: 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_001f: Expected O, but got Unknown
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_003d: 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_0053: 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_0102: Unknown result type (might be due to invalid IL or missing references)
		//IL_010e: Unknown result type (might be due to invalid IL or missing references)
		//IL_024c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0251: Unknown result type (might be due to invalid IL or missing references)
		//IL_0258: Unknown result type (might be due to invalid IL or missing references)
		//IL_0263: Unknown result type (might be due to invalid IL or missing references)
		//IL_0270: Expected O, but got Unknown
		float value = MainPlugin.radius.Value;
		if (NetworkServer.active)
		{
			SphereSearch val = new SphereSearch();
			val.origin = ((Component)this).transform.position;
			val.radius = value;
			val.mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask;
			HurtBox[] hurtBoxes = val.RefreshCandidates().FilterCandidatesByHurtBoxTeam(TeamMask.GetEnemyTeams(teamFilter.teamIndex)).FilterCandidatesByDistinctHurtBoxEntities()
				.GetHurtBoxes();
			HurtBox[] array = hurtBoxes;
			foreach (HurtBox val2 in array)
			{
				if (Object.op_Implicit((Object)(object)val2.healthComponent))
				{
					SetStateOnHurt component = ((Component)val2.healthComponent).GetComponent<SetStateOnHurt>();
					if (Object.op_Implicit((Object)(object)component))
					{
						component.SetPain();
					}
				}
			}
		}
		foreach (TeamComponent teamMember in TeamComponent.GetTeamMembers(teamFilter.teamIndex))
		{
			if (!Object.op_Implicit((Object)(object)teamMember.body) || !(Vector3.Distance(((Component)this).transform.position, ((Component)teamMember).transform.position) <= value))
			{
				continue;
			}
			float value2 = MainPlugin.duration.Value;
			if (Object.op_Implicit((Object)(object)teamMember.body.modelLocator) && Object.op_Implicit((Object)(object)teamMember.body.modelLocator.modelTransform))
			{
				CharacterModel component2 = ((Component)teamMember.body.modelLocator.modelTransform).GetComponent<CharacterModel>();
				if (Object.op_Implicit((Object)(object)component2))
				{
					TemporaryOverlayInstance val3 = TemporaryOverlayManager.AddOverlay(((Component)component2).gameObject);
					val3.duration = value2;
					val3.animateShaderAlpha = true;
					val3.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
					val3.alphaCurve.AddKey(0.85f, 1f);
					val3.destroyComponentOnEnd = true;
					val3.originalMaterial = Prefabs.overlay;
					val3.AddToCharacterModel(component2);
				}
			}
			if (NetworkServer.active)
			{
				teamMember.body.AddTimedBuff(Prefabs.overclock, value2);
			}
		}
		EffectManager.SpawnEffect(Prefabs.buffProjectileExplosion, new EffectData
		{
			origin = ((Component)this).transform.position,
			scale = value
		}, false);
	}

	private void Awake()
	{
		teamFilter = ((Component)this).GetComponent<TeamFilter>();
	}
}
internal class RailgunnerScreenBehaviour : NetworkBehaviour, IProjectileImpactBehavior
{
	private ProjectileController controller;

	public GameObject screenMesh;

	private static int kRpcRpcCollision;

	private void Awake()
	{
		controller = ((Component)this).GetComponentInParent<ProjectileController>();
	}

	public void OnProjectileImpact(ProjectileImpactInfo impactInfo)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		if (Object.op_Implicit((Object)(object)impactInfo.collider) && !Object.op_Implicit((Object)(object)((Component)impactInfo.collider).GetComponent<HurtBox>()))
		{
			CallRpcCollision();
		}
	}

	[ClientRpc]
	public void RpcCollision()
	{
		screenMesh.SetActive(true);
	}

	private void FixedUpdate()
	{
	}

	private void UNetVersion()
	{
	}

	protected static void InvokeRpcRpcCollision(NetworkBehaviour obj, NetworkReader reader)
	{
		if (!NetworkClient.active)
		{
			Debug.LogError((object)"RPC RpcCollision called on server.");
		}
		else
		{
			((RailgunnerScreenBehaviour)(object)obj).RpcCollision();
		}
	}

	public void CallRpcCollision()
	{
		//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 RpcCollision called on client.");
			return;
		}
		NetworkWriter val = new NetworkWriter();
		val.Write((short)0);
		val.Write((short)2);
		val.WritePackedUInt32((uint)kRpcRpcCollision);
		val.Write(((Component)this).GetComponent<NetworkIdentity>().netId);
		((NetworkBehaviour)this).SendRPCInternal(val, 0, "RpcCollision");
	}

	static RailgunnerScreenBehaviour()
	{
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Expected O, but got Unknown
		kRpcRpcCollision = -1880999976;
		NetworkBehaviour.RegisterRpcDelegate(typeof(RailgunnerScreenBehaviour), kRpcRpcCollision, new CmdDelegate(InvokeRpcRpcCollision));
		NetworkCRC.RegisterBehaviour("RailgunnerScreenBehaviour", 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 RailgunnerScreenCollision : MonoBehaviour
{
	private void OnTriggerEnter(Collider collider)
	{
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		ProjectileDamage component = ((Component)collider).GetComponent<ProjectileDamage>();
		if (Object.op_Implicit((Object)(object)component))
		{
			component.damage *= MainPlugin.railgunnerUtilityDamageMult.Value;
			component.damageColorIndex = (DamageColorIndex)12;
		}
	}
}
internal class SeekerGenkidamaProjectile : NetworkBehaviour
{
	private ProjectileController controller;

	private ProjectileDamage projectileDamage;

	private ProjectileSimple simple;

	private Collider collider;

	private ProjectileImpactExplosion impact;

	private SkillLocator skillLocator;

	private CharacterBody ownerBody;

	private SeekerController seekerController;

	private EntityStateMachine weapon;

	public float upPos = 4f;

	private float damage;

	private int inputCount;

	private int tranquilityCount;

	private static int kCmdCmdUpdateInput;

	private void Awake()
	{
		controller = ((Component)this).GetComponent<ProjectileController>();
		simple = ((Component)this).GetComponent<ProjectileSimple>();
		projectileDamage = ((Component)this).GetComponent<ProjectileDamage>();
		impact = ((Component)this).GetComponent<ProjectileImpactExplosion>();
		collider = ((Component)this).GetComponent<Collider>();
	}

	private void Start()
	{
		if (Object.op_Implicit((Object)(object)controller.owner))
		{
			GameObject owner = controller.owner;
			skillLocator = owner.GetComponent<SkillLocator>();
			ownerBody = owner.GetComponent<CharacterBody>();
			seekerController = owner.GetComponent<SeekerController>();
			weapon = Array.Find(owner.GetComponents<EntityStateMachine>(), (EntityStateMachine x) => x.customName == "Weapon");
		}
	}

	private void Update()
	{
		//IL_003c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		//IL_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)
		if (!((Behaviour)simple).enabled && Object.op_Implicit((Object)(object)controller.owner))
		{
			((Component)this).transform.position = controller.owner.transform.position + Vector3.up * upPos;
		}
	}

	[Command]
	private void CmdUpdateInput(int input)
	{
		inputCount = input;
	}

	private void FixedUpdate()
	{
		//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_0020: 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_005c: Unknown result type (might be due to invalid IL or missing references)
		((Component)this).transform.localScale = Vector3.Lerp(((Component)this).transform.localScale, Vector3.one * (float)(inputCount + 1), 1.5f * Time.fixedDeltaTime);
		if (Object.op_Implicit((Object)(object)ownerBody))
		{
			((Component)this).transform.forward = ownerBody.inputBank.aimDirection;
			damage = ownerBody.damage;
			tranquilityCount = ownerBody.GetBuffCount(Buffs.ChakraBuff);
		}
		if (!((Behaviour)simple).enabled && Object.op_Implicit((Object)(object)seekerController) && Util.HasEffectiveAuthority(controller.owner))
		{
			CallCmdUpdateInput(seekerController.meditationInputStep);
		}
		if ((!((Behaviour)simple).enabled && !Object.op_Implicit((Object)(object)ownerBody)) || (Object.op_Implicit((Object)(object)weapon) && !(weapon.state is Genkidama)))
		{
			((Behaviour)simple).enabled = true;
			((Behaviour)impact).enabled = true;
			((ProjectileExplosion)impact).blastRadius = 5 * (inputCount + 1);
			collider.enabled = true;
			projectileDamage.damage = (MainPlugin.genkidamaBaseDamage.Value + MainPlugin.genkidamaAddDamage.Value * (float)tranquilityCount) * damage;
		}
	}

	private void UNetVersion()
	{
	}

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

	public void CallCmdUpdateInput(int input)
	{
		//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 CmdUpdateInput called on server.");
			return;
		}
		if (((NetworkBehaviour)this).isServer)
		{
			CmdUpdateInput(input);
			return;
		}
		NetworkWriter val = new NetworkWriter();
		val.Write((short)0);
		val.Write((short)5);
		val.WritePackedUInt32((uint)kCmdCmdUpdateInput);
		val.Write(((Component)this).GetComponent<NetworkIdentity>().netId);
		val.WritePackedUInt32((uint)input);
		((NetworkBehaviour)this).SendCommandInternal(val, 0, "CmdUpdateInput");
	}

	static SeekerGenkidamaProjectile()
	{
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Expected O, but got Unknown
		kCmdCmdUpdateInput = -1960028162;
		NetworkBehaviour.RegisterCommandDelegate(typeof(SeekerGenkidamaProjectile), kCmdCmdUpdateInput, new CmdDelegate(InvokeCmdCmdUpdateInput));
		NetworkCRC.RegisterBehaviour("SeekerGenkidamaProjectile", 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 SimpleUpdate : MonoBehaviour
{
	private ProjectileSimple simple;

	private ProjectileTargetComponent target;

	private void Awake()
	{
		simple = ((Component)this).GetComponent<ProjectileSimple>();
		target = ((Component)this).GetComponent<ProjectileTargetComponent>();
	}

	private void FixedUpdate()
	{
		simple.updateAfterFiring = Object.op_Implicit((Object)(object)target.target);
	}
}
[DefaultExecutionOrder(100)]
internal class TurretChargeBehaviour : MonoBehaviour
{
	private CharacterBody body;

	private CharacterModel model;

	private Material mat;

	public bool firing;

	public float stopwatch = 3f;

	public bool addstock;

	private void Awake()
	{
		model = ((Component)this).GetComponent<CharacterModel>();
	}

	private void Start()
	{
		body = model.body;
		UpdateMaterial();
	}

	public void UpdateMaterial()
	{
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_003f: Expected O, but got Unknown
		//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
		if (Object.op_Implicit((Object)(object)mat))
		{
			Object.Destroy((Object)(object)mat);
		}
		mat = new Material(model.baseRendererInfos[3].defaultMaterial);
		model.baseRendererInfos[3].defaultMaterial = mat;
		model.baseRendererInfos[3].renderer.material = mat;
		if (!Object.op_Implicit((Object)(object)body))
		{
			mat.SetTextureScale("_MainTex", new Vector2(2.07f, 1f));
			mat.SetFloat("_EmPower", 2f);
		}
	}

	private void FixedUpdate()
	{
		//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
		if (!Object.op_Implicit((Object)(object)body) || !Object.op_Implicit((Object)(object)model) || !Object.op_Implicit((Object)(object)mat))
		{
			return;
		}
		if (firing)
		{
			if (stopwatch <= 0f)
			{
				stopwatch = 3f;
			}
			stopwatch -= Time.fixedDeltaTime;
		}
		else
		{
			stopwatch = 3f;
		}
		GenericSkill primary = body.skillLocator.primary;
		mat.SetTextureScale("_MainTex", new Vector2(primary.CanExecute() ? 2.07f : (firing ? 2.07f : Util.Remap(Math.Min(1f, primary.rechargeStopwatch / primary.finalRechargeInterval), 0f, 1f, 0.66f, 2.07f)), 1f));
	}
}
[DefaultExecutionOrder(100)]
internal class TurretSkinBehaviour : NetworkBehaviour
{
	private CharacterBody body;

	private CharacterBody ownerBody;

	private NetworkLoadout networkLoadout;

	private BodyIndex bodyIndex;

	private ModelSkinController skinController;

	private TurretChargeBehaviour chargeBehaviour;

	private CharacterSelectSurvivorPreviewDisplayController displayController;

	private CharacterModel characterModel;

	private Renderer renderer;

	public Material mat;

	public bool applySkin = true;

	public float timer = 0.06f;

	private float stopwatch;

	private void Awake()
	{
		skinController = ((Component)this).GetComponent<ModelSkinController>();
		chargeBehaviour = ((Component)this).GetComponent<TurretChargeBehaviour>();
		characterModel = ((Component)this).GetComponent<CharacterModel>();
		renderer = characterModel.baseRendererInfos[0].renderer;
		mat = renderer.material;
	}

	private void Start()
	{
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_007b: Expected O, but got Unknown
		//IL_0099: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a3: Expected O, but got Unknown
		//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cb: Expected O, but got Unknown
		body = ((Component)this).GetComponent<CharacterModel>().body;
		bodyIndex = BodyCatalog.FindBodyIndex("EngiBody");
		if (!Object.op_Implicit((Object)(object)body))
		{
			displayController = ((Component)this).GetComponentInParent<CharacterSelectSurvivorPreviewDisplayController>();
			if (Object.op_Implicit((Object)(object)displayController))
			{
				displayController.skinChangeResponses[0].response.AddListener((UnityAction)delegate
				{
					UpdateModel(0);
				});
				displayController.skinChangeResponses[1].response.AddListener((UnityAction)delegate
				{
					UpdateModel(1);
				});
				displayController.skinChangeResponses[2].response.AddListener((UnityAction)delegate
				{
					UpdateModel(2);
				});
			}
		}
		else if (Object.op_Implicit((Object)(object)body.master) && Object.op_Implicit((Object)(object)body.master.minionOwnership) && Object.op_Implicit((Object)(object)body.master.minionOwnership.ownerMaster))
		{
			ownerBody = body.master.minionOwnership.ownerMaster.GetBody();
			if (Object.op_Implicit((Object)(object)ownerBody))
			{
				body.skinIndex = ownerBody.skinIndex;
				UpdateModel((int)ownerBody.skinIndex);
			}
		}
	}

	private void FixedUpdate()
	{
		if (Object.op_Implicit((Object)(object)body))
		{
			stopwatch += Time.fixedDeltaTime;
			if (applySkin && stopwatch >= timer)
			{
				applySkin = false;
				UpdateModel((int)body.skinIndex);
			}
		}
	}

	private void UpdateModel(int skinIndex)
	{
		if (Object.op_Implicit((Object)(object)skinController) && Object.op_Implicit((Object)(object)chargeBehaviour))
		{
			((Behaviour)skinController.characterModel).enabled = true;
			skinController.ApplySkin(skinIndex);
			chargeBehaviour.UpdateMaterial();
		}
	}

	private void UNetVersion()
	{
	}

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

	public override void OnDeserialize(NetworkReader reader, bool initialState)
	{
	}
}
internal class TurretSpawner : NetworkBehaviour
{
	private CharacterBody body;

	private static int kCmdCmdSpawn;

	private void Awake()
	{
		body = ((Component)this).GetComponent<CharacterBody>();
	}

	[Command]
	public void CmdSpawn(Vector3 pos, Quaternion rot)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: 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_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_0018: 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_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_001f: 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_0037: Unknown result type (might be due to invalid IL or missing references)
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_0076: Unknown result type (might be due to invalid IL or missing references)
		//IL_0080: Expected O, but got Unknown
		//IL_008d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0097: Expected O, but got Unknown
		//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
		CharacterMaster val = new MasterSummon
		{
			masterPrefab = Prefabs.turretMaster,
			position = pos,
			rotation = rot,
			summonerBodyObject = ((Component)body).gameObject,
			ignoreTeamMemberLimit = true,
			inventoryToCopy = body.inventory,
			teamIndexOverride = body.teamComponent.teamIndex
		}.Perform();
		Deployable val2 = ((Component)val).gameObject.AddComponent<Deployable>();
		val2.onUndeploy = new UnityEvent();
		val2.onUndeploy.AddListener(new UnityAction(val.TrueKill));
		body.master.AddDeployable(val2, Prefabs.bigTurret);
	}

	private void UNetVersion()
	{
	}

	protected static void InvokeCmdCmdSpawn(NetworkBehaviour obj, NetworkReader reader)
	{
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		if (!NetworkServer.active)
		{
			Debug.LogError((object)"Command CmdSpawn called on client.");
		}
		else
		{
			((TurretSpawner)(object)obj).CmdSpawn(reader.ReadVector3(), reader.ReadQuaternion());
		}
	}

	public void CallCmdSpawn(Vector3 pos, Quaternion rot)
	{
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		//IL_0037: Expected O, but got Unknown
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0067: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		if (!NetworkClient.active)
		{
			Debug.LogError((object)"Command function CmdSpawn called on server.");
			return;
		}
		if (((NetworkBehaviour)this).isServer)
		{
			CmdSpawn(pos, rot);
			return;
		}
		NetworkWriter val = new NetworkWriter();
		val.Write((short)0);
		val.Write((short)5);
		val.WritePackedUInt32((uint)kCmdCmdSpawn);
		val.Write(((Component)this).GetComponent<NetworkIdentity>().netId);
		val.Write(pos);
		val.Write(rot);
		((NetworkBehaviour)this).SendCommandInternal(val, 0, "CmdSpawn");
	}

	static TurretSpawner()
	{
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Expected O, but got Unknown
		kCmdCmdSpawn = -274844957;
		NetworkBehaviour.RegisterCommandDelegate(typeof(TurretSpawner), kCmdCmdSpawn, new CmdDelegate(InvokeCmdCmdSpawn));
		NetworkCRC.RegisterBehaviour("TurretSpawner", 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 ViendUncorruptAlt : MonoBehaviour
{
	private CharacterBody body;

	public GenericSkill secondary;

	public GenericSkill utility;

	public VoidSurvivorController controller;

	public bool hasAlt;

	public bool secondaryAlt;

	public bool utilityAlt;

	public float angle = 25f;

	private void Awake()
	{
		body = ((Component)this).GetComponent<CharacterBody>();
		controller = ((Component)this).GetComponent<VoidSurvivorController>();
	}

	private void Start()
	{
		secondary = body.skillLocator.secondary;
		utility = body.skillLocator.utility;
		if (secondary.skillNameToken == "AEROS_VIEND_SECONDARY")
		{
			hasAlt = true;
			secondaryAlt = true;
		}
		if (utility.skillNameToken == "AEROS_VIEND_UTIL")
		{
			hasAlt = true;
			utilityAlt = true;
		}
	}
}
internal class Hook
{
	internal static void Hooks()
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Expected O, but got Unknown
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Expected O, but got Unknown
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Expected O, but got Unknown
		//IL_003e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0048: Expected O, but got Unknown
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: Expected O, but got Unknown
		//IL_0062: Unknown result type (might be due to invalid IL or missing references)
		//IL_006c: 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_0086: Unknown result type (might be due to invalid IL or missing references)
		//IL_0090: Expected O, but got Unknown
		//IL_0098: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a2: Expected O, but got Unknown
		RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(RecalculateStatsAPI_GetStatCoefficients);
		HealthComponent.TakeDamage += new hook_TakeDamage(HealthComponent_TakeDamage);
		GenericSkill.SetSkillOverride += new hook_SetSkillOverride(GenericSkill_SetSkillOverride);
		GenericSkill.UnsetSkillOverride += new hook_UnsetSkillOverride(GenericSkill_UnsetSkillOverride);
		SeekerController.CmdIncrementChakraGate += new hook_CmdIncrementChakraGate(SeekerController_CmdIncrementChakraGate);
		BulletAttack.Fire += new hook_Fire(BulletAttack_Fire);
		CharacterBody.AddTimedBuff_BuffDef_float += new hook_AddTimedBuff_BuffDef_float(CharacterBody_AddTimedBuff_BuffDef_float);
		DotController.InflictDot_refInflictDotInfo += new hook_InflictDot_refInflictDotInfo(DotController_InflictDot_refInflictDotInfo);
		CharacterBody.AddBuff_BuffIndex += new hook_AddBuff_BuffIndex(CharacterBody_AddBuff_BuffIndex);
	}

	private static void DotController_InflictDot_refInflictDotInfo(orig_InflictDot_refInflictDotInfo orig, ref InflictDotInfo inflictDotInfo)
	{
		if (Object.op_Implicit((Object)(object)inflictDotInfo.victimObject))
		{
			CharacterBody component = inflictDotInfo.victimObject.GetComponent<CharacterBody>();
			if (Object.op_Implicit((Object)(object)component) && component.HasBuff(Prefabs.debuffImmune))
			{
				return;
			}
		}
		orig.Invoke(ref inflictDotInfo);
	}

	private static void CharacterBody_AddBuff_BuffIndex(orig_AddBuff_BuffIndex orig, CharacterBody self, BuffIndex buffType)
	{
		//IL_0001: 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)
		BuffDef buffDef = BuffCatalog.GetBuffDef(buffType);
		if (!Object.op_Implicit((Object)(object)self) || !Object.op_Implicit((Object)(object)buffDef) || !buffDef.isDebuff || !self.HasBuff(Prefabs.debuffImmune))
		{
			orig.Invoke(self, buffType);
		}
	}

	private static void CharacterBody_AddTimedBuff_BuffDef_float(orig_AddTimedBuff_BuffDef_float orig, CharacterBody self, BuffDef buffDef, float duration)
	{
		if (!Object.op_Implicit((Object)(object)self) || !Object.op_Implicit((Object)(object)buffDef) || !buffDef.isDebuff || !self.HasBuff(Prefabs.debuffImmune))
		{
			orig.Invoke(self, buffDef, duration);
		}
	}

	private static void BulletAttack_Fire(orig_Fire orig, BulletAttack self)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: 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)
		if (Physics.Raycast(self.origin, self.aimVector, self.maxDistance, 536870912))
		{
			self.damage *= MainPlugin.railgunnerUtilityDamageMult.Value;
			self.damageColorIndex = (DamageColorIndex)12;
		}
		orig.Invoke(self);
	}

	private static void SeekerController_CmdIncrementChakraGate(orig_CmdIncrementChakraGate orig, SeekerController self)
	{
		orig.Invoke(self);
		if (Object.op_Implicit((Object)(object)self.specialSkillSlot) && (Object)(object)self.specialSkillSlot.skillDef == (Object)(object)MainPlugin.seekerGenkidama)
		{
			self.UnlockGateEffects(self.characterBody.master.seekerChakraGate);
		}
	}

	private static void GenericSkill_UnsetSkillOverride(orig_UnsetSkillOverride orig, GenericSkill self, object source, SkillDef skillDef, SkillOverridePriority priority)
	{
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_001b: Invalid comparison between Unknown and I4
		//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_006e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0070: Unknown result type (might be due to invalid IL or missing references)
		//IL_0077: Expected O, but got Unknown
		ViendUncorruptAlt component = ((Component)self).GetComponent<ViendUncorruptAlt>();
		if (Object.op_Implicit((Object)(object)component) && component.hasAlt && (int)priority == 2)
		{
			bool flag = (Object)(object)self == (Object)(object)component.secondary;
			if ((component.secondaryAlt && flag) || (component.utilityAlt && (Object)(object)self == (Object)(object)component.utility))
			{
				SkillOverride val = new SkillOverride(source, flag ? MainPlugin.viendSecondaryCorrupted : MainPlugin.viendUtilCorrupted, priority);
				int num = self.FindSkillOverrideIndex(ref val);
				if (num != -1)
				{
					ArrayUtils.ArrayRemoveAtAndResize<SkillOverride>(ref self.skillOverrides, num, 1);
					self.PickCurrentOverride();
				}
				return;
			}
		}
		orig.Invoke(self, source, skillDef, priority);
	}

	private static void GenericSkill_SetSkillOverride(orig_SetSkillOverride orig, GenericSkill self, object source, SkillDef skillDef, SkillOverridePriority priority)
	{
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_001b: Invalid comparison between Unknown and I4
		//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0080: Unknown result type (might be due to invalid IL or missing references)
		//IL_0082: Unknown result type (might be due to invalid IL or missing references)
		//IL_0089: Expected O, but got Unknown
		ViendUncorruptAlt component = ((Component)self).GetComponent<ViendUncorruptAlt>();
		if (Object.op_Implicit((Object)(object)component) && component.hasAlt && (int)priority == 2 && component.controller.corruption >= 100f)
		{
			bool flag = (Object)(object)self == (Object)(object)component.secondary;
			if ((component.secondaryAlt && flag) || (component.utilityAlt && (Object)(object)self == (Object)(object)component.utility))
			{
				SkillOverride val = new SkillOverride(source, flag ? MainPlugin.viendSecondaryCorrupted : MainPlugin.viendUtilCorrupted, priority);
				if (self.FindSkillOverrideIndex(ref val) == -1)
				{
					ArrayUtils.ArrayAppend<SkillOverride>(ref self.skillOverrides, ref val);
					self.PickCurrentOverride();
				}
				return;
			}
		}
		orig.Invoke(self, source, skillDef, priority);
	}

	private static void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo)
	{
		//IL_00de: 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_013f: 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_0157: Unknown result type (might be due to invalid IL or missing references)
		//IL_022c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0231: Unknown result type (might be due to invalid IL or missing references)
		//IL_0244: Unknown result type (might be due to invalid IL or missing references)
		//IL_0249: Unknown result type (might be due to invalid IL or missing references)
		//IL_024a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0252: Unknown result type (might be due to invalid IL or missing references)
		//IL_0260: Expected O, but got Unknown
		//IL_027d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0282: Unknown result type (might be due to invalid IL or missing references)
		//IL_028e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0290: Unknown result type (might be due to invalid IL or missing references)
		//IL_0295: Unknown result type (might be due to invalid IL or missing references)
		//IL_0297: Unknown result type (might be due to invalid IL or missing references)
		//IL_029c: Unknown result type (might be due to invalid IL or missing references)
		//IL_02b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c5: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ca: 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_02d2: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_02e4: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ef: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f7: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ff: Unknown result type (might be due to invalid IL or missing references)
		//IL_0304: Unknown result type (might be due to invalid IL or missing references)
		//IL_0309: Unknown result type (might be due to invalid IL or missing references)
		//IL_030a: Unknown result type (might be due to invalid IL or missing references)
		//IL_030c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0311: Unknown result type (might be due to invalid IL or missing references)
		if (self.body.HasBuff(Prefabs.multDroneDebuff))
		{
			damageInfo.damage *= MainPlugin.multSecondaryDamageIncrease.Value;
		}
		bool flag = Object.op_Implicit((Object)(object)self.body) && self.body.HasBuff(Prefabs.block);
		float damage = damageInfo.damage;
		float num = Math.Clamp(MainPlugin.blockAmount.Value, 0.01f, 1f);
		if (flag)
		{
			damageInfo.damage *= 1f - num;
		}
		orig.Invoke(self, damageInfo);
		if (flag)
		{
			self.AddBarrier(damage * num);
		}
		if (!Object.op_Implicit((Object)(object)damageInfo.attacker) || !(damageInfo.procCoefficient > 0f))
		{
			return;
		}
		CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>();
		if (DamageAPI.HasModdedDamageType(damageInfo, Prefabs.flameSwordHit))
		{
			InflictDotInfo val = default(InflictDotInfo);
			val.attackerObject = damageInfo.attacker;
			val.victimObject = ((Component)self).gameObject;
			val.totalDamage = 5.875f * MainPlugin.mageFlameSwordBurnDuration.Value;
			val.damageMultiplier = 1f;
			val.dotIndex = (DotIndex)1;
			val.maxStacksFromAttacker = 2147483647u;
			InflictDotInfo val2 = val;
			StrengthenBurnUtils.CheckDotForUpgrade(component.inventory, ref val2);
			DotController.InflictDot(ref val2);
		}
		if ((Object)(object)MainPlugin.seekerPassive != (Object)null && Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)((Component)component).GetComponent<SeekerController>()) && Object.op_Implicit((Object)(object)Array.Find(((Component)component).GetComponents<GenericSkill>(), (GenericSkill x) => (Object)(object)x.skillDef == (Object)(object)MainPlugin.seekerPassive)))
		{
			self.body.AddTimedBuff(Prefabs.seekerPassiveBuff, 8f);
			int buffCount = self.body.GetBuffCount(Prefabs.seekerPassiveBuff);
			if (buffCount >= MainPlugin.passiveMaxStacks.Value)
			{
				self.body.ClearTimedBuffs(Prefabs.seekerPassiveBuff);
				Vector3 corePosition = self.body.corePosition;
				float num2 = 3f;
				EffectManager.SpawnEffect(Prefabs.Load<GameObject>("RoR2/DLC2/Seeker/SoulSearchExplosionVFX.prefab"), new EffectData
				{
					origin = corePosition,
					scale = num2
				}, true);
				float num3 = (float)(1 + component.GetBuffCount(Buffs.ChakraBuff)) * MainPlugin.passiveAddDamage.Value;
				new BlastAttack
				{
					attacker = damageInfo.attacker,
					attackerFiltering = (AttackerFiltering)2,
					falloffModel = (FalloffModel)0,
					baseDamage = component.damage * MainPlugin.passiveBaseDamage.Value + num3,
					crit = component.RollCrit(),
					damageType = DamageTypeCombo.Generic,
					damageColorIndex = (DamageColorIndex)10,
					inflictor = ((Component)component).gameObject,
					procCoefficient = 0f,
					radius = num2,
					teamIndex = component.teamComponent.teamIndex,
					position = corePosition
				}.Fire();
			}
		}
	}

	private static void RecalculateStatsAPI_GetStatCoefficients(CharacterBody sender, StatHookEventArgs args)
	{
		if (sender.HasBuff(Prefabs.multDroneRegenBuff))
		{
			args.baseRegenAdd += sender.healthComponent.fullHealth * MainPlugin.multSecondaryHeal.Value;
			args.attackSpeedMultAdd += 0.3f;
			args.damageMultAdd += 0.3f;
		}
		if (sender.HasBuff(Prefabs.viendSpeedBuff))
		{
			args.moveSpeedMultAdd += MainPlugin.viendSpeedBuff.Value;
		}
		if (sender.HasBuff(Prefabs.block))
		{
			args.moveSpeedReductionMultAdd += MainPlugin.blockSpeedReduction.Value;
		}
		if (sender.HasBuff(Prefabs.overclock))
		{
			args.baseRegenAdd += MainPlugin.regen.Value;
			args.baseAttackSpeedAdd += MainPlugin.atkspd.Value;
			args.baseMoveSpeedAdd += MainPlugin.movspd.Value;
			args.cooldownMultAdd += 0f - MainPlugin.cooldown.Value;
		}
	}
}
[BepInDependency(/*Could not decode attribute arguments.*/)]
[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
[BepInPlugin("com.Dragonyck.AerosSkills", "AerosSkills", "2.4.0")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class MainPlugin : BaseUnityPlugin
{
	public const string MODUID = "com.Dragonyck.AerosSkills";

	public const string MODNAME = "AerosSkills";

	public const string VERSION = "2.4.0";

	public const string MODKEY = "AEROS_";

	internal static ConfigFile captainCfg;

	internal static ConfigEntry<bool> enableCap;

	internal static ConfigEntry<bool> enableCapPrimary;

	internal static ConfigEntry<bool> enableCapSecondary;

	internal static ConfigEntry<float> burstDMG;

	internal static ConfigEntry<float> radius;

	internal static ConfigEntry<float> regen;

	internal static ConfigEntry<float> atkspd;

	internal static ConfigEntry<float> movspd;

	internal static ConfigEntry<float> cooldown;

	internal static ConfigEntry<float> duration;

	internal static ConfigEntry<float> CD;

	internal static ConfigFile engiCfg;

	internal static ConfigEntry<bool> enableEngi;

	internal static ConfigEntry<bool> enableEngiPrimary;

	internal static ConfigEntry<bool> enableEngiSpecial;

	internal static ConfigEntry<float> missileDamageCoefficient;

	internal static ConfigEntry<bool> missileTracking;

	internal static ConfigEntry<float> turretDamageCoefficient;

	internal static ConfigFile loaderCfg;

	internal static ConfigEntry<bool> enableLoader;

	internal static ConfigEntry<bool> enableLoaderUtility;

	internal static ConfigEntry<bool> enableLoaderSpecial;

	internal static ConfigEntry<bool> enableLoaderOldSkills;

	internal static ConfigEntry<float> blockDuration;

	internal static ConfigEntry<float> blockInvincibilityDuration;

	internal static ConfigEntry<float> blockSpeedReduction;

	internal static ConfigEntry<float> blockAmount;

	internal static ConfigEntry<float> blockAmountOld;

	internal static ConfigEntry<float> blockWaveDamage;

	internal static ConfigEntry<int> maxPunchCount;

	internal static ConfigEntry<float> punchDamageCoefficient;

	internal static ConfigEntry<float> punchMinDamageCoefficient;

	internal static ConfigEntry<float> punchMaxDamageCoefficient;

	internal static ConfigEntry<float> punchChargeTime;

	internal static ConfigEntry<float> punchVelocity;

	internal static ConfigEntry<float> punchSpeed;

	internal static ConfigEntry<float> punchComboBackForce;

	internal static ConfigEntry<float> punchComboUpForce;

	internal static ConfigEntry<float> punchComboFirstHitDamageCoefficient;

	internal static ConfigFile seekerCfg;

	internal static ConfigEntry<bool> enableSeeker;

	internal static ConfigEntry<bool> enableSeekerPassive;

	internal static ConfigEntry<bool> enableSeekerSpecial;

	internal static ConfigEntry<float> genkidamaBaseDamage;

	internal static ConfigEntry<float> genkidamaAddDamage;

	internal static ConfigEntry<float> passiveBaseDamage;

	internal static ConfigEntry<float> passiveAddDamage;

	internal static ConfigEntry<int> passiveMaxStacks;

	internal static ConfigFile viendCfg;

	internal static ConfigEntry<bool> enableViend;

	internal static ConfigEntry<bool> enableViendSecondary;

	internal static ConfigEntry<bool> enableViendUtility;

	internal static ConfigEntry<float> viendSpeedBuff;

	internal static ConfigEntry<float> viendSelfDMG;

	internal static ConfigEntry<float> beamFireFrequency;

	internal static ConfigEntry<float> beamDMG;

	internal static ConfigEntry<float> beamForce;

	internal static ConfigEntry<float> beamDMGCorrupted;

	internal static ConfigEntry<float> beamDuration;

	internal static ConfigFile mageCfg;

	internal static ConfigEntry<bool> enableMage;

	internal static ConfigEntry<bool> enableMageSecondary;

	internal static ConfigEntry<bool> enableMageSpecial;

	internal static ConfigEntry<float> mageSpecialDamage;

	internal static ConfigEntry<float> mageFlameSwordMinDamage;

	internal static ConfigEntry<float> mageFlameSwordMaxDamage;

	internal static ConfigEntry<float> mageFlameSwordMaxChargeTime;

	internal static ConfigEntry<float> mageFlameSwordBurnDuration;

	internal static ConfigFile multCfg;

	internal static ConfigEntry<bool> enableMult;

	internal static ConfigEntry<float> multUtilitySpeed;

	internal static ConfigEntry<float> multSecondaryDamage;

	internal static ConfigEntry<float> multSecondaryDamageIncrease;

	internal static ConfigEntry<float> multSecondaryHeal;

	internal static ConfigFile commandoCfg;

	internal static ConfigEntry<bool> enableCommando;

	internal static ConfigEntry<float> commandoSpecialChargeTime;

	internal static ConfigEntry<float> commandoSpecialMinDamage;

	internal static ConfigEntry<float> commandoSpecialMaxDamage;

	internal static ConfigFile mercCfg;

	internal static ConfigEntry<bool> enableMerc;

	internal static ConfigEntry<float> mercPrimaryBaseDuration;

	internal static ConfigEntry<float> mercPrimaryDamage;

	internal static ConfigEntry<float> mercSpecialDashDamage;

	internal static ConfigEntry<float> mercSpecialUppercutDamage;

	internal static ConfigEntry<float> mercSpecialSlamDamage;

	internal static ConfigEntry<float> mercSpecialSlamImpactDamage;

	internal static ConfigEntry<float> mercSpecialRecastTime;

	internal static ConfigFile huntressCfg;

	internal static ConfigEntry<bool> enableHuntress;

	internal static ConfigEntry<float> huntressSecondaryRadius;

	internal static ConfigEntry<float> huntressSecondaryDamage;

	internal static ConfigEntry<float> huntressSpecialDamage;

	internal static ConfigEntry<float> huntressSpecialRange;

	internal static ConfigFile railgunnerCfg;

	internal static ConfigEntry<bool> enableRailgunner;

	internal static ConfigEntry<float> railgunnerUtilityDamageMult;

	internal static ConfigEntry<float> railgunnerSpecialDamage;

	internal static ConfigEntry<float> railgunnerSpecialRadius;

	internal static ConfigEntry<float> railgunnerSpecialLightningRadius;

	internal static ConfigEntry<float> railgunnerSpecialLightningFireRate;

	internal static ConfigEntry<float> railgunnerSpecialLightningDamage;

	internal static ConfigFile falseSonCfg;

	internal static ConfigEntry<bool> enableFalseSon;

	internal static ConfigEntry<float> falseSonUtilityBarrier;

	internal static ConfigEntry<float> falseSonUtilityRadius;

	internal static ConfigEntry<float> falseSonUtilityDuration;

	internal static ConfigEntry<float> falseSonSpecialDamage;

	internal static ConfigEntry<float> falseSonSpecialDuration;

	internal static ConfigEntry<float> falseSonSpecialFinalDuration;

	internal static ConfigEntry<float> falseSonSpecialFireRate;

	internal static ConfigEntry<float> falseSonSpecialMaxDistance;

	internal static BepInPlugin Metadata;

	internal static string Location;

	internal static SkillDef engiScepter;

	internal static SkillDef viendSecondary;

	internal static SkillDef viendSecondaryCorrupted;

	internal static SkillDef viendUtil;

	internal static SkillDef viendUtilCorrupted;

	internal static SkillDef seekerPassive;

	internal static SkillDef seekerGenkidama;

	internal static SkillDef mercSpecial;

	internal static SkillDef huntressPrimaryOverride;

	internal static SkillDef railgunnerSpecial;

	internal static SkillDef railgunnerPrimaryOverride;

	private void Awake()
	{
		//IL_0365: Unknown result type (might be due to invalid IL or missing references)
		//IL_036c: Expected O, but got Unknown
		//IL_03ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_03cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_03ce: Unknown result type (might be due to invalid IL or missing references)
		Location = ((BaseUnityPlugin)this).Info.Location;
		Metadata = ((BaseUnityPlugin)this).Info.Metadata;
		CreateConfigs();
		Assets.PopulateAssets();
		Prefabs.CreatePrefabs();
		GameObject val = null;
		SkillLocator val2 = null;
		if (enableCap.Value)
		{
			val = Prefabs.Load<GameObject>("RoR2/Base/Captain/CaptainBody.prefab");
			val2 = val.GetComponent<SkillLocator>();
			val.AddComponent<CrosshairSwap>();
			Prefabs.spreadBloomCurve = Prefabs.Load<GameObject>("RoR2/Base/Commando/CommandoBody.prefab").GetComponent<CharacterBody>().spreadBloomCurve;
			if (enableCapPrimary.Value)
			{
				CaptainPrimarySetup(val2);
			}
			if (enableCapSecondary.Value)
			{
				CaptainSecondarySetup(val2);
			}
		}
		if (enableEngi.Value)
		{
			val = Prefabs.Load<GameObject>("RoR2/Base/Engi/EngiBody.prefab");
			val.AddComponent<TurretSpawner>();
			val2 = val.GetComponent<SkillLocator>();
			if (enableEngiPrimary.Value)
			{
				EngiPrimarySetup(val2);
			}
			if (enableEngiSpecial.Value)
			{
				EngiSpecialSetup(val2);
			}
			if (ModCompat.AncientScepterEnabled)
			{
				ModCompat.AddScepterSupport();
			}
		}
		if (enableLoader.Value)
		{
			val = Prefabs.Load<GameObject>("RoR2/Base/Loader/LoaderBody.prefab");
			val2 = val.GetComponent<SkillLocator>();
			if (enableLoaderOldSkills.Value)
			{
				if (enableLoaderUtility.Value)
				{
					LoaderUtilitySetupOld(val2);
				}
				if (enableLoaderSpecial.Value)
				{
					LoaderSpecialSetupOld(val2);
				}
			}
			else
			{
				LoaderUtilitySetup(val2);
				LoaderSpecialSetup(val2);
			}
		}
		if (enableSeeker.Value)
		{
			val = Prefabs.Load<GameObject>("RoR2/DLC2/Seeker/SeekerBody.prefab");
			val2 = val.GetComponent<SkillLocator>();
			if (enableSeekerPassive.Value)
			{
				SeekerPassiveSetup(val2);
			}
			if (enableSeekerSpecial.Value)
			{
				SeekerSpecialSetup(val2);
			}
		}
		if (enableViend.Value)
		{
			val = Prefabs.Load<GameObject>("RoR2/DLC1/VoidSurvivor/VoidSurvivorBody.prefab");
			val.gameObject.AddComponent<ViendUncorruptAlt>();
			val2 = val.GetComponent<SkillLocator>();
			if (enableViendSecondary.Value)
			{
				ViendSecondarySetup(val2);
			}
			if (enableViendUtility.Value)
			{
				ViendUtilitySetup(val2);
			}
		}
		if (enableMage.Value)
		{
			val = Prefabs.Load<GameObject>("RoR2/Base/Mage/MageBody.prefab");
			val2 = val.GetComponent<SkillLocator>();
			if (enableMageSecondary.Value)
			{
				MageSecondarySetup(val2);
			}
			if (enableMageSpecial.Value)
			{
				MageSpecialSetup(val2);
			}
		}
		if (enableMult.Value)
		{
			val = Prefabs.Load<GameObject>("RoR2/Base/Toolbot/ToolbotBody.prefab");
			((HuntressTracker)val.gameObject.AddComponent<MultTracker>()).maxTrackingDistance = 50f;
			val2 = val.GetComponent<SkillLocator>();
			Utils.NewStateMachine<Idle>(val.gameObject, "Drone");
			Utils.NewStateMachine<Idle>(val.gameObject, "Dash");
			NetworkStateMachine component = val.GetComponent<NetworkStateMachine>();
			component.stateMachines = val.GetComponents<EntityStateMachine>();
			MultUtilitySetup(val2);
		}
		if (enableCommando.Value)
		{
			val = Prefabs.Load<GameObject>("RoR2/Base/Commando/CommandoBody.prefab");
			val2 = val.GetComponent<SkillLocator>();
			ChildLocator component2 = ((Component)val.GetComponent<ModelLocator>().modelTransform).GetComponent<ChildLocator>();
			GameObject val3 = new GameObject("MuzzleMuzzle");
			val3.transform.parent = ((Component)component2).transform;
			Array.Resize(ref component2.transformPairs, component2.transformPairs.Length + 1);
			component2.transformPairs[component2.transformPairs.Length - 1] = new NameTransformPair
			{
				name = "MuzzleMuzzle",
				transform = val3.transform
			};
			CommandoSpecialSetup(val2);
		}
		if (enableMerc.Value)
		{
			val = Prefabs.Load<GameObject>("RoR2/Base/Merc/MercBody.prefab");
			val2 = val.GetComponent<SkillLocator>();
			val.AddComponent<MercHitboxScale>();
			Utils.NewStateMachine<Idle>(val.gameObject, "SkillOverride");
			Utils.NewStateMachine<Idle>(val.gameObject, "Dash");
			NetworkStateMachine component3 = val.GetComponent<NetworkStateMachine>();
			component3.stateMachines = val.GetComponents<EntityStateMachine>();
			MercPrimarySetup(val2);
			MercSpecialSetup(val2);
		}
		if (enableHuntress.Value)
		{
			val = Prefabs.Load<GameObject>("RoR2/Base/Huntress/HuntressBody.prefab");
			val2 = val.GetComponent<SkillLocator>();
			HuntressSecondarySetup(val2);
			HuntressSpecialSetup(val2);
		}
		if (enableRailgunner.Value)
		{
			val = Prefabs.Load<GameObject>("RoR2/DLC1/Railgunner/RailgunnerBody.prefab");
			val2 = val.GetComponent<SkillLocator>();
			RailgunnerUtilitySetup(val2);
			RailgunnerSpecialSetup(val2);
		}
		if (enableFalseSon.Value)
		{
			val = Prefabs.Load<GameObject>("RoR2/DLC2/FalseSon/FalseSonBody.prefab");
			val2 = val.GetComponent<SkillLocator>();
			Utils.NewStateMachine<Idle>(val.gameObject, "BuffWard");
			NetworkStateMachine component4 = val.GetComponent<NetworkStateMachine>();
			component4.stateMachines = val.GetComponents<EntityStateMachine>();
			FalseSonUtilitySetup(val2);
			FalseSonSpecialSetup(val2);
		}
		RegisterStates();
		Hook.Hooks();
	}

	private void CreateConfigs()
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_001b: Expected O, but got Unknown
		//IL_0174: Unknown result type (might be due to invalid IL or missing references)
		//IL_017e: Expected O, but got Unknown
		//IL_0238: Unknown result type (might be due to invalid IL or missing references)
		//IL_0242: Expected O, but got Unknown
		//IL_04ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_04b5: Expected O, but got Unknown
		//IL_05ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_05b7: Expected O, but got Unknown
		//IL_06f1: Unknown result type (might be due to invalid IL or missing references)
		//IL_06fb: Expected O, but got Unknown
		//IL_07f7: Unknown result type (might be due to invalid IL or missing references)
		//IL_0801: Expected O, but got Unknown
		//IL_08a8: Unknown result type (might be due to invalid IL or missing references)
		//IL_08b2: Expected O, but got Unknown
		//IL_093a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0944: Expected O, but got Unknown
		//IL_0a48: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a52: Expected O, but got Unknown
		//IL_0af9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b03: Expected O, but got Unknown
		//IL_0be8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0bf2: Expected O, but got Unknown
		captainCfg = new ConfigFile(Paths.ConfigPath + "\\AerosSkills\\Captain.cfg", true);
		enableCap = captainCfg.Bind<bool>("General", "Enable Captain Skills", true, (ConfigDescription)null);
		enableCapPrimary = captainCfg.Bind<bool>("General", "Enable Captain Primary Skill", true, (ConfigDescription)null);
		enableCapSecondary = captainCfg.Bind<bool>("General", "Enable Captain Secondary Skill", true, (ConfigDescription)null);
		burstDMG = captainCfg.Bind<float>("VulcanRepeater", "Damage Coefficient", 1.65f, (ConfigDescription)null);
		radius = captainCfg.Bind<float>("Overclock", "Explosion Radius", 12f, (ConfigDescription)null);
		regen = captainCfg.Bind<float>("Overclock", "Base Health Regen Add", 5f, (ConfigDescription)null);
		atkspd = captainCfg.Bind<float>("Overclock", "Base Attack Speed Add", 0.6f, (ConfigDescription)null);
		movspd = captainCfg.Bind<float>("Overclock", "Base Movement Speed Add", 5f, (ConfigDescription)null);
		cooldown = captainCfg.Bind<float>("Overclock", "Cooldown Reduction Mult", 0.5f, (ConfigDescription)null);
		duration = captainCfg.Bind<float>("Overclock", "Buff Duration", 5f, (ConfigDescription)null);
		CD = captainCfg.Bind<float>("Overclock", "Skill Cooldown", 8f, (ConfigDescription)null);
		engiCfg = new ConfigFile(Paths.ConfigPath + "\\AerosSkills\\Engineer.cfg", true);
		enableEngi = engiCfg.Bind<bool>("General", "Enable Engineer Skills", true, (ConfigDescription)null);
		enableEngiPrimary = engiCfg.Bind<bool>("General", "Enable Engineer Primary Skill", true, (ConfigDescription)null);
		enableEngiSpecial = engiCfg.Bind<bool>("General", "Enable Engineer Special Skill", true, (ConfigDescription)null);
		missileDamageCoefficient = engiCfg.Bind<float>("Missiles", "Damage Coefficient", 1.4f, (ConfigDescription)null);
		missileTracking = engiCfg.Bind<bool>("Seekers", "Enable Tracking", true, (ConfigDescription)null);
		turretDamageCoefficient = engiCfg.Bind<float>("TR90 Railgun Turret", "Damage Coefficient", 30f, (ConfigDescription)null);
		loaderCfg = new ConfigFile(Paths.ConfigPath + "\\AerosSkills\\Loader.cfg", true);
		enableLoader = loaderCfg.Bind<bool>("General", "Enable Loader Skills", true, (ConfigDescription)null);
		enableLoaderUtility = loaderCfg.Bind<bool>("General", "Enable Loader Utility Skill", true, (ConfigDescription)null);
		enableLoaderSpecial = loaderCfg.Bind<bool>("General", "Enable Loader Special Skill", true, (ConfigDescription)null);
		blockDuration = loaderCfg.Bind<float>("Block", "Duration", 10f, (ConfigDescription)null);
		blockInvincibilityDuration = loaderCfg.Bind<float>("Block", "Invincibility Duration", 0.5f, (ConfigDescription)null);
		blockSpeedReduction = loaderCfg.Bind<float>("Block", "Speed Reduction", 0.6f, (ConfigDescription)null);
		blockAmount = loaderCfg.Bind<float>("Block", "Block Coefficient", 0.5f, (ConfigDescription)null);
		blockAmountOld = loaderCfg.Bind<float>("Block", "Old Block Coefficient", 0.8f, (ConfigDescription)null);
		blockWaveDamage = loaderCfg.Bind<float>("Block", "Block Wave Damage Coefficient", 4.5f, (ConfigDescription)null);
		maxPunchCount = loaderCfg.Bind<int>("Charged Barrage", "Max Punch Count", 9, (ConfigDescription)null);
		punchMinDamageCoefficient = loaderCfg.Bind<float>("Charged Barrage", "Charge Min Damage Coefficient", 1.7f, (ConfigDescription)null);
		punchMaxDamageCoefficient = loaderCfg.Bind<float>("Charged Barrage", "Charge Max Damage Coefficient", 5f, (ConfigDescription)null);
		punchDamageCoefficient = loaderCfg.Bind<float>("Charged Barrage", "Damage Coefficient", 3.5f, (ConfigDescription)null);
		punchChargeTime = loaderCfg.Bind<float>("Charged Barrage", "Charge Time Required Per Punch", 0.15f, (ConfigDescription)null);
		punchVelocity = loaderCfg.Bind<float>("Charged Barrage", "Added Velocity After Charge", 5f, (ConfigDescription)null);
		punchSpeed = loaderCfg.Bind<float>("Charged Barrage", "Swing Duration", 0.13f, (ConfigDescription)null);
		punchComboBackForce = loaderCfg.Bind<float>("Charged Barrage", "Backwards Force", 4400f, (ConfigDescription)null);
		punchComboUpForce = loaderCfg.Bind<float>("Charged Barrage", "Upwards Force", 2700f, (ConfigDescription)null);
		punchComboFirstHitDamageCoefficient = loaderCfg.Bind<float>("Charged Barrage", "First Hit Damage Coefficient", 2f, (ConfigDescription)null);
		enableLoaderOldSkills = loaderCfg.Bind<bool>("General", "Enable Old Skills", false, (ConfigDescription)null);
		seekerCfg = new ConfigFile(Paths.ConfigPath + "\\AerosSkills\\Seeker.cfg", true);
		enableSeeker = seekerCfg.Bind<bool>("General", "Enable Seeker Skills", true, (ConfigDescription)null);
		enableSeekerPassive = seekerCfg.Bind<bool>("General", "Enable Seeker Passive Skill", true, (ConfigDescription)null);
		enableSeekerSpecial = seekerCfg.Bind<bool>("General", "Enable Seeker Special Skill", true, (ConfigDescription)null);
		genkidamaBaseDamage = seekerCfg.Bind<float>("Soul Detonation", "Base Damage", 5f, (ConfigDescription)null);
		genkidamaAddDamage = seekerCfg.Bind<float>("Soul Detonation", "Additional Damage Per Tranquility", 2f, (ConfigDescription)null);
		passiveBaseDamage = seekerCfg.Bind<float>("Soul Stack", "Base Damage", 0.5f, (ConfigDescription)null);
		passiveAddDamage = seekerCfg.Bind<float>("Soul Stack", "Additional Damage Per Tranquility", 0.3f, (ConfigDescription)null);
		passiveMaxStacks = seekerCfg.Bind<int>("Soul Stack", "Max Stacks", 3, (ConfigDescription)null);
		viendCfg = new ConfigFile(Paths.ConfigPath + "\\AerosSkills\\Viend.cfg", true);
		enableViend = viendCfg.Bind<bool>("General", "Enable Viend Skills", true, (ConfigDescription)null);
		enableViendSecondary = viendCfg.Bind<bool>("General", "Enable Viend Secondary Skill", true, (ConfigDescription)null);
		enableViendUtility = viendCfg.Bind<bool>("General", "Enable Viend Utility Skill", true, (ConfigDescription)null);
		viendSpeedBuff = viendCfg.Bind<float>("「 Sub?merge?? 】", "Corrupted Speed Mult", 0.4f, (ConfigDescription)null);
		viendSelfDMG = viendCfg.Bind<float>("「 Sub?merge?? 】", "MaxHP Self Damage Mult", 0.01f, (ConfigDescription)null);
		beamDuration = viendCfg.Bind<float>("『 P??luck 」", "Max Duration", 3f, (ConfigDescription)null);
		beamFireFrequency = viendCfg.Bind<float>("『 P??luck 」", "Fire Frequency", 0.25f, (ConfigDescription)null);
		beamDMG = viendCfg.Bind<float>("『 P??luck 」", "Damage", 0.7f, (ConfigDescription)null);
		beamForce = viendCfg.Bind<float>("『 P??luck 」", "Pull Force", -1700f, (ConfigDescription)null);
		beamDMGCorrupted = viendCfg.Bind<float>("『 P??luck 」 Corrupted", "Damage", 4.2f, (ConfigDescription)null);
		mageCfg = new ConfigFile(Paths.ConfigPath + "\\AerosSkills\\Artificer.cfg", true);
		enableMage = mageCfg.Bind<bool>("General", "Enable Artificer Skills", true, (ConfigDescription)null);
		enableMageSecondary = mageCfg.Bind<bool>("General", "Enable Artificer Secondary Skill", true, (ConfigDescription)null);
		enableMageSpecial = mageCfg.Bind<bool>("General", "Enable Artificer Special Skill", true, (ConfigDescription)null);
		mageSpecialDamage = mageCfg.Bind<float>("Frigid Outburst", "Damage Coefficient", 8f, (ConfigDescription)null);
		mageFlameSwordMaxChargeTime = mageCfg.Bind<float>("Conjure Nano-Blade", "Charge Time", 2f, (ConfigDescription)null);
		mageFlameSwordMinDamage = mageCfg.Bind<float>("Conjure Nano-Blade", "Min Damage Coefficient", 10f, (ConfigDescription)null);
		mageFlameSwordMaxDamage = mageCfg.Bind<float>("Conjure Nano-Blade", "Max Damage Coefficient", 20f, (ConfigDescription)null);
		mageFlameSwordBurnDuration = mageCfg.Bind<float>("Conjure Nano-Blade", "Burn Duration", 8f, (ConfigDescription)null);
		multCfg = new ConfigFile(Paths.ConfigPath + "\\AerosSkills\\MulT.cfg", true);
		enableMult = multCfg.Bind<bool>("General", "Enable Mul-T Skills", true, (ConfigDescription)null);
		multSecondaryDamage = multCfg.Bind<float>("Secondary", "Drone Nail Damage", 0.2f, (ConfigDescription)null);
		multSecondaryDamageIncrease = multCfg.Bind<float>("Secondary", "Drone Target Damage Increase", 1.3f, (ConfigDescription)null);
		multSecondaryHeal = multCfg.Bind<float>("Secondary", "Heal Percentage Per Sec", 0.05f, (ConfigDescription)null);
		multUtilitySpeed = multCfg.Bind<float>("Utility", "Speed", 85f, (ConfigDescription)null);
		commandoCfg = new ConfigFile(Paths.ConfigPath + "\\AerosSkills\\Commando.cfg", true);
		enableCommando = commandoCfg.Bind<bool>("General", "Enable Commando Skills", true, (ConfigDescription)null);
		commandoSpecialChargeTime = commandoCfg.Bind<float>("Special", "Max Charge Time", 1.2f, (ConfigDescription)null);
		commandoSpecialMinDamage = commandoCfg.Bind<float>("Special", "Min Damage", 2.5f, (ConfigDescription)null);
		commandoSpecialMaxDamage = commandoCfg.Bind<float>("Special", "Max Damage", 12f, (ConfigDescription)null);
		mercCfg = new ConfigFile(Paths.ConfigPath + "\\AerosSkills\\Mercenary.cfg", true);
		enableMerc = mercCfg.Bind<bool>("General", "Enable Mercenary Skills", true, (ConfigDescription)null);
		mercPrimaryBaseDuration = mercCfg.Bind<float>("Primary", "Primary Base Duration", 0.95f, (ConfigDescription)null);
		mercPrimaryDamage = mercCfg.Bind<float>("Primary", "Damage", 1.1f, (ConfigDescription)null);
		mercSpecialDashDamage = mercCfg.Bind<float>("Special", "Dash Damage", 2f, (ConfigDescription)null);
		mercSpecialUppercutDamage = mercCfg.Bind<float>("Special", "Uppercut Damage", 2.8f, (ConfigDescription)null);
		mercSpecialSlamDamage = mercCfg.Bind<float>("Special", "Slam Damage", 3.2f, (ConfigDescription)null);
		mercSpecialSlamImpactDamage = mercCfg.Bind<float>("Special", "Slam Impact Damage", 4.2f, (ConfigDescription)null);
		mercSpecialRecastTime = mercCfg.Bind<float>("Special", "Recast Time", 2f, (ConfigDescription)null);
		huntressCfg = new ConfigFile(Paths.ConfigPath + "\\AerosSkills\\Huntress.cfg", true);
		enableHuntress = huntressCfg.Bind<bool>("General", "Enable Huntress Skills", true, (ConfigDescription)null);
		huntressSecondaryRadius = huntressCfg.Bind<float>("Cyclone Glaive", "Radius", 20f, (ConfigDescription)null);
		huntressSecondaryDamage = huntressCfg.Bind<float>("Cyclone Glaive", "Damage Coefficient", 3.75f, (ConfigDescription)null);
		huntressSpecialDamage = huntressCfg.Bind<float>("Warp Shot", "Damage Coefficient", 11f, (ConfigDescription)null);
		huntressSpecialRange = huntressCfg.Bind<float>("Warp Shot", "Range", 120f, (ConfigDescription)null);
		railgunnerCfg = new ConfigFile(Paths.ConfigPath + "\\AerosSkills\\Railgunner.cfg", true);
		enableRailgunner = railgunnerCfg.Bind<bool>("General", "Enable Railgunner Skills", true, (ConfigDescription)null);
		railgunnerUtilityDamageMult = railgunnerCfg.Bind<float>("Augmentation Screen Device", "Damage Mult", 1.5f, (ConfigDescription)null);
		railgunnerSpecialDamage = railgunnerCfg.Bind<float>("Electrocharge", "Damage Coefficient", 30f, (ConfigDescription)null);
		railgunnerSpecialRadius = railgunnerCfg.Bind<float>("Electrocharge", "Impact Radius", 15f, (ConfigDescription)null);
		railgunnerSpecialLightningRadius = railgunnerCfg.Bind<float>("Electrocharge", "Lightning Radius", 15f, (ConfigDescription)null);
		railgunnerSpecialLightningDamage = railgunnerCfg.Bind<float>("Electrocharge", "Lightning Damage", 2f, (ConfigDescription)null);
		railgunnerSpecialLightningFireRate = railgunnerCfg.Bind<float>("Electrocharge", "Lightning Fire Rate", 0.25f, (ConfigDescription)null);
		falseSonCfg = new ConfigFile(Paths.ConfigPath + "\\AerosSkills\\FalseSon.cfg", true);
		enableFalseSon = falseSonCfg.Bind<bool>("General", "Enable FalseSon Skills", true, (ConfigDescription)null);
		falseSonUtilityDuration = falseSonCfg.Bind<float>("Sororal Embrace", "Duration", 1.5f, (ConfigDescription)null);
		falseSonUtilityBarrier = falseSonCfg.Bind<float>("Sororal Embrace", "Health Percentage Barrier Per Sec", 0.2f, (ConfigDescription)null);
		falseSonUtilityRadius = falseSonCfg.Bind<float>("Sororal Embrace", "Radius", 8f, (ConfigDescription)null);
		falseSonSpecialDamage = falseSonCfg.Bind<float>("Crown of the Father", "Damage Per Sec Per Laser", 3.5f, (ConfigDescription)null);
		falseSonSpecialDuration = falseSonCfg.Bind<float>("Crown of the Father", "Duration", 4f, (ConfigDescription)null);
		falseSonSpecialFinalDuration = falseSonCfg.Bind<float>("Crown of the Father", "Final Burst Duration", 1.5f, (ConfigDescription)null);
		falseSonSpecialFireRate = falseSonCfg.Bind<float>("Crown of the Father", "Fire Rate", 0.1f, (ConfigDescription)null);
		falseSonSpecialMaxDistance = falseSonCfg.Bind<float>("Crown of the Father", "Max Distance", 120f, (ConfigDescription)null);
	}

	private void RegisterStates()
	{
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_000b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: 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_0023: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0043: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0053: Unknown result type (might be due to invalid IL or missing references)
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_006b: 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_007b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0083: Unknown result type (might be due to invalid IL or missing references)
		//IL_008b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0093: 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_00a3: 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)
		//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bb: 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_00cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d3: 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_00e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0103: Unknown result type (might be due to invalid IL or missing references)
		//IL_010b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0113: Unknown result type (might be due to invalid IL or missing references)
		//IL_011b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0123: Unknown result type (might be due to invalid IL or missing references)
		//IL_012b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0133: Unknown result type (might be due to invalid IL or missing references)
		//IL_013b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0143: Unknown result type (might be due to invalid IL or missing references)
		//IL_014b: 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_015b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0163: Unknown result type (might be due to invalid IL or missing references)
		//IL_016b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0173: Unknown result type (might be due to invalid IL or missing references)
		//IL_017b: Unknown result type (might be due to invalid IL or missing references)
		bool flag = default(bool);
		ContentAddition.AddEntityState<CaptainPrimary>(ref flag);
		ContentAddition.AddEntityState<CaptainSecondary>(ref flag);
		ContentAddition.AddEntityState<EngiPrimaryCharge>(ref flag);
		ContentAddition.AddEntityState<EngiPrimaryFire>(ref flag);
		ContentAddition.AddEntityState<EngiSpecial>(ref flag);
		ContentAddition.AddEntityState<EngiTurretPrimary>(ref flag);
		ContentAddition.AddEntityState<TurretSpawn>(ref flag);
		ContentAddition.AddEntityState<ChargePunchesOld>(ref flag);
		ContentAddition.AddEntityState<PunchesOld>(ref flag);
		ContentAddition.AddEntityState<BlockOld>(ref flag);
		ContentAddition.AddEntityState<SlamOld>(ref flag);
		ContentAddition.AddEntityState<Block>(ref flag);
		ContentAddition.AddEntityState<Detonate>(ref flag);
		ContentAddition.AddEntityState<ChargeFist>(ref flag);
		ContentAddition.AddEntityState<FireFist>(ref flag);
		ContentAddition.AddEntityState<PunchCombo>(ref flag);
		ContentAddition.AddEntityState<Genkidama>(ref flag);
		ContentAddition.AddEntityState<Dimension>(ref flag);
		ContentAddition.AddEntityState<DimensionCorrupted>(ref flag);
		ContentAddition.AddEntityState<Beam>(ref flag);
		ContentAddition.AddEntityState<BeamCorrupted>(ref flag);
		ContentAddition.AddEntityState<MageSpecial>(ref flag);
		ContentAddition.AddEntityState<FireSword>(ref flag);
		ContentAddition.AddEntityState<FireSwordCharge>(ref flag);
		ContentAddition.AddEntityState<MultSecondary>(ref flag);
		ContentAddition.AddEntityState<MultDronePrimary>(ref flag);
		ContentAddition.AddEntityState<MultUtility>(ref flag);
		ContentAddition.AddEntityState<CommandoSpecial>(ref flag);
		ContentAddition.AddEntityState<MercPrimary>(ref flag);
		ContentAddition.AddEntityState<MercSpecial>(ref flag);
		ContentAddition.AddEntityState<MercSpecialFollowUp>(ref flag);
		ContentAddition.AddEntityState<MercSpecialSlam>(ref flag);
		ContentAddition.AddEntityState<SkillOverride>(ref flag);
		ContentAddition.AddEntityState<HuntressSecondary>(ref flag);
		ContentAddition.AddEntityState<HuntressSpecial>(ref flag);
		ContentAddition.AddEntityState<HuntressSpecialAim>(ref flag);
		ContentAddition.AddEntityState<HuntressSpecialFire>(ref flag);
		ContentAddition.AddEntityState<RailgunnerUtility>(ref flag);
		ContentAddition.AddEntityState<RailgunnerSpecial>(ref flag);
		ContentAddition.AddEntityState<RailgunnerChargingSpecial>(ref flag);
		ContentAddition.AddEntityState<RailgunnerChargedSpecial>(ref flag);
		ContentAddition.AddEntityState<RailgunnerExpiredSpecial>(ref flag);
		ContentAddition.AddEntityState<RailgunnerOnlineSpecial>(ref flag);
		ContentAddition.AddEntityState<RailgunnerSpecialFire>(ref flag);
		ContentAddition.AddEntityState<FalseSonUtility>(ref flag);
		ContentAddition.AddEntityState<FalseSonSpecial>(ref flag);
		ContentAddition.AddEntityState<FalseSonSpecialFire>(ref flag);
		ContentAddition.AddEntityState<FalseSonSpecialEnd>(ref flag);
	}

	internal static void FalseSonUtilitySetup(SkillLocator skillLocator)
	{
		string text = "FALSESON_UTIL";
		LanguageAPI.Add("AEROS_" + text, "Sororal Embrace");
		LanguageAPI.Add("AEROS_" + text + "_DESCRIPTION", "Release a cleansing aura around you for <style=cIsUtility>1s</style>, granting all nearby allies <style=cIsHealing>" + falseSonUtilityBarrier.Value * 100f + "% barrier</style> and <style=cIsUtility>cleanses</style> all negative effects. Triple your passive's benefits for <style=cIsUtility>4s</style>.");
		SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(FalseSonUtility), "BuffWard", 1, 8f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: false, (InterruptPriority)1, isCombatSkill: false, mustKeyPress: true, cancelSprintingOnActivation: false, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("falseSonUtility"), "AEROS_" + text + "_DESCRIPTION", "AEROS_" + text, Array.Empty<string>());
		Utils.AddAlt(skillLocator.utility._skillFamily, skillDef);
	}

	internal static void FalseSonSpecialSetup(SkillLocator skillLocator)
	{
		string text = "FALSESON_SPEC";
		LanguageAPI.Add("AEROS_" + text, "Crown of the Father");
		LanguageAPI.Add("AEROS_" + text + "_DESCRIPTION", "Charge up 6 piercing lasers firing at random directions, dealing <style=cIsDamage>6x" + falseSonSpecialDamage.Value * 100f + "% damage</style> per second. Near the end of its duration, they center in the aim direction for a brief duration, and end with a final burst of <style=cIsDamage>6x" + falseSonSpecialDamage.Value * 100f + "% damage</style>.");
		SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(FalseSonSpecial), "Weapon", 1, 15f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: false, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("falseSOnSpecial"), "AEROS_" + text + "_DESCRIPTION", "AEROS_" + text, Array.Empty<string>());
		Utils.AddAlt(skillLocator.special._skillFamily, skillDef);
	}

	internal static void RailgunnerUtilitySetup(SkillLocator skillLocator)
	{
		string text = "RAILGUNNER_UTIL";
		LanguageAPI.Add("AEROS_" + text, "Augmentation Screen Device");
		LanguageAPI.Add("AEROS_" + text + "_DESCRIPTION", "Throw out a device that projects a hologram. Any projectiles that go through it, have their damage multiplied by <style=cIsDamage>" + railgunnerUtilityDamageMult.Value * 100f + "%</style>.");
		SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(RailgunnerUtility), "Weapon", 1, 15f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: false, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: false, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("railgunnerUtility"), "AEROS_" + text + "_DESCRIPTION", "AEROS_" + text, Array.Empty<string>());
		Utils.AddAlt(skillLocator.utility._skillFamily, skillDef);
	}

	internal static void RailgunnerSpecialSetup(SkillLocator skillLocator)
	{
		string text = "RAILGUNNER_SPEC";
		LanguageAPI.Add("AEROS_" + text, "Electrocharge");
		LanguageAPI.Add("AEROS_" + text + "_DESCRIPTION", "During charge, zap nearby enemies for <style=cIsDamage>" + railgunnerSpecialLightningDamage.Value * 100f + "% damage</style>. Fire a <style=cIsDamage>detonating</style> round for <style=cIsDamage>" + railgunnerSpecialDamage.Value * 100f + "% damage</style>. Afterwards, <style=cIsHealth>all your weapons are disabled</style> for <style=cIsHealth>5</style> seconds.");
		railgunnerSpecial = Utils.NewSkillDef<SkillDef>(typeof(RailgunnerSpecial), "Weapon", 1, 15f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: false, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("railgunnerSpecial"), "AEROS_" + text + "_DESCRIPTION", "AEROS_" + text, Array.Empty<string>());
		Utils.AddAlt(skillLocator.special._skillFamily, railgunnerSpecial);
		text = "RAILGUNNER_SPEC_PRIMARY";
		LanguageAPI.Add("AEROS_" + text, "Electrocharged Railgun");
		LanguageAPI.Add("AEROS_" + text + "_DESCRIPTION", "Launch a super-energized projectile for <style=cIsDamage>" + railgunnerSpecialDamage.Value * 100f + "% damage</style>.");
		railgunnerPrimaryOverride = Utils.NewSkillDef<SkillDef>(typeof(RailgunnerSpecialFire), "Weapon", 1, 0f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 0, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("railgunnerSpecialFire"), "AEROS_" + text + "_DESCRIPTION", "AEROS_" + text, Array.Empty<string>());
	}

	internal static void HuntressSecondarySetup(SkillLocator skillLocator)
	{
		string text = "HUNTRESS_M2";
		LanguageAPI.Add("AEROS_" + text, "Cyclone Glaive");
		LanguageAPI.Add("AEROS_" + text + "_DESCRIPTION", "Throw a glaive that <style=cIsUtility>draws enemies to its center</style>, dealing <style=cIsDamage>" + huntressSecondaryDamage.Value * 100f + "% damage</style> per second. It detonates at the end of its duration, dealing <style=cIsDamage>" + huntressSecondaryDamage.Value * 100f + "% damage</style>.");
		SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(HuntressSecondary), "Weapon", 1, 7f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: false, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: false, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("huntressSecondary"), "AEROS_" + text + "_DESCRIPTION", "AEROS_" + text, Array.Empty<string>());
		Utils.AddAlt(skillLocator.secondary._skillFamily, skillDef);
	}

	internal static void HuntressSpecialSetup(SkillLocator skillLocator)
	{
		string text = "HUNTRESS_SPEC";
		LanguageAPI.Add("AEROS_" + text, "Warp Shot");
		LanguageAPI.Add("AEROS_" + text + "_DESCRIPTION", "Teleport backwards into the sky. Target an area to fire an energy bolt, <style=cIsUtility>teleporting</style> to it's impact location, and <style=cIsDamage>detonating</style> in a large area for <style=cIsDamage>" + huntressSpecialDamage.Value * 100f + "% damage</style>.");
		SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(HuntressSpecial), "Body", 1, 12f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: false, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: false, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("huntressSpecial"), "AEROS_" + text + "_DESCRIPTION", "AEROS_" + text, Array.Empty<string>());
		Utils.AddAlt(skillLocator.special._skillFamily, skillDef);
		text = "HUNTRESS_SPEC";
		LanguageAPI.Add("AEROS_" + text, "Warp Shot");
		LanguageAPI.Add("AEROS_" + text + "_DESCRIPTION", "Target an area to fire an energy bolt, <style=cIsUtility>teleporting</style> to it's impact location, and <style=cIsDamage>detonating</style> in a large area for <style=cIsDamage>" + huntressSpecialDamage.Value * 100f + "% damage</style>.");
		huntressPrimaryOverride = Utils.NewSkillDef<SkillDef>(typeof(HuntressSpecialFire), "Weapon", 1, 0f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 0, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("huntressSpecialFire"), "AEROS_" + text + "_DESCRIPTION", "AEROS_" + text, Array.Empty<string>());
	}

	private void MercPrimarySetup(SkillLocator skillLocator)
	{
		LanguageAPI.Add("AEROS_MERC_M1", "Beam Sword");
		LanguageAPI.Add("AEROS_MERC_M1_DESCRIPTION", "<style=cIsUtility>Agile</style>. Slice in front for <style=cIsDamage>3x" + mercPrimaryDamage.Value * 100f + "% damage</style>.");
		SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(MercPrimary), "Weapon", 0, 0f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)0, isCombatSkill: true, mustKeyPress: false, cancelSprintingOnActivation: false, 0, 0, 0, Assets.MainAssetBundle.LoadAsset<Sprite>("mercPrimary"), "AEROS_MERC_M1_DESCRIPTION", "AEROS_MERC_M1", Array.Empty<string>());
		Utils.AddAlt(skillLocator.primary._skillFamily, skillDef);
	}

	private void MercSpecialSetup(SkillLocator skillLocator)
	{
		LanguageAPI.Add("AEROS_MERC_SPEC", "Rend");
		LanguageAPI.Add("AEROS_MERC_SPEC_DESCRIPTION", "Dash forward, dealing <style=cIsDamage>" + mercSpecialDashDamage.Value * 100f + "% damage</style>. If you hit an enemy, you can plunge for <style=cIsDamage>" + mercSpecialSlamDamage.Value * 100f + "% damage</style>, and slam the ground on impact for an additional <style=cIsDamage>" + mercSpecialSlamImpactDamage.Value * 100f + "% damage</style>.");
		SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(MercSpecial), "Dash", 1, 8f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: false, (InterruptPriority)0, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: false, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("mercSpecial"), "AEROS_MERC_SPEC_DESCRIPTION", "AEROS_MERC_SPEC", Array.Empty<string>());
		Utils.AddAlt(skillLocator.special._skillFamily, skillDef);
		mercSpecial = Utils.NewSkillDef<SkillDef>(typeof(MercSpecialSlam), "Weapon", 1, 8f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: false, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("mercSpecial2"), "AEROS_MERC_SPEC_DESCRIPTION", "AEROS_MERC_SPEC", Array.Empty<string>());
	}

	private void CommandoSpecialSetup(SkillLocator skillLocator)
	{
		LanguageAPI.Add("AEROS_COMMANDO_SPEC", "Sharpshooter");
		LanguageAPI.Add("AEROS_COMMANDO_SPEC_DESCRIPTION", "Charge up to shoot two piercing bullets for <style=cIsDamage>2x" + commandoSpecialMinDamage.Value * 100f + "%-" + commandoSpecialMaxDamage.Value * 100f + "% damage</style>. Firing at max charge causes the bullets to ricochet towards the nearby enemies.");
		SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(CommandoSpecial), "Weapon", 1, 8f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("commandoSpecial"), "AEROS_COMMANDO_SPEC_DESCRIPTION", "AEROS_COMMANDO_SPEC", Array.Empty<string>());
		Utils.AddAlt(skillLocator.special._skillFamily, skillDef);
	}

	private void MultSecondarySetup(SkillLocator skillLocator)
	{
		LanguageAPI.Add("AEROS_MULT_SEC", "Repair Drone");
		LanguageAPI.Add("AEROS_MULT_SEC_DESCRIPTION", "Gain a <style=cIsDamage>unique</style> drone. Activate to select a target, enemy targets will take an increased <style=cIsDamage>" + (multSecondaryDamageIncrease.Value - 1f) * 100f + "% damage</style>. If the selected target is an ally drone, it will <style=cIsHealth>heal " + multSecondaryHeal.Value * 100f + "% health</style> per second and gain <style=cIsDamage>30% damage</style> and <style=cIsDamage>attack speed</style>. Activate again to disengage.");
		SkillDef skillDef = Utils.NewSkillDef<HuntressTrackingSkillDef>(typeof(MultSecondary), "Drone", 1, 1f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: false, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("multSecondary"), "AEROS_MULT_SEC_DESCRIPTION", "AEROS_MULT_SEC", Array.Empty<string>());
		Utils.AddAlt(skillLocator.secondary._skillFamily, skillDef);
	}

	private void MultUtilitySetup(SkillLocator skillLocator)
	{
		LanguageAPI.Add("AEROS_MULT_UTIL", "Transport Mode: Burst");
		LanguageAPI.Add("AEROS_MULT_UTIL_DESCRIPTION", "Slide forward for a short distance, gaining <style=cIsUtility>200 armor</style>.");
		SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(MultUtility), "Dash", 4, 4f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: false, 1, 1, 1, Prefabs.Load<SkillDef>("RoR2/Base/Commando/CommandoBodyRoll.asset").icon, "AEROS_MULT_UTIL_DESCRIPTION", "AEROS_MULT_UTIL", Array.Empty<string>());
		Utils.AddAlt(skillLocator.utility._skillFamily, skillDef);
	}

	private void MageSecondarySetup(SkillLocator skillLocator)
	{
		LanguageAPI.Add("AEROS_MAGE_SEC", "Conjure Nano-Blade");
		LanguageAPI.Add("AEROS_MAGE_SEC_DESCRIPTION", "<style=cIsDamage>Ignite</style>. Charge up a flaming sword that deals <style=cIsDamage>" + mageFlameSwordMinDamage.Value * 100f + "%-" + mageFlameSwordMaxDamage.Value * 100f + "% damage</style>. At max charge, fire a <style=cIsDamage>piercing</style> projectile instead.");
		SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(FireSwordCharge), "Weapon", 1, 5f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("mageSecondary"), "AEROS_MAGE_SEC_DESCRIPTION", "AEROS_MAGE_SEC", Array.Empty<string>());
		Utils.AddAlt(skillLocator.secondary._skillFamily, skillDef);
	}

	private void MageSpecialSetup(SkillLocator skillLocator)
	{
		LanguageAPI.Add("AEROS_MAGE_SPEC", "Frigid Outburst");
		LanguageAPI.Add("AEROS_MAGE_SPEC_DESCRIPTION", "<style=cIsUtility>Freezing</style>. Launches you in the direction you are moving, dealing <style=cIsDamage>" + mageSpecialDamage.Value * 100f + "% damage</style> to nearby enemies.");
		SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(MageSpecial), "Body", 1, 12f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("mageSpecial"), "AEROS_MAGE_SPEC_DESCRIPTION", "AEROS_MAGE_SPEC", Array.Empty<string>());
		Utils.AddAlt(skillLocator.special._skillFamily, skillDef);
	}

	private void LoaderUtilitySetup(SkillLocator skillLocator)
	{
		LanguageAPI.Add("AEROS_LOADER_UTIL", "Charged Barrage");
		LanguageAPI.Add("AEROS_LOADER_UTIL_DESCRIPTION", "Charge up to dash forward, dealing <style=cIsDamage>" + punchMinDamageCoefficient.Value * 100f + "%-" + punchMaxDamageCoefficient.Value * 100f + "% damage</style> and perform a series of punches on hit for <style=cIsDamage>5x" + punchDamageCoefficient.Value * 100f + "% damage</style>.");
		SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(ChargeFist), "Weapon", 1, 8f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("loaderutility"), "AEROS_LOADER_UTIL_DESCRIPTION", "AEROS_LOADER_UTIL", Array.Empty<string>());
		Utils.AddAlt(skillLocator.utility._skillFamily, skillDef);
	}

	private void LoaderSpecialSetup(SkillLocator skillLocator)
	{
		LanguageAPI.Add("AEROS_LOADER_SPEC", "Block");
		LanguageAPI.Add("AEROS_LOADER_SPEC_DESCRIPTION", "Enter a block stance for up to <style=cIsDamage>" + blockDuration.Value + "s</style>, blocking <style=cIsDamage>" + blockAmount.Value * 100f + "% damage</style> of all incoming damage. Release a lightning explosion around you for <style=cIsDamage>" + blockWaveDamage.Value * 100f + "% damage</style>, increasing in damage and size based on the amount of barrier you currently have. Grants <style=cIsDamage>invincibility</style> for <style=cIsUtility>0.5s</style> after releasing.");
		SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(Block), "Weapon", 1, 8f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("loaderspecial"), "AEROS_LOADER_SPEC_DESCRIPTION", "AEROS_LOADER_SPEC", Array.Empty<string>());
		Utils.AddAlt(skillLocator.special._skillFamily, skillDef);
	}

	private void LoaderUtilitySetupOld(SkillLocator skillLocator)
	{
		LanguageAPI.Add("AEROS_LOADER_UTIL", "Charged Barrage");
		LanguageAPI.Add("AEROS_LOADER_UTIL_DESCRIPTION", "Charge up to perform a series of punches for <style=cIsDamage>" + punchDamageCoefficient.Value * 100f + "% damage</style> each, increasing in count with charge time.");
		SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(ChargePunchesOld), "Weapon", 1, 8f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("loaderutility"), "AEROS_LOADER_UTIL_DESCRIPTION", "AEROS_LOADER_UTIL", Array.Empty<string>());
		Utils.AddAlt(skillLocator.utility._skillFamily, skillDef);
	}

	private void LoaderSpecialSetupOld(SkillLocator skillLocator)
	{
		LanguageAPI.Add("AEROS_LOADER_SPEC", "Block");
		LanguageAPI.Add("AEROS_LOADER_SPEC_DESCRIPTION", "Enter a block stance for up to <style=cIsDamage>" + blockDuration.Value + "s</style>, blocking <style=cIsDamage>" + blockAmountOld.Value * 100f + "% damage</style> of all incoming damage and turning it into <style=cIsHealing>barrier</style>. Finishes by consuming all barrier and releasing a lightning wave for <style=cIsDamage>" + blockWaveDamage.Value * 100f + "% damage</style>, increasing in damage and size based on the amount of barrier consumed.");
		SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(BlockOld), "Weapon", 1, 8f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("loaderspecial"), "AEROS_LOADER_SPEC_DESCRIPTION", "AEROS_LOADER_SPEC", Array.Empty<string>());
		Utils.AddAlt(skillLocator.special._skillFamily, skillDef);
	}

	private void ViendSecondarySetup(SkillLocator skillLocator)
	{
		LanguageAPI.Add("AEROS_VIEND_SECONDARY", "『 P??luck 」");
		LanguageAPI.Add("AEROS_VIEND_SECONDARY_DESCRIPTION", "Fire a long-range beam for <style=cIsDamage>" + beamDMG.Value * 100f * (1f / beamFireFrequency.Value) + "% damage</style> per second, <style=cIsUtility>pulling</style> enemies hit.");
		SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(Beam), "Weapon", 1, 5f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 1, 1, 1, Prefabs.viendSecondary, "AEROS_VIEND_SECONDARY_DESCRIPTION", "AEROS_VIEND_SECONDARY", Array.Empty<string>());
		Utils.AddAlt(skillLocator.secondary._skillFamily, skillDef);
		viendSecondary = skillDef;
		LanguageAPI.Add("AEROS_VIEND_SECONDARY_CORRUPT", "『 P??luck 」 Corrupted");
		LanguageAPI.Add("AEROS_VIEND_SECONDARY_DESCRIPTION_CORRUPT", "Fire an instant long-range beam for <style=cIsDamage>" + beamDMGCorrupted.Value * 100f + "% damage</style>. Enemies hit are <style=cIsDamage>nullified</style> and <style=cIsUtility>teleported</style> to you.");
		skillDef = Utils.NewSkillDef<SkillDef>(typeof(BeamCorrupted), "Weapon", 1, 5f, beginSkillCooldownOnSkillEnd: true, canceledFromSprintin