Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Pathfinder v0.5.3
plugins/Pathfinder.dll
Decompiled 2 years ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using EntityStates; using EntityStates.Commando; using EntityStates.Commando.CommandoWeapon; using EntityStates.Croco; using EntityStates.Drone.DroneWeapon; using EntityStates.Engi.EngiMissilePainter; using EntityStates.Engi.EngiWeapon; using EntityStates.Loader; using EntityStates.Merc; using HG; using HG.BlendableTypes; using HarmonyLib; using JetBrains.Annotations; using KinematicCharacterController; using On.RoR2; using Pathfinder; using Pathfinder.Components; using Pathfinder.Modules; using Pathfinder.Modules.Characters; using Pathfinder.Modules.CustomSkillDefs; using Pathfinder.Modules.NPC; using Pathfinder.Modules.Survivors; using R2API; using R2API.Utils; using RoR2; using RoR2.Achievements; using RoR2.CharacterAI; using RoR2.ContentManagement; using RoR2.HudOverlay; using RoR2.Orbs; using RoR2.Projectile; using RoR2.Skills; using RoR2.UI; using Skillstates.Pathfinder; using Skillstates.Pathfinder.Command; using Skillstates.Squall; using TMPro; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; using UnityEngine.Rendering; using UnityEngine.UI; [assembly: AssemblyTitle("Pathfinder")] [assembly: AssemblyProduct("Pathfinder")] [assembly: AssemblyInformationalVersion("1.0.0+c3fa3f4ac8ac1d1c3ecf08bf4bc46abc2dd94ef7")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyCompany("Pathfinder")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: CompilationRelaxations(8)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: UnverifiableCode] namespace Skillstates.Pathfinder { internal class AimBolas : AimThrowableBase { public static float loopDuration = 0.4f; public static float throwForce = 60f; private GameObject bolas; private string javReady = ""; private OverrideController controller; private ChildLocator childLocator; public override void OnEnter() { controller = ((EntityState)this).GetComponent<OverrideController>(); if (controller.javelinReady) { javReady = "Jav"; } bolas = ((Component)((BaseState)this).FindModelChild("Bolas")).gameObject; bolas.SetActive(true); ((EntityState)this).PlayAnimation("Gesture, Override", javReady + "BolasLoop", "Hand.playbackRate", loopDuration, 0f); base.projectilePrefab = Projectiles.shockBolas; base.arcVisualizerPrefab = PathfinderAssets.lineVisualizer; base.endpointVisualizerPrefab = PathfinderAssets.explosionVisualizer; base.endpointVisualizerRadiusScale = 18f; base.detonationRadius = 18f; base.damageCoefficient = 0f; base.setFuse = false; base.projectileBaseSpeed = 200f; base.maxDistance = float.PositiveInfinity; ((AimThrowableBase)this).OnEnter(); base.minimumDuration = 0.1f; } public override void FixedUpdate() { ((BaseState)this).StartAimMode(0.1f, false); ((AimThrowableBase)this).FixedUpdate(); } public override void OnExit() { ((EntityState)this).PlayAnimation("Gesture, Override", javReady + "BolasThrow", "Hand.playbackRate", loopDuration, 0f); bolas.SetActive(false); ((AimThrowableBase)this).OnExit(); } } internal class Evade : BaseState { public static float baseDuration = 0.2f; public static float speedCoefficient = 12f; public static float flatBonus = 65f; private float bonusFromMovespeed; private float totalDashBonus; public static SkillDef javelinSkill; private OverrideController controller; private GameObject dustPrefab; private Vector3 dashVector; public override void OnEnter() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0058: 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_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: 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_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Expected O, but got Unknown ((BaseState)this).OnEnter(); controller = ((EntityState)this).GetComponent<OverrideController>(); Vector3 val = ((((EntityState)this).inputBank.moveVector == Vector3.zero) ? ((EntityState)this).characterDirection.forward : ((EntityState)this).inputBank.moveVector); dashVector = ((Vector3)(ref val)).normalized; ((EntityState)this).characterDirection.forward = dashVector; CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.velocity *= 0.1f; Util.PlaySound(SlideState.soundString, ((EntityState)this).gameObject); dustPrefab = Object.Instantiate<GameObject>(SlideState.slideEffectPrefab, ((BaseState)this).FindModelChild("Pathfinder")); EffectData val2 = new EffectData { origin = ((EntityState)this).characterBody.corePosition, rotation = Util.QuaternionSafeLookRotation(dashVector) }; EffectManager.SpawnEffect(PathfinderAssets.dashEffect, val2, false); if (!controller.javelinReady) { ((EntityState)this).PlayAnimation("FullBody, Override", "GroundDashF", "Dash.playbackRate", baseDuration, 0f); controller.ReadyJavelin(); } else { ((EntityState)this).PlayAnimation("FullBody, Override", "JavGroundDash", "Dash.playbackRate", baseDuration, 0f); } if (base.moveSpeedStat <= 0f) { totalDashBonus = 0f; return; } if (base.moveSpeedStat <= ((EntityState)this).characterBody.baseMoveSpeed) { totalDashBonus = flatBonus * (base.moveSpeedStat / ((EntityState)this).characterBody.baseMoveSpeed); return; } float num = base.moveSpeedStat - ((EntityState)this).characterBody.baseMoveSpeed; bonusFromMovespeed = num * ((EntityState)this).characterBody.baseMoveSpeed / base.moveSpeedStat; totalDashBonus = speedCoefficient * bonusFromMovespeed + flatBonus; } public override void FixedUpdate() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority) { ((EntityState)this).characterDirection.forward = dashVector; CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.rootMotion += dashVector * totalDashBonus * Time.fixedDeltaTime; ((EntityState)this).characterMotor.velocity.y = 0f; } if (((EntityState)this).fixedAge >= baseDuration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { if (Object.op_Implicit((Object)(object)dustPrefab)) { Object.Destroy((Object)(object)dustPrefab); } ((EntityState)this).PlayCrossfade("FullBody, Override", "BufferEmpty", 0.2f); ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)3; } } internal class JavelinToss : BaseState { private Animator animator; private ChildLocator childLocator; private GameObject shaft; private GameObject spearhead; private GameObject shaftBone; private Ray aimRay; private OverrideController controller; private float fireTime; private float throwForce = 150f; private bool hasFired = false; public static float baseDuration = 0.8f; public float duration; public override void OnEnter() { //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); duration = baseDuration / base.attackSpeedStat; fireTime = duration * 0.15f; ((BaseState)this).StartAimMode(baseDuration + 0.1f, true); controller = ((EntityState)this).GetComponent<OverrideController>(); animator = ((EntityState)this).GetModelAnimator(); aimRay = ((BaseState)this).GetAimRay(); childLocator = ((EntityState)this).GetModelChildLocator(); shaft = ((Component)childLocator.FindChild("Shaft")).gameObject; shaftBone = ((Component)childLocator.FindChild("ShaftBone")).gameObject; spearhead = ((Component)childLocator.FindChild("Spearhead")).gameObject; if (Object.op_Implicit((Object)(object)animator)) { if (!animator.GetBool("isMoving") && animator.GetBool("isGrounded")) { ((EntityState)this).PlayAnimation("FullBody, Override", "JavelinToss", "Hand.playbackRate", duration, 0f); } else { ((EntityState)this).PlayAnimation("Gesture, Override", "JavelinToss", "Hand.playbackRate", duration, 0f); } } controller.UnreadyJavelin(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= fireTime && !hasFired) { shaft.SetActive(false); shaftBone.SetActive(false); spearhead.SetActive(false); if (((EntityState)this).isAuthority) { FireJavelin(); } } if (((EntityState)this).fixedAge >= duration) { ((EntityState)this).outer.SetNextStateToMain(); } } private void FireJavelin() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) hasFired = true; Util.PlaySound(FireMines.throwMineSoundString, ((EntityState)this).gameObject); FireProjectileInfo val = default(FireProjectileInfo); val.crit = ((BaseState)this).RollCrit(); val.damage = Config.JavelinDamage.Value * base.damageStat; val.force = throwForce; val.owner = ((EntityState)this).gameObject; val.position = ((Ray)(ref aimRay)).origin; val.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction); val.projectilePrefab = Projectiles.explodingJavelin; ProjectileManager.instance.FireProjectile(val); } public override void OnExit() { shaft.SetActive(true); shaftBone.SetActive(true); spearhead.SetActive(true); ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } internal class RendingTalons : BaseState { private Animator animator; private Vector3 flipVector; private OverrideController controller; private GameObject spearTrail; private OverlapAttack airSpinAttack; private OverlapAttack groundSpinAttack; public static float flipBaseDuration = 0.3f; public static float spinBaseDuration = 0.7f; public static float forwardVelocity = 1.2f; public static float upwardVelocity = 25f; private float previousAirControl; private bool isCrit; private bool airFlipFinished; private float flipStopwatch; private float flipDuration; private float spinStopwatch; private float spinDuration; private float spinFinishTime; private string javString = ""; public override void OnEnter() { //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) //IL_0201: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Expected O, but got Unknown //IL_0234: Unknown result type (might be due to invalid IL or missing references) //IL_0239: Unknown result type (might be due to invalid IL or missing references) //IL_0255: Unknown result type (might be due to invalid IL or missing references) //IL_025a: Unknown result type (might be due to invalid IL or missing references) //IL_0276: Unknown result type (might be due to invalid IL or missing references) //IL_027b: 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_02ce: Expected O, but got Unknown //IL_02f8: Unknown result type (might be due to invalid IL or missing references) //IL_02fd: Unknown result type (might be due to invalid IL or missing references) //IL_0319: Unknown result type (might be due to invalid IL or missing references) //IL_031e: Unknown result type (might be due to invalid IL or missing references) //IL_033a: Unknown result type (might be due to invalid IL or missing references) //IL_033f: Unknown result type (might be due to invalid IL or missing references) //IL_0349: Unknown result type (might be due to invalid IL or missing references) //IL_034e: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); animator = ((EntityState)this).GetModelAnimator(); flipDuration = flipBaseDuration / base.attackSpeedStat; controller = ((EntityState)this).GetComponent<OverrideController>(); spinDuration = spinBaseDuration / base.attackSpeedStat; spinFinishTime = spinDuration * 0.325f; previousAirControl = ((EntityState)this).characterMotor.airControl; ((EntityState)this).characterMotor.airControl = 1f; spearTrail = ((Component)((BaseState)this).FindModelChild("SpearTrail")).gameObject; spearTrail.SetActive(true); animator.SetLayerWeight(animator.GetLayerIndex("AimYaw"), 0f); animator.SetLayerWeight(animator.GetLayerIndex("AimPitch"), 0f); ((EntityState)this).PlayAnimation("FullBody, Override", "AirFlip2", "Flip.playbackRate", flipDuration, 0f); CharacterBody characterBody = ((EntityState)this).characterBody; characterBody.bodyFlags = (BodyFlags)(characterBody.bodyFlags | 1); ((EntityState)this).characterBody.AddBuff(Buffs.rendingTalonMS); flipVector = ((EntityState)this).inputBank.moveVector; ((BaseState)this).StartAimMode(0.1f, true); ((EntityState)this).characterMotor.velocity.y = 0f; ((BaseCharacterController)((EntityState)this).characterMotor).Motor.ForceUnground(0.1f); ((EntityState)this).characterMotor.velocity.y += upwardVelocity; CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.velocity += flipVector * base.moveSpeedStat * forwardVelocity; Transform modelTransform = ((EntityState)this).GetModelTransform(); HitBoxGroup hitBoxGroup = null; if (Object.op_Implicit((Object)(object)modelTransform)) { hitBoxGroup = Array.Find(((Component)modelTransform).GetComponents<HitBoxGroup>(), (HitBoxGroup element) => element.groupName == "Spear"); } isCrit = ((BaseState)this).RollCrit(); airSpinAttack = new OverlapAttack(); airSpinAttack.attacker = ((EntityState)this).gameObject; airSpinAttack.inflictor = ((EntityState)this).gameObject; airSpinAttack.damageType = DamageTypeCombo.op_Implicit((DamageType)0); airSpinAttack.procCoefficient = 1f; airSpinAttack.teamIndex = ((BaseState)this).GetTeam(); airSpinAttack.isCrit = isCrit; airSpinAttack.forceVector = Vector3.zero; airSpinAttack.pushAwayForce = 1f; airSpinAttack.damage = 3.5f * base.damageStat; airSpinAttack.hitBoxGroup = hitBoxGroup; airSpinAttack.hitEffectPrefab = GroundLight.comboHitEffectPrefab; groundSpinAttack = new OverlapAttack(); groundSpinAttack.attacker = ((EntityState)this).gameObject; groundSpinAttack.inflictor = ((EntityState)this).gameObject; groundSpinAttack.damageType = DamageTypeCombo.op_Implicit((DamageType)32); groundSpinAttack.procCoefficient = 1f; groundSpinAttack.teamIndex = ((BaseState)this).GetTeam(); groundSpinAttack.isCrit = isCrit; groundSpinAttack.forceVector = -Vector3.up * 6000f; groundSpinAttack.pushAwayForce = 500f; groundSpinAttack.damage = 8f * base.damageStat; groundSpinAttack.hitBoxGroup = hitBoxGroup; groundSpinAttack.hitEffectPrefab = GroundLight.finisherHitEffectPrefab; } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); ((BaseState)this).StartAimMode(0.1f, false); if (airFlipFinished) { spinStopwatch += Time.fixedDeltaTime; } if (spinStopwatch >= spinDuration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } if (!((EntityState)this).characterMotor.isGrounded && !airFlipFinished && ((EntityState)this).isAuthority) { flipStopwatch += Time.fixedDeltaTime; if (flipStopwatch >= flipDuration) { flipStopwatch = 0f; airSpinAttack.ResetIgnoredHealthComponents(); } airSpinAttack.Fire((List<HurtBox>)null); } if (((EntityState)this).characterMotor.isGrounded && !airFlipFinished && ((EntityState)this).fixedAge >= BaseLeap.minimumDuration) { StartGroundSpin(); } if (airFlipFinished && spinStopwatch <= spinFinishTime && ((EntityState)this).isAuthority) { groundSpinAttack.Fire((List<HurtBox>)null); } else if (spinStopwatch > spinFinishTime) { spearTrail.SetActive(false); } } public void StartGroundSpin() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) airFlipFinished = true; ((EntityState)this).characterMotor.velocity = Vector3.zero; if (controller.javelinReady) { javString = "Jav"; } ((EntityState)this).PlayAnimation("FullBody, Override", javString + "SpinSweep", "Flip.playbackRate", spinDuration, 0f); Util.PlayAttackSpeedSound(GroundLight.finisherAttackSoundString, ((EntityState)this).gameObject, GroundLight.slashPitch); } public override void OnExit() { //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) animator.SetLayerWeight(animator.GetLayerIndex("AimYaw"), 1f); animator.SetLayerWeight(animator.GetLayerIndex("AimPitch"), 1f); spearTrail.SetActive(false); ((EntityState)this).characterBody.RemoveBuff(Buffs.rendingTalonMS); ((EntityState)this).characterMotor.airControl = previousAirControl; ((EntityState)this).PlayCrossfade("FullBody, Override", "BufferEmpty", 0.1f); CharacterBody characterBody = ((EntityState)this).characterBody; characterBody.bodyFlags = (BodyFlags)(characterBody.bodyFlags & -2); ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } } internal class StrongThrust : BaseState { private Animator animator; private OverlapAttack attack; private OverrideController overrideController; public static float baseDuration = 0.8f; public static float smallHopVelocity = 5.5f; private float duration; private float earlyExitTime; private float fireTime; public bool isCancelling; private bool hasHopped; private bool hasFired; public override void OnEnter() { //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Expected O, but got Unknown //IL_0106: 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_0127: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); duration = baseDuration / base.attackSpeedStat; fireTime = duration * 0.3f; animator = ((EntityState)this).GetModelAnimator(); animator.SetLayerWeight(animator.GetLayerIndex("AimPitch"), 0f); ((EntityState)this).PlayAnimation("Gesture, Override", "Thrust", "Thrust.playbackRate", duration, 0f); overrideController = ((EntityState)this).GetComponent<OverrideController>(); overrideController.UnreadyHeartseeker(); Transform modelTransform = ((EntityState)this).GetModelTransform(); HitBoxGroup hitBoxGroup = null; if (Object.op_Implicit((Object)(object)modelTransform)) { hitBoxGroup = Array.Find(((Component)modelTransform).GetComponents<HitBoxGroup>(), (HitBoxGroup element) => element.groupName == "Spear"); } attack = new OverlapAttack(); attack.attacker = ((EntityState)this).gameObject; attack.inflictor = ((EntityState)this).gameObject; attack.damageType = DamageTypeCombo.op_Implicit((DamageType)0); attack.procCoefficient = 1f; attack.teamIndex = ((BaseState)this).GetTeam(); attack.isCrit = ((BaseState)this).RollCrit(); attack.forceVector = Vector3.zero; attack.pushAwayForce = 1f; attack.damage = 8f * base.damageStat; attack.hitBoxGroup = hitBoxGroup; attack.hitEffectPrefab = LoaderMeleeAttack.overchargeImpactEffectPrefab; } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); ((BaseState)this).StartAimMode(0.1f, true); if (((EntityState)this).fixedAge >= fireTime && !hasFired && ((EntityState)this).isAuthority) { EffectManager.SimpleMuzzleFlash(PathfinderAssets.thrustEffect, ((EntityState)this).gameObject, "SpearTip", true); Util.PlaySound("PF_Thrust", ((EntityState)this).gameObject); if (attack.Fire((List<HurtBox>)null) && !((EntityState)this).characterMotor.isGrounded && !hasHopped) { ((BaseState)this).SmallHop(((EntityState)this).characterMotor, smallHopVelocity); hasHopped = true; } hasFired = true; } if (((EntityState)this).fixedAge >= earlyExitTime) { animator.SetLayerWeight(animator.GetLayerIndex("AimPitch"), 1f); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } } internal class Thrust : BaseState { private Animator animator; private OverlapAttack attack; public static float baseDuration = 0.7f; public static float smallHopVelocity = 5.5f; private float duration; private float earlyExitTime; private float fireTime; public bool isCancelling; private bool hasHopped; private bool hasFired; private bool isCrit; public override void OnEnter() { //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Expected O, but got Unknown //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_0137: 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_0158: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); duration = baseDuration / base.attackSpeedStat; earlyExitTime = duration * 0.67f; fireTime = duration * 0.3f; animator = ((EntityState)this).GetModelAnimator(); animator.SetLayerWeight(animator.GetLayerIndex("AimPitch"), 0f); ((EntityState)this).PlayAnimation("Gesture, Override", "Thrust", "Thrust.playbackRate", duration, 0f); PrimarySkillShurikenBehavior component = ((EntityState)this).GetComponent<PrimarySkillShurikenBehavior>(); if (isCancelling && Object.op_Implicit((Object)(object)component)) { component.OnSkillActivated(((EntityState)this).skillLocator.primary); } Transform modelTransform = ((EntityState)this).GetModelTransform(); HitBoxGroup hitBoxGroup = null; if (Object.op_Implicit((Object)(object)modelTransform)) { hitBoxGroup = Array.Find(((Component)modelTransform).GetComponents<HitBoxGroup>(), (HitBoxGroup element) => element.groupName == "Spear"); } attack = new OverlapAttack(); attack.attacker = ((EntityState)this).gameObject; attack.inflictor = ((EntityState)this).gameObject; attack.damageType = DamageTypeCombo.op_Implicit((DamageType)0); attack.procCoefficient = 1f; attack.teamIndex = ((BaseState)this).GetTeam(); attack.isCrit = ((BaseState)this).RollCrit(); attack.forceVector = Vector3.zero; attack.pushAwayForce = 1f; attack.damage = Config.ThrustDamage.Value * base.damageStat; attack.hitBoxGroup = hitBoxGroup; attack.hitEffectPrefab = null; DamageAPI.AddModdedDamageType(attack, PathfinderPlugin.piercing); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); ((BaseState)this).StartAimMode(0.1f, true); if (((EntityState)this).fixedAge >= fireTime && !hasFired && ((EntityState)this).isAuthority) { EffectManager.SimpleMuzzleFlash(PathfinderAssets.thrustEffect, ((EntityState)this).gameObject, "SpearTip", true); Util.PlaySound("PF_Thrust", ((EntityState)this).gameObject); if (attack.Fire((List<HurtBox>)null) && !((EntityState)this).characterMotor.isGrounded && !hasHopped) { ((BaseState)this).SmallHop(((EntityState)this).characterMotor, smallHopVelocity); hasHopped = true; } hasFired = true; } if (((EntityState)this).fixedAge >= earlyExitTime) { animator.SetLayerWeight(animator.GetLayerIndex("AimPitch"), 1f); } if (((EntityState)this).fixedAge >= earlyExitTime && ((EntityState)this).inputBank.skill1.down && ((EntityState)this).isAuthority && hasFired) { ((EntityState)this).characterBody.isSprinting = false; ((EntityState)this).outer.SetNextState((EntityState)(object)new Thrust { isCancelling = true }); } else if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } } namespace Skillstates.Pathfinder.Command { internal class AttackCommand : BaseIssueCommand { private HurtBox target; private string javString = ""; public override void OnEnter() { base.OnEnter(); target = commandTracker.GetTrackingTarget(); if (overrideController.javelinReady) { javString = "Jav"; } ((EntityState)this).PlayCrossfade("Gesture, Override", javString + "Point", "Hand.playbackRate", duration, 0.1f); falconerComponent.AttackOrder(target); } } internal class BaseIssueCommand : BaseState { protected FalconerComponent falconerComponent; protected OverrideController overrideController; public static float baseDuration = 0.7f; protected float duration; protected CommandTracker commandTracker; public override void OnEnter() { ((BaseState)this).OnEnter(); falconerComponent = ((EntityState)this).GetComponent<FalconerComponent>(); overrideController = ((EntityState)this).GetComponent<OverrideController>(); commandTracker = ((EntityState)this).GetComponent<CommandTracker>(); duration = baseDuration / base.attackSpeedStat; ((BaseState)this).StartAimMode(duration + 0.1f, false); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } internal class CommandMode : BaseState { private CommandTracker tracker; private OverrideController overrideController; private FalconerComponent falconerComponent; private OverlayController overlayController; public override void OnEnter() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); tracker = ((EntityState)this).GetComponent<CommandTracker>(); overrideController = ((EntityState)this).GetComponent<OverrideController>(); falconerComponent = ((EntityState)this).GetComponent<FalconerComponent>(); tracker.ActivateIndicator(); overrideController.inCommandMode = true; Util.PlaySound(Paint.enterSoundString, ((EntityState)this).gameObject); overlayController = HudOverlayManager.AddOverlay(((EntityState)this).gameObject, new OverlayCreationParams { prefab = PathfinderAssets.commandCrosshair, childLocatorEntry = "ScopeContainer" }); overrideController.SetCommandSkills(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); } public override void OnExit() { tracker.DeactivateIndicator(); RemoveOverlay(); Util.PlaySound(Paint.exitSoundString, ((EntityState)this).gameObject); overrideController.UnsetCommandSkills(); overrideController.inCommandMode = false; ((EntityState)this).OnExit(); } private void RemoveOverlay() { if (overlayController != null) { HudOverlayManager.RemoveOverlay(overlayController); overlayController = null; } } } internal class FollowCommand : BaseIssueCommand { private string javString = ""; public override void OnEnter() { base.OnEnter(); if (overrideController.javelinReady) { javString = "Jav"; } ((EntityState)this).PlayCrossfade("Gesture, Override", javString + "Wave", "Hand.playbackRate", duration, 0.1f); falconerComponent.FollowOrder(); } } internal class SpecialCommand : BaseIssueCommand { public HurtBox target; private string javString = ""; public override void OnEnter() { base.OnEnter(); target = commandTracker.GetTrackingTarget(); if (overrideController.javelinReady) { javString = "Jav"; } ((EntityState)this).PlayCrossfade("Gesture, Override", javString + "Point", "Hand.playbackRate", duration, 0.1f); falconerComponent.SpecialOrder(target); } } } namespace Skillstates.Squall { internal class SquallMainState : BaseState { private Animator modelAnimator; private bool skill1InputReceived; private bool skill2InputReceived; private bool skill3InputReceived; private bool skill4InputReceived; private bool sprintInputReceived; public override void OnEnter() { ((BaseState)this).OnEnter(); modelAnimator = ((EntityState)this).GetModelAnimator(); ((EntityState)this).PlayAnimation("Body", "Hover"); modelAnimator.SetFloat("Fly.rate", 1f); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); PerformInputs(); } public override void Update() { ((EntityState)this).Update(); if (!(Time.deltaTime <= 0f)) { UpdateAnimParams(); } } private void PerformInputs() { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_004e: 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_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_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) if (!((EntityState)this).isAuthority) { return; } if (Object.op_Implicit((Object)(object)((EntityState)this).inputBank)) { if (Object.op_Implicit((Object)(object)((EntityState)this).rigidbodyMotor)) { ((EntityState)this).rigidbodyMotor.moveVector = ((EntityState)this).inputBank.moveVector * ((EntityState)this).characterBody.moveSpeed; } if (Object.op_Implicit((Object)(object)((EntityState)this).rigidbodyDirection)) { if (((EntityState)this).inputBank.moveVector != Vector3.zero) { ((EntityState)this).rigidbodyDirection.aimDirection = ((EntityState)this).inputBank.moveVector; } else { ((EntityState)this).rigidbodyDirection.aimDirection.y = 0f; } } skill1InputReceived = ((EntityState)this).inputBank.skill1.down; skill2InputReceived = ((EntityState)this).inputBank.skill2.down; skill3InputReceived = ((EntityState)this).inputBank.skill3.down; skill4InputReceived = ((EntityState)this).inputBank.skill4.down; sprintInputReceived |= ((EntityState)this).inputBank.sprint.down; if (((Vector3)(ref ((EntityState)this).inputBank.moveVector)).magnitude <= 0.5f) { sprintInputReceived = false; } ((EntityState)this).characterBody.isSprinting = sprintInputReceived; if (sprintInputReceived) { modelAnimator.SetFloat("Fly.rate", 1.5f); } sprintInputReceived = false; } if (Object.op_Implicit((Object)(object)((EntityState)this).skillLocator)) { if (skill1InputReceived && Object.op_Implicit((Object)(object)((EntityState)this).skillLocator.primary)) { ((EntityState)this).skillLocator.primary.ExecuteIfReady(); } if (skill2InputReceived && Object.op_Implicit((Object)(object)((EntityState)this).skillLocator.secondary)) { ((EntityState)this).skillLocator.secondary.ExecuteIfReady(); } if (skill3InputReceived && Object.op_Implicit((Object)(object)((EntityState)this).skillLocator.utility)) { ((EntityState)this).skillLocator.utility.ExecuteIfReady(); } if (skill4InputReceived && Object.op_Implicit((Object)(object)((EntityState)this).skillLocator.special)) { ((EntityState)this).skillLocator.special.ExecuteIfReady(); } } } private void UpdateAnimParams() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0021: 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) if (Object.op_Implicit((Object)(object)modelAnimator)) { Vector3 moveVector = ((EntityState)this).inputBank.moveVector; bool flag = moveVector != Vector3.zero && ((EntityState)this).characterBody.moveSpeed > Mathf.Epsilon; modelAnimator.SetBool("isMoving", flag); } } } internal class DiveToPoint : BaseState { public static float giveUpDuration = 3f; public static float speedCoefficient = 6f; public Vector3 divePosition; public float minDistanceFromPoint; public override void OnEnter() { ((BaseState)this).OnEnter(); ((EntityState)this).characterBody.isSprinting = true; if (minDistanceFromPoint <= 0f) { minDistanceFromPoint = 1f; } } public override void FixedUpdate() { //IL_0010: 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_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); PerformInputs(); bool flag = Vector3.Distance(divePosition, ((EntityState)this).transform.position) <= minDistanceFromPoint; bool flag2 = ((EntityState)this).fixedAge >= giveUpDuration; if ((flag || flag2) && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } if (((EntityState)this).isAuthority) { RigidbodyDirection rigidbodyDirection = ((EntityState)this).rigidbodyDirection; Vector3 val = divePosition - ((EntityState)this).transform.position; rigidbodyDirection.aimDirection = ((Vector3)(ref val)).normalized; RigidbodyMotor rigidbodyMotor = ((EntityState)this).rigidbodyMotor; Vector3 rootMotion = rigidbodyMotor.rootMotion; val = divePosition - ((EntityState)this).transform.position; rigidbodyMotor.rootMotion = rootMotion + ((Vector3)(ref val)).normalized * (speedCoefficient * base.moveSpeedStat * Time.fixedDeltaTime); } } private void PerformInputs() { if (Object.op_Implicit((Object)(object)((EntityState)this).skillLocator)) { if (((EntityState)this).inputBank.skill1.down && Object.op_Implicit((Object)(object)((EntityState)this).skillLocator.primary)) { ((EntityState)this).skillLocator.primary.ExecuteIfReady(); } if (((EntityState)this).inputBank.skill2.down && Object.op_Implicit((Object)(object)((EntityState)this).skillLocator.secondary)) { ((EntityState)this).skillLocator.secondary.ExecuteIfReady(); } if (((EntityState)this).inputBank.skill3.down && Object.op_Implicit((Object)(object)((EntityState)this).skillLocator.utility)) { ((EntityState)this).skillLocator.utility.ExecuteIfReady(); } if (((EntityState)this).inputBank.skill4.down && Object.op_Implicit((Object)(object)((EntityState)this).skillLocator.special)) { ((EntityState)this).skillLocator.special.ExecuteIfReady(); } } } public override void OnExit() { ((EntityState)this).characterBody.isSprinting = false; ((EntityState)this).PlayCrossfade("FullBody, Override", "BufferEmpty", 0.2f); ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } } internal class MissileLauncher : BaseState { public HurtBox target; public bool isCrit; private SquallController squallController; public static float baseDuration = 0.5f; private float duration; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = baseDuration / base.attackSpeedStat; isCrit = ((BaseState)this).RollCrit(); squallController = ((EntityState)this).GetComponent<SquallController>(); if (!((EntityState)this).characterBody.isPlayerControlled) { target = squallController.currentBestHurtbox; } else { target = null; } FireMissile(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } private void FireMissile() { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Expected O, but got Unknown //IL_004f: 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_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) if (NetworkServer.active && Object.op_Implicit((Object)(object)target) && target.healthComponent.alive) { MicroMissileOrb val = new MicroMissileOrb(); ((Orb)val).target = target; ((Orb)val).origin = ((EntityState)this).characterBody.corePosition; ((GenericDamageOrb)val).damageValue = Config.SquallMissileDamage.Value * base.damageStat; ((GenericDamageOrb)val).attacker = ((EntityState)this).gameObject; ((GenericDamageOrb)val).teamIndex = ((EntityState)this).teamComponent.teamIndex; ((GenericDamageOrb)val).isCrit = isCrit; ((GenericDamageOrb)val).procChainMask = default(ProcChainMask); ((GenericDamageOrb)val).procCoefficient = 1f; ((GenericDamageOrb)val).damageColorIndex = (DamageColorIndex)0; ((GenericDamageOrb)val).damageType = DamageTypeCombo.op_Implicit((DamageType)0); OrbManager.instance.AddOrb((Orb)(object)val); } EffectManager.SimpleMuzzleFlash(FireMissileBarrage.effectPrefab, ((EntityState)this).gameObject, "MissileLauncher", true); } public override void OnExit() { FireMissile(); ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } internal class MountedGuns : BaseState { public static float baseDuration = 0.2f; internal HealthComponent target; private BulletAttack leftAttack; private BulletAttack rightAttack; private Ray aimRay; private float duration; public override void OnEnter() { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_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_005e: 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_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0084: 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_00a2: Unknown result type (might be due to invalid IL or missing references) //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_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: 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_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Expected O, but got Unknown //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_01db: Unknown result type (might be due to invalid IL or missing references) //IL_01e6: Unknown result type (might be due to invalid IL or missing references) //IL_01e8: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_0209: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_022c: Expected O, but got Unknown ((BaseState)this).OnEnter(); duration = baseDuration / base.attackSpeedStat; aimRay = ((BaseState)this).GetAimRay(); if (((EntityState)this).isAuthority) { leftAttack = new BulletAttack { owner = ((EntityState)this).gameObject, weapon = ((EntityState)this).gameObject, origin = ((Ray)(ref aimRay)).origin, muzzleName = "GunL", minSpread = 0f, maxSpread = 0f, bulletCount = 1u, damage = Config.SquallGunDamage.Value * base.damageStat, tracerEffectPrefab = FireBarrage.tracerEffectPrefab, force = 1f, hitEffectPrefab = FirePistol2.hitEffectPrefab, stopperMask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask, isCrit = ((BaseState)this).RollCrit(), radius = 1f, damageType = DamageTypeCombo.op_Implicit((DamageType)0), falloffModel = (FalloffModel)1, procCoefficient = Config.SquallGunProc.Value, maxDistance = 200f, aimVector = ((Ray)(ref aimRay)).direction }; rightAttack = new BulletAttack { owner = ((EntityState)this).gameObject, weapon = ((EntityState)this).gameObject, origin = ((Ray)(ref aimRay)).origin, muzzleName = "GunR", minSpread = 0f, maxSpread = 0f, bulletCount = 1u, damage = Config.SquallGunDamage.Value * base.damageStat, tracerEffectPrefab = FireBarrage.tracerEffectPrefab, force = 1f, hitEffectPrefab = FirePistol2.hitEffectPrefab, stopperMask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask, isCrit = ((BaseState)this).RollCrit(), radius = 1f, damageType = DamageTypeCombo.op_Implicit((DamageType)0), falloffModel = (FalloffModel)1, procCoefficient = Config.SquallGunProc.Value, maxDistance = 200f, aimVector = ((Ray)(ref aimRay)).direction }; FireBullet(leftAttack); FireBullet(rightAttack); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public void FireBullet(BulletAttack attack) { Util.PlaySound(FireBarrage.fireBarrageSoundString, ((EntityState)this).gameObject); EffectManager.SimpleMuzzleFlash(FireBarrage.effectPrefab, ((EntityState)this).gameObject, attack.muzzleName, false); if (((EntityState)this).isAuthority) { attack.Fire(); } } public override void OnExit() { ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } internal class ProjectileMissiles : BaseState { public GameObject target; public bool isCrit; private GameObject missilePrefab; private SquallController squallController; public static float baseDuration = 0.5f; private float duration; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = baseDuration / base.attackSpeedStat; isCrit = ((BaseState)this).RollCrit(); missilePrefab = CommonAssets.missilePrefab; squallController = ((EntityState)this).GetComponent<SquallController>(); if (!((EntityState)this).characterBody.isPlayerControlled) { target = squallController.currentTarget; } else { target = null; } FireMissile(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } private void FireMissile() { //IL_0012: 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_0025: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) if (((EntityState)this).isAuthority) { MissileUtils.FireMissile(((EntityState)this).characterBody.corePosition, ((EntityState)this).characterBody, default(ProcChainMask), target, Config.SquallMissileDamage.Value * base.damageStat, isCrit, missilePrefab, (DamageColorIndex)0, Vector3.up, 200f, false); } } public override void OnExit() { FireMissile(); ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class SquallEvis : BaseState { public static float diveDuration = 0.2f; public static float attackDuration = 1.3f; public static float baseAttackInterval = 0.129f; public static float damageCoefficient = Config.specialDamageCoefficient.Value; public static float chargePerHit = Config.specialRechargeAmount.Value; internal HurtBox target; internal HurtBoxGroup targetHurtBoxes; private Transform modelTransform; private CharacterModel characterModel; private BatteryComponent batteryComponent; private SquallVFXComponents squallVFXComponent; private float attackInterval; private float stopwatch; private float maxHits; private float hitCount; private Vector3 startPosition; private Vector3 enemyPosition; private bool isCrit; private bool attackFinished; public override void OnEnter() { //IL_00c6: 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_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: 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) ((BaseState)this).OnEnter(); attackInterval = baseAttackInterval / base.attackSpeedStat; maxHits = Mathf.Floor(attackDuration / attackInterval); isCrit = ((BaseState)this).RollCrit(); modelTransform = ((EntityState)this).GetModelTransform(); characterModel = ((Component)modelTransform).GetComponent<CharacterModel>(); batteryComponent = ((EntityState)this).GetComponent<BatteryComponent>(); squallVFXComponent = ((EntityState)this).GetComponent<SquallVFXComponents>(); batteryComponent.pauseDrain = true; squallVFXComponent.ToggleVFX(onOff: false); CharacterModel obj = characterModel; obj.invisibilityCount++; if (Object.op_Implicit((Object)(object)target)) { targetHurtBoxes = target.hurtBoxGroup; startPosition = ((EntityState)this).transform.position; enemyPosition = ((Component)target).transform.position; squallVFXComponent.PlayDashEffect(startPosition, enemyPosition); Util.PlaySound(EvisDash.endSoundString, ((EntityState)this).gameObject); } } public override void FixedUpdate() { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); stopwatch += Time.fixedDeltaTime; if (((EntityState)this).isAuthority) { ((EntityState)this).rigidbodyMotor.moveVector = Vector3.zero; } if (Object.op_Implicit((Object)(object)targetHurtBoxes)) { target = targetHurtBoxes.hurtBoxes[Random.Range(0, targetHurtBoxes.hurtBoxes.Length - 1)]; } if (Object.op_Implicit((Object)(object)target) && Object.op_Implicit((Object)(object)target.healthComponent) && stopwatch >= attackInterval && target.healthComponent.alive && ((EntityState)this).fixedAge >= diveDuration && !attackFinished && hitCount < maxHits) { stopwatch = 0f; DoAttack(); } if ((hitCount >= maxHits || ((EntityState)this).fixedAge >= diveDuration + attackDuration || !target.healthComponent.alive) && ((EntityState)this).isAuthority && !attackFinished) { FinishAttack(); } if (attackFinished && stopwatch >= diveDuration) { ((EntityState)this).outer.SetNextStateToMain(); } } private void DoAttack() { //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_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown //IL_004f: 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_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) if (NetworkServer.active) { enemyPosition = ((Component)target).transform.position; DamageInfo val = new DamageInfo(); val.attacker = ((EntityState)this).gameObject; val.procCoefficient = 1f; val.crit = isCrit; val.position = enemyPosition; val.damage = base.damageStat * damageCoefficient; target.healthComponent.TakeDamage(val); if (target.healthComponent.alive) { target.healthComponent.body.AddTimedBuff(Buffs.armorShred, 7f); } GlobalEventManager.instance.OnHitEnemy(val, ((Component)target.healthComponent).gameObject); GlobalEventManager.instance.OnHitAll(val, ((Component)target.healthComponent).gameObject); } float amount = (isCrit ? (2f * chargePerHit) : chargePerHit); batteryComponent.Recharge(amount, canOvercharge: true); EffectManager.SimpleImpactEffect(PathfinderAssets.squallEvisEffect, enemyPosition, enemyPosition, true); EffectManager.SimpleImpactEffect(Assaulter.hitEffectPrefab, enemyPosition, enemyPosition, true); hitCount += 1f; } private void FinishAttack() { //IL_0008: 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) squallVFXComponent.PlayDashEffect(enemyPosition, startPosition); Util.PlaySound(EvisDash.endSoundString, ((EntityState)this).gameObject); attackFinished = true; stopwatch = 0f; } public override void OnExit() { CharacterModel obj = characterModel; obj.invisibilityCount--; batteryComponent.pauseDrain = false; squallVFXComponent.ToggleVFX(onOff: true); ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } } } namespace Pathfinder { internal static class Log { internal static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object data) { _logSource.LogDebug(data); } internal static void Error(object data) { _logSource.LogError(data); } internal static void Fatal(object data) { _logSource.LogFatal(data); } internal static void Info(object data) { _logSource.LogInfo(data); } internal static void Message(object data) { _logSource.LogMessage(data); } internal static void Warning(object data) { _logSource.LogWarning(data); } } [BepInPlugin("com.Bog.Pathfinder", "Pathfinder", "0.5.3")] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class PathfinderPlugin : BaseUnityPlugin { public const string MODUID = "com.Bog.Pathfinder"; public const string MODNAME = "Pathfinder"; public const string MODVERSION = "0.5.3"; public const string DEVELOPER_PREFIX = "BOG"; public static PathfinderPlugin instance; public static PluginInfo PInfo; public static GameObject pathfinderBodyPrefab; public static GameObject squallBodyPrefab; public static GameObject commandCrosshair; public static BodyIndex squallBodyIndex; public static BodyIndex teslaTrooperBodyIndex; public static SkillDef javelinSkill; internal static ModdedDamageType piercing; private void Awake() { //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) instance = this; PInfo = ((BaseUnityPlugin)this).Info; Log.Init(((BaseUnityPlugin)this).Logger); PathfinderAssets.Initialize(); Config.ReadConfig(this); States.RegisterStates(); Buffs.RegisterBuffs(); Projectiles.RegisterProjectiles(); Tokens.AddTokens(); ItemDisplays.PopulateDisplays(); piercing = DamageAPI.ReserveDamageType(); new Squall().Initialize(); new Pathfinder.Modules.Survivors.Pathfinder().Initialize(); new ContentPacks().Initialize(); Subscriptions(); Hook(); } private void Subscriptions() { GlobalEventManager.onClientDamageNotified += GlobalEventManager_onClientDamageNotified; } private void Hook() { //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 BodyCatalog.SetBodyPrefabs += new hook_SetBodyPrefabs(BodyCatalog_SetBodyPrefabs); CharacterBody.RecalculateStats += new hook_RecalculateStats(CharacterBody_RecalculateStats); HealthComponent.TakeDamage += new hook_TakeDamage(HealthComponent_TakeDamage); PrimarySkillShurikenBehavior.OnSkillActivated += new hook_OnSkillActivated(PrimarySkillShurikenBehavior_OnSkillActivated); SkillLocator.ApplyAmmoPack += new hook_ApplyAmmoPack(SkillLocator_ApplyAmmoPack); CharacterBody.AddBuff_BuffIndex += new hook_AddBuff_BuffIndex(CharacterBody_AddBuff_BuffIndex); } private void BodyCatalog_SetBodyPrefabs(orig_SetBodyPrefabs orig, GameObject[] newBodyPrefabs) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_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) orig.Invoke(newBodyPrefabs); squallBodyIndex = BodyCatalog.FindBodyIndex(squallBodyPrefab); teslaTrooperBodyIndex = BodyCatalog.FindBodyIndex("TeslaTrooperBody"); Log.Warning("Squall's body index is: " + ((object)(BodyIndex)(ref squallBodyIndex)).ToString()); } private void CharacterBody_AddBuff_BuffIndex(orig_AddBuff_BuffIndex orig, CharacterBody self, BuffIndex buffType) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0010: 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_001d: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, buffType); if (buffType == BuffCatalog.FindBuffIndex("Charged") && self.bodyIndex == squallBodyIndex) { BatteryComponent component = ((Component)self).GetComponent<BatteryComponent>(); if (Object.op_Implicit((Object)(object)component)) { component.Recharge(3f, canOvercharge: true); } } } private void SkillLocator_ApplyAmmoPack(orig_ApplyAmmoPack orig, SkillLocator self) { orig.Invoke(self); FalconerComponent component = ((Component)self).GetComponent<FalconerComponent>(); if (!Object.op_Implicit((Object)(object)component) || !Object.op_Implicit((Object)(object)component.squallController) || !NetworkServer.active) { return; } GenericSkill[] allSkills = component.squallController.skillLocator.allSkills; foreach (GenericSkill val in allSkills) { if (val.CanApplyAmmoPack()) { val.ApplyAmmoPack(); } } } private void PrimarySkillShurikenBehavior_OnSkillActivated(orig_OnSkillActivated orig, PrimarySkillShurikenBehavior self, GenericSkill skill) { OverrideController component = ((Component)self).GetComponent<OverrideController>(); if (!Object.op_Implicit((Object)(object)component) || (!component.javelinReady && !component.inCommandMode)) { orig.Invoke(self, skill); } } private void GlobalEventManager_onClientDamageNotified(DamageDealtMessage msg) { //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)msg.attacker)) { return; } SquallController component = msg.attacker.GetComponent<SquallController>(); if (!Object.op_Implicit((Object)(object)component) || !Object.op_Implicit((Object)(object)component.owner) || !Object.op_Implicit((Object)(object)msg.victim) || msg.isSilent) { return; } HealthComponent component2 = msg.victim.GetComponent<HealthComponent>(); if (!Object.op_Implicit((Object)(object)component2) || component2.dontShowHealthbar) { return; } TeamIndex objectTeam = TeamComponent.GetObjectTeam(((Component)component2).gameObject); foreach (CombatHealthBarViewer instances in CombatHealthBarViewer.instancesList) { if ((Object)(object)component.owner == (Object)(object)instances.viewerBodyObject && Object.op_Implicit((Object)(object)instances.viewerBodyObject)) { instances.HandleDamage(component2, objectTeam); } } } private void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: 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_0048: 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) //IL_006c: 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_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_0090: 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_015a: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) if (self.body.bodyIndex == squallBodyIndex && Object.op_Implicit((Object)(object)damageInfo.attacker)) { CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component) && component.bodyIndex == teslaTrooperBodyIndex && component.teamComponent.teamIndex == self.body.teamComponent.teamIndex && NetworkServer.active) { self.body.AddBuff(BuffCatalog.FindBuffIndex("Charged")); } } if (DamageAPI.HasModdedDamageType(damageInfo, piercing) && !damageInfo.rejected && Object.op_Implicit((Object)(object)damageInfo.attacker)) { CharacterBody component2 = damageInfo.attacker.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component2)) { float num = Vector3.Distance(component2.corePosition, damageInfo.position); if (num >= 11f) { damageInfo.damage *= 1.3f; damageInfo.damageColorIndex = (DamageColorIndex)5; if (self.body.armor > 0f) { damageInfo.damageType = DamageTypeCombo.op_Implicit((DamageType)2); } EffectManager.SimpleImpactEffect(PathfinderAssets.thrustTipImpact, damageInfo.position, Vector3.zero, true); } else { EffectManager.SimpleImpactEffect(GroundLight.comboHitEffectPrefab, damageInfo.position, Vector3.zero, true); } } } orig.Invoke(self, damageInfo); } private void CharacterBody_RecalculateStats(orig_RecalculateStats orig, CharacterBody self) { //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (!Object.op_Implicit((Object)(object)self)) { return; } if (self.HasBuff(Buffs.electrocute)) { self.moveSpeed *= Config.electrocuteSlowAmount.Value; } if (self.HasBuff(Buffs.armorShred)) { self.armor -= Config.specialArmorShred.Value * (float)self.GetBuffCount(Buffs.armorShred); } if (self.HasBuff(Buffs.rendingTalonMS)) { self.moveSpeed *= 1.2f; } if (self.bodyIndex == squallBodyIndex) { BatteryComponent component = ((Component)self).GetComponent<BatteryComponent>(); if (Object.op_Implicit((Object)(object)component)) { component.rechargeRate = Config.batteryRechargeRate.Value * self.attackSpeed; } } } } } namespace Pathfinder.Modules { public static class Buffs { internal static BuffDef electrocute; internal static BuffDef armorShred; internal static BuffDef rendingTalonMS; internal static DotIndex electrocuteDoT; internal static void RegisterBuffs() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_002c: 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) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) BuffDef val = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/Base/ShockNearby/bdTeslaField.asset").WaitForCompletion(); BuffDef val2 = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/Base/ArmorReductionOnHit/bdPulverized.asset").WaitForCompletion(); BuffDef val3 = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/Base/SprintOutOfCombat/bdWhipBoost.asset").WaitForCompletion(); electrocute = AddNewBuff("Electrocuted", val.iconSprite, Color.cyan, canStack: false, isDebuff: true); armorShred = AddNewBuff("ArmorShred", val2.iconSprite, Color.cyan, canStack: true, isDebuff: true); rendingTalonMS = AddNewBuff("RendingTalonsMS", val3.iconSprite, Color.white, canStack: false, isDebuff: false); RegisterDoTs(); } private static void RegisterDoTs() { //IL_001e: 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) electrocuteDoT = DotAPI.RegisterDotDef(0.2f, Config.electrocuteDPS.Value * 0.2f, (DamageColorIndex)0, electrocute, (CustomDotBehaviour)null, (CustomDotVisual)null); } internal static BuffDef AddNewBuff(string buffName, Sprite buffIcon, Color buffColor, bool canStack, bool isDebuff) { //IL_0010: 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) BuffDef val = ScriptableObject.CreateInstance<BuffDef>(); ((Object)val).name = buffName; val.buffColor = buffColor; val.canStack = canStack; val.isDebuff = isDebuff; val.eliteDef = null; val.iconSprite = buffIcon; Content.AddBuffDef(val); return val; } } public static class Config { private static ConfigEntry<string> modVersion; private static string pathfinderPrefix = "Pathfinder - "; private static string squallPrefix = "Squall - "; private static string versionSuffix = " - 0.5.3"; public static ConfigEntry<float> sortPosition; private static string primarySectionTitle = pathfinderPrefix + "Primary"; public static ConfigEntry<float> ThrustDamage; private static string secondarySectionTitle = pathfinderPrefix + "Secondary"; public static ConfigEntry<float> dashCD; public static ConfigEntry<float> JavelinDamage; private static string utilitySectionTitle = pathfinderPrefix + "Utility"; public static ConfigEntry<float> rendingTalonsCD; public static ConfigEntry<float> AirSpinDamage; public static ConfigEntry<float> GroundSpinDamage; public static ConfigEntry<float> bolasCD; public static ConfigEntry<float> electrocuteDPS; public static ConfigEntry<float> electrocuteSlowAmount; private static string squallBatteryTitle = squallPrefix + "Battery"; public static ConfigEntry<float> batteryDrainRate; public static ConfigEntry<float> batteryRechargeRate; public static ConfigEntry<bool> laserLineEnabled; private static string squallAttackTitle = squallPrefix + "Attack Mode"; public static ConfigEntry<float> SquallGunDamage; public static ConfigEntry<float> SquallGunProc; public static ConfigEntry<float> SquallMissileDamage; public static ConfigEntry<float> SquallMissileProc; public static string squallSpecialTitle = squallPrefix + "Special"; public static ConfigEntry<float> goForThroatCD; public static ConfigEntry<float> specialDamageCoefficient; public static ConfigEntry<float> specialRechargeAmount; public static ConfigEntry<float> specialArmorShred; public static void ReadConfig(PathfinderPlugin plugin) { ((BaseUnityPlugin)plugin).Config.Clear(); modVersion = ((BaseUnityPlugin)plugin).Config.Bind<string>("General", "Mod Version", "0.5.3", "Current version; don't touch this or it will reset your config"); sortPosition = ((BaseUnityPlugin)plugin).Config.Bind<float>("General", "Lobby Sort Position", 9.5f, "Sort position of Pathfinder in the character select lobby"); if (modVersion.Value != ((ConfigEntryBase)modVersion).DefaultValue.ToString()) { Log.Warning("Pathfinder - version mismatch detected, clearing config"); ((Dictionary<ConfigDefinition, string>)AccessTools.PropertyGetter(typeof(ConfigFile), "OrphanedEntries").Invoke(((BaseUnityPlugin)plugin).Config, null)).Clear(); modVersion.Value = ((ConfigEntryBase)modVersion).DefaultValue.ToString(); } ThrustDamage = ((BaseUnityPlugin)plugin).Config.Bind<float>(primarySectionTitle, "Thrust Damage Coefficient", 2.5f, "Damage coefficient of Thrust"); dashCD = ((BaseUnityPlugin)plugin).Config.Bind<float>(secondarySectionTitle, "Fleetfoot Cooldown", 6f, "Cooldown of Fleetfoot"); JavelinDamage = ((BaseUnityPlugin)plugin).Config.Bind<float>(secondarySectionTitle, "Javelin Damage Coefficient", 8f, "Damage coefficient of javelin toss"); bolasCD = ((BaseUnityPlugin)plugin).Config.Bind<float>(utilitySectionTitle, "Shock Bolas Cooldown", 18f, "Cooldown of Shock Bolas"); electrocuteDPS = ((BaseUnityPlugin)plugin).Config.Bind<float>(utilitySectionTitle, "Electrocute Damage per Second", 1.2f, "Damage % per second of Electrocute DoT"); electrocuteSlowAmount = ((BaseUnityPlugin)plugin).Config.Bind<float>(utilitySectionTitle, "Electrocute Slow Multiplier", 0.5f, "Movespeed multiplier of Electrocute DoT"); rendingTalonsCD = ((BaseUnityPlugin)plugin).Config.Bind<float>(utilitySectionTitle, "Rending Talons Cooldown", 6f, "Cooldown of Rending Talons"); AirSpinDamage = ((BaseUnityPlugin)plugin).Config.Bind<float>(utilitySectionTitle, "Air Spin Damage Coefficient", 3f, "Damage coefficient of Rending Talons aerial spin attack"); GroundSpinDamage = ((BaseUnityPlugin)plugin).Config.Bind<float>(utilitySectionTitle, "Ground Spin Damage Coefficient", 8f, "Damage coefficient of Rending Talons ground spin attack"); batteryDrainRate = ((BaseUnityPlugin)plugin).Config.Bind<float>(squallBatteryTitle, "Battery Drain Rate", 8f, "Amount battery drains per second while Squall is in Attack Mode"); batteryRechargeRate = ((BaseUnityPlugin)plugin).Config.Bind<float>(squallBatteryTitle, "Battery Recharge Rate", 1f, "Base battery recharge rate while Squall is in Follow Mode"); laserLineEnabled = ((BaseUnityPlugin)plugin).Config.Bind<bool>("General", "Enable Squall Laser Pointer", true, "Shows Squall's laser pointer"); SquallGunDamage = ((BaseUnityPlugin)plugin).Config.Bind<float>(squallAttackTitle, "Machine Guns Damage Coefficient", 0.3f, "Damage coefficient of Squall's machine guns. Each attack fires two bullets."); SquallGunProc = ((BaseUnityPlugin)plugin).Config.Bind<float>(squallAttackTitle, "Machine Guns Proc Coefficient", 0.3f, "Proc coefficient of Squall's machine guns. Each attack fires two bullets."); SquallMissileDamage = ((BaseUnityPlugin)plugin).Config.Bind<float>(squallAttackTitle, "Missile Launcher Damage Coefficient", 1.5f, "Damage coefficient of Squall's missile launcher."); goForThroatCD = ((BaseUnityPlugin)plugin).Config.Bind<float>(squallSpecialTitle, "Go for the Throat Cooldown", 12f, "Cooldown of Go for the Throat."); specialDamageCoefficient = ((BaseUnityPlugin)plugin).Config.Bind<float>(squallSpecialTitle, "Go for the Throat Damage Coefficient", 0.7f, "Damage coefficient per strike of Go for the Throat."); specialRechargeAmount = ((BaseUnityPlugin)plugin).Config.Bind<float>(squallSpecialTitle, "Go for the Throat Recharge Amount", 1f, "Percentage of battery recharged per strike of Go for the Throat."); specialArmorShred = ((BaseUnityPlugin)plugin).Config.Bind<float>(squallSpecialTitle, "Go for the Throat Armor Shred Amount", 2f, "Flat amount of armor deducted per strike of Go for the Throat."); } public static ConfigEntry<bool> CharacterEnableConfig(string characterName, string description = "Set to false to disable this character", bool enabledDefault = true) { return ((BaseUnityPlugin)PathfinderPlugin.instance).Config.Bind<bool>("General", "Enable " + characterName, enabledDefault, description); } } internal class ContentPacks : IContentPackProvider { internal ContentPack contentPack = new ContentPack(); public static List<GameObject> bodyPrefabs = new List<GameObject>(); public static List<GameObject> masterPrefabs = new List<GameObject>(); public static List<GameObject> projectilePrefabs = new List<GameObject>(); public static List<SurvivorDef> survivorDefs = new List<SurvivorDef>(); public static List<UnlockableDef> unlockableDefs = new List<UnlockableDef>(); public static List<SkillFamily> skillFamilies = new List<SkillFamily>(); public static List<SkillDef> skillDefs = new List<SkillDef>(); public static List<Type> entityStates = new List<Type>(); public static List<BuffDef> buffDefs = new List<BuffDef>(); public static List<EffectDef> effectDefs = new List<EffectDef>(); public static List<NetworkSoundEventDef> networkSoundEventDefs = new List<NetworkSoundEventDef>(); public string identifier => "com.Bog.Pathfinder"; public void Initialize() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown ContentManager.collectContentPackProviders += new CollectContentPackProvidersDelegate(ContentManager_collectContentPackProviders); } private void ContentManager_collectContentPackProviders(AddContentPackProviderDelegate addContentPackProvider) { addContentPackProvider.Invoke((IContentPackProvider)(object)this); } public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args) { contentPack.identifier = identifier; contentPack.bodyPrefabs.Add(bodyPrefabs.ToArray()); contentPack.masterPrefabs.Add(masterPrefabs.ToArray()); contentPack.projectilePrefabs.Add(projectilePrefabs.ToArray()); contentPack.survivorDefs.Add(survivorDefs.ToArray()); contentPack.unlockableDefs.Add(unlockableDefs.ToArray()); contentPack.skillDefs.Add(skillDefs.ToArray()); contentPack.skillFamilies.Add(skillFamilies.ToArray()); contentPack.entityStateTypes.Add(entityStates.ToArray()); contentPack.buffDefs.Add(buffDefs.ToArray()); contentPack.effectDefs.Add(effectDefs.ToArray()); contentPack.networkSoundEventDefs.Add(networkSoundEventDefs.ToArray()); args.ReportProgress(1f); yield break; } public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args) { ContentPack.Copy(contentPack, args.output); args.ReportProgress(1f); yield break; } public IEnumerator FinalizeAsync(FinalizeAsyncArgs args) { args.ReportProgress(1f); yield break; } } internal class Content { public static void AddCharacterBodyPrefab(GameObject bprefab) { ContentPacks.bodyPrefabs.Add(bprefab); } public static void AddMasterPrefab(GameObject prefab) { ContentPacks.masterPrefabs.Add(prefab); } public static void AddProjectilePrefab(GameObject prefab) { ContentPacks.projectilePrefabs.Add(prefab); } public static void AddSurvivorDef(SurvivorDef survivorDef) { ContentPacks.survivorDefs.Add(survivorDef); } public static void AddUnlockableDef(UnlockableDef unlockableDef) { ContentPacks.unlockableDefs.Add(unlockableDef); } public static void AddSkillDef(SkillDef skillDef) { ContentPacks.skillDefs.Add(skillDef); } public static void AddSkillFamily(SkillFamily skillFamily) { ContentPacks.skillFamilies.Add(skillFamily); } public static void AddEntityState(Type entityState) { ContentPacks.entityStates.Add(entityState); } public static void AddBuffDef(BuffDef buffDef) { ContentPacks.buffDefs.Add(buffDef); } public static void AddEffectDef(EffectDef effectDef) { ContentPacks.effectDefs.Add(effectDef); } public static void AddNetworkSoundEventDef(NetworkSoundEventDef networkSoundEventDef) { ContentPacks.networkSoundEventDefs.Add(networkSoundEventDef); } } internal static class Helpers { internal const string agilePrefix = "<style=cIsUtility>Agile.</style> "; internal static string ScepterDescription(string desc) { return "\n<color=#d299ff>SCEPTER: " + desc + "</color>"; } public static T[] Append<T>(ref T[] array, List<T> list) { int num = array.Length; int count = list.Count; Array.Resize(ref array, num + count); list.CopyTo(array, num); return array; } public static Func<T[], T[]> AppendDel<T>(List<T> list) { return (T[] r) => Append(ref r, list); } } internal static class ItemDisplays { private static Dictionary<string, GameObject> itemDisplayPrefabs = new Dictionary<string, GameObject>(); internal static void PopulateDisplays() { PopulateFromBody("MageBody"); PopulateFromBody("LunarExploderBody"); PopulateCustomLightningArm(); } private static void PopulateFromBody(string bodyName) { ItemDisplayRuleSet itemDisplayRuleSet = ((Component)LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/" + bodyName).GetComponent<ModelLocator>().modelTransform).GetComponent<CharacterModel>().itemDisplayRuleSet; KeyAssetRuleGroup[] keyAssetRuleGroups = itemDisplayRuleSet.keyAssetRuleGroups; for (int i = 0; i < keyAssetRuleGroups.Length; i++) { ItemDisplayRule[] rules = keyAssetRuleGroups[i].displayRuleGroup.rules; for (int j = 0; j < rules.Length; j++) { GameObject followerPrefab = rules[j].followerPrefab; if (Object.op_Implicit((Object)(object)followerPrefab)) { string key = ((Object)followerPrefab).name?.ToLowerInvariant(); if (!itemDisplayPrefabs.ContainsKey(key)) { itemDisplayPrefabs[key] = followerPrefab; } } } } } private static void PopulateCustomLightningArm() { GameObject val = PrefabAPI.InstantiateClone(itemDisplayPrefabs["displaylightningarmright"], "DisplayLightningCustom", false); LimbMatcher component = val.GetComponent<LimbMatcher>(); component.limbPairs[0].targetChildLimb = "LightningArm1"; component.limbPairs[1].targetChildLimb = "LightningArm2"; component.limbPairs[2].targetChildLimb = "LightningArmEnd"; itemDisplayPrefabs["displaylightningarmcustom"] = val; } public static GameObject LoadDisplay(string name) { if (itemDisplayPrefabs.ContainsKey(name.ToLowerInvariant()) && Object.op_Implicit((Object)(object)itemDisplayPrefabs[name.ToLowerInvariant()])) { return itemDisplayPrefabs[name.ToLowerInvariant()]; } Log.Error("item display " + name + " returned null"); return null; } } internal static class Materials { private static List<Material> cachedMaterials = new List<Material>(); public static Material CreateHopooMaterial(string materialName) { //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Expected O, but got Unknown Material val = cachedMaterials.Find(delegate(Material mat) { materialName.Replace(" (Instance)", ""); return ((Object)mat).name.Contains(materialName); }); if (Object.op_Implicit((Object)(object)val)) { return val; } val = PathfinderAssets.mainAssetBundle.LoadAsset<Material>(materialName); if (!Object.op_Implicit((Object)(object)val)) { Log.Error("Failed to load material: " + materialName + " - Check to see that the material in your Unity project matches this name"); return new Material(PathfinderAssets.hotpoo); } return val.SetHopooMaterial(); } public static Material SetHopooMaterial(this Material tempMat) { //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) if (cachedMaterials.Contains(tempMat)) { return tempMat; } float? num = null; float? num2 = null; Color? val = null; if (tempMat.IsKeywordEnabled("_NORMALMAP")) { num = tempMat.GetFloat("_BumpScale"); } if (tempMat.IsKeywordEnabled("_EMISSION")) { val = tempMat.GetColor("_EmissionColor"); } if (tempMat.IsKeywordEnabled("CUTOUT")) { num2 = tempMat.GetFloat("_Cutoff"); } tempMat.shader = PathfinderAssets.hotpoo; tempMat.SetColor("_Color", tempMat.GetColor("_Color")); tempMat.SetTexture("_MainTex", tempMat.GetTexture("_MainTex")); tempMat.SetTexture("_EmTex", tempMat.GetTexture("_EmissionMap")); tempMat.EnableKeyword("DITHER"); if (num.HasValue) { tempMat.SetFloat("_NormalStrength", num.Value); } if (val.HasValue) { tempMat.SetColor("_EmColor", val.Value); tempMat.SetFloat("_EmPower", 1f); } if (num2.HasValue) { tempMat.EnableKeyword("CUTOUT"); tempMat.SetFloat("_Cutoff", num2.Value); } if (tempMat.IsKeywordEnabled("NOCULL")) { tempMat.SetInt("_Cull", 0); } if (tempMat.IsKeywordEnabled("LIMBREMOVAL")) { tempMat.SetInt("_LimbRemovalOn", 1); } cachedMaterials.Add(tempMat); return tempMat; } public static Material MakeUnique(this Material material) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown if (cachedMaterials.Contains(material)) { return new Material(material); } return material; } public static Material SetColor(this Material material, Color color) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) material.SetColor("_Color", color); return material; } public static Material SetNormal(this Material material, float normalStrength = 1f) { material.SetFloat("_NormalStrength", normalStrength); return material; } public static Material SetEmission(this Material material) { return material.SetEmission(1f); } public static Material SetEmission(this Material material, float emission) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) return material.SetEmission(emission, Color.white); } public static Material SetEmission(this Material material, float emission, Color emissionColor) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) material.SetFloat("_EmPower", emission); material.SetColor("_EmColor", emissionColor); return material; } public static Material SetCull(this Material material, bool cull = false) { material.SetInt("_Cull", cull ? 1 : 0); return material; } } internal static class PathfinderAssets { internal static AssetBundle mainAssetBundle; internal static GameObject BatteryMeter; internal static GameObject commandCrosshair; internal static GameObject thrustEffect; internal static GameObject thrustTipImpact; internal static GameObject dashEffect; internal static GameObject javEffect; internal static GameObject vaultEffect; internal static GameObject lightningRingEffect; internal static GameObject lineVisualizer; internal static GameObject explosionVisualizer; internal static GameObject squallEvisEffect; internal static GameObject squallDashEffect; internal static GameObject squallFollowFlash; internal static GameObject squallAttackFlash; internal static NetworkSoundEventDef swordHitSoundEvent; internal static Shader hotpoo = LegacyResourcesAPI.Load<Shader>("Shaders/Deferred/HGStandard"); internal static Material commandoMat; private static string[] assetNames = new string[0]; private const string assetFolder = "PF_Assets"; private const string assetbundleName = "pathfinderassets"; private const string soundbankFolder = "PF_Soundbanks"; private const string soundbankName = "PathfinderBank.bnk"; private const string csProjName = "Pathfinder"; public static string AssetBundlePath => Path.Combine(Path.GetDirectoryName(PathfinderPlugin.PInfo.Location), "PF_Assets", "pathfinderassets"); internal static void Initialize() { bool flag = false; LoadAssetBundle(); PopulateAssets(); } internal static void LoadAssetBundle() { try { if ((Object)(object)mainAssetBundle == (Object)null) { mainAssetBundle = AssetBundle.LoadFromFile(AssetBundlePath); } if (Object.op_Implicit((Object)(object)mainAssetBundle)) { Log.Warning("Morris asset bundle loaded successfully"); } } catch (Exception ex) { Log.Error("Failed to load assetbundle. Make sure your assetbundle name is setup correctly\n" + ex); return; } assetNames = mainAssetBundle.GetAllAssetNames(); } internal static void PopulateAssets() { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: 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_0057: 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_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: 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_0100: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_024e: Unknown result type (might be due to invalid IL or missing references) //IL_0253: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02a8: Unknown result type (might be due to invalid IL or missing references) //IL_02bb: Unknown result type (might be due to invalid IL or missing references) //IL_02c0: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)mainAssetBundle)) { Log.Error("There is no AssetBundle to load assets from."); return; } thrustEffect = LoadEffect("SpearThrust", parentToTransform: false); thrustTipImpact = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Merc/ImpactMercFocusedAssault.prefab").WaitForCompletion(); dashEffect = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/SprintOutOfCombat/SprintActivate.prefab").WaitForCompletion(); javEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Vagrant/VagrantTrackingBombExplosion.prefab").WaitForCompletion(), "JavelinExplosionPrefab"); if (!Object.op_Implicit((Object)(object)javEffect.GetComponent<NetworkIdentity>())) { javEffect.AddComponent<NetworkIdentity>(); } AddNewEffectDef(javEffect, "Play_mage_m2_impact"); vaultEffect = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Feather/FeatherEffect.prefab").WaitForCompletion(); lightningRingEffect = mainAssetBundle.LoadAsset<GameObject>("LightningRing"); Texture2D val = mainAssetBundle.LoadAsset<Texture2D>("Blots"); Texture2D val2 = Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/Common/texCloudLightning1.png").WaitForCompletion(); Material material = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/TPHealingNova/matGlowFlowerAreaIndicator.mat").WaitForCompletion(); lightningRingEffect.AddComponent<NetworkIdentity>(); ParticleSystemRenderer component = ((Component)lightningRingEffect.transform.GetChild(0)).GetComponent<ParticleSystemRenderer>(); ((Renderer)component).material = material; ((Renderer)component).material.SetTexture("_Cloud1Tex", (Texture)(object)val2); ((Renderer)component).material.SetTexture("_Cloud2Tex", (Texture)(object)val2); ((Renderer)component).material.SetColor("_TintColor", Color.blue); ((Renderer)component).material.SetFloat("_RimPower", 6f); ((Renderer)component).material.SetFloat("_RimStrength", 1f); ParticleSystemRenderer component2 = ((Component)lightningRingEffect.transform.GetChild(0).GetChild(0)).GetComponent<ParticleSystemRenderer>(); ((Renderer)component2).material = material; ((Renderer)component2).material.SetTexture("_Cloud1Tex", (Texture)(object)val2); ((Renderer)component2).material.SetTexture("_Cloud2Tex", (Texture)(object)val2); ((Renderer)component2).material.SetFloat("_RimPower", 7f); ((Renderer)component2).material.SetColor("_TintColor", Color.green); BatteryMeter = mainAssetBundle.LoadAsset<GameObject>("BatteryMeter"); TextMeshProUGUI componentInChildren = BatteryMeter.GetComponentInChildren<TextMeshProUGUI>(); ((TMP_Text)componentInChildren).font = Addressables.LoadAssetAsync<TMP_FontAsset>((object)"RoR2/Base/Common/Fonts/Bombardier/tmpBombDropshadow.asset").WaitForCompletion(); squallFollowFlash = LoadEffect("FlashFollow"); squallAttackFlash = LoadEffect("FlashAttack"); squallEvisEffect = LoadEffect("SquallEvisEffect"); squallDashEffect = LoadEffect("SquallDash"); lineVisualizer = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/BasicThrowableVisualizer.prefab").WaitForCompletion(); explosionVisualizer = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Huntress/HuntressArrowRainIndicator.prefab").WaitForCompletion(); } private static GameObject CreateTracer(string originalTracerName, string newTracerName) { if ((Object)(object)LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/Tracers/" + originalTracerName) == (Object)null) { return null; } GameObject val = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/Tracers/" + originalTracerName), newTracerName, true); if (!Object.op_Implicit((Object)(object)val.GetComponent<EffectComponent>())) { val.AddComponent<EffectComponent>(); } if (!Object.op_Implicit((Object)(object)val.GetComponent<VFXAttributes>())) { val.AddComponent<VFXAttributes>(); } if (!Object.op_Implicit((Object)(object)val.GetComponent<NetworkIdentity>())) { val.AddComponent<NetworkIdentity>(); } val.GetComponent<Tracer>().speed = 250f; val.GetComponent<Tracer>().length = 50f; AddNewEffectDef(val); return val; } internal static NetworkSoundEventDef CreateNetworkSoundEventDef(string eventName) { NetworkSoundEventDef val = ScriptableObject.CreateInstance<NetworkSoundEventDef>(); val.akId = AkSoundEngine