Decompiled source of AerosSkills v2.4.0
AerosSkills.dll
Decompiled 2 days ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using AncientScepter; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using EntityStates; using EntityStates.Bandit2; using EntityStates.Captain.Weapon; using EntityStates.Commando.CommandoWeapon; using EntityStates.Engi.EngiWeapon; using EntityStates.FalseSon; using EntityStates.Huntress; using EntityStates.Huntress.HuntressWeapon; using EntityStates.Huntress.Weapon; using EntityStates.Loader; using EntityStates.Mage.Weapon; using EntityStates.Merc; using EntityStates.Merc.Weapon; using EntityStates.Railgunner.Backpack; using EntityStates.Railgunner.Weapon; using EntityStates.Seeker; using EntityStates.Toolbot; using HG; using KinematicCharacterController; using On.RoR2; using R2API; using R2API.Utils; using Rewired.ComponentControls.Effects; using RoR2; using RoR2.Audio; using RoR2.CharacterAI; using RoR2.Navigation; using RoR2.Networking; using RoR2.Orbs; using RoR2.Projectile; using RoR2.Skills; using RoR2.UI; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Events; using UnityEngine.Networking; using UnityEngine.Rendering; using UnityEngine.Rendering.PostProcessing; using UnityEngine.UI; [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: CompilationRelaxations(8)] [assembly: AssemblyCompany("AerosSkills")] [assembly: AssemblyProduct("AerosSkills")] [assembly: AssemblyTitle("AerosSkills")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace AerosSkills; internal class Assets { public static AssetBundle MainAssetBundle; public static T Load<T>(string name) where T : Object { return MainAssetBundle.LoadAsset<T>(name); } public static void PopulateAssets() { Assembly executingAssembly = Assembly.GetExecutingAssembly(); if ((Object)(object)MainAssetBundle == (Object)null) { using Stream stream = executingAssembly.GetManifestResourceStream("AerosSkills.AssetBundle." + "AerosSkills".ToLower() + "assets"); MainAssetBundle = AssetBundle.LoadFromStream(stream); } using Stream stream2 = executingAssembly.GetManifestResourceStream("AerosSkills.AerosSkills.bnk"); byte[] array = new byte[stream2.Length]; stream2.Read(array, 0, array.Length); SoundBanks.Add(array); } } internal class CrosshairSwap : MonoBehaviour { private CharacterBody body; private void Awake() { body = ((Component)this).GetComponent<CharacterBody>(); } private void Start() { if (body.skillLocator.primary.skillNameToken == "AEROS__M1") { body.spreadBloomCurve = Prefabs.spreadBloomCurve; body._defaultCrosshairPrefab = Prefabs.Load<GameObject>("RoR2/Base/UI/StandardCrosshair.prefab"); } } } internal class DebugHelper : MonoBehaviour { } [DefaultExecutionOrder(100)] internal class eee : MonoBehaviour { private Tracer tracer; public float zPos = 13f; private void Start() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) tracer = ((Component)this).GetComponent<Tracer>(); Vector3 localPosition = tracer.beamObject.transform.localPosition; Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(localPosition.x, localPosition.y, localPosition.z + zPos); } } internal class ForcePos : MonoBehaviour { private void LateUpdate() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) ((Component)this).transform.localPosition = Vector3.up * 4f; } } internal class MercHitboxScale : MonoBehaviour { private bool scaled; public void Scale() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) if (!scaled) { scaled = true; Transform transform = ((Component)((Component)((Component)this).GetComponent<ModelLocator>().modelTransform).GetComponent<HitBoxGroup>().hitBoxes[0]).transform; transform.localPosition += Vector3.up; transform.localScale += Vector3.up * 2f; } } } internal class MissileSearchTweak : MonoBehaviour { public float maxAngle = 75f; private MissileController missile; private void Start() { missile = ((Component)this).GetComponent<MissileController>(); missile.search.maxAngleFilter = 20f; } } internal class MultDroneBehaviour : MonoBehaviour { private CharacterBody body; private CharacterMaster master; public MultTracker tracker; public BaseAI ai; public AISkillDriver hover; private bool setMat; private void Awake() { master = ((Component)this).GetComponent<CharacterMaster>(); } private void Start() { } private void FixedUpdate() { if (!Object.op_Implicit((Object)(object)body)) { body = master.GetBody(); if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)master.minionOwnership.ownerMaster)) { CharacterBody val = master.minionOwnership.ownerMaster.GetBody(); MultTracker multTracker = (Object.op_Implicit((Object)(object)val) ? ((Component)val).GetComponent<MultTracker>() : null); if (Object.op_Implicit((Object)(object)multTracker)) { tracker = multTracker; tracker.droneAI = ((Component)master).GetComponent<BaseAI>(); tracker.droneSkill = body.skillLocator.primary; } } } else if (!setMat && Object.op_Implicit((Object)(object)tracker) && Object.op_Implicit((Object)(object)tracker.baseMat)) { setMat = true; ((Component)((Component)body.modelLocator.modelTransform).GetComponent<ChildLocator>().FindChild("drone")).GetComponent<Renderer>().material = tracker.baseMat; } } public void EndScan() { if (Object.op_Implicit((Object)(object)tracker)) { tracker.endScanning = true; } } } internal class MultTracker : HuntressTracker { public BaseAI droneAI; public GenericSkill droneSkill; private bool enable; public bool endScanning; private CharacterMaster droneMaster; public Material baseMat; private CharacterModel model; private float stopwatch; public bool exitSkill { get; set; } public void SelectTarget() { if (Object.op_Implicit((Object)(object)base.trackingTarget) && Object.op_Implicit((Object)(object)droneAI) && Object.op_Implicit((Object)(object)droneSkill)) { droneAI.currentEnemy.gameObject = ((Component)base.trackingTarget.healthComponent).gameObject; droneSkill.ExecuteIfReady(); } } public void DisableScanning() { endScanning = true; } private void Start() { //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Expected O, but got Unknown ((HuntressTracker)this).Start(); enable = base.characterBody.skillLocator.secondary.skillNameToken == "AEROS_MULT_SEC"; if (enable && NetworkServer.active) { MasterSummon val = new MasterSummon { masterPrefab = Prefabs.droneMaster, position = Utils.FindNearestNodePosition(((Component)this).transform.position, (GraphType)0), rotation = Quaternion.identity, summonerBodyObject = ((Component)this).gameObject, ignoreTeamMemberLimit = true }; droneMaster = val.Perform(); } model = ((Component)base.characterBody.modelLocator.modelTransform).GetComponent<CharacterModel>(); AkBankManager.LoadBankAsync("char_captain", (BankCallback)null); } private void FixedUpdate() { //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)baseMat) && Object.op_Implicit((Object)(object)model) && model.baseRendererInfos.Length > 1) { baseMat = model.baseRendererInfos[1].defaultMaterial; } if (!enable) { base.indicator.active = false; return; } stopwatch += Time.fixedDeltaTime; if (stopwatch >= 0.1f) { stopwatch = 0f; Ray val = default(Ray); ((Ray)(ref val))..ctor(base.inputBank.aimOrigin, base.inputBank.aimDirection); base.search.filterByLoS = true; base.search.searchOrigin = ((Ray)(ref val)).origin; base.search.searchDirection = ((Ray)(ref val)).direction; base.search.sortMode = (SortMode)1; base.search.maxDistanceFilter = base.maxTrackingDistance; base.search.maxAngleFilter = base.maxTrackingAngle; base.search.RefreshCandidates(); base.search.FilterOutGameObject(((Component)this).gameObject); base.trackingTarget = base.search.GetResults().FirstOrDefault(); base.indicator.targetTransform = (Object.op_Implicit((Object)(object)base.trackingTarget) ? ((Component)base.trackingTarget).transform : null); } } private void OnDestroy() { if (Object.op_Implicit((Object)(object)droneMaster)) { droneMaster.DestroyBody(); Object.Destroy((Object)(object)((Component)droneMaster).gameObject); } } } internal class RadialBuff : MonoBehaviour { private TeamFilter teamFilter; private void OnCollisionEnter(Collision collision) { //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_024c: Unknown result type (might be due to invalid IL or missing references) //IL_0251: Unknown result type (might be due to invalid IL or missing references) //IL_0258: Unknown result type (might be due to invalid IL or missing references) //IL_0263: Unknown result type (might be due to invalid IL or missing references) //IL_0270: Expected O, but got Unknown float value = MainPlugin.radius.Value; if (NetworkServer.active) { SphereSearch val = new SphereSearch(); val.origin = ((Component)this).transform.position; val.radius = value; val.mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask; HurtBox[] hurtBoxes = val.RefreshCandidates().FilterCandidatesByHurtBoxTeam(TeamMask.GetEnemyTeams(teamFilter.teamIndex)).FilterCandidatesByDistinctHurtBoxEntities() .GetHurtBoxes(); HurtBox[] array = hurtBoxes; foreach (HurtBox val2 in array) { if (Object.op_Implicit((Object)(object)val2.healthComponent)) { SetStateOnHurt component = ((Component)val2.healthComponent).GetComponent<SetStateOnHurt>(); if (Object.op_Implicit((Object)(object)component)) { component.SetPain(); } } } } foreach (TeamComponent teamMember in TeamComponent.GetTeamMembers(teamFilter.teamIndex)) { if (!Object.op_Implicit((Object)(object)teamMember.body) || !(Vector3.Distance(((Component)this).transform.position, ((Component)teamMember).transform.position) <= value)) { continue; } float value2 = MainPlugin.duration.Value; if (Object.op_Implicit((Object)(object)teamMember.body.modelLocator) && Object.op_Implicit((Object)(object)teamMember.body.modelLocator.modelTransform)) { CharacterModel component2 = ((Component)teamMember.body.modelLocator.modelTransform).GetComponent<CharacterModel>(); if (Object.op_Implicit((Object)(object)component2)) { TemporaryOverlayInstance val3 = TemporaryOverlayManager.AddOverlay(((Component)component2).gameObject); val3.duration = value2; val3.animateShaderAlpha = true; val3.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f); val3.alphaCurve.AddKey(0.85f, 1f); val3.destroyComponentOnEnd = true; val3.originalMaterial = Prefabs.overlay; val3.AddToCharacterModel(component2); } } if (NetworkServer.active) { teamMember.body.AddTimedBuff(Prefabs.overclock, value2); } } EffectManager.SpawnEffect(Prefabs.buffProjectileExplosion, new EffectData { origin = ((Component)this).transform.position, scale = value }, false); } private void Awake() { teamFilter = ((Component)this).GetComponent<TeamFilter>(); } } internal class RailgunnerScreenBehaviour : NetworkBehaviour, IProjectileImpactBehavior { private ProjectileController controller; public GameObject screenMesh; private static int kRpcRpcCollision; private void Awake() { controller = ((Component)this).GetComponentInParent<ProjectileController>(); } public void OnProjectileImpact(ProjectileImpactInfo impactInfo) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)impactInfo.collider) && !Object.op_Implicit((Object)(object)((Component)impactInfo.collider).GetComponent<HurtBox>())) { CallRpcCollision(); } } [ClientRpc] public void RpcCollision() { screenMesh.SetActive(true); } private void FixedUpdate() { } private void UNetVersion() { } protected static void InvokeRpcRpcCollision(NetworkBehaviour obj, NetworkReader reader) { if (!NetworkClient.active) { Debug.LogError((object)"RPC RpcCollision called on server."); } else { ((RailgunnerScreenBehaviour)(object)obj).RpcCollision(); } } public void CallRpcCollision() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0041: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active) { Debug.LogError((object)"RPC Function RpcCollision called on client."); return; } NetworkWriter val = new NetworkWriter(); val.Write((short)0); val.Write((short)2); val.WritePackedUInt32((uint)kRpcRpcCollision); val.Write(((Component)this).GetComponent<NetworkIdentity>().netId); ((NetworkBehaviour)this).SendRPCInternal(val, 0, "RpcCollision"); } static RailgunnerScreenBehaviour() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown kRpcRpcCollision = -1880999976; NetworkBehaviour.RegisterRpcDelegate(typeof(RailgunnerScreenBehaviour), kRpcRpcCollision, new CmdDelegate(InvokeRpcRpcCollision)); NetworkCRC.RegisterBehaviour("RailgunnerScreenBehaviour", 0); } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { bool result = default(bool); return result; } public override void OnDeserialize(NetworkReader reader, bool initialState) { } } internal class RailgunnerScreenCollision : MonoBehaviour { private void OnTriggerEnter(Collider collider) { //IL_002d: Unknown result type (might be due to invalid IL or missing references) ProjectileDamage component = ((Component)collider).GetComponent<ProjectileDamage>(); if (Object.op_Implicit((Object)(object)component)) { component.damage *= MainPlugin.railgunnerUtilityDamageMult.Value; component.damageColorIndex = (DamageColorIndex)12; } } } internal class SeekerGenkidamaProjectile : NetworkBehaviour { private ProjectileController controller; private ProjectileDamage projectileDamage; private ProjectileSimple simple; private Collider collider; private ProjectileImpactExplosion impact; private SkillLocator skillLocator; private CharacterBody ownerBody; private SeekerController seekerController; private EntityStateMachine weapon; public float upPos = 4f; private float damage; private int inputCount; private int tranquilityCount; private static int kCmdCmdUpdateInput; private void Awake() { controller = ((Component)this).GetComponent<ProjectileController>(); simple = ((Component)this).GetComponent<ProjectileSimple>(); projectileDamage = ((Component)this).GetComponent<ProjectileDamage>(); impact = ((Component)this).GetComponent<ProjectileImpactExplosion>(); collider = ((Component)this).GetComponent<Collider>(); } private void Start() { if (Object.op_Implicit((Object)(object)controller.owner)) { GameObject owner = controller.owner; skillLocator = owner.GetComponent<SkillLocator>(); ownerBody = owner.GetComponent<CharacterBody>(); seekerController = owner.GetComponent<SeekerController>(); weapon = Array.Find(owner.GetComponents<EntityStateMachine>(), (EntityStateMachine x) => x.customName == "Weapon"); } } private void Update() { //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) if (!((Behaviour)simple).enabled && Object.op_Implicit((Object)(object)controller.owner)) { ((Component)this).transform.position = controller.owner.transform.position + Vector3.up * upPos; } } [Command] private void CmdUpdateInput(int input) { inputCount = input; } private void FixedUpdate() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) ((Component)this).transform.localScale = Vector3.Lerp(((Component)this).transform.localScale, Vector3.one * (float)(inputCount + 1), 1.5f * Time.fixedDeltaTime); if (Object.op_Implicit((Object)(object)ownerBody)) { ((Component)this).transform.forward = ownerBody.inputBank.aimDirection; damage = ownerBody.damage; tranquilityCount = ownerBody.GetBuffCount(Buffs.ChakraBuff); } if (!((Behaviour)simple).enabled && Object.op_Implicit((Object)(object)seekerController) && Util.HasEffectiveAuthority(controller.owner)) { CallCmdUpdateInput(seekerController.meditationInputStep); } if ((!((Behaviour)simple).enabled && !Object.op_Implicit((Object)(object)ownerBody)) || (Object.op_Implicit((Object)(object)weapon) && !(weapon.state is Genkidama))) { ((Behaviour)simple).enabled = true; ((Behaviour)impact).enabled = true; ((ProjectileExplosion)impact).blastRadius = 5 * (inputCount + 1); collider.enabled = true; projectileDamage.damage = (MainPlugin.genkidamaBaseDamage.Value + MainPlugin.genkidamaAddDamage.Value * (float)tranquilityCount) * damage; } } private void UNetVersion() { } protected static void InvokeCmdCmdUpdateInput(NetworkBehaviour obj, NetworkReader reader) { if (!NetworkServer.active) { Debug.LogError((object)"Command CmdUpdateInput called on client."); } else { ((SeekerGenkidamaProjectile)(object)obj).CmdUpdateInput((int)reader.ReadPackedUInt32()); } } public void CallCmdUpdateInput(int input) { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown //IL_0058: Unknown result type (might be due to invalid IL or missing references) if (!NetworkClient.active) { Debug.LogError((object)"Command function CmdUpdateInput called on server."); return; } if (((NetworkBehaviour)this).isServer) { CmdUpdateInput(input); return; } NetworkWriter val = new NetworkWriter(); val.Write((short)0); val.Write((short)5); val.WritePackedUInt32((uint)kCmdCmdUpdateInput); val.Write(((Component)this).GetComponent<NetworkIdentity>().netId); val.WritePackedUInt32((uint)input); ((NetworkBehaviour)this).SendCommandInternal(val, 0, "CmdUpdateInput"); } static SeekerGenkidamaProjectile() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown kCmdCmdUpdateInput = -1960028162; NetworkBehaviour.RegisterCommandDelegate(typeof(SeekerGenkidamaProjectile), kCmdCmdUpdateInput, new CmdDelegate(InvokeCmdCmdUpdateInput)); NetworkCRC.RegisterBehaviour("SeekerGenkidamaProjectile", 0); } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { bool result = default(bool); return result; } public override void OnDeserialize(NetworkReader reader, bool initialState) { } } internal class SimpleUpdate : MonoBehaviour { private ProjectileSimple simple; private ProjectileTargetComponent target; private void Awake() { simple = ((Component)this).GetComponent<ProjectileSimple>(); target = ((Component)this).GetComponent<ProjectileTargetComponent>(); } private void FixedUpdate() { simple.updateAfterFiring = Object.op_Implicit((Object)(object)target.target); } } [DefaultExecutionOrder(100)] internal class TurretChargeBehaviour : MonoBehaviour { private CharacterBody body; private CharacterModel model; private Material mat; public bool firing; public float stopwatch = 3f; public bool addstock; private void Awake() { model = ((Component)this).GetComponent<CharacterModel>(); } private void Start() { body = model.body; UpdateMaterial(); } public void UpdateMaterial() { //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Expected O, but got Unknown //IL_00a5: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)mat)) { Object.Destroy((Object)(object)mat); } mat = new Material(model.baseRendererInfos[3].defaultMaterial); model.baseRendererInfos[3].defaultMaterial = mat; model.baseRendererInfos[3].renderer.material = mat; if (!Object.op_Implicit((Object)(object)body)) { mat.SetTextureScale("_MainTex", new Vector2(2.07f, 1f)); mat.SetFloat("_EmPower", 2f); } } private void FixedUpdate() { //IL_00f3: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)body) || !Object.op_Implicit((Object)(object)model) || !Object.op_Implicit((Object)(object)mat)) { return; } if (firing) { if (stopwatch <= 0f) { stopwatch = 3f; } stopwatch -= Time.fixedDeltaTime; } else { stopwatch = 3f; } GenericSkill primary = body.skillLocator.primary; mat.SetTextureScale("_MainTex", new Vector2(primary.CanExecute() ? 2.07f : (firing ? 2.07f : Util.Remap(Math.Min(1f, primary.rechargeStopwatch / primary.finalRechargeInterval), 0f, 1f, 0.66f, 2.07f)), 1f)); } } [DefaultExecutionOrder(100)] internal class TurretSkinBehaviour : NetworkBehaviour { private CharacterBody body; private CharacterBody ownerBody; private NetworkLoadout networkLoadout; private BodyIndex bodyIndex; private ModelSkinController skinController; private TurretChargeBehaviour chargeBehaviour; private CharacterSelectSurvivorPreviewDisplayController displayController; private CharacterModel characterModel; private Renderer renderer; public Material mat; public bool applySkin = true; public float timer = 0.06f; private float stopwatch; private void Awake() { skinController = ((Component)this).GetComponent<ModelSkinController>(); chargeBehaviour = ((Component)this).GetComponent<TurretChargeBehaviour>(); characterModel = ((Component)this).GetComponent<CharacterModel>(); renderer = characterModel.baseRendererInfos[0].renderer; mat = renderer.material; } private void Start() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Expected O, but got Unknown //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Expected O, but got Unknown //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Expected O, but got Unknown body = ((Component)this).GetComponent<CharacterModel>().body; bodyIndex = BodyCatalog.FindBodyIndex("EngiBody"); if (!Object.op_Implicit((Object)(object)body)) { displayController = ((Component)this).GetComponentInParent<CharacterSelectSurvivorPreviewDisplayController>(); if (Object.op_Implicit((Object)(object)displayController)) { displayController.skinChangeResponses[0].response.AddListener((UnityAction)delegate { UpdateModel(0); }); displayController.skinChangeResponses[1].response.AddListener((UnityAction)delegate { UpdateModel(1); }); displayController.skinChangeResponses[2].response.AddListener((UnityAction)delegate { UpdateModel(2); }); } } else if (Object.op_Implicit((Object)(object)body.master) && Object.op_Implicit((Object)(object)body.master.minionOwnership) && Object.op_Implicit((Object)(object)body.master.minionOwnership.ownerMaster)) { ownerBody = body.master.minionOwnership.ownerMaster.GetBody(); if (Object.op_Implicit((Object)(object)ownerBody)) { body.skinIndex = ownerBody.skinIndex; UpdateModel((int)ownerBody.skinIndex); } } } private void FixedUpdate() { if (Object.op_Implicit((Object)(object)body)) { stopwatch += Time.fixedDeltaTime; if (applySkin && stopwatch >= timer) { applySkin = false; UpdateModel((int)body.skinIndex); } } } private void UpdateModel(int skinIndex) { if (Object.op_Implicit((Object)(object)skinController) && Object.op_Implicit((Object)(object)chargeBehaviour)) { ((Behaviour)skinController.characterModel).enabled = true; skinController.ApplySkin(skinIndex); chargeBehaviour.UpdateMaterial(); } } private void UNetVersion() { } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { bool result = default(bool); return result; } public override void OnDeserialize(NetworkReader reader, bool initialState) { } } internal class TurretSpawner : NetworkBehaviour { private CharacterBody body; private static int kCmdCmdSpawn; private void Awake() { body = ((Component)this).GetComponent<CharacterBody>(); } [Command] public void CmdSpawn(Vector3 pos, Quaternion rot) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Expected O, but got Unknown //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Expected O, but got Unknown //IL_00a4: Unknown result type (might be due to invalid IL or missing references) CharacterMaster val = new MasterSummon { masterPrefab = Prefabs.turretMaster, position = pos, rotation = rot, summonerBodyObject = ((Component)body).gameObject, ignoreTeamMemberLimit = true, inventoryToCopy = body.inventory, teamIndexOverride = body.teamComponent.teamIndex }.Perform(); Deployable val2 = ((Component)val).gameObject.AddComponent<Deployable>(); val2.onUndeploy = new UnityEvent(); val2.onUndeploy.AddListener(new UnityAction(val.TrueKill)); body.master.AddDeployable(val2, Prefabs.bigTurret); } private void UNetVersion() { } protected static void InvokeCmdCmdSpawn(NetworkBehaviour obj, NetworkReader reader) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active) { Debug.LogError((object)"Command CmdSpawn called on client."); } else { ((TurretSpawner)(object)obj).CmdSpawn(reader.ReadVector3(), reader.ReadQuaternion()); } } public void CallCmdSpawn(Vector3 pos, Quaternion rot) { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) if (!NetworkClient.active) { Debug.LogError((object)"Command function CmdSpawn called on server."); return; } if (((NetworkBehaviour)this).isServer) { CmdSpawn(pos, rot); return; } NetworkWriter val = new NetworkWriter(); val.Write((short)0); val.Write((short)5); val.WritePackedUInt32((uint)kCmdCmdSpawn); val.Write(((Component)this).GetComponent<NetworkIdentity>().netId); val.Write(pos); val.Write(rot); ((NetworkBehaviour)this).SendCommandInternal(val, 0, "CmdSpawn"); } static TurretSpawner() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown kCmdCmdSpawn = -274844957; NetworkBehaviour.RegisterCommandDelegate(typeof(TurretSpawner), kCmdCmdSpawn, new CmdDelegate(InvokeCmdCmdSpawn)); NetworkCRC.RegisterBehaviour("TurretSpawner", 0); } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { bool result = default(bool); return result; } public override void OnDeserialize(NetworkReader reader, bool initialState) { } } internal class ViendUncorruptAlt : MonoBehaviour { private CharacterBody body; public GenericSkill secondary; public GenericSkill utility; public VoidSurvivorController controller; public bool hasAlt; public bool secondaryAlt; public bool utilityAlt; public float angle = 25f; private void Awake() { body = ((Component)this).GetComponent<CharacterBody>(); controller = ((Component)this).GetComponent<VoidSurvivorController>(); } private void Start() { secondary = body.skillLocator.secondary; utility = body.skillLocator.utility; if (secondary.skillNameToken == "AEROS_VIEND_SECONDARY") { hasAlt = true; secondaryAlt = true; } if (utility.skillNameToken == "AEROS_VIEND_UTIL") { hasAlt = true; utilityAlt = true; } } } internal class Hook { internal static void Hooks() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Expected O, but got Unknown RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(RecalculateStatsAPI_GetStatCoefficients); HealthComponent.TakeDamage += new hook_TakeDamage(HealthComponent_TakeDamage); GenericSkill.SetSkillOverride += new hook_SetSkillOverride(GenericSkill_SetSkillOverride); GenericSkill.UnsetSkillOverride += new hook_UnsetSkillOverride(GenericSkill_UnsetSkillOverride); SeekerController.CmdIncrementChakraGate += new hook_CmdIncrementChakraGate(SeekerController_CmdIncrementChakraGate); BulletAttack.Fire += new hook_Fire(BulletAttack_Fire); CharacterBody.AddTimedBuff_BuffDef_float += new hook_AddTimedBuff_BuffDef_float(CharacterBody_AddTimedBuff_BuffDef_float); DotController.InflictDot_refInflictDotInfo += new hook_InflictDot_refInflictDotInfo(DotController_InflictDot_refInflictDotInfo); CharacterBody.AddBuff_BuffIndex += new hook_AddBuff_BuffIndex(CharacterBody_AddBuff_BuffIndex); } private static void DotController_InflictDot_refInflictDotInfo(orig_InflictDot_refInflictDotInfo orig, ref InflictDotInfo inflictDotInfo) { if (Object.op_Implicit((Object)(object)inflictDotInfo.victimObject)) { CharacterBody component = inflictDotInfo.victimObject.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component) && component.HasBuff(Prefabs.debuffImmune)) { return; } } orig.Invoke(ref inflictDotInfo); } private static void CharacterBody_AddBuff_BuffIndex(orig_AddBuff_BuffIndex orig, CharacterBody self, BuffIndex buffType) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) BuffDef buffDef = BuffCatalog.GetBuffDef(buffType); if (!Object.op_Implicit((Object)(object)self) || !Object.op_Implicit((Object)(object)buffDef) || !buffDef.isDebuff || !self.HasBuff(Prefabs.debuffImmune)) { orig.Invoke(self, buffType); } } private static void CharacterBody_AddTimedBuff_BuffDef_float(orig_AddTimedBuff_BuffDef_float orig, CharacterBody self, BuffDef buffDef, float duration) { if (!Object.op_Implicit((Object)(object)self) || !Object.op_Implicit((Object)(object)buffDef) || !buffDef.isDebuff || !self.HasBuff(Prefabs.debuffImmune)) { orig.Invoke(self, buffDef, duration); } } private static void BulletAttack_Fire(orig_Fire orig, BulletAttack self) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) if (Physics.Raycast(self.origin, self.aimVector, self.maxDistance, 536870912)) { self.damage *= MainPlugin.railgunnerUtilityDamageMult.Value; self.damageColorIndex = (DamageColorIndex)12; } orig.Invoke(self); } private static void SeekerController_CmdIncrementChakraGate(orig_CmdIncrementChakraGate orig, SeekerController self) { orig.Invoke(self); if (Object.op_Implicit((Object)(object)self.specialSkillSlot) && (Object)(object)self.specialSkillSlot.skillDef == (Object)(object)MainPlugin.seekerGenkidama) { self.UnlockGateEffects(self.characterBody.master.seekerChakraGate); } } private static void GenericSkill_UnsetSkillOverride(orig_UnsetSkillOverride orig, GenericSkill self, object source, SkillDef skillDef, SkillOverridePriority priority) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Invalid comparison between Unknown and I4 //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Expected O, but got Unknown ViendUncorruptAlt component = ((Component)self).GetComponent<ViendUncorruptAlt>(); if (Object.op_Implicit((Object)(object)component) && component.hasAlt && (int)priority == 2) { bool flag = (Object)(object)self == (Object)(object)component.secondary; if ((component.secondaryAlt && flag) || (component.utilityAlt && (Object)(object)self == (Object)(object)component.utility)) { SkillOverride val = new SkillOverride(source, flag ? MainPlugin.viendSecondaryCorrupted : MainPlugin.viendUtilCorrupted, priority); int num = self.FindSkillOverrideIndex(ref val); if (num != -1) { ArrayUtils.ArrayRemoveAtAndResize<SkillOverride>(ref self.skillOverrides, num, 1); self.PickCurrentOverride(); } return; } } orig.Invoke(self, source, skillDef, priority); } private static void GenericSkill_SetSkillOverride(orig_SetSkillOverride orig, GenericSkill self, object source, SkillDef skillDef, SkillOverridePriority priority) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Invalid comparison between Unknown and I4 //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Expected O, but got Unknown ViendUncorruptAlt component = ((Component)self).GetComponent<ViendUncorruptAlt>(); if (Object.op_Implicit((Object)(object)component) && component.hasAlt && (int)priority == 2 && component.controller.corruption >= 100f) { bool flag = (Object)(object)self == (Object)(object)component.secondary; if ((component.secondaryAlt && flag) || (component.utilityAlt && (Object)(object)self == (Object)(object)component.utility)) { SkillOverride val = new SkillOverride(source, flag ? MainPlugin.viendSecondaryCorrupted : MainPlugin.viendUtilCorrupted, priority); if (self.FindSkillOverrideIndex(ref val) == -1) { ArrayUtils.ArrayAppend<SkillOverride>(ref self.skillOverrides, ref val); self.PickCurrentOverride(); } return; } } orig.Invoke(self, source, skillDef, priority); } private static void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo) { //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_022c: Unknown result type (might be due to invalid IL or missing references) //IL_0231: Unknown result type (might be due to invalid IL or missing references) //IL_0244: Unknown result type (might be due to invalid IL or missing references) //IL_0249: Unknown result type (might be due to invalid IL or missing references) //IL_024a: Unknown result type (might be due to invalid IL or missing references) //IL_0252: Unknown result type (might be due to invalid IL or missing references) //IL_0260: Expected O, but got Unknown //IL_027d: Unknown result type (might be due to invalid IL or missing references) //IL_0282: Unknown result type (might be due to invalid IL or missing references) //IL_028e: Unknown result type (might be due to invalid IL or missing references) //IL_0290: Unknown result type (might be due to invalid IL or missing references) //IL_0295: Unknown result type (might be due to invalid IL or missing references) //IL_0297: Unknown result type (might be due to invalid IL or missing references) //IL_029c: Unknown result type (might be due to invalid IL or missing references) //IL_02b7: Unknown result type (might be due to invalid IL or missing references) //IL_02c4: Unknown result type (might be due to invalid IL or missing references) //IL_02c5: Unknown result type (might be due to invalid IL or missing references) //IL_02ca: Unknown result type (might be due to invalid IL or missing references) //IL_02cf: Unknown result type (might be due to invalid IL or missing references) //IL_02d2: Unknown result type (might be due to invalid IL or missing references) //IL_02d7: Unknown result type (might be due to invalid IL or missing references) //IL_02e4: Unknown result type (might be due to invalid IL or missing references) //IL_02ef: Unknown result type (might be due to invalid IL or missing references) //IL_02f7: Unknown result type (might be due to invalid IL or missing references) //IL_02ff: Unknown result type (might be due to invalid IL or missing references) //IL_0304: Unknown result type (might be due to invalid IL or missing references) //IL_0309: Unknown result type (might be due to invalid IL or missing references) //IL_030a: Unknown result type (might be due to invalid IL or missing references) //IL_030c: Unknown result type (might be due to invalid IL or missing references) //IL_0311: Unknown result type (might be due to invalid IL or missing references) if (self.body.HasBuff(Prefabs.multDroneDebuff)) { damageInfo.damage *= MainPlugin.multSecondaryDamageIncrease.Value; } bool flag = Object.op_Implicit((Object)(object)self.body) && self.body.HasBuff(Prefabs.block); float damage = damageInfo.damage; float num = Math.Clamp(MainPlugin.blockAmount.Value, 0.01f, 1f); if (flag) { damageInfo.damage *= 1f - num; } orig.Invoke(self, damageInfo); if (flag) { self.AddBarrier(damage * num); } if (!Object.op_Implicit((Object)(object)damageInfo.attacker) || !(damageInfo.procCoefficient > 0f)) { return; } CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>(); if (DamageAPI.HasModdedDamageType(damageInfo, Prefabs.flameSwordHit)) { InflictDotInfo val = default(InflictDotInfo); val.attackerObject = damageInfo.attacker; val.victimObject = ((Component)self).gameObject; val.totalDamage = 5.875f * MainPlugin.mageFlameSwordBurnDuration.Value; val.damageMultiplier = 1f; val.dotIndex = (DotIndex)1; val.maxStacksFromAttacker = 2147483647u; InflictDotInfo val2 = val; StrengthenBurnUtils.CheckDotForUpgrade(component.inventory, ref val2); DotController.InflictDot(ref val2); } if ((Object)(object)MainPlugin.seekerPassive != (Object)null && Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)((Component)component).GetComponent<SeekerController>()) && Object.op_Implicit((Object)(object)Array.Find(((Component)component).GetComponents<GenericSkill>(), (GenericSkill x) => (Object)(object)x.skillDef == (Object)(object)MainPlugin.seekerPassive))) { self.body.AddTimedBuff(Prefabs.seekerPassiveBuff, 8f); int buffCount = self.body.GetBuffCount(Prefabs.seekerPassiveBuff); if (buffCount >= MainPlugin.passiveMaxStacks.Value) { self.body.ClearTimedBuffs(Prefabs.seekerPassiveBuff); Vector3 corePosition = self.body.corePosition; float num2 = 3f; EffectManager.SpawnEffect(Prefabs.Load<GameObject>("RoR2/DLC2/Seeker/SoulSearchExplosionVFX.prefab"), new EffectData { origin = corePosition, scale = num2 }, true); float num3 = (float)(1 + component.GetBuffCount(Buffs.ChakraBuff)) * MainPlugin.passiveAddDamage.Value; new BlastAttack { attacker = damageInfo.attacker, attackerFiltering = (AttackerFiltering)2, falloffModel = (FalloffModel)0, baseDamage = component.damage * MainPlugin.passiveBaseDamage.Value + num3, crit = component.RollCrit(), damageType = DamageTypeCombo.Generic, damageColorIndex = (DamageColorIndex)10, inflictor = ((Component)component).gameObject, procCoefficient = 0f, radius = num2, teamIndex = component.teamComponent.teamIndex, position = corePosition }.Fire(); } } } private static void RecalculateStatsAPI_GetStatCoefficients(CharacterBody sender, StatHookEventArgs args) { if (sender.HasBuff(Prefabs.multDroneRegenBuff)) { args.baseRegenAdd += sender.healthComponent.fullHealth * MainPlugin.multSecondaryHeal.Value; args.attackSpeedMultAdd += 0.3f; args.damageMultAdd += 0.3f; } if (sender.HasBuff(Prefabs.viendSpeedBuff)) { args.moveSpeedMultAdd += MainPlugin.viendSpeedBuff.Value; } if (sender.HasBuff(Prefabs.block)) { args.moveSpeedReductionMultAdd += MainPlugin.blockSpeedReduction.Value; } if (sender.HasBuff(Prefabs.overclock)) { args.baseRegenAdd += MainPlugin.regen.Value; args.baseAttackSpeedAdd += MainPlugin.atkspd.Value; args.baseMoveSpeedAdd += MainPlugin.movspd.Value; args.cooldownMultAdd += 0f - MainPlugin.cooldown.Value; } } } [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.Dragonyck.AerosSkills", "AerosSkills", "2.4.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class MainPlugin : BaseUnityPlugin { public const string MODUID = "com.Dragonyck.AerosSkills"; public const string MODNAME = "AerosSkills"; public const string VERSION = "2.4.0"; public const string MODKEY = "AEROS_"; internal static ConfigFile captainCfg; internal static ConfigEntry<bool> enableCap; internal static ConfigEntry<bool> enableCapPrimary; internal static ConfigEntry<bool> enableCapSecondary; internal static ConfigEntry<float> burstDMG; internal static ConfigEntry<float> radius; internal static ConfigEntry<float> regen; internal static ConfigEntry<float> atkspd; internal static ConfigEntry<float> movspd; internal static ConfigEntry<float> cooldown; internal static ConfigEntry<float> duration; internal static ConfigEntry<float> CD; internal static ConfigFile engiCfg; internal static ConfigEntry<bool> enableEngi; internal static ConfigEntry<bool> enableEngiPrimary; internal static ConfigEntry<bool> enableEngiSpecial; internal static ConfigEntry<float> missileDamageCoefficient; internal static ConfigEntry<bool> missileTracking; internal static ConfigEntry<float> turretDamageCoefficient; internal static ConfigFile loaderCfg; internal static ConfigEntry<bool> enableLoader; internal static ConfigEntry<bool> enableLoaderUtility; internal static ConfigEntry<bool> enableLoaderSpecial; internal static ConfigEntry<bool> enableLoaderOldSkills; internal static ConfigEntry<float> blockDuration; internal static ConfigEntry<float> blockInvincibilityDuration; internal static ConfigEntry<float> blockSpeedReduction; internal static ConfigEntry<float> blockAmount; internal static ConfigEntry<float> blockAmountOld; internal static ConfigEntry<float> blockWaveDamage; internal static ConfigEntry<int> maxPunchCount; internal static ConfigEntry<float> punchDamageCoefficient; internal static ConfigEntry<float> punchMinDamageCoefficient; internal static ConfigEntry<float> punchMaxDamageCoefficient; internal static ConfigEntry<float> punchChargeTime; internal static ConfigEntry<float> punchVelocity; internal static ConfigEntry<float> punchSpeed; internal static ConfigEntry<float> punchComboBackForce; internal static ConfigEntry<float> punchComboUpForce; internal static ConfigEntry<float> punchComboFirstHitDamageCoefficient; internal static ConfigFile seekerCfg; internal static ConfigEntry<bool> enableSeeker; internal static ConfigEntry<bool> enableSeekerPassive; internal static ConfigEntry<bool> enableSeekerSpecial; internal static ConfigEntry<float> genkidamaBaseDamage; internal static ConfigEntry<float> genkidamaAddDamage; internal static ConfigEntry<float> passiveBaseDamage; internal static ConfigEntry<float> passiveAddDamage; internal static ConfigEntry<int> passiveMaxStacks; internal static ConfigFile viendCfg; internal static ConfigEntry<bool> enableViend; internal static ConfigEntry<bool> enableViendSecondary; internal static ConfigEntry<bool> enableViendUtility; internal static ConfigEntry<float> viendSpeedBuff; internal static ConfigEntry<float> viendSelfDMG; internal static ConfigEntry<float> beamFireFrequency; internal static ConfigEntry<float> beamDMG; internal static ConfigEntry<float> beamForce; internal static ConfigEntry<float> beamDMGCorrupted; internal static ConfigEntry<float> beamDuration; internal static ConfigFile mageCfg; internal static ConfigEntry<bool> enableMage; internal static ConfigEntry<bool> enableMageSecondary; internal static ConfigEntry<bool> enableMageSpecial; internal static ConfigEntry<float> mageSpecialDamage; internal static ConfigEntry<float> mageFlameSwordMinDamage; internal static ConfigEntry<float> mageFlameSwordMaxDamage; internal static ConfigEntry<float> mageFlameSwordMaxChargeTime; internal static ConfigEntry<float> mageFlameSwordBurnDuration; internal static ConfigFile multCfg; internal static ConfigEntry<bool> enableMult; internal static ConfigEntry<float> multUtilitySpeed; internal static ConfigEntry<float> multSecondaryDamage; internal static ConfigEntry<float> multSecondaryDamageIncrease; internal static ConfigEntry<float> multSecondaryHeal; internal static ConfigFile commandoCfg; internal static ConfigEntry<bool> enableCommando; internal static ConfigEntry<float> commandoSpecialChargeTime; internal static ConfigEntry<float> commandoSpecialMinDamage; internal static ConfigEntry<float> commandoSpecialMaxDamage; internal static ConfigFile mercCfg; internal static ConfigEntry<bool> enableMerc; internal static ConfigEntry<float> mercPrimaryBaseDuration; internal static ConfigEntry<float> mercPrimaryDamage; internal static ConfigEntry<float> mercSpecialDashDamage; internal static ConfigEntry<float> mercSpecialUppercutDamage; internal static ConfigEntry<float> mercSpecialSlamDamage; internal static ConfigEntry<float> mercSpecialSlamImpactDamage; internal static ConfigEntry<float> mercSpecialRecastTime; internal static ConfigFile huntressCfg; internal static ConfigEntry<bool> enableHuntress; internal static ConfigEntry<float> huntressSecondaryRadius; internal static ConfigEntry<float> huntressSecondaryDamage; internal static ConfigEntry<float> huntressSpecialDamage; internal static ConfigEntry<float> huntressSpecialRange; internal static ConfigFile railgunnerCfg; internal static ConfigEntry<bool> enableRailgunner; internal static ConfigEntry<float> railgunnerUtilityDamageMult; internal static ConfigEntry<float> railgunnerSpecialDamage; internal static ConfigEntry<float> railgunnerSpecialRadius; internal static ConfigEntry<float> railgunnerSpecialLightningRadius; internal static ConfigEntry<float> railgunnerSpecialLightningFireRate; internal static ConfigEntry<float> railgunnerSpecialLightningDamage; internal static ConfigFile falseSonCfg; internal static ConfigEntry<bool> enableFalseSon; internal static ConfigEntry<float> falseSonUtilityBarrier; internal static ConfigEntry<float> falseSonUtilityRadius; internal static ConfigEntry<float> falseSonUtilityDuration; internal static ConfigEntry<float> falseSonSpecialDamage; internal static ConfigEntry<float> falseSonSpecialDuration; internal static ConfigEntry<float> falseSonSpecialFinalDuration; internal static ConfigEntry<float> falseSonSpecialFireRate; internal static ConfigEntry<float> falseSonSpecialMaxDistance; internal static BepInPlugin Metadata; internal static string Location; internal static SkillDef engiScepter; internal static SkillDef viendSecondary; internal static SkillDef viendSecondaryCorrupted; internal static SkillDef viendUtil; internal static SkillDef viendUtilCorrupted; internal static SkillDef seekerPassive; internal static SkillDef seekerGenkidama; internal static SkillDef mercSpecial; internal static SkillDef huntressPrimaryOverride; internal static SkillDef railgunnerSpecial; internal static SkillDef railgunnerPrimaryOverride; private void Awake() { //IL_0365: Unknown result type (might be due to invalid IL or missing references) //IL_036c: Expected O, but got Unknown //IL_03ac: Unknown result type (might be due to invalid IL or missing references) //IL_03cc: Unknown result type (might be due to invalid IL or missing references) //IL_03ce: Unknown result type (might be due to invalid IL or missing references) Location = ((BaseUnityPlugin)this).Info.Location; Metadata = ((BaseUnityPlugin)this).Info.Metadata; CreateConfigs(); Assets.PopulateAssets(); Prefabs.CreatePrefabs(); GameObject val = null; SkillLocator val2 = null; if (enableCap.Value) { val = Prefabs.Load<GameObject>("RoR2/Base/Captain/CaptainBody.prefab"); val2 = val.GetComponent<SkillLocator>(); val.AddComponent<CrosshairSwap>(); Prefabs.spreadBloomCurve = Prefabs.Load<GameObject>("RoR2/Base/Commando/CommandoBody.prefab").GetComponent<CharacterBody>().spreadBloomCurve; if (enableCapPrimary.Value) { CaptainPrimarySetup(val2); } if (enableCapSecondary.Value) { CaptainSecondarySetup(val2); } } if (enableEngi.Value) { val = Prefabs.Load<GameObject>("RoR2/Base/Engi/EngiBody.prefab"); val.AddComponent<TurretSpawner>(); val2 = val.GetComponent<SkillLocator>(); if (enableEngiPrimary.Value) { EngiPrimarySetup(val2); } if (enableEngiSpecial.Value) { EngiSpecialSetup(val2); } if (ModCompat.AncientScepterEnabled) { ModCompat.AddScepterSupport(); } } if (enableLoader.Value) { val = Prefabs.Load<GameObject>("RoR2/Base/Loader/LoaderBody.prefab"); val2 = val.GetComponent<SkillLocator>(); if (enableLoaderOldSkills.Value) { if (enableLoaderUtility.Value) { LoaderUtilitySetupOld(val2); } if (enableLoaderSpecial.Value) { LoaderSpecialSetupOld(val2); } } else { LoaderUtilitySetup(val2); LoaderSpecialSetup(val2); } } if (enableSeeker.Value) { val = Prefabs.Load<GameObject>("RoR2/DLC2/Seeker/SeekerBody.prefab"); val2 = val.GetComponent<SkillLocator>(); if (enableSeekerPassive.Value) { SeekerPassiveSetup(val2); } if (enableSeekerSpecial.Value) { SeekerSpecialSetup(val2); } } if (enableViend.Value) { val = Prefabs.Load<GameObject>("RoR2/DLC1/VoidSurvivor/VoidSurvivorBody.prefab"); val.gameObject.AddComponent<ViendUncorruptAlt>(); val2 = val.GetComponent<SkillLocator>(); if (enableViendSecondary.Value) { ViendSecondarySetup(val2); } if (enableViendUtility.Value) { ViendUtilitySetup(val2); } } if (enableMage.Value) { val = Prefabs.Load<GameObject>("RoR2/Base/Mage/MageBody.prefab"); val2 = val.GetComponent<SkillLocator>(); if (enableMageSecondary.Value) { MageSecondarySetup(val2); } if (enableMageSpecial.Value) { MageSpecialSetup(val2); } } if (enableMult.Value) { val = Prefabs.Load<GameObject>("RoR2/Base/Toolbot/ToolbotBody.prefab"); ((HuntressTracker)val.gameObject.AddComponent<MultTracker>()).maxTrackingDistance = 50f; val2 = val.GetComponent<SkillLocator>(); Utils.NewStateMachine<Idle>(val.gameObject, "Drone"); Utils.NewStateMachine<Idle>(val.gameObject, "Dash"); NetworkStateMachine component = val.GetComponent<NetworkStateMachine>(); component.stateMachines = val.GetComponents<EntityStateMachine>(); MultUtilitySetup(val2); } if (enableCommando.Value) { val = Prefabs.Load<GameObject>("RoR2/Base/Commando/CommandoBody.prefab"); val2 = val.GetComponent<SkillLocator>(); ChildLocator component2 = ((Component)val.GetComponent<ModelLocator>().modelTransform).GetComponent<ChildLocator>(); GameObject val3 = new GameObject("MuzzleMuzzle"); val3.transform.parent = ((Component)component2).transform; Array.Resize(ref component2.transformPairs, component2.transformPairs.Length + 1); component2.transformPairs[component2.transformPairs.Length - 1] = new NameTransformPair { name = "MuzzleMuzzle", transform = val3.transform }; CommandoSpecialSetup(val2); } if (enableMerc.Value) { val = Prefabs.Load<GameObject>("RoR2/Base/Merc/MercBody.prefab"); val2 = val.GetComponent<SkillLocator>(); val.AddComponent<MercHitboxScale>(); Utils.NewStateMachine<Idle>(val.gameObject, "SkillOverride"); Utils.NewStateMachine<Idle>(val.gameObject, "Dash"); NetworkStateMachine component3 = val.GetComponent<NetworkStateMachine>(); component3.stateMachines = val.GetComponents<EntityStateMachine>(); MercPrimarySetup(val2); MercSpecialSetup(val2); } if (enableHuntress.Value) { val = Prefabs.Load<GameObject>("RoR2/Base/Huntress/HuntressBody.prefab"); val2 = val.GetComponent<SkillLocator>(); HuntressSecondarySetup(val2); HuntressSpecialSetup(val2); } if (enableRailgunner.Value) { val = Prefabs.Load<GameObject>("RoR2/DLC1/Railgunner/RailgunnerBody.prefab"); val2 = val.GetComponent<SkillLocator>(); RailgunnerUtilitySetup(val2); RailgunnerSpecialSetup(val2); } if (enableFalseSon.Value) { val = Prefabs.Load<GameObject>("RoR2/DLC2/FalseSon/FalseSonBody.prefab"); val2 = val.GetComponent<SkillLocator>(); Utils.NewStateMachine<Idle>(val.gameObject, "BuffWard"); NetworkStateMachine component4 = val.GetComponent<NetworkStateMachine>(); component4.stateMachines = val.GetComponents<EntityStateMachine>(); FalseSonUtilitySetup(val2); FalseSonSpecialSetup(val2); } RegisterStates(); Hook.Hooks(); } private void CreateConfigs() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Expected O, but got Unknown //IL_0238: Unknown result type (might be due to invalid IL or missing references) //IL_0242: Expected O, but got Unknown //IL_04ab: Unknown result type (might be due to invalid IL or missing references) //IL_04b5: Expected O, but got Unknown //IL_05ad: Unknown result type (might be due to invalid IL or missing references) //IL_05b7: Expected O, but got Unknown //IL_06f1: Unknown result type (might be due to invalid IL or missing references) //IL_06fb: Expected O, but got Unknown //IL_07f7: Unknown result type (might be due to invalid IL or missing references) //IL_0801: Expected O, but got Unknown //IL_08a8: Unknown result type (might be due to invalid IL or missing references) //IL_08b2: Expected O, but got Unknown //IL_093a: Unknown result type (might be due to invalid IL or missing references) //IL_0944: Expected O, but got Unknown //IL_0a48: Unknown result type (might be due to invalid IL or missing references) //IL_0a52: Expected O, but got Unknown //IL_0af9: Unknown result type (might be due to invalid IL or missing references) //IL_0b03: Expected O, but got Unknown //IL_0be8: Unknown result type (might be due to invalid IL or missing references) //IL_0bf2: Expected O, but got Unknown captainCfg = new ConfigFile(Paths.ConfigPath + "\\AerosSkills\\Captain.cfg", true); enableCap = captainCfg.Bind<bool>("General", "Enable Captain Skills", true, (ConfigDescription)null); enableCapPrimary = captainCfg.Bind<bool>("General", "Enable Captain Primary Skill", true, (ConfigDescription)null); enableCapSecondary = captainCfg.Bind<bool>("General", "Enable Captain Secondary Skill", true, (ConfigDescription)null); burstDMG = captainCfg.Bind<float>("VulcanRepeater", "Damage Coefficient", 1.65f, (ConfigDescription)null); radius = captainCfg.Bind<float>("Overclock", "Explosion Radius", 12f, (ConfigDescription)null); regen = captainCfg.Bind<float>("Overclock", "Base Health Regen Add", 5f, (ConfigDescription)null); atkspd = captainCfg.Bind<float>("Overclock", "Base Attack Speed Add", 0.6f, (ConfigDescription)null); movspd = captainCfg.Bind<float>("Overclock", "Base Movement Speed Add", 5f, (ConfigDescription)null); cooldown = captainCfg.Bind<float>("Overclock", "Cooldown Reduction Mult", 0.5f, (ConfigDescription)null); duration = captainCfg.Bind<float>("Overclock", "Buff Duration", 5f, (ConfigDescription)null); CD = captainCfg.Bind<float>("Overclock", "Skill Cooldown", 8f, (ConfigDescription)null); engiCfg = new ConfigFile(Paths.ConfigPath + "\\AerosSkills\\Engineer.cfg", true); enableEngi = engiCfg.Bind<bool>("General", "Enable Engineer Skills", true, (ConfigDescription)null); enableEngiPrimary = engiCfg.Bind<bool>("General", "Enable Engineer Primary Skill", true, (ConfigDescription)null); enableEngiSpecial = engiCfg.Bind<bool>("General", "Enable Engineer Special Skill", true, (ConfigDescription)null); missileDamageCoefficient = engiCfg.Bind<float>("Missiles", "Damage Coefficient", 1.4f, (ConfigDescription)null); missileTracking = engiCfg.Bind<bool>("Seekers", "Enable Tracking", true, (ConfigDescription)null); turretDamageCoefficient = engiCfg.Bind<float>("TR90 Railgun Turret", "Damage Coefficient", 30f, (ConfigDescription)null); loaderCfg = new ConfigFile(Paths.ConfigPath + "\\AerosSkills\\Loader.cfg", true); enableLoader = loaderCfg.Bind<bool>("General", "Enable Loader Skills", true, (ConfigDescription)null); enableLoaderUtility = loaderCfg.Bind<bool>("General", "Enable Loader Utility Skill", true, (ConfigDescription)null); enableLoaderSpecial = loaderCfg.Bind<bool>("General", "Enable Loader Special Skill", true, (ConfigDescription)null); blockDuration = loaderCfg.Bind<float>("Block", "Duration", 10f, (ConfigDescription)null); blockInvincibilityDuration = loaderCfg.Bind<float>("Block", "Invincibility Duration", 0.5f, (ConfigDescription)null); blockSpeedReduction = loaderCfg.Bind<float>("Block", "Speed Reduction", 0.6f, (ConfigDescription)null); blockAmount = loaderCfg.Bind<float>("Block", "Block Coefficient", 0.5f, (ConfigDescription)null); blockAmountOld = loaderCfg.Bind<float>("Block", "Old Block Coefficient", 0.8f, (ConfigDescription)null); blockWaveDamage = loaderCfg.Bind<float>("Block", "Block Wave Damage Coefficient", 4.5f, (ConfigDescription)null); maxPunchCount = loaderCfg.Bind<int>("Charged Barrage", "Max Punch Count", 9, (ConfigDescription)null); punchMinDamageCoefficient = loaderCfg.Bind<float>("Charged Barrage", "Charge Min Damage Coefficient", 1.7f, (ConfigDescription)null); punchMaxDamageCoefficient = loaderCfg.Bind<float>("Charged Barrage", "Charge Max Damage Coefficient", 5f, (ConfigDescription)null); punchDamageCoefficient = loaderCfg.Bind<float>("Charged Barrage", "Damage Coefficient", 3.5f, (ConfigDescription)null); punchChargeTime = loaderCfg.Bind<float>("Charged Barrage", "Charge Time Required Per Punch", 0.15f, (ConfigDescription)null); punchVelocity = loaderCfg.Bind<float>("Charged Barrage", "Added Velocity After Charge", 5f, (ConfigDescription)null); punchSpeed = loaderCfg.Bind<float>("Charged Barrage", "Swing Duration", 0.13f, (ConfigDescription)null); punchComboBackForce = loaderCfg.Bind<float>("Charged Barrage", "Backwards Force", 4400f, (ConfigDescription)null); punchComboUpForce = loaderCfg.Bind<float>("Charged Barrage", "Upwards Force", 2700f, (ConfigDescription)null); punchComboFirstHitDamageCoefficient = loaderCfg.Bind<float>("Charged Barrage", "First Hit Damage Coefficient", 2f, (ConfigDescription)null); enableLoaderOldSkills = loaderCfg.Bind<bool>("General", "Enable Old Skills", false, (ConfigDescription)null); seekerCfg = new ConfigFile(Paths.ConfigPath + "\\AerosSkills\\Seeker.cfg", true); enableSeeker = seekerCfg.Bind<bool>("General", "Enable Seeker Skills", true, (ConfigDescription)null); enableSeekerPassive = seekerCfg.Bind<bool>("General", "Enable Seeker Passive Skill", true, (ConfigDescription)null); enableSeekerSpecial = seekerCfg.Bind<bool>("General", "Enable Seeker Special Skill", true, (ConfigDescription)null); genkidamaBaseDamage = seekerCfg.Bind<float>("Soul Detonation", "Base Damage", 5f, (ConfigDescription)null); genkidamaAddDamage = seekerCfg.Bind<float>("Soul Detonation", "Additional Damage Per Tranquility", 2f, (ConfigDescription)null); passiveBaseDamage = seekerCfg.Bind<float>("Soul Stack", "Base Damage", 0.5f, (ConfigDescription)null); passiveAddDamage = seekerCfg.Bind<float>("Soul Stack", "Additional Damage Per Tranquility", 0.3f, (ConfigDescription)null); passiveMaxStacks = seekerCfg.Bind<int>("Soul Stack", "Max Stacks", 3, (ConfigDescription)null); viendCfg = new ConfigFile(Paths.ConfigPath + "\\AerosSkills\\Viend.cfg", true); enableViend = viendCfg.Bind<bool>("General", "Enable Viend Skills", true, (ConfigDescription)null); enableViendSecondary = viendCfg.Bind<bool>("General", "Enable Viend Secondary Skill", true, (ConfigDescription)null); enableViendUtility = viendCfg.Bind<bool>("General", "Enable Viend Utility Skill", true, (ConfigDescription)null); viendSpeedBuff = viendCfg.Bind<float>("「 Sub?merge?? 】", "Corrupted Speed Mult", 0.4f, (ConfigDescription)null); viendSelfDMG = viendCfg.Bind<float>("「 Sub?merge?? 】", "MaxHP Self Damage Mult", 0.01f, (ConfigDescription)null); beamDuration = viendCfg.Bind<float>("『 P??luck 」", "Max Duration", 3f, (ConfigDescription)null); beamFireFrequency = viendCfg.Bind<float>("『 P??luck 」", "Fire Frequency", 0.25f, (ConfigDescription)null); beamDMG = viendCfg.Bind<float>("『 P??luck 」", "Damage", 0.7f, (ConfigDescription)null); beamForce = viendCfg.Bind<float>("『 P??luck 」", "Pull Force", -1700f, (ConfigDescription)null); beamDMGCorrupted = viendCfg.Bind<float>("『 P??luck 」 Corrupted", "Damage", 4.2f, (ConfigDescription)null); mageCfg = new ConfigFile(Paths.ConfigPath + "\\AerosSkills\\Artificer.cfg", true); enableMage = mageCfg.Bind<bool>("General", "Enable Artificer Skills", true, (ConfigDescription)null); enableMageSecondary = mageCfg.Bind<bool>("General", "Enable Artificer Secondary Skill", true, (ConfigDescription)null); enableMageSpecial = mageCfg.Bind<bool>("General", "Enable Artificer Special Skill", true, (ConfigDescription)null); mageSpecialDamage = mageCfg.Bind<float>("Frigid Outburst", "Damage Coefficient", 8f, (ConfigDescription)null); mageFlameSwordMaxChargeTime = mageCfg.Bind<float>("Conjure Nano-Blade", "Charge Time", 2f, (ConfigDescription)null); mageFlameSwordMinDamage = mageCfg.Bind<float>("Conjure Nano-Blade", "Min Damage Coefficient", 10f, (ConfigDescription)null); mageFlameSwordMaxDamage = mageCfg.Bind<float>("Conjure Nano-Blade", "Max Damage Coefficient", 20f, (ConfigDescription)null); mageFlameSwordBurnDuration = mageCfg.Bind<float>("Conjure Nano-Blade", "Burn Duration", 8f, (ConfigDescription)null); multCfg = new ConfigFile(Paths.ConfigPath + "\\AerosSkills\\MulT.cfg", true); enableMult = multCfg.Bind<bool>("General", "Enable Mul-T Skills", true, (ConfigDescription)null); multSecondaryDamage = multCfg.Bind<float>("Secondary", "Drone Nail Damage", 0.2f, (ConfigDescription)null); multSecondaryDamageIncrease = multCfg.Bind<float>("Secondary", "Drone Target Damage Increase", 1.3f, (ConfigDescription)null); multSecondaryHeal = multCfg.Bind<float>("Secondary", "Heal Percentage Per Sec", 0.05f, (ConfigDescription)null); multUtilitySpeed = multCfg.Bind<float>("Utility", "Speed", 85f, (ConfigDescription)null); commandoCfg = new ConfigFile(Paths.ConfigPath + "\\AerosSkills\\Commando.cfg", true); enableCommando = commandoCfg.Bind<bool>("General", "Enable Commando Skills", true, (ConfigDescription)null); commandoSpecialChargeTime = commandoCfg.Bind<float>("Special", "Max Charge Time", 1.2f, (ConfigDescription)null); commandoSpecialMinDamage = commandoCfg.Bind<float>("Special", "Min Damage", 2.5f, (ConfigDescription)null); commandoSpecialMaxDamage = commandoCfg.Bind<float>("Special", "Max Damage", 12f, (ConfigDescription)null); mercCfg = new ConfigFile(Paths.ConfigPath + "\\AerosSkills\\Mercenary.cfg", true); enableMerc = mercCfg.Bind<bool>("General", "Enable Mercenary Skills", true, (ConfigDescription)null); mercPrimaryBaseDuration = mercCfg.Bind<float>("Primary", "Primary Base Duration", 0.95f, (ConfigDescription)null); mercPrimaryDamage = mercCfg.Bind<float>("Primary", "Damage", 1.1f, (ConfigDescription)null); mercSpecialDashDamage = mercCfg.Bind<float>("Special", "Dash Damage", 2f, (ConfigDescription)null); mercSpecialUppercutDamage = mercCfg.Bind<float>("Special", "Uppercut Damage", 2.8f, (ConfigDescription)null); mercSpecialSlamDamage = mercCfg.Bind<float>("Special", "Slam Damage", 3.2f, (ConfigDescription)null); mercSpecialSlamImpactDamage = mercCfg.Bind<float>("Special", "Slam Impact Damage", 4.2f, (ConfigDescription)null); mercSpecialRecastTime = mercCfg.Bind<float>("Special", "Recast Time", 2f, (ConfigDescription)null); huntressCfg = new ConfigFile(Paths.ConfigPath + "\\AerosSkills\\Huntress.cfg", true); enableHuntress = huntressCfg.Bind<bool>("General", "Enable Huntress Skills", true, (ConfigDescription)null); huntressSecondaryRadius = huntressCfg.Bind<float>("Cyclone Glaive", "Radius", 20f, (ConfigDescription)null); huntressSecondaryDamage = huntressCfg.Bind<float>("Cyclone Glaive", "Damage Coefficient", 3.75f, (ConfigDescription)null); huntressSpecialDamage = huntressCfg.Bind<float>("Warp Shot", "Damage Coefficient", 11f, (ConfigDescription)null); huntressSpecialRange = huntressCfg.Bind<float>("Warp Shot", "Range", 120f, (ConfigDescription)null); railgunnerCfg = new ConfigFile(Paths.ConfigPath + "\\AerosSkills\\Railgunner.cfg", true); enableRailgunner = railgunnerCfg.Bind<bool>("General", "Enable Railgunner Skills", true, (ConfigDescription)null); railgunnerUtilityDamageMult = railgunnerCfg.Bind<float>("Augmentation Screen Device", "Damage Mult", 1.5f, (ConfigDescription)null); railgunnerSpecialDamage = railgunnerCfg.Bind<float>("Electrocharge", "Damage Coefficient", 30f, (ConfigDescription)null); railgunnerSpecialRadius = railgunnerCfg.Bind<float>("Electrocharge", "Impact Radius", 15f, (ConfigDescription)null); railgunnerSpecialLightningRadius = railgunnerCfg.Bind<float>("Electrocharge", "Lightning Radius", 15f, (ConfigDescription)null); railgunnerSpecialLightningDamage = railgunnerCfg.Bind<float>("Electrocharge", "Lightning Damage", 2f, (ConfigDescription)null); railgunnerSpecialLightningFireRate = railgunnerCfg.Bind<float>("Electrocharge", "Lightning Fire Rate", 0.25f, (ConfigDescription)null); falseSonCfg = new ConfigFile(Paths.ConfigPath + "\\AerosSkills\\FalseSon.cfg", true); enableFalseSon = falseSonCfg.Bind<bool>("General", "Enable FalseSon Skills", true, (ConfigDescription)null); falseSonUtilityDuration = falseSonCfg.Bind<float>("Sororal Embrace", "Duration", 1.5f, (ConfigDescription)null); falseSonUtilityBarrier = falseSonCfg.Bind<float>("Sororal Embrace", "Health Percentage Barrier Per Sec", 0.2f, (ConfigDescription)null); falseSonUtilityRadius = falseSonCfg.Bind<float>("Sororal Embrace", "Radius", 8f, (ConfigDescription)null); falseSonSpecialDamage = falseSonCfg.Bind<float>("Crown of the Father", "Damage Per Sec Per Laser", 3.5f, (ConfigDescription)null); falseSonSpecialDuration = falseSonCfg.Bind<float>("Crown of the Father", "Duration", 4f, (ConfigDescription)null); falseSonSpecialFinalDuration = falseSonCfg.Bind<float>("Crown of the Father", "Final Burst Duration", 1.5f, (ConfigDescription)null); falseSonSpecialFireRate = falseSonCfg.Bind<float>("Crown of the Father", "Fire Rate", 0.1f, (ConfigDescription)null); falseSonSpecialMaxDistance = falseSonCfg.Bind<float>("Crown of the Father", "Max Distance", 120f, (ConfigDescription)null); } private void RegisterStates() { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) bool flag = default(bool); ContentAddition.AddEntityState<CaptainPrimary>(ref flag); ContentAddition.AddEntityState<CaptainSecondary>(ref flag); ContentAddition.AddEntityState<EngiPrimaryCharge>(ref flag); ContentAddition.AddEntityState<EngiPrimaryFire>(ref flag); ContentAddition.AddEntityState<EngiSpecial>(ref flag); ContentAddition.AddEntityState<EngiTurretPrimary>(ref flag); ContentAddition.AddEntityState<TurretSpawn>(ref flag); ContentAddition.AddEntityState<ChargePunchesOld>(ref flag); ContentAddition.AddEntityState<PunchesOld>(ref flag); ContentAddition.AddEntityState<BlockOld>(ref flag); ContentAddition.AddEntityState<SlamOld>(ref flag); ContentAddition.AddEntityState<Block>(ref flag); ContentAddition.AddEntityState<Detonate>(ref flag); ContentAddition.AddEntityState<ChargeFist>(ref flag); ContentAddition.AddEntityState<FireFist>(ref flag); ContentAddition.AddEntityState<PunchCombo>(ref flag); ContentAddition.AddEntityState<Genkidama>(ref flag); ContentAddition.AddEntityState<Dimension>(ref flag); ContentAddition.AddEntityState<DimensionCorrupted>(ref flag); ContentAddition.AddEntityState<Beam>(ref flag); ContentAddition.AddEntityState<BeamCorrupted>(ref flag); ContentAddition.AddEntityState<MageSpecial>(ref flag); ContentAddition.AddEntityState<FireSword>(ref flag); ContentAddition.AddEntityState<FireSwordCharge>(ref flag); ContentAddition.AddEntityState<MultSecondary>(ref flag); ContentAddition.AddEntityState<MultDronePrimary>(ref flag); ContentAddition.AddEntityState<MultUtility>(ref flag); ContentAddition.AddEntityState<CommandoSpecial>(ref flag); ContentAddition.AddEntityState<MercPrimary>(ref flag); ContentAddition.AddEntityState<MercSpecial>(ref flag); ContentAddition.AddEntityState<MercSpecialFollowUp>(ref flag); ContentAddition.AddEntityState<MercSpecialSlam>(ref flag); ContentAddition.AddEntityState<SkillOverride>(ref flag); ContentAddition.AddEntityState<HuntressSecondary>(ref flag); ContentAddition.AddEntityState<HuntressSpecial>(ref flag); ContentAddition.AddEntityState<HuntressSpecialAim>(ref flag); ContentAddition.AddEntityState<HuntressSpecialFire>(ref flag); ContentAddition.AddEntityState<RailgunnerUtility>(ref flag); ContentAddition.AddEntityState<RailgunnerSpecial>(ref flag); ContentAddition.AddEntityState<RailgunnerChargingSpecial>(ref flag); ContentAddition.AddEntityState<RailgunnerChargedSpecial>(ref flag); ContentAddition.AddEntityState<RailgunnerExpiredSpecial>(ref flag); ContentAddition.AddEntityState<RailgunnerOnlineSpecial>(ref flag); ContentAddition.AddEntityState<RailgunnerSpecialFire>(ref flag); ContentAddition.AddEntityState<FalseSonUtility>(ref flag); ContentAddition.AddEntityState<FalseSonSpecial>(ref flag); ContentAddition.AddEntityState<FalseSonSpecialFire>(ref flag); ContentAddition.AddEntityState<FalseSonSpecialEnd>(ref flag); } internal static void FalseSonUtilitySetup(SkillLocator skillLocator) { string text = "FALSESON_UTIL"; LanguageAPI.Add("AEROS_" + text, "Sororal Embrace"); LanguageAPI.Add("AEROS_" + text + "_DESCRIPTION", "Release a cleansing aura around you for <style=cIsUtility>1s</style>, granting all nearby allies <style=cIsHealing>" + falseSonUtilityBarrier.Value * 100f + "% barrier</style> and <style=cIsUtility>cleanses</style> all negative effects. Triple your passive's benefits for <style=cIsUtility>4s</style>."); SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(FalseSonUtility), "BuffWard", 1, 8f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: false, (InterruptPriority)1, isCombatSkill: false, mustKeyPress: true, cancelSprintingOnActivation: false, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("falseSonUtility"), "AEROS_" + text + "_DESCRIPTION", "AEROS_" + text, Array.Empty<string>()); Utils.AddAlt(skillLocator.utility._skillFamily, skillDef); } internal static void FalseSonSpecialSetup(SkillLocator skillLocator) { string text = "FALSESON_SPEC"; LanguageAPI.Add("AEROS_" + text, "Crown of the Father"); LanguageAPI.Add("AEROS_" + text + "_DESCRIPTION", "Charge up 6 piercing lasers firing at random directions, dealing <style=cIsDamage>6x" + falseSonSpecialDamage.Value * 100f + "% damage</style> per second. Near the end of its duration, they center in the aim direction for a brief duration, and end with a final burst of <style=cIsDamage>6x" + falseSonSpecialDamage.Value * 100f + "% damage</style>."); SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(FalseSonSpecial), "Weapon", 1, 15f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: false, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("falseSOnSpecial"), "AEROS_" + text + "_DESCRIPTION", "AEROS_" + text, Array.Empty<string>()); Utils.AddAlt(skillLocator.special._skillFamily, skillDef); } internal static void RailgunnerUtilitySetup(SkillLocator skillLocator) { string text = "RAILGUNNER_UTIL"; LanguageAPI.Add("AEROS_" + text, "Augmentation Screen Device"); LanguageAPI.Add("AEROS_" + text + "_DESCRIPTION", "Throw out a device that projects a hologram. Any projectiles that go through it, have their damage multiplied by <style=cIsDamage>" + railgunnerUtilityDamageMult.Value * 100f + "%</style>."); SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(RailgunnerUtility), "Weapon", 1, 15f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: false, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: false, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("railgunnerUtility"), "AEROS_" + text + "_DESCRIPTION", "AEROS_" + text, Array.Empty<string>()); Utils.AddAlt(skillLocator.utility._skillFamily, skillDef); } internal static void RailgunnerSpecialSetup(SkillLocator skillLocator) { string text = "RAILGUNNER_SPEC"; LanguageAPI.Add("AEROS_" + text, "Electrocharge"); LanguageAPI.Add("AEROS_" + text + "_DESCRIPTION", "During charge, zap nearby enemies for <style=cIsDamage>" + railgunnerSpecialLightningDamage.Value * 100f + "% damage</style>. Fire a <style=cIsDamage>detonating</style> round for <style=cIsDamage>" + railgunnerSpecialDamage.Value * 100f + "% damage</style>. Afterwards, <style=cIsHealth>all your weapons are disabled</style> for <style=cIsHealth>5</style> seconds."); railgunnerSpecial = Utils.NewSkillDef<SkillDef>(typeof(RailgunnerSpecial), "Weapon", 1, 15f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: false, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("railgunnerSpecial"), "AEROS_" + text + "_DESCRIPTION", "AEROS_" + text, Array.Empty<string>()); Utils.AddAlt(skillLocator.special._skillFamily, railgunnerSpecial); text = "RAILGUNNER_SPEC_PRIMARY"; LanguageAPI.Add("AEROS_" + text, "Electrocharged Railgun"); LanguageAPI.Add("AEROS_" + text + "_DESCRIPTION", "Launch a super-energized projectile for <style=cIsDamage>" + railgunnerSpecialDamage.Value * 100f + "% damage</style>."); railgunnerPrimaryOverride = Utils.NewSkillDef<SkillDef>(typeof(RailgunnerSpecialFire), "Weapon", 1, 0f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 0, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("railgunnerSpecialFire"), "AEROS_" + text + "_DESCRIPTION", "AEROS_" + text, Array.Empty<string>()); } internal static void HuntressSecondarySetup(SkillLocator skillLocator) { string text = "HUNTRESS_M2"; LanguageAPI.Add("AEROS_" + text, "Cyclone Glaive"); LanguageAPI.Add("AEROS_" + text + "_DESCRIPTION", "Throw a glaive that <style=cIsUtility>draws enemies to its center</style>, dealing <style=cIsDamage>" + huntressSecondaryDamage.Value * 100f + "% damage</style> per second. It detonates at the end of its duration, dealing <style=cIsDamage>" + huntressSecondaryDamage.Value * 100f + "% damage</style>."); SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(HuntressSecondary), "Weapon", 1, 7f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: false, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: false, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("huntressSecondary"), "AEROS_" + text + "_DESCRIPTION", "AEROS_" + text, Array.Empty<string>()); Utils.AddAlt(skillLocator.secondary._skillFamily, skillDef); } internal static void HuntressSpecialSetup(SkillLocator skillLocator) { string text = "HUNTRESS_SPEC"; LanguageAPI.Add("AEROS_" + text, "Warp Shot"); LanguageAPI.Add("AEROS_" + text + "_DESCRIPTION", "Teleport backwards into the sky. Target an area to fire an energy bolt, <style=cIsUtility>teleporting</style> to it's impact location, and <style=cIsDamage>detonating</style> in a large area for <style=cIsDamage>" + huntressSpecialDamage.Value * 100f + "% damage</style>."); SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(HuntressSpecial), "Body", 1, 12f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: false, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: false, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("huntressSpecial"), "AEROS_" + text + "_DESCRIPTION", "AEROS_" + text, Array.Empty<string>()); Utils.AddAlt(skillLocator.special._skillFamily, skillDef); text = "HUNTRESS_SPEC"; LanguageAPI.Add("AEROS_" + text, "Warp Shot"); LanguageAPI.Add("AEROS_" + text + "_DESCRIPTION", "Target an area to fire an energy bolt, <style=cIsUtility>teleporting</style> to it's impact location, and <style=cIsDamage>detonating</style> in a large area for <style=cIsDamage>" + huntressSpecialDamage.Value * 100f + "% damage</style>."); huntressPrimaryOverride = Utils.NewSkillDef<SkillDef>(typeof(HuntressSpecialFire), "Weapon", 1, 0f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 0, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("huntressSpecialFire"), "AEROS_" + text + "_DESCRIPTION", "AEROS_" + text, Array.Empty<string>()); } private void MercPrimarySetup(SkillLocator skillLocator) { LanguageAPI.Add("AEROS_MERC_M1", "Beam Sword"); LanguageAPI.Add("AEROS_MERC_M1_DESCRIPTION", "<style=cIsUtility>Agile</style>. Slice in front for <style=cIsDamage>3x" + mercPrimaryDamage.Value * 100f + "% damage</style>."); SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(MercPrimary), "Weapon", 0, 0f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)0, isCombatSkill: true, mustKeyPress: false, cancelSprintingOnActivation: false, 0, 0, 0, Assets.MainAssetBundle.LoadAsset<Sprite>("mercPrimary"), "AEROS_MERC_M1_DESCRIPTION", "AEROS_MERC_M1", Array.Empty<string>()); Utils.AddAlt(skillLocator.primary._skillFamily, skillDef); } private void MercSpecialSetup(SkillLocator skillLocator) { LanguageAPI.Add("AEROS_MERC_SPEC", "Rend"); LanguageAPI.Add("AEROS_MERC_SPEC_DESCRIPTION", "Dash forward, dealing <style=cIsDamage>" + mercSpecialDashDamage.Value * 100f + "% damage</style>. If you hit an enemy, you can plunge for <style=cIsDamage>" + mercSpecialSlamDamage.Value * 100f + "% damage</style>, and slam the ground on impact for an additional <style=cIsDamage>" + mercSpecialSlamImpactDamage.Value * 100f + "% damage</style>."); SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(MercSpecial), "Dash", 1, 8f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: false, (InterruptPriority)0, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: false, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("mercSpecial"), "AEROS_MERC_SPEC_DESCRIPTION", "AEROS_MERC_SPEC", Array.Empty<string>()); Utils.AddAlt(skillLocator.special._skillFamily, skillDef); mercSpecial = Utils.NewSkillDef<SkillDef>(typeof(MercSpecialSlam), "Weapon", 1, 8f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: false, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("mercSpecial2"), "AEROS_MERC_SPEC_DESCRIPTION", "AEROS_MERC_SPEC", Array.Empty<string>()); } private void CommandoSpecialSetup(SkillLocator skillLocator) { LanguageAPI.Add("AEROS_COMMANDO_SPEC", "Sharpshooter"); LanguageAPI.Add("AEROS_COMMANDO_SPEC_DESCRIPTION", "Charge up to shoot two piercing bullets for <style=cIsDamage>2x" + commandoSpecialMinDamage.Value * 100f + "%-" + commandoSpecialMaxDamage.Value * 100f + "% damage</style>. Firing at max charge causes the bullets to ricochet towards the nearby enemies."); SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(CommandoSpecial), "Weapon", 1, 8f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("commandoSpecial"), "AEROS_COMMANDO_SPEC_DESCRIPTION", "AEROS_COMMANDO_SPEC", Array.Empty<string>()); Utils.AddAlt(skillLocator.special._skillFamily, skillDef); } private void MultSecondarySetup(SkillLocator skillLocator) { LanguageAPI.Add("AEROS_MULT_SEC", "Repair Drone"); LanguageAPI.Add("AEROS_MULT_SEC_DESCRIPTION", "Gain a <style=cIsDamage>unique</style> drone. Activate to select a target, enemy targets will take an increased <style=cIsDamage>" + (multSecondaryDamageIncrease.Value - 1f) * 100f + "% damage</style>. If the selected target is an ally drone, it will <style=cIsHealth>heal " + multSecondaryHeal.Value * 100f + "% health</style> per second and gain <style=cIsDamage>30% damage</style> and <style=cIsDamage>attack speed</style>. Activate again to disengage."); SkillDef skillDef = Utils.NewSkillDef<HuntressTrackingSkillDef>(typeof(MultSecondary), "Drone", 1, 1f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: false, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("multSecondary"), "AEROS_MULT_SEC_DESCRIPTION", "AEROS_MULT_SEC", Array.Empty<string>()); Utils.AddAlt(skillLocator.secondary._skillFamily, skillDef); } private void MultUtilitySetup(SkillLocator skillLocator) { LanguageAPI.Add("AEROS_MULT_UTIL", "Transport Mode: Burst"); LanguageAPI.Add("AEROS_MULT_UTIL_DESCRIPTION", "Slide forward for a short distance, gaining <style=cIsUtility>200 armor</style>."); SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(MultUtility), "Dash", 4, 4f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: false, 1, 1, 1, Prefabs.Load<SkillDef>("RoR2/Base/Commando/CommandoBodyRoll.asset").icon, "AEROS_MULT_UTIL_DESCRIPTION", "AEROS_MULT_UTIL", Array.Empty<string>()); Utils.AddAlt(skillLocator.utility._skillFamily, skillDef); } private void MageSecondarySetup(SkillLocator skillLocator) { LanguageAPI.Add("AEROS_MAGE_SEC", "Conjure Nano-Blade"); LanguageAPI.Add("AEROS_MAGE_SEC_DESCRIPTION", "<style=cIsDamage>Ignite</style>. Charge up a flaming sword that deals <style=cIsDamage>" + mageFlameSwordMinDamage.Value * 100f + "%-" + mageFlameSwordMaxDamage.Value * 100f + "% damage</style>. At max charge, fire a <style=cIsDamage>piercing</style> projectile instead."); SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(FireSwordCharge), "Weapon", 1, 5f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("mageSecondary"), "AEROS_MAGE_SEC_DESCRIPTION", "AEROS_MAGE_SEC", Array.Empty<string>()); Utils.AddAlt(skillLocator.secondary._skillFamily, skillDef); } private void MageSpecialSetup(SkillLocator skillLocator) { LanguageAPI.Add("AEROS_MAGE_SPEC", "Frigid Outburst"); LanguageAPI.Add("AEROS_MAGE_SPEC_DESCRIPTION", "<style=cIsUtility>Freezing</style>. Launches you in the direction you are moving, dealing <style=cIsDamage>" + mageSpecialDamage.Value * 100f + "% damage</style> to nearby enemies."); SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(MageSpecial), "Body", 1, 12f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("mageSpecial"), "AEROS_MAGE_SPEC_DESCRIPTION", "AEROS_MAGE_SPEC", Array.Empty<string>()); Utils.AddAlt(skillLocator.special._skillFamily, skillDef); } private void LoaderUtilitySetup(SkillLocator skillLocator) { LanguageAPI.Add("AEROS_LOADER_UTIL", "Charged Barrage"); LanguageAPI.Add("AEROS_LOADER_UTIL_DESCRIPTION", "Charge up to dash forward, dealing <style=cIsDamage>" + punchMinDamageCoefficient.Value * 100f + "%-" + punchMaxDamageCoefficient.Value * 100f + "% damage</style> and perform a series of punches on hit for <style=cIsDamage>5x" + punchDamageCoefficient.Value * 100f + "% damage</style>."); SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(ChargeFist), "Weapon", 1, 8f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("loaderutility"), "AEROS_LOADER_UTIL_DESCRIPTION", "AEROS_LOADER_UTIL", Array.Empty<string>()); Utils.AddAlt(skillLocator.utility._skillFamily, skillDef); } private void LoaderSpecialSetup(SkillLocator skillLocator) { LanguageAPI.Add("AEROS_LOADER_SPEC", "Block"); LanguageAPI.Add("AEROS_LOADER_SPEC_DESCRIPTION", "Enter a block stance for up to <style=cIsDamage>" + blockDuration.Value + "s</style>, blocking <style=cIsDamage>" + blockAmount.Value * 100f + "% damage</style> of all incoming damage. Release a lightning explosion around you for <style=cIsDamage>" + blockWaveDamage.Value * 100f + "% damage</style>, increasing in damage and size based on the amount of barrier you currently have. Grants <style=cIsDamage>invincibility</style> for <style=cIsUtility>0.5s</style> after releasing."); SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(Block), "Weapon", 1, 8f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("loaderspecial"), "AEROS_LOADER_SPEC_DESCRIPTION", "AEROS_LOADER_SPEC", Array.Empty<string>()); Utils.AddAlt(skillLocator.special._skillFamily, skillDef); } private void LoaderUtilitySetupOld(SkillLocator skillLocator) { LanguageAPI.Add("AEROS_LOADER_UTIL", "Charged Barrage"); LanguageAPI.Add("AEROS_LOADER_UTIL_DESCRIPTION", "Charge up to perform a series of punches for <style=cIsDamage>" + punchDamageCoefficient.Value * 100f + "% damage</style> each, increasing in count with charge time."); SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(ChargePunchesOld), "Weapon", 1, 8f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("loaderutility"), "AEROS_LOADER_UTIL_DESCRIPTION", "AEROS_LOADER_UTIL", Array.Empty<string>()); Utils.AddAlt(skillLocator.utility._skillFamily, skillDef); } private void LoaderSpecialSetupOld(SkillLocator skillLocator) { LanguageAPI.Add("AEROS_LOADER_SPEC", "Block"); LanguageAPI.Add("AEROS_LOADER_SPEC_DESCRIPTION", "Enter a block stance for up to <style=cIsDamage>" + blockDuration.Value + "s</style>, blocking <style=cIsDamage>" + blockAmountOld.Value * 100f + "% damage</style> of all incoming damage and turning it into <style=cIsHealing>barrier</style>. Finishes by consuming all barrier and releasing a lightning wave for <style=cIsDamage>" + blockWaveDamage.Value * 100f + "% damage</style>, increasing in damage and size based on the amount of barrier consumed."); SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(BlockOld), "Weapon", 1, 8f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("loaderspecial"), "AEROS_LOADER_SPEC_DESCRIPTION", "AEROS_LOADER_SPEC", Array.Empty<string>()); Utils.AddAlt(skillLocator.special._skillFamily, skillDef); } private void ViendSecondarySetup(SkillLocator skillLocator) { LanguageAPI.Add("AEROS_VIEND_SECONDARY", "『 P??luck 」"); LanguageAPI.Add("AEROS_VIEND_SECONDARY_DESCRIPTION", "Fire a long-range beam for <style=cIsDamage>" + beamDMG.Value * 100f * (1f / beamFireFrequency.Value) + "% damage</style> per second, <style=cIsUtility>pulling</style> enemies hit."); SkillDef skillDef = Utils.NewSkillDef<SkillDef>(typeof(Beam), "Weapon", 1, 5f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: true, 1, 1, 1, Prefabs.viendSecondary, "AEROS_VIEND_SECONDARY_DESCRIPTION", "AEROS_VIEND_SECONDARY", Array.Empty<string>()); Utils.AddAlt(skillLocator.secondary._skillFamily, skillDef); viendSecondary = skillDef; LanguageAPI.Add("AEROS_VIEND_SECONDARY_CORRUPT", "『 P??luck 」 Corrupted"); LanguageAPI.Add("AEROS_VIEND_SECONDARY_DESCRIPTION_CORRUPT", "Fire an instant long-range beam for <style=cIsDamage>" + beamDMGCorrupted.Value * 100f + "% damage</style>. Enemies hit are <style=cIsDamage>nullified</style> and <style=cIsUtility>teleported</style> to you."); skillDef = Utils.NewSkillDef<SkillDef>(typeof(BeamCorrupted), "Weapon", 1, 5f, beginSkillCooldownOnSkillEnd: true, canceledFromSprintin