Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of FajisBastianPatch v1.2.0
Faji'sBastianRework.dll
Decompiled 2 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using Bastian; using BepInEx; using BepInEx.Configuration; using EntityStates; using EntityStates.Merc; using HarmonyLib; using KinematicCharacterController; using R2API; using RoR2; using RoR2.Skills; using UnityEngine; using UnityEngine.Networking; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("Faji'sBastianRework")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("HP")] [assembly: AssemblyProduct("Faji'sBastianRework")] [assembly: AssemblyCopyright("Copyright © HP 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("e7143390-952a-4efc-910e-7b0468bfa1ce")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace BastianPatch; public static class BastianOverrides { public static void Apply() { Debug.Log((object)"[BastianPatch] Apply() called"); LanguageAPI.Add("BASTIAN_M2", "Ion Burst / Ion Channel"); LanguageAPI.Add("BASTIAN_M2_DESCRIPTION", "<style=cIsUtility>TAP:</style> Fire a quick ion shot for <style=cIsDamage>200% damage</style>.\n<style=cIsUtility>HOLD:</style> Sacrifice a portion of your health to greatly increase damage. If you have at least <style=cIsUtility>2 Ion Charges</style>, the shot ricochets to another target. Each additional 2 charges adds another bounce, up to <style=cIsUtility>5 total targets</style> at <style=cIsUtility>10 Ion Charges</style>."); LanguageAPI.Add("BASTIAN_UTIL", "Dash / Empowered Dash"); LanguageAPI.Add("BASTIAN_UTIL_DESCRIPTION", "<style=cIsUtility>TAP:</style> Dash forward, <style=cIsUtility>stunning</style> nearby enemies.\n<style=cIsUtility>HOLD:</style> Sacrifice health to trigger a powerful explosion. Consumes <style=cIsUtility>15 Ion Charges</style> to grant the <style=cIsUtility>Evasive</style> buff to yourself and nearby allies, enhancing mobility and survivability."); LanguageAPI.Add("BASTIAN_SPEC", "Ion Release / Ion Detonation"); LanguageAPI.Add("BASTIAN_SPEC_DESCRIPTION", "<style=cIsUtility>TAP:</style> Consume all Ion to heal based on stacks and gain speed. <style=cIsUtility>While this skill is recharging, you cannot generate Ion Charges.</style>\n<style=cIsUtility>HOLD:</style> Sacrifice health to unleash a massive explosion, granting team buffs. <style=cIsUtility>While this skill is recharging, you cannot generate Ion Charges.</style>"); LanguageAPI.Add("BASTIAN_SPEC_KEYWORD", "Evasive: Gain <style=cIsUtility>35% movement speed</style>, <style=cIsUtility>+X% regen</style>, and augment your abilities. While active, Ion gain is halved."); } } [BepInPlugin("com.OnlyFaji.bastianpatch", "Bastian Patch", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { public const string PluginGuid = "com.OnlyFaji.bastianpatch"; public const string PluginName = "Bastian Patch"; public const string PluginVersion = "1.0.0"; public static BuffDef HiddenInvincibility; public static BuffDef SpeedBuff; public static uint DashFastEventId; public static GameObject ExplosionEffectPrefab; private void Awake() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) new Harmony("com.OnlyFaji.bastianpatch").PatchAll(); RicochetHandler.InitConfig(((BaseUnityPlugin)this).Config); Language.onCurrentLanguageChanged += BastianOverrides.Apply; Type type = AccessTools.TypeByName("Bastian.Prefabs"); if (type == null) { ((BaseUnityPlugin)this).Logger.LogError((object)"[BastianPatch] Could not find Bastian.Prefabs!"); return; } object? value = AccessTools.Field(type, "muzzleflash").GetValue(null); TapSecondary.muzzleflash = (GameObject)((value is GameObject) ? value : null); object? value2 = AccessTools.Field(type, "tracer").GetValue(null); TapSecondary.tracer = (GameObject)((value2 is GameObject) ? value2 : null); object? value3 = AccessTools.Field(type, "bulletImpact").GetValue(null); TapSecondary.bulletImpact = (GameObject)((value3 is GameObject) ? value3 : null); HoldSecondary.muzzleflash = TapSecondary.muzzleflash; HoldSecondary.tracer = TapSecondary.tracer; HoldSecondary.bulletImpact = TapSecondary.bulletImpact; object? value4 = AccessTools.Field(type, "speed").GetValue(null); SpeedBuff = (BuffDef)((value4 is BuffDef) ? value4 : null); object? value5 = AccessTools.Field(type, "explosionEffect").GetValue(null); ExplosionEffectPrefab = (GameObject)((value5 is GameObject) ? value5 : null); Type type2 = AccessTools.TypeByName("Bastian.Buffs"); if (type2 != null) { object? value6 = AccessTools.Field(type2, "HiddenInvincibility").GetValue(null); HiddenInvincibility = (BuffDef)((value6 is BuffDef) ? value6 : null); } Type type3 = AccessTools.TypeByName("Bastian.Sounds"); if (type3 != null) { FieldInfo fieldInfo = AccessTools.Field(type3, "Play_Bastian_DashFast"); if (fieldInfo != null) { DashFastEventId = (uint)fieldInfo.GetValue(null); } } Type type4 = AccessTools.TypeByName("Bastian.Configs"); if (type4 == null) { ((BaseUnityPlugin)this).Logger.LogError((object)"[BastianPatch] Could not find Bastian.Configs!"); return; } FieldInfo fieldInfo2 = AccessTools.Field(type4, "M2_Damage"); if (fieldInfo2 != null) { object value7 = fieldInfo2.GetValue(null); if (value7 != null) { PropertyInfo property = value7.GetType().GetProperty("Value"); if (property != null) { float num = (HoldSecondary.baseDamageCoefficient = (TapSecondary.damageCoefficient = (float)property.GetValue(value7))); ((BaseUnityPlugin)this).Logger.LogInfo((object)$"[BastianPatch] Configs: M2_Damage={num}"); } } } HoldUtilityDash.sacrificePercent = ((BaseUnityPlugin)this).Config.Bind<float>("Utility", "SacrificePercent", 0.25f, "Fraction of current HP to sacrifice on Hold Utility Dash").Value; HoldUtilityDash.baseDamageCoefficient = ((BaseUnityPlugin)this).Config.Bind<float>("Utility", "BaseDamageCoefficient", 5f, "Base damage coefficient for Hold Utility Dash (500% = 5.0)").Value; HoldUtilityDash.sacrificeScaling = ((BaseUnityPlugin)this).Config.Bind<float>("Utility", "SacrificeScaling", 0.01f, "Scaling factor applied per HP lost for Hold Utility Dash").Value; TapSpecial.healPerStack = ((BaseUnityPlugin)this).Config.Bind<float>("Special", "Tap_HealPerIonStack", 0.01f, "Heal fraction of max HP per Ion stack consumed on Tap Special (0.01 = 1%)").Value; HoldSpecial.sacrificePercent = ((BaseUnityPlugin)this).Config.Bind<float>("Special", "Hold_SacrificePercent", 0.75f, "Fraction of current HP to sacrifice on Hold Special (0.75 = 75%)").Value; HoldSpecial.baseDamageCoefficient = ((BaseUnityPlugin)this).Config.Bind<float>("Special", "Hold_BaseDamageCoefficient", 5f, "Base damage coefficient for Hold Special (500% = 5.0)").Value; HoldSpecial.ionScaling = ((BaseUnityPlugin)this).Config.Bind<float>("Special", "Hold_IonScalingPerStack", 50f, "Additive damage coefficient gained per Ion stack consumed on Hold Special").Value; HoldSpecial.sacrificeScaling = ((BaseUnityPlugin)this).Config.Bind<float>("Special", "Hold_SacrificeScaling", 0.01f, "Additive damage coefficient gained per HP lost on Hold Special").Value; RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, (Action)delegate { //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) SkillDef val = SkillCatalog.allSkillDefs.FirstOrDefault((Func<SkillDef, bool>)((SkillDef sd) => sd.skillNameToken == "BASTIAN_M2")); if ((Object)(object)val != (Object)null) { val.activationState = new SerializableEntityStateType(typeof(SecondaryDispatcher)); val.activationStateMachineName = "Weapon"; val.baseMaxStock = 8; val.stockToConsume = 0; val.beginSkillCooldownOnSkillEnd = true; val.mustKeyPress = true; } SkillDef val2 = SkillCatalog.allSkillDefs.FirstOrDefault((Func<SkillDef, bool>)((SkillDef sd) => sd.skillNameToken == "BASTIAN_UTIL")); if ((Object)(object)val2 != (Object)null) { val2.activationState = new SerializableEntityStateType(typeof(UtilityDispatcher)); val2.activationStateMachineName = "Body"; val2.baseMaxStock = 3; val2.stockToConsume = 0; val2.beginSkillCooldownOnSkillEnd = true; val2.mustKeyPress = true; } SkillDef val3 = SkillCatalog.allSkillDefs.FirstOrDefault((Func<SkillDef, bool>)((SkillDef sd) => sd.skillNameToken == "BASTIAN_SPEC")); if ((Object)(object)val3 != (Object)null) { val3.activationState = new SerializableEntityStateType(typeof(SpecialDispatcher)); val3.activationStateMachineName = "Body"; val3.baseMaxStock = 1; val3.stockToConsume = 0; val3.beginSkillCooldownOnSkillEnd = true; val3.mustKeyPress = true; } }); } private void Start() { ((BaseUnityPlugin)this).Logger.LogInfo((object)"[BastianPatch] Calling Apply() in Start()"); BastianOverrides.Apply(); } } [HarmonyPatch(typeof(BlastDamageBuildupController), "FillChargeAuthority")] public static class BlastChargePatch { private static bool Prefix(BlastDamageBuildupController __instance) { CharacterBody component = ((Component)__instance).GetComponent<CharacterBody>(); if ((Object)(object)component == (Object)null) { return true; } SkillLocator skillLocator = component.skillLocator; if ((Object)(object)skillLocator == (Object)null || (Object)(object)skillLocator.special == (Object)null) { return true; } if (skillLocator.special.cooldownRemaining > 0f) { return false; } return true; } } public class HoldSecondary : BaseSkillState { public static GameObject muzzleflash; public static GameObject tracer; public static GameObject bulletImpact; public static float baseDamageCoefficient = 2f; public static float sacrificePercent = 0.15f; public static float sacrificeScaling = 0.007f; private float duration; private bool hasFired; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = 0.5f / ((BaseState)this).attackSpeedStat; Debug.Log((object)"[BastianPatch] Entered HoldSecondary state!"); if ((Object)(object)((EntityState)this).skillLocator?.secondary != (Object)null && ((EntityState)this).skillLocator.secondary.stock > 0) { ((EntityState)this).skillLocator.secondary.DeductStock(1); } ((EntityState)this).PlayAnimation("Gesture, Aimed", "Shoot", "M2", duration, 0f); ((EntityState)this).PlayAnimation("Gesture, Override", "BufferEmpty"); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (!hasFired && ((EntityState)this).fixedAge >= 0.1f * duration) { hasFired = true; FireEmpoweredBullet(); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } private void FireEmpoweredBullet() { //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0087: 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_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Expected O, but got Unknown //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: 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_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011d: 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_012b: 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_0143: 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_0159: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_019a: Expected O, but got Unknown //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Expected O, but got Unknown Util.PlaySound("Play_Bastian_Fire", ((EntityState)this).gameObject); EffectManager.SimpleMuzzleFlash(muzzleflash, ((EntityState)this).gameObject, "fingerMuzzle", false); CharacterBody characterBody = ((EntityState)this).characterBody; if ((Object)(object)((characterBody != null) ? characterBody.healthComponent : null) == (Object)null) { return; } float num = ((EntityState)this).characterBody.healthComponent.health * sacrificePercent; ((EntityState)this).characterBody.healthComponent.TakeDamage(new DamageInfo { damage = num, damageType = DamageTypeCombo.op_Implicit((DamageType)1), attacker = ((EntityState)this).gameObject, inflictor = ((EntityState)this).gameObject }); float num2 = num * sacrificeScaling; float num3 = baseDamageCoefficient + num2; float finalDamage = num3 * ((BaseState)this).damageStat; Ray aimRay = ((BaseState)this).GetAimRay(); bool crit = ((BaseState)this).RollCrit(); if (!((EntityState)this).isAuthority) { return; } BulletAttack val = new BulletAttack { owner = ((EntityState)this).gameObject, weapon = ((EntityState)this).gameObject, origin = ((Ray)(ref aimRay)).origin, aimVector = ((Ray)(ref aimRay)).direction, damage = finalDamage, isCrit = crit, tracerEffectPrefab = tracer, hitEffectPrefab = bulletImpact, muzzleName = "fingerMuzzle", force = 150f, procCoefficient = 0.6f, maxDistance = 100f, radius = 1f, falloffModel = (FalloffModel)0 }; val.hitCallback = (HitCallback)delegate(BulletAttack ba, ref BulletHit hitInfo) { if (Object.op_Implicit((Object)(object)hitInfo.hitHurtBox)) { RicochetHandler.HandleRicochet(((EntityState)this).characterBody, hitInfo.hitHurtBox, finalDamage, crit, null); } return BulletAttack.defaultHitCallback.Invoke(ba, ref hitInfo); }; val.Fire(); } 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 HoldSpecial : BaseSkillState { public float charge; public static float sacrificePercent = 0.75f; public static float baseDamageCoefficient = 5f; public static float ionScaling = 0.4f; public static float sacrificeScaling = 0.01f; private float duration = 0.35f; private float fireDelay; private bool hasFired; public override void OnEnter() { ((BaseState)this).OnEnter(); if ((Object)(object)((EntityState)this).skillLocator != (Object)null && (Object)(object)((EntityState)this).skillLocator.special != (Object)null) { ((EntityState)this).skillLocator.special.DeductStock(1); } duration /= ((BaseState)this).attackSpeedStat; fireDelay = duration * 0.16f; ((EntityState)this).PlayCrossfade("FullBody, Override", "Release", "Special", duration, duration * 0.1f); } public override void FixedUpdate() { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0091: 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_009d: 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_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Expected O, but got Unknown //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_0168: 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_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0182: 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_018c: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01c7: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Expected O, but got Unknown ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge < fireDelay && Object.op_Implicit((Object)(object)((EntityState)this).characterMotor)) { ((EntityState)this).characterMotor.velocity = Vector3.zero; } if (((EntityState)this).fixedAge >= fireDelay && !hasFired) { hasFired = true; if (((EntityState)this).isAuthority) { float num = ((EntityState)this).characterBody.healthComponent.health * sacrificePercent; ((EntityState)this).characterBody.healthComponent.TakeDamage(new DamageInfo { damage = num, damageType = DamageTypeCombo.op_Implicit((DamageType)1), attacker = ((EntityState)this).gameObject, inflictor = ((EntityState)this).gameObject }); BlastDamageBuildupController component = ((Component)((EntityState)this).characterBody).GetComponent<BlastDamageBuildupController>(); int num2 = 0; if ((Object)(object)component != (Object)null) { num2 = Mathf.FloorToInt(component.charge); component.charge = 0f; component.SyncCheckBuffs(0f); } float num3 = baseDamageCoefficient + (float)num2 * ionScaling; float num4 = num * sacrificeScaling; float num5 = num3 + num4; float baseDamage = num5 * ((BaseState)this).damageStat; new BlastAttack { attacker = ((EntityState)this).gameObject, inflictor = ((EntityState)this).gameObject, teamIndex = ((EntityState)this).teamComponent.teamIndex, baseDamage = baseDamage, radius = 75f, position = ((EntityState)this).characterBody.corePosition, falloffModel = (FalloffModel)0, procCoefficient = 1f }.Fire(); if ((Object)(object)Plugin.ExplosionEffectPrefab != (Object)null) { EffectManager.SpawnEffect(Plugin.ExplosionEffectPrefab, new EffectData { origin = ((EntityState)this).characterBody.corePosition, scale = 75f }, true); } ((BaseState)this).SmallHop(((EntityState)this).characterMotor, ((EntityState)this).characterBody.jumpPower); } } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } 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 HoldSpecialStart : BaseSkillState { private float duration = 1f; private AimRequest aimRequest; private bool success; private float charge; public override void OnEnter() { //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); duration /= ((BaseState)this).attackSpeedStat; ((EntityState)this).PlayAnimation("FullBody, Override", "Charge", "Special", duration, 0f); AkSoundEngine.PostEvent(Plugin.DashFastEventId, ((EntityState)this).gameObject); Transform val = ((BaseState)this).FindModelChild("center"); if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)Plugin.ExplosionEffectPrefab)) { Object.Instantiate<GameObject>(Plugin.ExplosionEffectPrefab, val.position, Quaternion.identity, val); } if ((Object)(object)((EntityState)this).cameraTargetParams != (Object)null) { aimRequest = ((EntityState)this).cameraTargetParams.RequestAimType((AimType)2); } if ((Object)(object)((EntityState)this).characterMotor != (Object)null) { ((BaseCharacterController)((EntityState)this).characterMotor).Motor.ForceUnground(0.1f); ((BaseState)this).SmallHop(((EntityState)this).characterMotor, 16f); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && ((EntityState)this).isAuthority) { ((EntityState)this).characterMotor.velocity.y += 11f * Time.deltaTime; } if (((EntityState)this).fixedAge >= duration) { success = true; if (((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextState((EntityState)(object)new HoldSpecial { charge = charge }); } } } public override void OnExit() { ((EntityState)this).OnExit(); AimRequest obj = aimRequest; if (obj != null) { obj.Dispose(); } if (!success) { ((EntityState)this).PlayAnimation("FullBody, Override", "BufferEmpty"); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)1; } public override void OnSerialize(NetworkWriter writer) { ((BaseSkillState)this).OnSerialize(writer); writer.Write(charge); } public override void OnDeserialize(NetworkReader reader) { ((BaseSkillState)this).OnDeserialize(reader); charge = reader.ReadSingle(); } } internal class HoldUtilityDash : BaseSkillState { private Vector3 dashVector; private float duration = 0.35f; private bool appliedEffects; private bool stoppedEarly; public static float sacrificePercent = 0.25f; public static float sacrificeScaling = 0.01f; public static float baseDamageCoefficient = 5f; public override void OnEnter() { //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); if ((Object)(object)((EntityState)this).skillLocator?.utility != (Object)null) { ((EntityState)this).skillLocator.utility.DeductStock(1); } ((EntityState)this).PlayAnimation("FullBody, Override", "Dash", "Utility", duration * 3f, 0f); if (NetworkServer.active && (Object)(object)Plugin.HiddenInvincibility != (Object)null) { ((EntityState)this).characterBody.AddBuff(Plugin.HiddenInvincibility); } Vector3 aimDirection = ((EntityState)this).inputBank.aimDirection; dashVector = ((Vector3)(ref aimDirection)).normalized; } public override void FixedUpdate() { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_007f: 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_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (!stoppedEarly && (Object)(object)((EntityState)this).characterMotor != (Object)null) { CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.rootMotion += dashVector * (((BaseState)this).moveSpeedStat * EvisDash.speedCoefficient * Time.fixedDeltaTime); Vector3 position = ((EntityState)this).transform.position; Vector3 val = dashVector; LayerIndex val2 = LayerIndex.world; int num = LayerMask.op_Implicit(((LayerIndex)(ref val2)).mask); val2 = LayerIndex.entityPrecise; RaycastHit val3 = default(RaycastHit); if (Physics.SphereCast(position, 1f, val, ref val3, 1.5f, num | LayerMask.op_Implicit(((LayerIndex)(ref val2)).mask))) { stoppedEarly = true; } } if (!appliedEffects && (((EntityState)this).fixedAge >= duration || stoppedEarly) && ((EntityState)this).isAuthority) { appliedEffects = true; DoEmpoweredEffects(); } if ((((EntityState)this).fixedAge >= duration || stoppedEarly) && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } private void DoEmpoweredEffects() { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: 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) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: 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_0058: Expected O, but got Unknown //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //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_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: 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) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Expected O, but got Unknown //IL_01c7: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) float num = ((EntityState)this).characterBody.healthComponent.health * sacrificePercent; ((EntityState)this).characterBody.healthComponent.TakeDamage(new DamageInfo { damage = num, damageType = DamageTypeCombo.op_Implicit((DamageType)1), attacker = ((EntityState)this).gameObject, inflictor = ((EntityState)this).gameObject }); float num2 = num * sacrificeScaling; float num3 = baseDamageCoefficient + num2; float baseDamage = num3 * ((BaseState)this).damageStat; new BlastAttack { attacker = ((EntityState)this).gameObject, inflictor = ((EntityState)this).gameObject, teamIndex = ((EntityState)this).teamComponent.teamIndex, baseDamage = baseDamage, radius = 20f, position = ((EntityState)this).characterBody.corePosition, falloffModel = (FalloffModel)0, procCoefficient = 0.6f }.Fire(); if ((Object)(object)Plugin.ExplosionEffectPrefab != (Object)null) { EffectManager.SpawnEffect(Plugin.ExplosionEffectPrefab, new EffectData { origin = ((EntityState)this).characterBody.corePosition, scale = 20f }, true); } ((EntityState)this).PlayCrossfade("FullBody, Override", "Release", "Special", 0.35f, 0.1f); ((BaseState)this).SmallHop(((EntityState)this).characterMotor, ((EntityState)this).characterBody.jumpPower); BlastDamageBuildupController component = ((Component)((EntityState)this).characterBody).GetComponent<BlastDamageBuildupController>(); if (!((Object)(object)component != (Object)null) || !(component.charge >= 15f)) { return; } component.charge -= 15f; component.SyncCheckBuffs(component.charge); if (!((Object)(object)Plugin.SpeedBuff != (Object)null)) { return; } foreach (TeamComponent teamMember in TeamComponent.GetTeamMembers(((EntityState)this).teamComponent.teamIndex)) { if (Vector3.Distance(teamMember.body.corePosition, ((EntityState)this).characterBody.corePosition) <= 20f) { teamMember.body.AddTimedBuff(Plugin.SpeedBuff, 10f); } } } public override void OnExit() { if (NetworkServer.active && (Object)(object)Plugin.HiddenInvincibility != (Object)null) { ((EntityState)this).characterBody.RemoveBuff(Plugin.HiddenInvincibility); } ((EntityState)this).OnExit(); } } internal class HoldUtilityStart : BaseState { private float duration = 0.29f; public override void OnEnter() { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); duration /= base.attackSpeedStat; if ((Object)(object)((EntityState)this).characterMotor != (Object)null) { ((EntityState)this).characterMotor.velocity = Vector3.zero; } ((EntityState)this).PlayAnimation("FullBody, Override", "Dash Windup", "Utility", duration, 0f); if (Plugin.DashFastEventId != 0) { AkSoundEngine.PostEvent(Plugin.DashFastEventId, ((EntityState)this).gameObject); } ((EntityState)this).characterBody.SetAimTimer(0f); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextState((EntityState)(object)new HoldUtilityDash()); } } } public static class RicochetHandler { private static ConfigEntry<int> MaxBounces; private static ConfigEntry<float> BounceRadius; private static ConfigEntry<int> ChargeCostPerBounce; private static readonly GameObject Tracer = (GameObject)AccessTools.Field(AccessTools.TypeByName("Bastian.Prefabs"), "tracer").GetValue(null); public static void InitConfig(ConfigFile config) { MaxBounces = config.Bind<int>("Ricochet", "MaxBounces", 5, "Maximum number of ricochet bounces"); BounceRadius = config.Bind<float>("Ricochet", "BounceRadius", 40f, "Maximum distance (meters) to search for the next ricochet target"); ChargeCostPerBounce = config.Bind<int>("Ricochet", "ChargeCostPerBounce", 2, "Ion charges consumed per ricochet bounce"); } public static void HandleRicochet(CharacterBody attackerBody, HurtBox initialTarget, float baseDamage, bool isCrit, object damageTypeCombo) { //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_013e: 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) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Expected O, but got Unknown //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_01e2: 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_01f5: Unknown result type (might be due to invalid IL or missing references) //IL_01fa: Unknown result type (might be due to invalid IL or missing references) //IL_0201: Expected O, but got Unknown BlastDamageBuildupController component = ((Component)attackerBody).GetComponent<BlastDamageBuildupController>(); if ((Object)(object)component == (Object)null) { return; } int num = (int)component.charge; int num2 = Mathf.Min(MaxBounces.Value, num / ChargeCostPerBounce.Value); if (num2 <= 0) { return; } HashSet<HurtBox> hashSet = new HashSet<HurtBox> { initialTarget }; HurtBox val = initialTarget; for (int i = 0; i < num2; i++) { HurtBox val2 = FindNextTarget(val, hashSet, BounceRadius.Value); if ((Object)(object)val2 == (Object)null) { break; } component.charge -= (float)ChargeCostPerBounce.Value; if (component.charge < 0f) { component.charge = 0f; } component.SyncCheckBuffs(component.charge); hashSet.Add(val2); DamageType val3 = (DamageType)0; if (damageTypeCombo is DamageTypeCombo val4) { val3 = val4.damageType; } Vector3 val5 = ((Component)val2).transform.position - ((Component)val).transform.position; Vector3 normalized = ((Vector3)(ref val5)).normalized; BulletAttack val6 = new BulletAttack { owner = ((Component)attackerBody).gameObject, weapon = ((Component)attackerBody).gameObject, origin = ((Component)val).transform.position, aimVector = normalized, damage = baseDamage, isCrit = isCrit, procCoefficient = 0.6f, damageType = DamageTypeCombo.op_Implicit(val3), falloffModel = (FalloffModel)0, maxDistance = BounceRadius.Value, radius = 1f, tracerEffectPrefab = Tracer }; val6.Fire(); if ((Object)(object)Tracer != (Object)null) { EffectData val7 = new EffectData { origin = ((Component)val).transform.position, start = ((Component)val2).transform.position }; val7.SetHurtBoxReference(val2); EffectManager.SpawnEffect(Tracer, val7, true); } val = val2; } } private static HurtBox FindNextTarget(HurtBox from, HashSet<HurtBox> alreadyHit, float radius) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_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_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Expected O, but got Unknown BullseyeSearch val = new BullseyeSearch { searchOrigin = ((Component)from).transform.position, searchDirection = Vector3.zero, maxDistanceFilter = radius, teamMaskFilter = TeamMask.GetEnemyTeams(from.healthComponent.body.teamComponent.teamIndex), sortMode = (SortMode)1, filterByLoS = false }; val.RefreshCandidates(); List<HurtBox> list = val.GetResults().ToList(); if (list.Count <= 1) { return null; } foreach (HurtBox item in list) { if (!alreadyHit.Contains(item)) { return item; } } foreach (HurtBox item2 in list) { if ((Object)(object)item2 != (Object)(object)from) { return item2; } } return null; } } public class SecondaryDispatcher : BaseSkillState { private bool transitioned; public static float HoldThreshold = 0.25f; public override void OnEnter() { ((BaseState)this).OnEnter(); transitioned = false; Debug.Log((object)"[BastianPatch] Entered SecondaryDispatcher state!"); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (!transitioned) { if (!((EntityState)this).inputBank.skill2.down) { Debug.Log((object)"[BastianPatch] Branching to TapSecondary"); ((EntityState)this).outer.SetNextState((EntityState)(object)new TapSecondary()); transitioned = true; } else if (((EntityState)this).fixedAge >= HoldThreshold) { Debug.Log((object)"[BastianPatch] Branching to HoldSecondary"); ((EntityState)this).outer.SetNextState((EntityState)(object)new HoldSecondary()); transitioned = true; } } } 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 SpecialDispatcher : BaseSkillState { private float pressStartTime; private bool transitioned; public static float HoldThreshold = 0.2f; public override void OnEnter() { ((BaseState)this).OnEnter(); pressStartTime = Time.time; transitioned = false; Debug.Log((object)"[BastianPatch] Entered SpecialDispatcher state!"); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (!transitioned) { if (!((EntityState)this).inputBank.skill4.down) { Debug.Log((object)"[BastianPatch] Branching to TapSpecial"); ((EntityState)this).outer.SetNextState((EntityState)(object)new TapSpecial()); transitioned = true; } else if (Time.time - pressStartTime >= HoldThreshold) { Debug.Log((object)"[BastianPatch] Branching to HoldSpecialStart"); ((EntityState)this).outer.SetNextState((EntityState)(object)new HoldSpecialStart()); transitioned = true; } } } 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 TapSecondary : BaseSkillState { public static GameObject muzzleflash; public static GameObject tracer; public static GameObject bulletImpact; public static float damageCoefficient = 2f; private float duration; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = 0.5f / ((BaseState)this).attackSpeedStat; Debug.Log((object)"[BastianPatch] Entered TapSecondary state!"); if (Object.op_Implicit((Object)(object)((EntityState)this).skillLocator) && Object.op_Implicit((Object)(object)((EntityState)this).skillLocator.secondary)) { ((EntityState)this).skillLocator.secondary.DeductStock(1); } ((EntityState)this).PlayAnimation("Gesture, Aimed", "Shoot", "M2", duration, 0f); ((EntityState)this).PlayAnimation("Gesture, Override", "BufferEmpty"); FireBullet(); ((EntityState)this).outer.SetNextStateToMain(); } private void FireBullet() { //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) //IL_003e: 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_004f: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_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_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0076: 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_0094: 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_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: 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_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) Util.PlaySound("Play_Bastian_Fire", ((EntityState)this).gameObject); EffectManager.SimpleMuzzleFlash(muzzleflash, ((EntityState)this).gameObject, "fingerMuzzle", false); Ray aimRay = ((BaseState)this).GetAimRay(); if (((EntityState)this).isAuthority) { new BulletAttack { owner = ((EntityState)this).gameObject, weapon = ((EntityState)this).gameObject, origin = ((Ray)(ref aimRay)).origin, aimVector = ((Ray)(ref aimRay)).direction, damage = damageCoefficient * ((BaseState)this).damageStat, isCrit = ((BaseState)this).RollCrit(), tracerEffectPrefab = tracer, hitEffectPrefab = bulletImpact, muzzleName = "fingerMuzzle", force = 150f, procCoefficient = 0.6f, maxDistance = 100f, radius = 1f, falloffModel = (FalloffModel)0 }.Fire(); } } 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 TapSpecial : BaseSkillState { public static float healPerStack = 0.01f; public override void OnEnter() { //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); if ((Object)(object)((EntityState)this).skillLocator?.special != (Object)null) { ((EntityState)this).skillLocator.special.DeductStock(1); } BlastDamageBuildupController component = ((Component)((EntityState)this).characterBody).GetComponent<BlastDamageBuildupController>(); if ((Object)(object)component != (Object)null && component.charge > 0f) { int num = Mathf.FloorToInt(component.charge); component.charge = 0f; component.SyncCheckBuffs(0f); CharacterBody characterBody = ((EntityState)this).characterBody; if ((Object)(object)((characterBody != null) ? characterBody.healthComponent : null) != (Object)null) { float num2 = ((EntityState)this).characterBody.healthComponent.fullHealth * healPerStack * (float)num; ((EntityState)this).characterBody.healthComponent.Heal(num2, default(ProcChainMask), true); } if ((Object)(object)Plugin.SpeedBuff != (Object)null) { ((EntityState)this).characterBody.AddTimedBuff(Plugin.SpeedBuff, 10f); } if ((Object)(object)Plugin.ExplosionEffectPrefab != (Object)null) { GameObject val = Object.Instantiate<GameObject>(Plugin.ExplosionEffectPrefab, ((EntityState)this).characterBody.corePosition, Quaternion.identity); val.transform.localScale = Vector3.one * 10f; val.AddComponent<ImplodeEffect>(); } } ((EntityState)this).outer.SetNextStateToMain(); } 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 ImplodeEffect : MonoBehaviour { private float lifetime = 0.5f; private float age; private Vector3 startScale; private void Start() { //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) startScale = ((Component)this).transform.localScale; } private void Update() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) age += Time.deltaTime; float num = age / lifetime; ((Component)this).transform.localScale = Vector3.Lerp(startScale, Vector3.zero, num); if (age >= lifetime) { Object.Destroy((Object)(object)((Component)this).gameObject); } } } internal class TapUtilityDash : BaseSkillState { private Vector3 dashVector; private float duration = 0.35f; private readonly float stunRadius = 5f; public override void OnEnter() { //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); if ((Object)(object)((EntityState)this).skillLocator != (Object)null && (Object)(object)((EntityState)this).skillLocator.utility != (Object)null) { ((EntityState)this).skillLocator.utility.DeductStock(1); } ((EntityState)this).PlayAnimation("FullBody, Override", "Dash", "Utility", duration * 3f, 0f); if (NetworkServer.active && (Object)(object)Plugin.HiddenInvincibility != (Object)null) { ((EntityState)this).characterBody.AddBuff(Plugin.HiddenInvincibility); } dashVector = ((EntityState)this).inputBank.aimDirection; } public override void FixedUpdate() { //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_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: 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_0069: 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_0071: 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_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if ((Object)(object)((EntityState)this).characterMotor != (Object)null) { CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.rootMotion += dashVector * (((BaseState)this).moveSpeedStat * EvisDash.speedCoefficient * Time.fixedDeltaTime); } if (NetworkServer.active) { Vector3 position = ((EntityState)this).transform.position; float num = stunRadius; LayerIndex entityPrecise = LayerIndex.entityPrecise; Collider[] array = Physics.OverlapSphere(position, num, LayerMask.op_Implicit(((LayerIndex)(ref entityPrecise)).mask)); Collider[] array2 = array; foreach (Collider val in array2) { HurtBox component = ((Component)val).GetComponent<HurtBox>(); if ((Object)(object)component != (Object)null && (Object)(object)component.healthComponent != (Object)null && component.healthComponent.alive) { TeamMask enemyTeams = TeamMask.GetEnemyTeams(((EntityState)this).teamComponent.teamIndex); if (((TeamMask)(ref enemyTeams)).HasTeam(component.healthComponent.body.teamComponent.teamIndex)) { SetStateOnHurt.SetStunOnObject(((Component)component.healthComponent).gameObject, 1f); } } } } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).PlayCrossfade("FullBody, Override", "Release", "Special", 0.35f, 0.1f); ((BaseState)this).SmallHop(((EntityState)this).characterMotor, ((EntityState)this).characterBody.jumpPower * 0.5f); ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { if (NetworkServer.active && (Object)(object)Plugin.HiddenInvincibility != (Object)null) { ((EntityState)this).characterBody.RemoveBuff(Plugin.HiddenInvincibility); } ((EntityState)this).OnExit(); } } internal class TapUtilityStart : BaseState { private float duration = 0.29f; public override void OnEnter() { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); duration /= base.attackSpeedStat; if ((Object)(object)((EntityState)this).characterMotor != (Object)null) { ((EntityState)this).characterMotor.velocity = Vector3.zero; } ((EntityState)this).PlayAnimation("FullBody, Override", "Dash Windup", "Utility", duration, 0f); if (Plugin.DashFastEventId != 0) { AkSoundEngine.PostEvent(Plugin.DashFastEventId, ((EntityState)this).gameObject); } ((EntityState)this).characterBody.SetAimTimer(0f); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextState((EntityState)(object)new TapUtilityDash()); } } } public class UtilityDispatcher : BaseSkillState { private float pressStartTime; private bool transitioned; public static float HoldThreshold = 0.25f; public override void OnEnter() { ((BaseState)this).OnEnter(); pressStartTime = Time.time; transitioned = false; Debug.Log((object)"[BastianPatch] Entered UtilityDispatcher state!"); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (!transitioned) { if (!((EntityState)this).inputBank.skill3.down) { Debug.Log((object)"[BastianPatch] Branching to TapUtilityStart"); ((EntityState)this).outer.SetNextState((EntityState)(object)new TapUtilityStart()); transitioned = true; } else if (Time.time - pressStartTime >= HoldThreshold) { Debug.Log((object)"[BastianPatch] Branching to HoldUtilityStart"); ((EntityState)this).outer.SetNextState((EntityState)(object)new HoldUtilityStart()); transitioned = true; } } } 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; } }