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 Woodie v2.0.3
Woodie.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.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using EmotesAPI; using EntityStates; using EntityStates.BeetleGuardMonster; using EntityStates.BrotherMonster; using EntityStates.Commando; using EntityStates.Croco; using EntityStates.Merc; using EntityStates.Merc.Weapon; using JetBrains.Annotations; using KinematicCharacterController; using On.RoR2; using On.RoR2.Projectile; using R2API; using R2API.Utils; using Rewired.ComponentControls.Effects; using RoR2; using RoR2.Achievements; using RoR2.Navigation; using RoR2.Orbs; using RoR2.Projectile; using RoR2.Skills; using RoR2.UI; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Animations; using UnityEngine.Networking; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = "")] [assembly: AssemblyCompany("Dragonyck")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("Woodie")] [assembly: AssemblyTitle("Woodie")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace Woodie; public static class Achievements { [RegisterAchievement("WOODIE_MASTERY", "ACHIEVEMENT_WOODIE_MASTERY_UNLOCKABLE_ID", null, typeof(SurvivorChallengeServerAchievement))] public class MasteryUnlockable : BaseAchievement { private class SurvivorChallengeServerAchievement : BaseServerAchievement { private BodyIndex requiredVictimBodyIndice; public override void OnInstall() { //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) ((BaseServerAchievement)this).OnInstall(); requiredVictimBodyIndice = BodyCatalog.FindBodyIndex("BrotherHurtBody"); GlobalEventManager.onCharacterDeathGlobal += OnCharacterDeathGlobal; } private void OnCharacterDeathGlobal(DamageReport damageReport) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) if (requiredVictimBodyIndice == damageReport.victimBodyIndex && PlayerCharacterMasterController.instances.Contains(base.serverAchievementTracker.networkUser.master.playerCharacterMasterController)) { ((BaseServerAchievement)this).Grant(); } } public override void OnUninstall() { ((BaseServerAchievement)this).OnUninstall(); GlobalEventManager.onCharacterDeathGlobal -= OnCharacterDeathGlobal; } } public override BodyIndex LookUpRequiredBodyIndex() { //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_000e: Unknown result type (might be due to invalid IL or missing references) return BodyCatalog.FindBodyIndex("WoodieBody"); } public override void OnBodyRequirementMet() { ((BaseAchievement)this).OnBodyRequirementMet(); ((BaseAchievement)this).SetServerTracked(true); } public override void OnBodyRequirementBroken() { ((BaseAchievement)this).SetServerTracked(false); ((BaseAchievement)this).OnBodyRequirementBroken(); } } internal static UnlockableDef masteryUnlock; public static void RegisterUnlockables() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) masteryUnlock = NewUnlockable<MasteryUnlockable>("MASTERY", LoadoutAPI.CreateSkinIcon(new Color(0.9058824f, 0.6039216f, 0.3215686f), Color.white, new Color(0.64706f, 0.48627f, 0.29412f), new Color(0.43529f, 0.32157f, 0.2902f)), "WOODIE: Mastery", "As Woodie, beat Mithrix on Monsoon."); } private static UnlockableDef NewUnlockable<T>(string AchievementIdentifier, Sprite Icon, string Title, string Description) where T : BaseAchievement { string text = "ACHIEVEMENT_WOODIE_"; UnlockableDef val = ScriptableObject.CreateInstance<UnlockableDef>(); string langName = text + AchievementIdentifier + "_NAME"; string langDesc = text + AchievementIdentifier + "_DESCRIPTION"; LanguageAPI.Add(langName, Title); LanguageAPI.Add(langDesc, Description); Func<string> func = () => Language.GetStringFormatted("UNLOCKED_FORMAT", new object[2] { Language.GetString(langName), Language.GetString(langDesc) }); Type typeFromHandle = typeof(T); val.cachedName = text + AchievementIdentifier + "_UNLOCKABLE_ID"; val.getHowToUnlockString = func; val.getUnlockedString = func; val.achievementIcon = Icon; val.sortScore = 200; val.hidden = false; ContentAddition.AddUnlockableDef(val); return val; } } public static class Assets { public static AssetBundle MainAssetBundle; public static void PopulateAssets() { if ((Object)(object)MainAssetBundle == (Object)null) { using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Woodie.woodieassets"); MainAssetBundle = AssetBundle.LoadFromStream(stream); } using Stream stream2 = Assembly.GetExecutingAssembly().GetManifestResourceStream("Woodie.Woodie.bnk"); byte[] array = new byte[stream2.Length]; stream2.Read(array, 0, array.Length); SoundBanks.Add(array); } } internal class AxeThrowHitCallback : MonoBehaviour { public bool Hit; } internal class AxeThrowBehaviour : MonoBehaviour { private GameObject owner; private AxeThrowHitCallback hit; private bool enemyHit; private CharacterBody body; private void FixedUpdate() { ProjectileController component = ((Component)this).GetComponent<ProjectileController>(); if (Object.op_Implicit((Object)(object)component) && (Object)(object)owner == (Object)null) { owner = component.Networkowner; if (Object.op_Implicit((Object)(object)owner) && (Object)(object)hit == (Object)null) { hit = owner.GetComponent<AxeThrowHitCallback>(); } } } private void OnEnable() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown ProjectileImpactExplosion.OnProjectileImpact += new hook_OnProjectileImpact(ProjectileImpactExplosion_OnProjectileImpact); } private void OnDisable() { //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Expected O, but got Unknown if (Object.op_Implicit((Object)(object)hit)) { hit.Hit = true; } if (Object.op_Implicit((Object)(object)body) && enemyHit) { bool flag = true; int buffCount = body.GetBuffCount(Prefabs.aktSpdBuff); if (buffCount < 30 && flag) { body.AddTimedBuff(Prefabs.aktSpdBuff, 3f); flag = false; } } ProjectileImpactExplosion.OnProjectileImpact -= new hook_OnProjectileImpact(ProjectileImpactExplosion_OnProjectileImpact); } private void ProjectileImpactExplosion_OnProjectileImpact(orig_OnProjectileImpact orig, ProjectileImpactExplosion self, ProjectileImpactInfo impactInfo) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, impactInfo); if (!Object.op_Implicit((Object)(object)self) || !Object.op_Implicit((Object)(object)((ProjectileExplosion)self).projectileController) || !Object.op_Implicit((Object)(object)((ProjectileExplosion)self).projectileController.owner) || !((Object)((ProjectileExplosion)self).projectileController.owner).name.Contains("Woodie") || !NetworkServer.active) { return; } CharacterBody component = ((ProjectileExplosion)self).projectileController.owner.GetComponent<CharacterBody>(); body = component; if (Object.op_Implicit((Object)(object)impactInfo.collider)) { HurtBox component2 = ((Component)impactInfo.collider).GetComponent<HurtBox>(); if (Object.op_Implicit((Object)(object)component2) && Object.op_Implicit((Object)(object)component2.healthComponent)) { enemyHit = true; } } } } internal class WoodieBehaviour : HuntressTracker { protected internal class Tracker2 : HuntressTracker { private WoodieBehaviour behaviour; private float stopwatch; private void Awake() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown base.indicator = new Indicator(((Component)this).gameObject, Prefabs.woodieIndicator); } private void OnEnable() { ((HuntressTracker)this).OnEnable(); base.search.minDistanceFilter = 4f; base.maxTrackingDistance = 60f; base.maxTrackingAngle = 35f; base.trackerUpdateFrequency = 10f; behaviour = ((Component)this).GetComponent<WoodieBehaviour>(); } private void FixedUpdate() { //IL_0086: 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_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: 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_00cf: 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) ((HuntressTracker)this).FixedUpdate(); base.trackerUpdateStopwatch = 0f; stopwatch += Time.fixedDeltaTime; if (Object.op_Implicit((Object)(object)behaviour)) { if (behaviour.target && behaviour.enableTracker2 && stopwatch >= 0.1f) { stopwatch = 0f; Ray val = default(Ray); ((Ray)(ref val))..ctor(base.inputBank.aimOrigin, base.inputBank.aimDirection); base.search.teamMaskFilter = TeamMask.GetUnprotectedTeams(base.teamComponent.teamIndex); base.search.filterByLoS = true; base.search.searchOrigin = ((Ray)(ref val)).origin; base.search.searchDirection = ((Ray)(ref val)).direction; base.search.sortMode = (SortMode)1; base.search.maxDistanceFilter = base.maxTrackingDistance; base.search.maxAngleFilter = base.maxTrackingAngle; base.search.RefreshCandidates(); base.search.FilterOutGameObject(((Component)this).gameObject); base.search.FilterOutGameObject(((Component)((HuntressTracker)behaviour).GetTrackingTarget().healthComponent).gameObject); base.trackingTarget = base.search.GetResults().FirstOrDefault(); base.indicator.targetTransform = (Object.op_Implicit((Object)(object)base.trackingTarget) ? ((Component)base.trackingTarget).transform : null); behaviour.target2 = base.trackingTarget; } if (base.indicator != null) { base.indicator.active = behaviour.enableTracker2; } } } } protected internal class Tracker3 : HuntressTracker { private WoodieBehaviour behaviour; private float stopwatch; private void Awake() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown base.indicator = new Indicator(((Component)this).gameObject, Prefabs.woodieIndicator); } private void OnEnable() { ((HuntressTracker)this).OnEnable(); base.search.minDistanceFilter = 4f; base.maxTrackingDistance = 60f; base.maxTrackingAngle = 35f; base.trackerUpdateFrequency = 10f; behaviour = ((Component)this).GetComponent<WoodieBehaviour>(); } private void FixedUpdate() { //IL_0086: 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_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: 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_00cf: 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) ((HuntressTracker)this).FixedUpdate(); base.trackerUpdateStopwatch = 0f; stopwatch += Time.fixedDeltaTime; if (!Object.op_Implicit((Object)(object)behaviour)) { return; } if (behaviour.target && behaviour.enableTracker3 && stopwatch >= 0.1f) { stopwatch = 0f; Ray val = default(Ray); ((Ray)(ref val))..ctor(base.inputBank.aimOrigin, base.inputBank.aimDirection); base.search.teamMaskFilter = TeamMask.GetUnprotectedTeams(base.teamComponent.teamIndex); base.search.filterByLoS = true; base.search.searchOrigin = ((Ray)(ref val)).origin; base.search.searchDirection = ((Ray)(ref val)).direction; base.search.sortMode = (SortMode)1; base.search.maxDistanceFilter = base.maxTrackingDistance; base.search.maxAngleFilter = base.maxTrackingAngle; base.search.RefreshCandidates(); base.search.FilterOutGameObject(((Component)this).gameObject); base.search.FilterOutGameObject(((Component)((HuntressTracker)behaviour).GetTrackingTarget().healthComponent).gameObject); if (Object.op_Implicit((Object)(object)behaviour.target2)) { base.search.FilterOutGameObject(((Component)behaviour.target2.healthComponent).gameObject); } base.trackingTarget = base.search.GetResults().FirstOrDefault(); base.indicator.targetTransform = (Object.op_Implicit((Object)(object)base.trackingTarget) ? ((Component)base.trackingTarget).transform : null); behaviour.target3 = base.trackingTarget; } if (base.indicator != null) { base.indicator.active = behaviour.enableTracker3; } } } public bool canExecute = true; public bool enable = true; public bool charge1 = false; public bool enableTracker2 = false; public bool enableTracker3 = false; public Tracker2 tracker2; public Tracker3 tracker3; public SkillLocator skillLocator; public HurtBox target2; public HurtBox target3; public bool changeMat = false; public CharacterModel characterModel; public Material axe; public Material axe1; public Material axe2; public Material axe3; public float receivedDamage = 0f; public string path1 = "RoR2/Base/AttackSpeedOnCrit/matWolfhatOverlay.mat"; public string path2 = "RoR2/Base/ArmorReductionOnHit/matPulverizedOverlay.mat"; public string sfx = "Play_bellBody_attackLand"; public bool cancelTransformation = false; public bool cancelDive = false; public uint ID; private Material mat { get { if (enableTracker2) { if (enableTracker3) { return axe3; } return axe2; } if (charge1) { return axe1; } return axe; } } [SerializeField] public bool target => Object.op_Implicit((Object)(object)base.trackingTarget) ? true : false; private void Awake() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown base.indicator = new Indicator(((Component)this).gameObject, Prefabs.woodieIndicator); } private void OnEnable() { ((HuntressTracker)this).OnEnable(); tracker2 = ((Component)this).gameObject.GetComponent<Tracker2>(); if (!Object.op_Implicit((Object)(object)tracker2)) { tracker2 = ((Component)this).gameObject.AddComponent<Tracker2>(); } tracker3 = ((Component)this).gameObject.GetComponent<Tracker3>(); if (!Object.op_Implicit((Object)(object)tracker3)) { tracker3 = ((Component)this).gameObject.AddComponent<Tracker3>(); } base.search.minDistanceFilter = 4f; base.maxTrackingDistance = 60f; base.maxTrackingAngle = 15f; base.trackerUpdateFrequency = 10f; skillLocator = ((Component)this).GetComponent<SkillLocator>(); } public void ResetMat() { changeMat = false; charge1 = false; enableTracker2 = false; enableTracker3 = false; characterModel.baseRendererInfos[0].defaultMaterial = axe; } private void FixedUpdate() { ((HuntressTracker)this).FixedUpdate(); if (Object.op_Implicit((Object)(object)skillLocator) && Object.op_Implicit((Object)(object)skillLocator) && Object.op_Implicit((Object)(object)skillLocator.primary) && Object.op_Implicit((Object)(object)skillLocator.secondary) && !Utility.IsNullOrWhiteSpace(skillLocator.primary.skillNameToken) && !Utility.IsNullOrWhiteSpace(skillLocator.secondary.skillNameToken) && skillLocator.primary.skillNameToken != "WOODIE_M1NEW" && skillLocator.secondary.skillDef.skillNameToken != "WOODIE_M2") { enable = false; } if (changeMat) { characterModel.baseRendererInfos[0].defaultMaterial = mat; } base.indicator.active = enable; } } internal class BeaverPrimary : BaseSkillState { public enum ComboState { Attack1, Attack2 } private float damageCoefficient = 1.5f; private float stopwatch; private float attackDuration; private float earlyExitDuration; private Animator animator; private OverlapAttack overlapAttack; private bool hasSwung; private bool hasHit; internal ComboState comboState; private string slashChildName; private HitStopCachedState hitStopCachedState; public GameObject swingEffectPrefab = Prefabs.beaverSwingEffect; public GameObject hitEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/OmniImpactVFXSlash.prefab").WaitForCompletion(); private string attackSoundString = Slash.slash1Sound; private float swingtimer; private bool hop; public override void OnEnter() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_02a0: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0233: Unknown result type (might be due to invalid IL or missing references) //IL_0258: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); hop = true; ((BaseState)this).StartAimMode(((BaseState)this).GetAimRay(), 3f, false); stopwatch = 0f; attackDuration = GroundLight.baseComboAttackDuration / ((BaseState)this).attackSpeedStat; earlyExitDuration = GroundLight.baseEarlyExitDuration / ((BaseState)this).attackSpeedStat; animator = ((EntityState)this).GetModelAnimator(); bool @bool = animator.GetBool("isMoving"); bool bool2 = animator.GetBool("isGrounded"); swingtimer = 0f; animator.SetFloat("Swing", 0f); switch (comboState) { case ComboState.Attack1: overlapAttack = ((BaseState)this).InitMeleeOverlap(damageCoefficient, hitEffectPrefab, ((EntityState)this).GetModelTransform(), "Slash"); if (@bool || !bool2) { ((EntityState)this).PlayCrossfade("Gesture, Override", "AttackLeft", "M1", attackDuration / 2f, 0.05f); } else { ((EntityState)this).PlayCrossfade("FullBody, Override", "AttackLeft", "M1", attackDuration / 2f, 0.05f); } ((BaseState)this).FindModelChild("BeaverSwingMuzzle").localRotation = Quaternion.Euler(0f, 10f, 345f); swingEffectPrefab.transform.localScale = Vector3.one; slashChildName = "BeaverSwingMuzzle"; break; case ComboState.Attack2: overlapAttack = ((BaseState)this).InitMeleeOverlap(damageCoefficient + 0.5f, hitEffectPrefab, ((EntityState)this).GetModelTransform(), "Slash"); if (@bool || !bool2) { ((EntityState)this).PlayCrossfade("Gesture, Override", "AttackRight", "M1", attackDuration / 2f, 0.05f); } else { ((EntityState)this).PlayCrossfade("FullBody, Override", "AttackRight", "M1", attackDuration / 2f, 0.05f); } ((BaseState)this).FindModelChild("BeaverSwingMuzzle").localRotation = Quaternion.Euler(0f, 350f, 25f); swingEffectPrefab.transform.localScale = new Vector3(-1f, 1f, 1f); slashChildName = "BeaverSwingMuzzle"; break; } ((EntityState)this).characterBody.SetAimTimer(attackDuration + 1f); overlapAttack.hitEffectPrefab = hitEffectPrefab; overlapAttack.damageType = (DamageType)0; } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (((EntityState)this).inputBank.skill3.down || ((EntityState)this).inputBank.skill4.down) { ((EntityState)this).outer.SetNextStateToMain(); return; } ((EntityState)this).characterBody.isSprinting = false; swingtimer += Time.fixedDeltaTime; animator.SetFloat("Swing", swingtimer); if (((EntityState)this).isAuthority) { bool flag = ((BaseState)this).FireMeleeOverlap(overlapAttack, animator, "Swing", GroundLight.forceMagnitude, true); hasHit |= flag; if (flag && !((BaseState)this).isGrounded && hop) { ((BaseState)this).SmallHop(((EntityState)this).characterMotor, 5f); hop = false; } } if (animator.GetFloat("Swing") > 0f && !hasSwung) { Util.PlayAttackSpeedSound(attackSoundString, ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat); HealthComponent healthComponent = ((EntityState)this).characterBody.healthComponent; CharacterDirection component = ((Component)((EntityState)this).characterBody).GetComponent<CharacterDirection>(); if (Object.op_Implicit((Object)(object)healthComponent) && NetworkServer.active) { healthComponent.TakeDamageForce(GroundLight.selfForceMagnitude * component.forward, true, false); } hasSwung = true; EffectManager.SimpleMuzzleFlash(swingEffectPrefab, ((EntityState)this).gameObject, slashChildName, false); } stopwatch += Time.fixedDeltaTime; if (!((EntityState)this).isAuthority || !(stopwatch >= attackDuration - earlyExitDuration)) { return; } if (hasSwung || overlapAttack.Fire((List<HurtBox>)null)) { } if (!((EntityState)this).inputBank.skill1.down || comboState != ComboState.Attack2) { } if (stopwatch >= attackDuration) { if (comboState != ComboState.Attack2) { BeaverPrimary beaverPrimary = new BeaverPrimary(); beaverPrimary.comboState = comboState + 1; ((EntityState)this).outer.SetNextState((EntityState)(object)beaverPrimary); } else { ((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 override void OnSerialize(NetworkWriter writer) { ((BaseSkillState)this).OnSerialize(writer); writer.Write((byte)comboState); } public override void OnDeserialize(NetworkReader reader) { ((BaseSkillState)this).OnDeserialize(reader); comboState = (ComboState)reader.ReadByte(); } } internal class BeaverSecondary : BaseSkillState { private float duration = 0.35f; public override void OnEnter() { //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_008c: 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_00a9: 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_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_00be: 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_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: 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_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0106: 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_0111: 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_011e: 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_012a: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Expected O, but got Unknown //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) ((BaseState)this).OnEnter(); Util.PlaySound("Play_parent_attack1_slam", ((EntityState)this).gameObject); EffectManager.SimpleMuzzleFlash(Prefabs.beaverSpinEffect, ((EntityState)this).gameObject, "CenterMuzzle", false); ((EntityState)this).PlayAnimation("FullBody, Override", "Secondary", "M2", duration); if (!((BaseState)this).isGrounded) { ((BaseState)this).SmallHop(((EntityState)this).characterMotor, 8f); } if (((EntityState)this).isAuthority) { BlastAttack val = new BlastAttack { attacker = ((EntityState)this).gameObject, baseDamage = ((BaseState)this).damageStat * 5.5f, baseForce = 1200f, bonusForce = Vector3.back * 1200f, crit = ((BaseState)this).RollCrit(), damageType = (DamageType)0, falloffModel = (FalloffModel)0, procCoefficient = 1f, radius = 12f, position = ((EntityState)this).characterBody.corePosition, attackerFiltering = (AttackerFiltering)2, impactEffect = EffectCatalog.FindEffectIndexFromPrefab(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/OmniImpactVFXLarge.prefab").WaitForCompletion()), teamIndex = ((EntityState)this).teamComponent.teamIndex }; DamageAPI.AddModdedDamageType(val, Prefabs.fracture); val.Fire(); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); 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 BeaverSpecial : BaseSkillState { private float duration = 3f; public override void OnEnter() { //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_0130: 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) ((BaseState)this).OnEnter(); ((EntityState)this).PlayAnimation("Gesture, Override", "Special"); ((BaseState)this).StartAimMode(duration, false); if (NetworkServer.active) { ((EntityState)this).characterBody.AddTimedBuff(Prefabs.block, duration); } WoodieBehaviour component = ((EntityState)this).GetComponent<WoodieBehaviour>(); Transform modelTransform = ((EntityState)this).GetModelTransform(); if (Object.op_Implicit((Object)(object)modelTransform)) { TemporaryOverlay val = ((Component)modelTransform).gameObject.AddComponent<TemporaryOverlay>(); val.duration = duration; val.animateShaderAlpha = true; val.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f); val.destroyComponentOnEnd = true; val.originalMaterial = Addressables.LoadAssetAsync<Material>((object)component.path1).WaitForCompletion(); val.AddToCharacerModel(((Component)modelTransform).GetComponent<CharacterModel>()); TemporaryOverlay val2 = ((Component)modelTransform).gameObject.AddComponent<TemporaryOverlay>(); val2.duration = duration + 0.1f; val2.animateShaderAlpha = true; val2.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f); val2.destroyComponentOnEnd = true; val2.originalMaterial = Addressables.LoadAssetAsync<Material>((object)component.path2).WaitForCompletion(); val2.AddToCharacerModel(((Component)modelTransform).GetComponent<CharacterModel>()); } Util.PlaySound(component.sfx, ((EntityState)this).gameObject); ((EntityState)this).characterBody.isSprinting = false; } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); ((EntityState)this).characterBody.isSprinting = false; if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { //IL_004a: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).OnExit(); ((EntityState)this).GetModelAnimator().SetTrigger("Trigger"); if (!NetworkServer.active) { return; } WoodieBehaviour component = ((EntityState)this).GetComponent<WoodieBehaviour>(); float receivedDamage = component.receivedDamage; if (!(receivedDamage > 0f)) { return; } ReadOnlyCollection<TeamComponent> teamMembers = TeamComponent.GetTeamMembers(((EntityState)this).teamComponent.teamIndex); for (int i = 0; i < teamMembers.Count; i++) { if (teamMembers[i].body.isPlayerControlled) { if ((Object)(object)teamMembers[i].body == (Object)(object)((EntityState)this).characterBody) { teamMembers[i].body.healthComponent.AddBarrier(receivedDamage * 0.5f); } else { teamMembers[i].body.healthComponent.AddBarrier(receivedDamage); } } } component.receivedDamage = 0f; } 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)6; } } internal class BeaverUtility : BaseSkillState { private float duration = 1.5f; private WoodieBehaviour behaviour; public override void OnEnter() { //IL_0084: 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) //IL_009a: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); behaviour = ((EntityState)this).GetComponent<WoodieBehaviour>(); behaviour.canExecute = false; ((EntityState)this).GetModelAnimator().SetBool("DiveCancel", false); ((EntityState)this).GetModelAnimator().SetBool("DiveOver", false); ((EntityState)this).PlayAnimation("Dive", "Utility"); Util.PlaySound("Play_moonBrother_phaseJump_jumpAway", ((EntityState)this).gameObject); if (((EntityState)this).isAuthority) { ((EntityState)this).characterBody.isSprinting = true; ((EntityState)this).characterMotor.velocity = Vector3.up * (5f * ((BaseState)this).moveSpeedStat); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (!((EntityState)this).skillLocator.special.HasSkillOverrideOfPriority((SkillOverridePriority)4)) { ((EntityState)this).GetModelAnimator().SetBool("DiveCancel", true); if (((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } if (((EntityState)this).fixedAge >= 0.25f && ((EntityState)this).inputBank.skill3.down) { ((EntityState)this).outer.SetNextState((EntityState)(object)new BeaverUtilityDrop()); } if (((EntityState)this).fixedAge >= duration) { ((EntityState)this).GetModelAnimator().SetBool("DiveCancel", true); if (((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } } public override void OnExit() { ((EntityState)this).OnExit(); behaviour.canExecute = 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)6; } } internal class BeaverUtilityDrop : BaseSkillState { private float duration = 2f; private Vector3 direction; private WoodieBehaviour behaviour; public override void OnEnter() { //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_005c: 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) ((BaseState)this).OnEnter(); behaviour = ((EntityState)this).GetComponent<WoodieBehaviour>(); behaviour.canExecute = false; ((EntityState)this).GetModelAnimator().SetBool("DiveOver", true); if (((EntityState)this).isAuthority) { ((EntityState)this).characterBody.isSprinting = true; } direction = ((EntityState)this).characterDirection.forward + Vector3.down; } public override void FixedUpdate() { //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_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: 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_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Expected O, but got Unknown //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0112: 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_011e: 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_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_0141: Unknown result type (might be due to invalid IL or missing references) //IL_0146: 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) //IL_0158: 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_016a: 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_0174: 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_017b: 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_018f: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: 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_01ac: Expected O, but got Unknown //IL_01ae: 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) ((EntityState)this).FixedUpdate(); if (!((EntityState)this).skillLocator.special.HasSkillOverrideOfPriority((SkillOverridePriority)4) && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor)) { ((EntityState)this).characterMotor.velocity = Vector3.zero; CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.rootMotion += direction * (15f * ((BaseState)this).moveSpeedStat) * Time.fixedDeltaTime; } if (((BaseState)this).isGrounded) { Util.PlaySound("Play_moonBrother_phaseJump_land_impact", ((EntityState)this).gameObject); EffectManager.SpawnEffect(GroundSlam.slamEffectPrefab, new EffectData { origin = ((EntityState)this).characterBody.footPosition, scale = 15f }, false); if (((EntityState)this).isAuthority) { BlastAttack val = new BlastAttack { attacker = ((EntityState)this).gameObject, baseDamage = ((BaseState)this).damageStat * 5.5f, baseForce = 1200f, bonusForce = Vector3.back * 1200f, crit = ((BaseState)this).RollCrit(), damageType = (DamageType)64, falloffModel = (FalloffModel)0, procCoefficient = 1f, radius = 15f, position = ((EntityState)this).characterBody.footPosition, attackerFiltering = (AttackerFiltering)2, impactEffect = EffectCatalog.FindEffectIndexFromPrefab(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/OmniImpactVFXLarge.prefab").WaitForCompletion()), teamIndex = ((EntityState)this).teamComponent.teamIndex }; DamageAPI.AddModdedDamageType(val, Prefabs.execute); val.Fire(); ((EntityState)this).outer.SetNextStateToMain(); } } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { ((EntityState)this).OnExit(); behaviour.canExecute = 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)6; } } internal class CharacterMain : GenericCharacterMain { private EntityStateMachine form; public override void OnEnter() { ((GenericCharacterMain)this).OnEnter(); form = Array.Find(((EntityState)this).gameObject.GetComponents<EntityStateMachine>(), (EntityStateMachine x) => x.customName == "Form"); } public override void FixedUpdate() { //IL_000e: 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) ((GenericCharacterMain)this).FixedUpdate(); if (buttonPressed(Woodie.emote1Key.Value) && form.IsInInitialState()) { ((EntityState)this).outer.SetNextState((EntityState)(object)new Stump()); } if (buttonPressed(Woodie.emote2Key.Value) && form.IsInInitialState()) { ((EntityState)this).outer.SetNextState((EntityState)(object)new Dance()); } } private bool buttonPressed(KeyCode key) { //IL_002e: Unknown result type (might be due to invalid IL or missing references) if (PauseScreenController.instancesList.Count == 0 && ((BaseState)this).isGrounded && ((EntityState)this).characterBody.hasEffectiveAuthority && Input.GetKeyDown(key)) { return true; } return false; } } internal class BaseEmote : BaseState { public uint sound = 0u; public uint ID; public string anim; public override void OnEnter() { ((BaseState)this).OnEnter(); ((EntityState)this).PlayAnimation("FullBody, Override", anim); if (sound != 0) { ID = AkSoundEngine.PostEvent(sound, ((EntityState)this).gameObject); } } public override void FixedUpdate() { //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) ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= 1f && ((EntityState)this).isAuthority && ((EntityState)this).inputBank.moveVector != Vector3.zero) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { ((EntityState)this).OnExit(); ((EntityState)this).GetModelAnimator().SetTrigger("EmoteOver"); AkSoundEngine.StopPlayingID(ID); } 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)6; } } internal class Stump : BaseEmote { private ParentConstraint component; public override void OnEnter() { anim = "Sit"; base.OnEnter(); component = ((Component)((EntityState)this).GetModelTransform()).GetComponentInChildren<ParentConstraint>(); ((Behaviour)component).enabled = false; } 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)6; } public override void OnExit() { base.OnExit(); ((Behaviour)component).enabled = true; } } internal class Dance : BaseEmote { public override void OnEnter() { anim = "Dance"; sound = Sounds.Play_Woodie_Dance; base.OnEnter(); } 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)6; } } internal class DeathState : DeathState { public override void OnEnter() { ((DeathState)this).OnEnter(); if (((EntityState)this).isAuthority) { Array.Find(((EntityState)this).gameObject.GetComponents<EntityStateMachine>(), (EntityStateMachine x) => x.customName == "Form").SetNextStateToMain(); } } } public class PrimarySkill : BaseState { public enum ComboState { Attack1, Attack2, Attack3 } private float baseComboAttackDuration = 0.6f; private float baseFinisherAttackDuration = 1f; private float baseEarlyExitDuration = 0.15f; private string baseComboAttackHitBoxGroupName = "Swing1"; private string baseFinisherAttackHitBoxGroupName = "Swing2"; private string attackSound = ""; private string playbackRateParam = "M1"; private float hitPauseDuration = 0.05f; private float forceMagnitude = -1500f; private float selfForceMagnitude = 3000f; private float comboDamageCoefficient = 1.7f; private float finisherDamageCoefficient = 2.5f; private float stopwatch; private float attackDuration; private float earlyExitDuration; private Animator animator; private OverlapAttack overlapAttack; private float hitPauseTimer; private bool isInHitPause; private bool hasSwung; private bool hasHit; internal ComboState comboState; private string slashChildName; private HitStopCachedState hitStopCachedState; public GameObject swingEffectPrefab = Prefabs.M1SwingEffect1; public GameObject hitEffectPrefab; private bool hop; public override void OnEnter() { //IL_023b: Unknown result type (might be due to invalid IL or missing references) //IL_0240: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) //IL_024a: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); hop = true; ((BaseState)this).StartAimMode(3f, false); stopwatch = 0f; earlyExitDuration = baseEarlyExitDuration / base.attackSpeedStat; animator = ((EntityState)this).GetModelAnimator(); bool @bool = animator.GetBool("isMoving"); bool bool2 = animator.GetBool("isGrounded"); switch (comboState) { case ComboState.Attack1: attackDuration = baseComboAttackDuration / base.attackSpeedStat; overlapAttack = ((BaseState)this).InitMeleeOverlap(comboDamageCoefficient, hitEffectPrefab, ((EntityState)this).GetModelTransform(), baseComboAttackHitBoxGroupName); if (@bool || !bool2) { ((EntityState)this).PlayCrossfade("Gesture, Override", "Swing1", playbackRateParam, attackDuration / 2f, 0.05f); } else { ((EntityState)this).PlayCrossfade("FullBody, Override", "Swing1", playbackRateParam, attackDuration / 2f, 0.05f); } hitEffectPrefab = Prefabs.HitEffect; slashChildName = "SwingMuzzle"; break; case ComboState.Attack2: attackDuration = baseComboAttackDuration / base.attackSpeedStat; overlapAttack = ((BaseState)this).InitMeleeOverlap(comboDamageCoefficient, hitEffectPrefab, ((EntityState)this).GetModelTransform(), baseComboAttackHitBoxGroupName); if (@bool || !bool2) { ((EntityState)this).PlayCrossfade("Gesture, Override", "Swing2", playbackRateParam, attackDuration / 2f, 0.05f); } else { ((EntityState)this).PlayCrossfade("FullBody, Override", "Swing2", playbackRateParam, attackDuration / 2f, 0.05f); } hitEffectPrefab = Prefabs.HitEffect; slashChildName = "SwingMuzzle"; break; case ComboState.Attack3: attackDuration = baseFinisherAttackDuration / base.attackSpeedStat; overlapAttack = ((BaseState)this).InitMeleeOverlap(finisherDamageCoefficient, hitEffectPrefab, ((EntityState)this).GetModelTransform(), baseFinisherAttackHitBoxGroupName); overlapAttack.forceVector = ((EntityState)this).characterDirection.forward + Vector3.up; overlapAttack.pushAwayForce = forceMagnitude; if (@bool || !bool2) { ((EntityState)this).PlayCrossfade("Gesture, Override", "Swing3", playbackRateParam, attackDuration / 2f, 0.05f); } else { ((EntityState)this).PlayCrossfade("FullBody, Override", "Swing3", playbackRateParam, attackDuration / 2f, 0.05f); } hitEffectPrefab = Prefabs.HitEffectStrong; slashChildName = "OverheadMuzzle"; break; } ((EntityState)this).characterBody.SetAimTimer(attackDuration + 1f); overlapAttack.hitEffectPrefab = hitEffectPrefab; } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_01c2: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_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_00e4: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); ((EntityState)this).characterBody.isSprinting = false; hitPauseTimer -= Time.fixedDeltaTime; if (((EntityState)this).isAuthority) { bool flag = overlapAttack.Fire((List<HurtBox>)null); hasHit |= flag; if (flag) { if (hop) { ((BaseState)this).SmallHop(((EntityState)this).characterMotor, 5f); hop = false; } if (!isInHitPause) { hitStopCachedState = ((BaseState)this).CreateHitStopCachedState(((EntityState)this).characterMotor, animator, playbackRateParam); hitPauseTimer = hitPauseDuration / base.attackSpeedStat; isInHitPause = true; } } if (hitPauseTimer <= 0f && isInHitPause) { ((BaseState)this).ConsumeHitStopCachedState(hitStopCachedState, ((EntityState)this).characterMotor, animator); isInHitPause = false; } } if (!hasSwung) { Util.PlayAttackSpeedSound(attackSound, ((EntityState)this).gameObject, base.attackSpeedStat); if (NetworkServer.active) { ((EntityState)this).characterBody.healthComponent.TakeDamageForce(selfForceMagnitude / base.attackSpeedStat * ((EntityState)this).characterDirection.forward, true, false); } hasSwung = true; EffectManager.SimpleMuzzleFlash(swingEffectPrefab, ((EntityState)this).gameObject, slashChildName, false); FireProjectile(); } if (!isInHitPause) { stopwatch += Time.fixedDeltaTime; } else { ((EntityState)this).characterMotor.velocity = Vector3.zero; animator.SetFloat(playbackRateParam, 0f); } if (!((EntityState)this).isAuthority || !(stopwatch >= attackDuration - earlyExitDuration)) { return; } if (((EntityState)this).inputBank.skill1.down && comboState != ComboState.Attack3) { PrimaryTransition primaryTransition = new PrimaryTransition(); primaryTransition.comboState = comboState + 1; if (comboState == ComboState.Attack1) { primaryTransition.transitionDuration = 0.25f; } ((EntityState)this).outer.SetNextState((EntityState)(object)primaryTransition); } else if (stopwatch >= attackDuration) { ((EntityState)this).outer.SetNextStateToMain(); } } private void FireProjectile() { //IL_0011: 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_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: 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_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0086: 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_009c: 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_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_00ae: 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_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) if (((EntityState)this).isAuthority) { FireProjectileInfo val = default(FireProjectileInfo); val.crit = ((BaseState)this).RollCrit(); val.damage = ((EntityState)this).characterBody.damage * 2f; val.damageColorIndex = (DamageColorIndex)0; val.force = 500f; val.owner = ((EntityState)this).gameObject; Ray aimRay = ((BaseState)this).GetAimRay(); val.position = ((Ray)(ref aimRay)).origin; val.procChainMask = default(ProcChainMask); val.projectilePrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Vulture/WindbladeProjectile.prefab").WaitForCompletion(); aimRay = ((BaseState)this).GetAimRay(); val.rotation = Quaternion.LookRotation(((Ray)(ref aimRay)).direction); val.useFuseOverride = false; val.useSpeedOverride = false; val.target = null; FireProjectileInfo val2 = val; ProjectileManager.instance.FireProjectile(val2); } } 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 override void OnSerialize(NetworkWriter writer) { ((EntityState)this).OnSerialize(writer); writer.Write((byte)comboState); } public override void OnDeserialize(NetworkReader reader) { ((EntityState)this).OnDeserialize(reader); comboState = (ComboState)reader.ReadByte(); } } internal class PrimaryTransition : BaseSkillState { public PrimarySkill.ComboState comboState; public float transitionDuration = 0.5f; public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= transitionDuration / ((BaseState)this).attackSpeedStat && ((EntityState)this).isAuthority) { PrimarySkill primarySkill = new PrimarySkill(); primarySkill.comboState = comboState; ((EntityState)this).outer.SetNextState((EntityState)(object)primarySkill); } } 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 M1Skill : BaseState { public enum ComboState { Attack1, Attack2, Attack3 } internal static float comboDamageCoefficient = 1.7f; internal static float finisherDamageCoefficient = 2.5f; private float stopwatch; private float attackDuration; private float earlyExitDuration; private Animator animator; private OverlapAttack overlapAttack; private float hitPauseTimer; private bool isInHitPause; private bool hasSwung; private bool hasHit; internal ComboState comboState; private string slashChildName; private HitStopCachedState hitStopCachedState; public GameObject swingEffectPrefab = Prefabs.M1SwingEffect1; public GameObject hitEffectPrefab; private float swingtimer; private bool hop; public override void OnEnter() { //IL_0011: 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_0234: 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) ((BaseState)this).OnEnter(); hop = true; ((BaseState)this).StartAimMode(((BaseState)this).GetAimRay(), 3f, false); stopwatch = 0f; earlyExitDuration = GroundLight.baseEarlyExitDuration / base.attackSpeedStat; animator = ((EntityState)this).GetModelAnimator(); bool @bool = animator.GetBool("isMoving"); bool bool2 = animator.GetBool("isGrounded"); swingtimer = 0f; animator.SetFloat("Swing", 0f); switch (comboState) { case ComboState.Attack1: attackDuration = GroundLight.baseComboAttackDuration / base.attackSpeedStat; overlapAttack = ((BaseState)this).InitMeleeOverlap(comboDamageCoefficient, hitEffectPrefab, ((EntityState)this).GetModelTransform(), "Swing1"); if (@bool || !bool2) { ((EntityState)this).PlayCrossfade("Gesture, Override", "Swing1", "M1", attackDuration / 2f, 0.05f); } else { ((EntityState)this).PlayCrossfade("FullBody, Override", "Swing1", "M1", attackDuration / 2f, 0.05f); } hitEffectPrefab = Prefabs.HitEffect; swingEffectPrefab.transform.localScale = Vector3.one; slashChildName = "SwingMuzzle"; break; case ComboState.Attack2: attackDuration = GroundLight.baseComboAttackDuration / base.attackSpeedStat; overlapAttack = ((BaseState)this).InitMeleeOverlap(comboDamageCoefficient, hitEffectPrefab, ((EntityState)this).GetModelTransform(), "Swing1"); if (@bool || !bool2) { ((EntityState)this).PlayCrossfade("Gesture, Override", "Swing2", "M1", attackDuration / 2f, 0.05f); } else { ((EntityState)this).PlayCrossfade("FullBody, Override", "Swing2", "M1", attackDuration / 2f, 0.05f); } hitEffectPrefab = Prefabs.HitEffect; swingEffectPrefab.transform.localScale = new Vector3(-1f, 1f, 1f); slashChildName = "SwingMuzzle"; break; case ComboState.Attack3: attackDuration = GroundLight.baseFinisherAttackDuration / base.attackSpeedStat; overlapAttack = ((BaseState)this).InitMeleeOverlap(finisherDamageCoefficient, hitEffectPrefab, ((EntityState)this).GetModelTransform(), "Swing2"); if (@bool || !bool2) { ((EntityState)this).PlayCrossfade("Gesture, Override", "Swing3", "M1", attackDuration / 2f, 0.05f); } else { ((EntityState)this).PlayCrossfade("FullBody, Override", "Swing3", "M1", attackDuration / 2f, 0.05f); } hitEffectPrefab = Prefabs.HitEffectStrong; swingEffectPrefab.transform.localScale = Vector3.one; slashChildName = "OverheadMuzzle"; break; } ((EntityState)this).characterBody.SetAimTimer(attackDuration + 1f); overlapAttack.hitEffectPrefab = hitEffectPrefab; } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { //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_021b: Unknown result type (might be due to invalid IL or missing references) //IL_0220: Unknown result type (might be due to invalid IL or missing references) //IL_011c: 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) ((EntityState)this).FixedUpdate(); ((EntityState)this).characterBody.isSprinting = false; hitPauseTimer -= Time.fixedDeltaTime; swingtimer += Time.fixedDeltaTime; animator.SetFloat("Swing", swingtimer); if (((EntityState)this).isAuthority) { bool flag = ((BaseState)this).FireMeleeOverlap(overlapAttack, animator, "Swing", GroundLight.forceMagnitude, true); hasHit |= flag; if (flag) { if (hop) { ((BaseState)this).SmallHop(((EntityState)this).characterMotor, 5f); hop = false; } if (!isInHitPause) { hitStopCachedState = ((BaseState)this).CreateHitStopCachedState(((EntityState)this).characterMotor, animator, "M1"); hitPauseTimer = GroundLight.hitPauseDuration / base.attackSpeedStat; isInHitPause = true; } } if (hitPauseTimer <= 0f && isInHitPause) { ((BaseState)this).ConsumeHitStopCachedState(hitStopCachedState, ((EntityState)this).characterMotor, animator); isInHitPause = false; } } if (animator.GetFloat("Swing") > 0f && !hasSwung) { Util.PlayAttackSpeedSound("Play_Woodie_Swing", ((EntityState)this).gameObject, base.attackSpeedStat); HealthComponent healthComponent = ((EntityState)this).characterBody.healthComponent; CharacterDirection component = ((Component)((EntityState)this).characterBody).GetComponent<CharacterDirection>(); if (Object.op_Implicit((Object)(object)healthComponent) && NetworkServer.active) { healthComponent.TakeDamageForce(GroundLight.selfForceMagnitude * component.forward, true, false); } hasSwung = true; EffectManager.SimpleMuzzleFlash(swingEffectPrefab, ((EntityState)this).gameObject, slashChildName, false); } if (!isInHitPause) { stopwatch += Time.fixedDeltaTime; } else { ((EntityState)this).characterMotor.velocity = Vector3.zero; animator.SetFloat("M1", 0f); } if (((EntityState)this).isAuthority && stopwatch >= attackDuration - earlyExitDuration) { if (hasSwung || overlapAttack.Fire((List<HurtBox>)null)) { } if (((EntityState)this).inputBank.skill1.down && comboState != ComboState.Attack3) { M1Skill m1Skill = new M1Skill(); m1Skill.comboState = comboState + 1; ((EntityState)this).outer.SetNextState((EntityState)(object)m1Skill); } else if (stopwatch >= attackDuration) { ((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 override void OnSerialize(NetworkWriter writer) { ((EntityState)this).OnSerialize(writer); writer.Write((byte)comboState); } public override void OnDeserialize(NetworkReader reader) { ((EntityState)this).OnDeserialize(reader); comboState = (ComboState)reader.ReadByte(); } } public class M1SkillEnter : BasicMeleeAttack, IStepSetter { public int step; public static float recoilAmplitude; public static float baseDurationBeforeInterruptable; [SerializeField] public float bloom; public static float comboFinisherBaseDuration; public static GameObject comboFinisherSwingEffectPrefab; public static float comboFinisherhitPauseDuration; public static float comboFinisherDamageCoefficient; public static float comboFinisherBloom; public static float comboFinisherBaseDurationBeforeInterruptable; public static string slash1Sound; public static string slash3Sound; private string animationStateName; private float durationBeforeInterruptable; private bool isComboFinisher => step == 2; public override bool allowExitFire => Object.op_Implicit((Object)(object)((EntityState)this).characterBody) && !((EntityState)this).characterBody.isSprinting; void IStepSetter.SetStep(int i) { step = i; } public override void OnEnter() { //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) if (isComboFinisher) { base.swingEffectPrefab = Prefabs.M1SwingEffect1; base.hitPauseDuration = GroundLight2.comboFinisherhitPauseDuration; base.damageCoefficient = GroundLight2.comboFinisherDamageCoefficient; bloom = GroundLight2.comboFinisherBloom; base.hitBoxGroupName = "Swing2"; base.baseDuration = GroundLight2.comboFinisherBaseDuration; } ((BasicMeleeAttack)this).OnEnter(); CharacterDirection characterDirection = ((EntityState)this).characterDirection; Ray aimRay = ((BaseState)this).GetAimRay(); characterDirection.forward = ((Ray)(ref aimRay)).direction; durationBeforeInterruptable = (isComboFinisher ? (GroundLight2.comboFinisherBaseDurationBeforeInterruptable / ((BaseState)this).attackSpeedStat) : (GroundLight2.baseDurationBeforeInterruptable / ((BaseState)this).attackSpeedStat)); } public override void OnExit() { ((BasicMeleeAttack)this).OnExit(); } public override void AuthorityFixedUpdate() { ((BasicMeleeAttack)this).AuthorityFixedUpdate(); ((EntityState)this).characterBody.isSprinting = false; } public override void AuthorityModifyOverlapAttack(OverlapAttack overlapAttack) { ((BasicMeleeAttack)this).AuthorityModifyOverlapAttack(overlapAttack); } public override void PlayAnimation() { ((EntityState)this).characterBody.isSprinting = false; animationStateName = ""; switch (step) { case 0: animationStateName = "Swing1"; break; case 1: animationStateName = "Swing1"; break; case 2: animationStateName = "Swing2"; break; } bool @bool = base.animator.GetBool("isMoving"); bool bool2 = base.animator.GetBool("isGrounded"); if (!@bool && bool2) { ((EntityState)this).PlayCrossfade("FullBody, Override", animationStateName, "M1", base.duration, 0.05f); } else { ((EntityState)this).PlayCrossfade("Gesture, Override", animationStateName, "M1", base.duration, 0.05f); } } public override void OnMeleeHitAuthority() { ((BasicMeleeAttack)this).OnMeleeHitAuthority(); ((EntityState)this).characterBody.AddSpreadBloom(bloom); } public override void BeginMeleeAttackEffect() { base.swingEffectMuzzleString = animationStateName; ((BaseState)this).AddRecoil(-0.1f * GroundLight2.recoilAmplitude, 0.1f * GroundLight2.recoilAmplitude, -1f * GroundLight2.recoilAmplitude, 1f * GroundLight2.recoilAmplitude); ((BasicMeleeAttack)this).BeginMeleeAttackEffect(); } public override void OnSerialize(NetworkWriter writer) { ((EntityState)this).OnSerialize(writer); writer.Write((byte)step); } public override void OnDeserialize(NetworkReader reader) { ((EntityState)this).OnDeserialize(reader); step = reader.ReadByte(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_001c: 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_001f: Unknown result type (might be due to invalid IL or missing references) if (((EntityState)this).fixedAge >= durationBeforeInterruptable) { return (InterruptPriority)1; } return (InterruptPriority)2; } } internal class M2Alt : BaseSkillState { public enum ComboState { Attack1, Attack2, Attack3, Attack4, Attack5 } private float damageCoefficient = 1.5f; private float stopwatch; private float first2attackDuration; private float last3attackDuration; private float attackDuration; private float earlyExitDuration; private Animator animator; private OverlapAttack overlapAttack; private bool hasSwung; private bool hasHit; internal ComboState comboState; private string slashChildName; private HitStopCachedState hitStopCachedState; public GameObject swingEffectPrefab = Prefabs.M1SwingEffect1; public GameObject hitEffectPrefab; private string attackSoundString; private float swingtimer; private bool hop; public override void OnEnter() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_055b: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Unknown result type (might be due to invalid IL or missing references) //IL_0279: 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) //IL_0432: Unknown result type (might be due to invalid IL or missing references) //IL_0507: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); hop = true; ((BaseState)this).StartAimMode(((BaseState)this).GetAimRay(), 3f, false); stopwatch = 0f; first2attackDuration = GroundLight.baseComboAttackDuration / 1.5f / ((BaseState)this).attackSpeedStat; last3attackDuration = GroundLight.baseComboAttackDuration / 2f / ((BaseState)this).attackSpeedStat; earlyExitDuration = GroundLight.baseEarlyExitDuration / 2f / ((BaseState)this).attackSpeedStat; animator = ((EntityState)this).GetModelAnimator(); bool @bool = animator.GetBool("isMoving"); bool bool2 = animator.GetBool("isGrounded"); swingtimer = 0f; animator.SetFloat("Swing", 0f); switch (comboState) { case ComboState.Attack1: overlapAttack = ((BaseState)this).InitMeleeOverlap(damageCoefficient, hitEffectPrefab, ((EntityState)this).GetModelTransform(), "Swing1"); if (@bool || !bool2) { ((EntityState)this).PlayCrossfade("Gesture, Override", "AltM2-1", "M2", first2attackDuration / 2f, 0.05f); } else { ((EntityState)this).PlayCrossfade("FullBody, Override", "AltM2-1", "M2", first2attackDuration / 2f, 0.05f); } attackDuration = first2attackDuration; hitEffectPrefab = Prefabs.HitEffect; swingEffectPrefab.transform.localScale = Vector3.one; slashChildName = "SwingMuzzle"; attackSoundString = GroundLight.comboAttackSoundString; break; case ComboState.Attack2: overlapAttack = ((BaseState)this).InitMeleeOverlap(damageCoefficient + 0.5f, hitEffectPrefab, ((EntityState)this).GetModelTransform(), "Swing1"); if (@bool || !bool2) { ((EntityState)this).PlayCrossfade("Gesture, Override", "AltM2-2", "M2", first2attackDuration / 2f, 0.05f); } else { ((EntityState)this).PlayCrossfade("FullBody, Override", "AltM2-2", "M2", first2attackDuration / 2f, 0.05f); } attackDuration = first2attackDuration; hitEffectPrefab = Prefabs.HitEffect; swingEffectPrefab.transform.localScale = new Vector3(-1f, 1f, 1f); slashChildName = "SwingMuzzle"; attackSoundString = GroundLight.comboAttackSoundString; break; case ComboState.Attack3: overlapAttack = ((BaseState)this).InitMeleeOverlap(damageCoefficient + 1f, hitEffectPrefab, ((EntityState)this).GetModelTransform(), "Swing1"); if (@bool || !bool2) { ((EntityState)this).PlayCrossfade("Gesture, Override", "AltM2-3", "M2", last3attackDuration / 2f, 0.05f); } else { ((EntityState)this).PlayCrossfade("FullBody, Override", "AltM2-3", "M2", last3attackDuration / 2f, 0.05f); } attackDuration = last3attackDuration; hitEffectPrefab = Prefabs.HitEffect; swingEffectPrefab.transform.localScale = Vector3.one; slashChildName = "SwingMuzzle"; attackSoundString = GroundLight.comboAttackSoundString; break; case ComboState.Attack4: overlapAttack = ((BaseState)this).InitMeleeOverlap(damageCoefficient + 1.5f, hitEffectPrefab, ((EntityState)this).GetModelTransform(), "Swing1"); if (@bool || !bool2) { ((EntityState)this).PlayCrossfade("Gesture, Override", "AltM2-4", "M2", last3attackDuration / 2f, 0.05f); } else { ((EntityState)this).PlayCrossfade("FullBody, Override", "AltM2-4", "M2", last3attackDuration / 2f, 0.05f); } attackDuration = last3attackDuration; hitEffectPrefab = Prefabs.HitEffect; swingEffectPrefab.transform.localScale = new Vector3(-1f, 1f, 1f); slashChildName = "SwingMuzzle"; attackSoundString = GroundLight.comboAttackSoundString; break; case ComboState.Attack5: overlapAttack = ((BaseState)this).InitMeleeOverlap(damageCoefficient + 2f, hitEffectPrefab, ((EntityState)this).GetModelTransform(), "Swing2"); if (@bool || !bool2) { ((EntityState)this).PlayCrossfade("Gesture, Override", "AltM2-5", "M2", last3attackDuration / 2f, 0.05f); } else { ((EntityState)this).PlayCrossfade("FullBody, Override", "AltM2-5", "M2", last3attackDuration / 2f, 0.05f); } attackDuration = last3attackDuration; hitEffectPrefab = Prefabs.HitEffectStrong; swingEffectPrefab.transform.localScale = Vector3.one; slashChildName = "OverheadMuzzle"; attackSoundString = GroundLight.finisherAttackSoundString; break; } ((EntityState)this).characterBody.SetAimTimer(attackDuration + 1f); overlapAttack.hitEffectPrefab = hitEffectPrefab; overlapAttack.damageType = (DamageType)64; } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); ((EntityState)this).characterBody.isSprinting = false; swingtimer += Time.fixedDeltaTime; animator.SetFloat("Swing", swingtimer); if (((EntityState)this).isAuthority) { bool flag = ((BaseState)this).FireMeleeOverlap(overlapAttack, animator, "Swing", GroundLight.forceMagnitude, true); hasHit |= flag; if (flag && !((BaseState)this).isGrounded && hop) { ((BaseState)this).SmallHop(((EntityState)this).characterMotor, 5f); hop = false; } } if (animator.GetFloat("Swing") > 0f && !hasSwung) { Util.PlayAttackSpeedSound("Play_Woodie_Swing", ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat); HealthComponent healthComponent = ((EntityState)this).characterBody.healthComponent; CharacterDirection component = ((Component)((EntityState)this).characterBody).GetComponent<CharacterDirection>(); if (Object.op_Implicit((Object)(object)healthComponent) && NetworkServer.active) { healthComponent.TakeDamageForce(GroundLight.selfForceMagnitude * component.forward, true, false); } hasSwung = true; EffectManager.SimpleMuzzleFlash(swingEffectPrefab, ((EntityState)this).gameObject, slashChildName, false); } stopwatch += Time.fixedDeltaTime; if (!((EntityState)this).isAuthority || !(stopwatch >= attackDuration - earlyExitDuration)) { return; } if (hasSwung || overlapAttack.Fire((List<HurtBox>)null)) { } if (!((EntityState)this).inputBank.skill1.down || comboState != ComboState.Attack5) { } if (stopwatch >= attackDuration) { if (comboState != ComboState.Attack5) { M2Alt m2Alt = new M2Alt(); m2Alt.comboState = comboState + 1; ((EntityState)this).outer.SetNextState((EntityState)(object)m2Alt); } else { ((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 override void OnSerialize(NetworkWriter writer) { ((BaseSkillState)this).OnSerialize(writer); writer.Write((byte)comboState); } public override void OnDeserialize(NetworkReader reader) { ((BaseSkillState)this).OnDeserialize(reader); comboState = (ComboState)reader.ReadByte(); } } internal class M2Skill : BaseSkillState { public float baseDuration = 0.35f; public float maxNoHitTimer = 4f; private float duration; private bool hasFired; private string muzzleString; private GameObject muzzleflashEffectPrefab; private AxeThrowHitCallback hitCallback; public override void OnEnter() { //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: 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) ((BaseState)this).OnEnter(); AkSoundEngine.PostEvent(Sounds.Play_Woodie_M2Throw, ((EntityState)this).gameObject); hasFired = false; hitCallback = ((EntityState)this).GetComponent<AxeThrowHitCallback>(); if (Object.op_Implicit((Object)(object)hitCallback)) { hitCallback.Hit = false; } duration = baseDuration / ((BaseState)this).attackSpeedStat; Ray aimRay = ((BaseState)this).GetAimRay(); ((EntityState)this).characterBody.isSprinting = false; ((BaseState)this).StartAimMode(aimRay, 2f, false); ((EntityState)this).characterBody.SetAimTimer(2f); muzzleflashEffectPrefab = LegacyResourcesAPI.Load<GameObject>("prefabs/effects/muzzleflashes/muzzleflashengigrenade"); ((EntityState)this).PlayAnimation("Gesture, Override", "M2", "M2", duration); EffectManager.SimpleMuzzleFlash(Prefabs.M2ThrowMuzzleFlashEffect, ((EntityState)this).gameObject, "HandR", false); } private void Fire() { //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_0023: 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_0057: 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_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0065: 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_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: 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_00f1: 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_0111: 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_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0146: 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) muzzleString = "LHand"; Ray aimRay = ((BaseState)this).GetAimRay(); Vector3 position = default(Vector3); ((Vector3)(ref position))..ctor(((Ray)(ref aimRay)).origin.x, ((Ray)(ref aimRay)).origin.y + 1f, ((Ray)(ref aimRay)).origin.z); if (Object.op_Implicit((Object)(object)muzzleflashEffectPrefab)) { } Vector3 zero = Vector3.zero; Quaternion identity = Quaternion.identity; Quaternion rotation = Quaternion.LookRotation(((Ray)(ref aimRay)).direction); Transform modelTransform = ((EntityState)this).GetModelTransform(); if (Object.op_Implicit((Object)(object)modelTransform)) { ChildLocator component = ((Component)modelTransform).GetComponent<ChildLocator>(); if (!Object.op_Implicit((Object)(object)component)) { } } FireProjectileInfo val = default(FireProjectileInfo); val.crit = ((BaseState)this).RollCrit(); val.damage = ((EntityState)this).characterBody.damage * 4.6f; val.damageColorIndex = (DamageColorIndex)0; val.force = 98f; val.owner = ((EntityState)this).gameObject; val.position = position; val.procChainMask = default(ProcChainMask); val.projectilePrefab = Prefabs.M2Projectile; val.rotation = rotation; val.useFuseOverride = false; val.useSpeedOverride = true; ((FireProjectileInfo)(ref val)).speedOverride = 120f * ((BaseState)this).attackSpeedStat; val.target = null; FireProjectileInfo val2 = val; ProjectileManager.instance.FireProjectile(val2); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (Object.op_Implicit((Object)(object)hitCallback) && ((EntityState)this).isAuthority && hitCallback.Hit) { ((EntityState)this).outer.SetNextStateToMain(); return; } if (((EntityState)this).fixedAge >= maxNoHitTimer && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); return; } if (((EntityState)this).fixedAge >= 0.2f && ((EntityState)this).isAuthority && !hasFired) { Fire(); ((Component)((EntityState)this).GetModelChildLocator().FindChild("Axe")).gameObject.SetActive(false); ((Component)((EntityState)this).GetModelChildLocator().FindChild("AxeOutline")).gameObject.SetActive(false); hasFired = true; } if (((EntityState)this).fixedAge >= duration && !((EntityState)this).isAuthority) { } } public override void OnExit() { ((EntityState)this).OnExit(); ((EntityState)this).PlayAnimation("Gesture, Override", "M2_Retrieve", "M2", duration); ((Component)((EntityState)this).GetModelChildLocator().FindChild("Axe")).gameObject.SetActive(true); ((Component)((EntityState)this).GetModelChildLocator().FindChild("AxeOutline")).gameObject.SetActive(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)2; } } internal class NewM1 : BaseSkillState { public float baseDuration = 0.35f; private float duration; private bool hasFired; private GameObject muzzleflashEffectPrefab; private WoodieBehaviour behaviour; private GameObject target; public override void OnEnter() { //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_00b3: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); behaviour = ((EntityState)this).GetComponent<WoodieBehaviour>(); behaviour.canExecute = false; if (!behaviour.target) { ((EntityState)this).outer.SetNextStateToMain(); return; } target = ((Component)((HuntressTracker)behaviour).GetTrackingTarget().healthComponent).gameObject; AkSoundEngine.PostEvent(Sounds.Play_Woodie_M2Throw, ((EntityState)this).gameObject); Prefabs.M2Projectile.GetComponent<ProjectileSimple>().desiredForwardSpeed = 120f * ((BaseState)this).attackSpeedStat; duration = baseDuration / ((BaseState)this).attackSpeedStat; Ray aimRay = ((BaseState)this).GetAimRay(); ((EntityState)this).characterBody.isSprinting = false; ((BaseState)this).StartAimMode(aimRay, 2f, false); ((EntityState)this).characterBody.SetAimTimer(2f); muzzleflashEffectPrefab = LegacyResourcesAPI.Load<GameObject>("prefabs/effects/muzzleflashes/muzzleflashengigrenade"); ((EntityState)this).PlayAnimation("Gesture, Override", "RangedM1", "M1", duration); EffectManager.SimpleMuzzleFlash(Prefabs.M2ThrowMuzzleFlashEffect, ((EntityState)this).gameObject, "HandR", false); } private void Fire() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: 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_002a: 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_0040: 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_0048: 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_00a3: 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_00b0: 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_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) Ray aimRay = ((BaseState)this).GetAimRay(); Vector3 position = default(Vector3); ((Vector3)(ref position))..ctor(((Ray)(ref aimRay)).origin.x, ((Ray)(ref aimRay)).origin.y + 1f, ((Ray)(ref aimRay)).origin.z); Quaternion rotation = Quaternion.LookRotation(((Ray)(ref aimRay)).direction); FireProjectileInfo val = default(FireProjectileInfo); val.crit = ((BaseState)this).RollCrit(); val.damage = ((EntityState)this).characterBody.damage * 1.7f; val.damageColorIndex = (DamageColorIndex)0; val.damageTypeOverride = (DamageType)0; val.force = 98f; val.owner = ((EntityState)this).gameObject; val.position = position; val.procChainMask = default(ProcChainMask); val.projectilePrefab = Prefabs.M2ProjectileHoming; val.rotation = rotation; val.useFuseOverride = false; val.useSpeedOverride = false; val.target = target; FireProjectileInfo val2 = val; ProjectileManager.instance.FireProjectile(val2); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= 0.2f / ((BaseState)this).attackSpeedStat && !hasFired) { hasFired = true; if (((EntityState)this).isAuthority) { Fire(); } ((Component)((EntityState)this).GetModelChildLocator().FindChild("Axe")).gameObject.SetActive(false); ((Component)((EntityState)this).GetModelChildLocator().FindChild("AxeOutline")).gameObject.SetActive(false); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextState((EntityState)(object)new NewM1End()); } } public override void OnExit() { ((EntityState)this).OnExit(); behaviour.canExecute = true; ((EntityState)this).PlayAnimation("Gesture, Override", "M2_Retrieve", "M2", duration); ((Component)((EntityState)this).GetModelChildLocator().FindChild("Axe")).gameObject.SetActive(true); ((Component)((EntityState)this).GetModelChildLocator().FindChild("AxeOutline")).gameObject.SetActive(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)2; } } internal class NewM1End : BaseSkillState { public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= 0.25f / ((BaseState)this).attackSpeedStat && ((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)2; } } internal class NewM2Charge : BaseSkillState { private WoodieBehaviour behaviour; private bool played; public override void OnEnter() { ((BaseState)this).OnEnter(); behaviour = ((EntityState)this).GetComponent<WoodieBehaviour>(); behaviour.canExecute = false; behaviour.changeMat = true; ((EntityState)this).GetModelAnimator().SetBool("M2Over", false); ((EntityState)this).PlayAnimation("Gesture, Override", "Charge"); } public override void FixedUpdate() { //IL_0072: 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) ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= 0.08f && !played) { played = true; behaviour.ID = AkSoundEngine.PostEvent(Sounds.Play_Woodie_Charge, ((EntityState)this).gameObject); } if (Object.op_Implicit((Object)(object)behaviour)) { if (behaviour.target) { float num = Vector3.Distance(((EntityState)this).transform.position, ((Component)((HuntressTracker)behaviour).trackingTarget).transform.position); if (num >= 58f && ((EntityState)this).isAuthority) { Debug.LogError((object)num); ((EntityState)this).outer.SetNextState((EntityState)(object)new NewM2Throw()); return; } } if (((EntityState)this).fixedAge >= 0.5f / ((BaseState)this).attackSpeedStat) { behaviour.charge1 = true; } if (((EntityState)this).fixedAge >= 1f / ((BaseState)this).attackSpeedStat) { behaviour.enableTracker2 = true; } if (((EntityState)this).fixedAge >= 1.5f / ((BaseState)this).attackSpeedStat) { behaviour.enableTracker3 = true; } } if (((EntityState)this).isAuthority && !((EntityState)this).inputBank.skill2.down) { ((EntityState)this).outer.SetNextState((EntityState)(object)new NewM2Throw()); } } 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 NewM2Throw : BaseSkillState { private float duration = 0.35f; private bool hasFired; private GameObject muzzleflashEffectPrefab; private WoodieBehaviour behaviour; private HurtBox target; private HurtBox target2; private HurtBox target3; private float targets = 0f; private float damageCoefficient = 2f; private Animator animator; private GameObject axe; private GameObject axeOutline; public override void OnEnter() { //IL_01a0: 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_01b4: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); behaviour = ((EntityState)this).GetComponent<WoodieBehaviour>(); AkSoundEngine.StopPlayingID(behaviour.ID); animator = ((EntityState)this).GetModelAnimator(); animator.SetBool("M2Over", true); ChildLocator modelChildLocator = ((EntityState)this).GetModelChildLocator(); axe = ((Component)modelChildLocator.FindChild("Axe")).gameObject; axeOutline = ((Component)modelChildLocator.FindChild("AxeOutline")).gameObject; if (behaviour.target) { target = ((HuntressTracker)behaviour).trackingTarget; targets += 0.7f; } else { behaviour.ResetMat(); if (((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); return; } } if (behaviour.enableTracker2 && Object.op_Implicit((Object)(object)behaviour.target2)) { target2 = behaviour.target2; damageCoefficient = 3.5f; targets += 0.7f; } if (behaviour.enableTracker3 && Object.op_Implicit((Object)(object)behaviour.target3)) { target3 = behaviour.target3; damageCoefficient = 5f; targets += 0.7f; } behaviour.canExecute = false; AkSoundEngine.PostEvent(Sounds.Play_Woodie_M2Throw, ((EntityState)this).gameObject); Ray aimRay = ((BaseState)this).GetAimRay(); ((EntityState)this).characterBody.isSprinting = false; ((BaseState)this).StartAimMode(aimRay, 2f, false); ((EntityState)this).characterBody.SetAimTimer(2f); muzzleflashEffectPrefab = LegacyResourcesAPI.Load<GameObject>("prefabs/effects/muzzleflashes/muzzleflashengigrenade"); EffectManager.SimpleMuzzleFlash(Prefabs.M2ThrowMuzzleFlashEffect, ((EntityState)this).gameObject, "HandR", false); } private void Fire() { //IL_0038: 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_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_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: 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) if (Object.op_Implicit((Object)(object)target) && NetworkServer.active) { WoodieAxeOrb woodieAxeOrb = new WoodieAxeOrb(); ((Orb)woodieAxeOrb).origin = ((BaseState)this).FindModelChild("HandR").position; woodieAxeOrb.damageValue = ((EntityState)this).characterBody.damage * damageCoefficient; woodieAxeOrb.isCrit = ((BaseState)this).RollCrit(); woodieAxeOrb.bouncesRemaining = 2; woodieAxeOrb.teamIndex = ((EntityState)this).teamComponent.teamIndex; woodieAxeOrb.attacker = ((EntityState)this).gameObject; woodieAxeOrb.bouncedObjects = new List<HealthComponent>(); woodieAxeOrb.procChainMask = default(ProcChainMask); woodieAxeOrb.procCoefficient = 0.2f; woodieAxeOrb.damageColorIndex = (DamageColorIndex)0; woodieAxeOrb.damageType = (DamageType)64; woodieAxeOrb.range = 20f; ((Orb)woodieAxeOrb).target = target; woodieAxeOrb.target2 = target2; woodieAxeOrb.target3 = target3; OrbManager.instance.AddOrb((Orb)(object)woodieAxeOrb); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= 0.2f && !hasFired) { hasFired = true; Fire(); behaviour.ResetMat(); axe.SetActive(false); axeOutline.SetActive(false); } if (((EntityState)this).fixedAge >= duration + targets / 2f && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { ((EntityState)this).OnExit(); behaviour.canExecute = true; axe.SetActive(true); axeOutline.SetActive(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)2; } } internal class NewUtil : BaseSkillState { private float duration = 0.65f; private bool spawn = true; public override void OnEnter() { ((BaseState)this).OnEnter(); ((EntityState)this).PlayAnimation("FullBody, Override", "Bonfire", "Utility", duration); } public override void FixedUpdate() { //IL_0046: 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) //IL_005b: 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_0065: 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) ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration * 0.35f && spawn) { spawn = false; if (NetworkServer.active) { GameObject val = Object.Instantiate<GameObject>(Prefabs.bonfire, ((EntityState)this).transform.position + ((EntityState)this).characterDirection.forward * 3f, Quaternion.identity, (Transform)null); val.GetComponent<TeamFilter>().teamIndex = ((EntityState)this).teamComponent.teamIndex; NetworkServer.Spawn(val); } } 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)2; } } internal class SpecialSkill : BaseSkillState { private float duration = 3f; private GameObject hitEffectPrefab = Prefabs.HitEffect; private Animator animator; private HitBoxGroup hitBoxGroup; private float fireTimer; private float fireFrequency = 0.85f; private float hitPauseDuration = 0.1f; private float moveSpeedBonusCoefficient = 10f; protected float hitPauseTimer = 0.5f; protected bool isInHitPause; protected HitStopCachedState hitStopCachedState; private GameObject spinEffect; public override void OnEnter() { //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_00f3: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); ((BaseCharacterController)((EntityState)this).characterMotor).Motor.ForceUnground(); Ray aimRay = ((BaseState)this).GetAimRay(); ((EntityState)this).characterBody.SetAimTimer(4f); animator = ((EntityState)this).GetModelAnimator(); if (Object.op_Implicit((Object)(object)animator)) { animator.SetBool("SpecialOver", false); animator.SetFloat("Special", 1f); } if (Object.op_Implicit((Object)(object)((EntityState)this).GetModelTransform())) { hitBoxGroup = Array.Find(((Component)((EntityState)this).GetModelTransform()).GetComponents<HitBoxGroup>(), (HitBoxGroup element) => element.groupName == "Spin"); } ((EntityState)this).PlayAnimation("FullBody, Override", "Special"); spinEffect = Object.Instantiate<GameObject>(Prefabs.SpinEffect, ((BaseState)this).FindModelChild("CenterMuzzle")); spinEffect.transform.localPosition = Vector3.zero; } private void Attack() { //IL_0024: 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) Util.PlayAttackSpeedSound("Play_Woodie_Swing", ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat); if (((EntityState)this).isAuthority) { Ray aimRay = ((BaseState)this).GetAimRay(); if (!NewOverlapAttack().Fire((List<HurtBox>)null)) { } } } private OverlapAttack NewOverlapAttack() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_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_00ac: 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) OverlapAttack val = new OverlapAttack(); val.procChainMask = default(ProcChainMask); val.procCoefficient = 1f; val.attacker = ((EntityState)this).gameObject; val.inflictor = ((EntityState)this).gameObject; val.teamIndex = ((EntityState)this).characterBody.teamComponent.teamIndex; val.damage = ((EntityState)this).characterBody.damage * 0.78f; val.forceVector = new Vector3(40f, 40f, 40f) * ((EntityState)this).characterBody.attackSpeed; val.hitEffectPrefab = hitEffectPrefab; val.isCrit = ((EntityState)this).characterBody.RollCrit(); val.damageColorIndex = (DamageColorIndex)0; val.damageType = (DamageType)64; val.maximumOverlapTargets = 9999999; val.hitBoxGroup = hitBoxGroup; return val; } public override void OnExit() { ((EntityState)this).OnExit(); if (Object.op_Implicit((Object)(object)spinEffect)) { EntityState.Destroy((Object)(object)spinEffect); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); animator.SetFloat("Special", 1f * ((BaseState)this).attackSpeedStat); fireTimer += Time.fixedDeltaTime; float num = fireFrequency * ((EntityState)this).characterBody.attackSpeed; float num2 = 0.15f / num; if (fireTimer > num2) { Attack(); fireTimer = 0f; } if (((EntityState)this).fixedAge >= duration) { if (Object.op_Implicit((Object)(object)animator)) { animator.SetBool("SpecialOver", true); } if (((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } if (((EntityState)this).fixedAge >= 0.4f && Object.op_Implicit((Object)(object)((EntityState)this).inputBank) && (((EntityState)this).inputBank.skill1.down || ((EntityState)this).inputBank.skill4.down)) { ((EntityState)this).outer.SetNextState((EntityState)(object)new SpecialFinisher()); } } 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 SpecialFinisher : BaseSkillState { private float duration = 0.35f; protected Quaternion slideRotation; private HitBoxGroup hitBoxGroup; private GameObject hitEffectP