Decompiled source of AerosSkills v2.3.0

AerosSkills.dll

Decompiled 3 days ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using AncientScepter;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using EntityStates;
using EntityStates.Captain.Weapon;
using EntityStates.Commando.CommandoWeapon;
using EntityStates.Engi.EngiWeapon;
using EntityStates.Loader;
using EntityStates.Mage.Weapon;
using EntityStates.Merc;
using EntityStates.Merc.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.CharacterAI;
using RoR2.Navigation;
using RoR2.Networking;
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;

[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 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
		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);
	}

	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 += 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;
		}
	}
}
[BepInPlugin("com.Dragonyck.AerosSkills", "AerosSkills", "2.3.0")]
[NetworkCompatibility(/*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.*/)]
[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.3.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 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;

	private void Awake()
	{
		//IL_036d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0374: Expected O, but got Unknown
		//IL_03b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_03d4: Unknown result type (might be due to invalid IL or missing references)
		//IL_03d6: Unknown result type (might be due to invalid IL or missing references)
		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>();
			MultSecondarySetup(val2);
			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);
		}
		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
		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", 6f, (ConfigDescription)null);
		punchMaxDamageCoefficient = loaderCfg.Bind<float>("Charged Barrage", "Charge Max Damage Coefficient", 27f, (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", 8f, (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", "Health Per Sec", 5f, (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);
	}

	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)
		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);
	}

	private void MercPrimarySetup(SkillLocator skillLocator)
	{
		LanguageAPI.Add("AEROS_MERC_M1", "Beam Sword");
		LanguageAPI.Add("AEROS_MERC_M1_DESCRIPTION", "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 + " 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.");
		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=cIsUtility>teleported</style> to you.");
		skillDef = Utils.NewSkillDef<SkillDef>(typeof(BeamCorrupted), "Weapon", 1, 5f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 1, 1, 1, Prefabs.viendSecondaryCorrupted, "AEROS_VIEND_SECONDARY_DESCRIPTION_CORRUPT", "AEROS_VIEND_SECONDARY_CORRUPT", Array.Empty<string>());
		viendSecondaryCorrupted = skillDef;
	}

	private void ViendUtilitySetup(SkillLocator skillLocator)
	{
		LanguageAPI.Add("AEROS_VIEND_UTIL", "「 Sub?merge?? 】");
		LanguageAPI.Add("AEROS_VIEND_UTIL_DESCRIPTION", "Enter a 「 Sub?merge?? 】, being unable to damage or be damaged by enemies, and receive <style=cIsHealth>" + viendSelfDMG.Value * 5f * 100f + "% damage</style> per second, that increases over time.");
		SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(Dimension), "Weapon", 1, 5f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: false, 1, 1, 1, Prefabs.viendUtility, "AEROS_VIEND_UTIL_DESCRIPTION", "AEROS_VIEND_UTIL", Array.Empty<string>());
		Utils.AddAlt(skillLocator.utility._skillFamily, skillDef);
		viendUtil = skillDef;
		LanguageAPI.Add("AEROS_VIEND_UTIL_CORRUPT", "「 Sub?merge?? 】 Corrupted");
		LanguageAPI.Add("AEROS_VIEND_UTIL_DESCRIPTION_CORRUPT", "Gain <style=cIsUtility>" + viendSpeedBuff.Value * 100f + "% movement speed</style>. Enter a 「 Sub?merge?? 】, being unable to damage or be damaged by enemies, and receive <style=cIsHealth> " + viendSelfDMG.Value * 5f * 100f + "% damage</style> per second, that increases over time.");
		skillDef = Utils.NewSkillDef<SkillDef>(typeof(DimensionCorrupted), "Weapon", 1, 5f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: false, 1, 1, 1, Prefabs.viendUtilityCorrupted, "AEROS_VIEND_UTIL_DESCRIPTION_CORRUPT", "AEROS_VIEND_UTIL_CORRUPT", Array.Empty<string>());
		viendUtilCorrupted = skillDef;
	}

	private void SeekerPassiveSetup(SkillLocator skillLocator)
	{
		LanguageAPI.Add("AEROS_SEEKER_PASSIVE0", "No passive.");
		LanguageAPI.Add("AEROS_SEEKER_PASSIVE", "Soul Stack");
		LanguageAPI.Add("AEROS_SEEKER_PASSIVE_DESCRIPTION", "Apply a stack of <style=cIsDamage>Soul Stack</style> on hit. Reaching <style=cIsUtility>" + passiveMaxStacks.Value + " stacks</style> will cause the enemy to detonate for <style=cIsDamage>" + passiveBaseDamage.Value * 100f + "% damage</style>.");
		LanguageAPI.Add("AEROS_SEEKER_LOADOUT", "Passive");
		SkillDef skill = Utils.NewSkillDef<SkillDef>(typeof(Idle), "Weapon", 0, 0f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 0, 0, 0, Prefabs.Load<Sprite>("RoR2/Base/UI/texUIHighlightBoxOutlineThickIcon.png"), "", "AEROS_SEEKER_PASSIVE0", Array.Empty<string>());
		GenericSkill val = Utils.NewGenericSkill(((Component)skillLocator).gameObject, skill);
		SkillsAPI.SetOrderPriority(val, -1);
		SkillsAPI.SetLoadoutTitleTokenOverride(val, "AEROS_SEEKER_LOADOUT");
		skill = Utils.NewSkillDef<GroundedSkillDef>(typeof(Idle), "Weapon", 0, 0f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 0, 0, 0, Assets.MainAssetBundle.LoadAsset<Sprite>("seekerpassive"), "AEROS_SEEKER_PASSIVE_DESCRIPTION", "AEROS_SEEKER_PASSIVE", Array.Empty<string>());
		Utils.AddAlt(val.skillFamily, skill);
		seekerPassive = skill;
	}

	private void SeekerSpecialSetup(SkillLocator skillLocator)
	{
		LanguageAPI.Add("AEROS_SEEKER_SPEC", "Soul Detonation");
		LanguageAPI.Add("AEROS_SEEKER_SPEC_DESCRIPTION", "Charge up a <style=cIsDamage>exploding</style> soul orb by <style=cIsUtility>executing</style> timed sequences, gaining <style=cIsUtility>size</style> and <style=cIsUtility>Tranquility</style>, that deals <style=cIsDamage>" + genkidamaBaseDamage.Value * 100f + "%-" + genkidamaAddDamage.Value * 7f * 100f + "% damage</style>.");
		Utils.AddAlt(SkillDef: seekerGenkidama = Utils.NewSkillDef<SkillDef>(typeof(Genkidama), "Weapon", 1, 12f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("seekerspecial"), "AEROS_SEEKER_SPEC_DESCRIPTION", "AEROS_SEEKER_SPEC", Array.Empty<string>()), skillFamily: skillLocator.special._skillFamily);
	}

	private void EngiSpecialSetup(SkillLocator skillLocator)
	{
		LanguageAPI.Add("AEROS_ENGI_SPEC2", "TR90 Railgun Turret");
		LanguageAPI.Add("AEROS_ENGI_SPEC", "TR90 Railgun Turret");
		LanguageAPI.Add("AEROS_ENGI_SPEC_DESCRIPTION", "Drop a turret that charges up over <style=cIsUtility>8s</style> and fires for <style=cIsDamage>" + turretDamageCoefficient.Value * 100f + "% damage</style>, inheriting all of your items.");
		SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(EngiSpecial), "Weapon", 1, 25f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)0, isCombatSkill: true, mustKeyPress: false, cancelSprintingOnActivation: true, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("engispecial"), "AEROS_ENGI_SPEC_DESCRIPTION", "AEROS_ENGI_SPEC", Array.Empty<string>());
		Utils.AddAlt(skillLocator.special._skillFamily, skillDef);
		skillDef = Utils.NewSkillDef<SkillDef>(typeof(EngiSpecial), "Weapon", 1, 25f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)0, isCombatSkill: true, mustKeyPress: false, cancelSprintingOnActivation: true, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("engispecial2"), "AEROS_ENGI_SPEC_DESCRIPTION", "AEROS_ENGI_SPEC2", Array.Empty<string>());
		engiScepter = skillDef;
	}

	private void EngiPrimarySetup(SkillLocator skillLocator)
	{
		LanguageAPI.Add("AEROS_ENGI_M1", "Seekers");
		LanguageAPI.Add("AEROS_ENGI_M1_DESCRIPTION", "Charge up to <style=cIsDamage>8</style> missiles that deal <style=cIsDamage>" + missileDamageCoefficient.Value * 100f + "% damage</style> each.");
		SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(EngiPrimaryCharge), "Weapon", 0, 0f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)0, isCombatSkill: true, mustKeyPress: false, cancelSprintingOnActivation: true, 0, 0, 0, Assets.MainAssetBundle.LoadAsset<Sprite>("engiprimary"), "AEROS_ENGI_M1_DESCRIPTION", "AEROS_ENGI_M1", Array.Empty<string>());
		Utils.AddAlt(skillLocator.primary._skillFamily, skillDef);
	}

	private void CaptainPrimarySetup(SkillLocator skillLocator)
	{
		LanguageAPI.Add("AEROS_CAP_M1", "Vulcan Repeater");
		LanguageAPI.Add("AEROS_CAP_M1_DESCRIPTION", "Fire a quick burst of <style=cIsDamage>3</style> pellets that deal <style=cIsDamage>3x" + burstDMG.Value * 100f + "% damage</style>.");
		SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(CaptainPrimary), "Weapon", 0, 0f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)0, isCombatSkill: true, mustKeyPress: false, cancelSprintingOnActivation: true, 0, 0, 0, Assets.MainAssetBundle.LoadAsset<Sprite>("capprimary"), "AEROS_CAP_M1_DESCRIPTION", "AEROS_CAP_M1", Array.Empty<string>());
		Utils.AddAlt(skillLocator.primary._skillFamily, skillDef);
	}

	private void CaptainSecondarySetup(SkillLocator skillLocator)
	{
		LanguageAPI.Add("AEROS_CAP_M2", "Overclock");
		LanguageAPI.Add("AEROS_CAP_M2_DESCRIPTION", "Fire a <style=cIsHealth>non damaging</style> projectile that <style=cIsDamage>buffs</style> nearby allies on impact with <style=cIsHealing>+" + regen.Value + " hp/s health regen</style>, <style=cIsDamage>+" + atkspd.Value + " attack speed</style>, <style=cIsUtility>+" + movspd.Value + " movement speed</style> and <style=cIsUtility>" + cooldown.Value * 100f + "% cooldown reduction</style> for <style=cIsUtility>" + duration.Value + "s</style>.");
		SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(CaptainSecondary), "Weapon", 1, CD.Value, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: false, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: false, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("capsecondary"), "AEROS_CAP_M2_DESCRIPTION", "AEROS_CAP_M2", Array.Empty<string>());
		Utils.AddAlt(skillLocator.secondary.skillFamily, skillDef);
	}
}
public static class ModCompat
{
	private static bool? ancientEnabled;

	public static bool AncientScepterEnabled
	{
		get
		{
			if (!ancientEnabled.HasValue)
			{
				ancientEnabled = Chainloader.PluginInfos.ContainsKey("com.DestroyedClone.AncientScepter");
			}
			return ancientEnabled.Value;
		}
	}

	public static void AddScepterSupport()
	{
		ItemBase<AncientScepterItem>.instance.RegisterScepterSkill(MainPlugin.engiScepter, "EngiBody", (SkillSlot)3, 3);
	}
}
internal class Prefabs
{
	internal static GameObject buffProjectileGhost;

	internal static GameObject buffProjectile;

	internal static GameObject buffProjectileExplosion;

	internal static GameObject tracer;

	internal static GameObject missileProjectile;

	internal static GameObject shieldEffect;

	internal static GameObject loaderImpact;

	internal static GameObject slamProjectile;

	internal static GameObject turret;

	internal static GameObject turretMaster;

	internal static GameObject turretBlueprint;

	internal static GameObject turretMuzzleFlash;

	internal static GameObject turretTracer;

	internal static GameObject turretBigTracer;

	internal static GameObject seekerGenkidamaProjectileGhost;

	internal static GameObject seekerGenkidamaProjectile;

	internal static GameObject viendPP;

	internal static GameObject viendPPCorrupted;

	internal static GameObject viendContinuousBeam;

	internal static GameObject viendBeamTracer;

	internal static GameObject viendBeamCharge;

	internal static GameObject mageMuzzleTrail;

	internal static GameObject fireSwordProjectile;

	internal static GameObject fireSwordProjectileDotZone;

	internal static GameObject fireSwordChargeEffect;

	internal static GameObject droneBody;

	internal static GameObject droneMaster;

	internal static GameObject gunSpinEffect;

	internal static GameObject gunSpinTracerEffect;

	internal static ModdedDamageType flameSwordHit;

	internal static Sprite viendSecondary;

	internal static Sprite viendSecondaryCorrupted;

	internal static Sprite viendUtility;

	internal static Sprite viendUtilityCorrupted;

	internal static DeployableSlot bigTurret;

	internal static Material overlay;

	internal static Material droneTargetOverlay;

	internal static BuffDef seekerPassiveBuff;

	internal static BuffDef overclock;

	internal static BuffDef block;

	internal static BuffDef viendSpeedBuff;

	internal static BuffDef multDroneDebuff;

	internal static BuffDef multDroneRegenBuff;

	internal static AnimationCurve spreadBloomCurve;

	internal static AnimationClip clip;

	internal static T Load<T>(string path)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		return Addressables.LoadAssetAsync<T>((object)path).WaitForCompletion();
	}

	internal static GameObject Instantiate(string path, string name, bool registerNetwork = false)
	{
		return PrefabAPI.InstantiateClone(Load<GameObject>(path), name, registerNetwork);
	}

	internal static GameObject Instantiate(GameObject obj, string name, bool registerNetwork = false)
	{
		return PrefabAPI.InstantiateClone(obj, name, registerNetwork);
	}

	internal static int BigTurretDeployableCount(CharacterMaster master, int count)
	{
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		int num = 1;
		if (Object.op_Implicit((Object)(object)master.inventory))
		{
			if (master.inventory.GetItemCount(ItemCatalog.FindItemIndex("ITEM_ANCIENT_SCEPTER")) > 0)
			{
				num++;
			}
			if (master.inventory.GetItemCount(Items.EquipmentMagazineVoid) > 0)
			{
				num++;
			}
		}
		return num;
	}

	internal static void CreatePrefabs()
	{
		//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_002b: 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_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0092: Unknown result type (might be due to invalid IL or missing references)
		//IL_0097: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cc: Expected O, but got Unknown
		//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_1086: Unknown result type (might be due to invalid IL or missing references)
		//IL_1090: Unknown result type (might be due to invalid IL or missing references)
		//IL_1095: Unknown result type (might be due to invalid IL or missing references)
		//IL_10b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_10bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_10f7: Unknown result type (might be due to invalid IL or missing references)
		//IL_10fc: Unknown result type (might be due to invalid IL or missing references)
		//IL_1118: Unknown result type (might be due to invalid IL or missing references)
		//IL_1122: Expected O, but got Unknown
		//IL_05d1: Unknown result type (might be due to invalid IL or missing references)
		//IL_05db: Unknown result type (might be due to invalid IL or missing references)
		//IL_05f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_05fc: Expected O, but got Unknown
		//IL_0613: Unknown result type (might be due to invalid IL or missing references)
		//IL_062a: Unknown result type (might be due to invalid IL or missing references)
		//IL_066c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0673: Expected O, but got Unknown
		//IL_06f7: Unknown result type (might be due to invalid IL or missing references)
		//IL_0704: Unknown result type (might be due to invalid IL or missing references)
		//IL_070e: Unknown result type (might be due to invalid IL or missing references)
		//IL_072c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0736: Unknown result type (might be due to invalid IL or missing references)
		//IL_0757: Unknown result type (might be due to invalid IL or missing references)
		//IL_0271: Unknown result type (might be due to invalid IL or missing references)
		//IL_0296: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a0: Expected O, but got Unknown
		//IL_02ba: Unknown result type (might be due to invalid IL or missing references)
		//IL_02bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0303: Expected O, but got Unknown
		//IL_0310: Unknown result type (might be due to invalid IL or missing references)
		//IL_0377: Unknown result type (might be due to invalid IL or missing references)
		//IL_037c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0403: Unknown result type (might be due to invalid IL or missing references)
		//IL_0408: Unknown result type (might be due to invalid IL or missing references)
		//IL_0164: Unknown result type (might be due to invalid IL or missing references)
		//IL_016e: Expected O, but got Unknown
		//IL_0199: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
		//IL_15ba: Unknown result type (might be due to invalid IL or missing references)
		//IL_15da: Unknown result type (might be due to invalid IL or missing references)
		//IL_15ea: Expected O, but got Unknown
		//IL_1657: Unknown result type (might be due to invalid IL or missing references)
		//IL_165e: Expected O, but got Unknown
		//IL_168a: Unknown result type (might be due to invalid IL or missing references)
		//IL_168f: Unknown result type (might be due to invalid IL or missing references)
		//IL_1694: Unknown result type (might be due to invalid IL or missing references)
		//IL_170e: Unknown result type (might be due to invalid IL or missing references)
		//IL_1715: Expected O, but got Unknown
		//IL_172b: Unknown result type (might be due to invalid IL or missing references)
		//IL_173b: Expected O, but got Unknown
		//IL_17a8: Unknown result type (might be due to invalid IL or missing references)
		//IL_17af: Expected O, but got Unknown
		//IL_17db: Unknown result type (might be due to invalid IL or missing references)
		//IL_17e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_17e5: Unknown result type (might be due to invalid IL or missing references)
		//IL_185f: Unknown result type (might be due to invalid IL or missing references)
		//IL_1866: Expected O, but got Unknown
		//IL_1896: Unknown result type (might be due to invalid IL or missing references)
		//IL_18a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_18f5: Unknown result type (might be due to invalid IL or missing references)
		//IL_12b0: Unknown result type (might be due to invalid IL or missing references)
		//IL_12b5: Unknown result type (might be due to invalid IL or missing references)
		//IL_12ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_12f6: Unknown result type (might be due to invalid IL or missing references)
		//IL_1e2c: Unknown result type (might be due to invalid IL or missing references)
		//IL_1e33: Expected O, but got Unknown
		//IL_139b: Unknown result type (might be due to invalid IL or missing references)
		//IL_13a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_150a: Unknown result type (might be due to invalid IL or missing references)
		//IL_151f: Unknown result type (might be due to invalid IL or missing references)
		//IL_07d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_244f: Unknown result type (might be due to invalid IL or missing references)
		//IL_2459: Expected O, but got Unknown
		//IL_2463: Unknown result type (might be due to invalid IL or missing references)
		//IL_24a3: Unknown result type (might be due to invalid IL or missing references)
		//IL_24ba: Unknown result type (might be due to invalid IL or missing references)
		//IL_253d: Unknown result type (might be due to invalid IL or missing references)
		//IL_254f: Unknown result type (might be due to invalid IL or missing references)
		//IL_256d: Unknown result type (might be due to invalid IL or missing references)
		//IL_2574: Expected O, but got Unknown
		//IL_257b: Unknown result type (might be due to invalid IL or missing references)
		//IL_258d: Unknown result type (might be due to invalid IL or missing references)
		//IL_2632: Unknown result type (might be due to invalid IL or missing references)
		//IL_26f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_271b: Unknown result type (might be due to invalid IL or missing references)
		//IL_2733: Unknown result type (might be due to invalid IL or missing references)
		//IL_276d: Unknown result type (might be due to invalid IL or missing references)
		//IL_2793: Unknown result type (might be due to invalid IL or missing references)
		//IL_27ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_27ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_27f7: Unknown result type (might be due to invalid IL or missing references)
		//IL_2801: Unknown result type (might be due to invalid IL or missing references)
		//IL_1951: Unknown result type (might be due to invalid IL or missing references)
		//IL_1956: Unknown result type (might be due to invalid IL or missing references)
		//IL_081c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0826: Unknown result type (might be due to invalid IL or missing references)
		//IL_0857: Unknown result type (might be due to invalid IL or missing references)
		//IL_087d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0887: Expected O, but got Unknown
		//IL_08da: Unknown result type (might be due to invalid IL or missing references)
		//IL_0910: Unknown result type (might be due to invalid IL or missing references)
		//IL_0932: Unknown result type (might be due to invalid IL or missing references)
		//IL_09fa: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a28: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a3d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a3f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a90: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ab2: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ad4: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b84: Unknown result type (might be due to invalid IL or m