Decompiled source of Seamstress v0.5.1
plugins/SeamstressMod.dll
Decompiled 2 days ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using EntityStates; using EntityStates.AI.Walker; using EntityStates.ImpBossMonster; using EntityStates.ImpMonster; using HG; using HG.BlendableTypes; using JetBrains.Annotations; using KinematicCharacterController; using On.RoR2; using On.RoR2.UI; using R2API; using R2API.Networking; using R2API.Networking.Interfaces; using R2API.Utils; using RoR2; using RoR2.Achievements; using RoR2.Audio; using RoR2.CameraModes; using RoR2.CharacterAI; using RoR2.ContentManagement; using RoR2.Projectile; using RoR2.Skills; using RoR2.UI; using SeamstressMod.Modules; using SeamstressMod.Modules.Achievements; using SeamstressMod.Modules.BaseStates; using SeamstressMod.Modules.Characters; using SeamstressMod.Seamstress; using SeamstressMod.Seamstress.Components; using SeamstressMod.Seamstress.Content; using SeamstressMod.Seamstress.SkillStates; using ThreeEyedGames; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Events; using UnityEngine.Networking; using UnityEngine.Rendering; using UnityEngine.UI; [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: CompilationRelaxations(8)] [assembly: AssemblyCompany("SeamstressMod")] [assembly: AssemblyProduct("SeamstressMod")] [assembly: AssemblyTitle("SeamstressMod")] [assembly: AssemblyInformationalVersion("1.0.0+e81f4d83333ecc2ccd5ac38df7d7ebbbf9d8a152")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace SeamstressMod { internal static class Log { internal static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object data) { _logSource.LogDebug(data); } internal static void Error(object data) { _logSource.LogError(data); } internal static void ErrorAssetBundle(string assetName, string bundleName) { Error("failed to load asset, " + assetName + ", because it does not exist in asset bundle, " + bundleName); } internal static void Fatal(object data) { _logSource.LogFatal(data); } internal static void Info(object data) { _logSource.LogInfo(data); } internal static void Message(object data) { _logSource.LogMessage(data); } internal static void Warning(object data) { _logSource.LogWarning(data); } } [NetworkCompatibility(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.kenko.Seamstress", "Seamstress", "1.0.0")] public class SeamstressPlugin : BaseUnityPlugin { public const string MODUID = "com.kenko.Seamstress"; public const string MODNAME = "Seamstress"; public const string MODVERSION = "1.0.0"; public const string DEVELOPER_PREFIX = "KENKO"; public static SeamstressPlugin instance; private void Awake() { instance = this; NetworkingAPI.RegisterMessageType<SyncHunger>(); Log.Init(((BaseUnityPlugin)this).Logger); Language.Init(); new SeamstressSurvivor().Initialize(); new ContentPacks().Initialize(); } } } namespace SeamstressMod.Seamstress { public class SeamstressSurvivor : SurvivorBase<SeamstressSurvivor> { public const string SEAMSTRESS_PREFIX = "KENKO_SEAMSTRESS_"; internal static GameObject characterPrefab; public static SkillDef snapBackSkillDef; public override string assetBundleName => "seamstressassets"; public override string bodyName => "SeamstressBody"; public override string masterName => "SeamstressMonsterMaster"; public override string modelPrefabName => "mdlSeamstress"; public override string displayPrefabName => "SeamstressDisplay"; public override string survivorTokenPrefix => "KENKO_SEAMSTRESS_"; public override BodyInfo bodyInfo { get { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) BodyInfo bodyInfo = new BodyInfo(); bodyInfo.bodyName = bodyName; bodyInfo.bodyNameToken = "KENKO_SEAMSTRESS_NAME"; bodyInfo.subtitleNameToken = "KENKO_SEAMSTRESS_SUBTITLE"; bodyInfo.characterPortrait = assetBundle.LoadAsset<Texture>("ravenIcon"); bodyInfo.bodyColor = new Color(31f / 51f, 11f / 51f, 11f / 51f); bodyInfo.sortPosition = 100f; bodyInfo.crosshair = Assets.LoadCrosshair("SimpleDot"); bodyInfo.podPrefab = null; bodyInfo.initialStateType = new SerializableEntityStateType(typeof(SeamstressSpawnState)); bodyInfo.maxHealth = 160f; bodyInfo.healthRegen = 1f; bodyInfo.armor = 0f; bodyInfo.damage = 8f; bodyInfo.damageGrowth = 0f; bodyInfo.healthGrowth = 48f; bodyInfo.jumpCount = 1; return bodyInfo; } } public override CustomRendererInfo[] customRendererInfos => new CustomRendererInfo[2] { new CustomRendererInfo { childName = "Model", material = assetBundle.LoadMaterial("matSeamstress") }, new CustomRendererInfo { childName = "ScissorModel", material = assetBundle.LoadMaterial("matSeamstress") } }; public override UnlockableDef characterUnlockableDef => SeamstressUnlockables.characterUnlockableDef; public override ItemDisplaysBase itemDisplays => new SeamstressItemDisplays(); public override AssetBundle assetBundle { get; protected set; } public override GameObject bodyPrefab { get; protected set; } public override CharacterBody prefabCharacterBody { get; protected set; } public override GameObject characterModelObject { get; protected set; } public override CharacterModel prefabCharacterModel { get; protected set; } public override GameObject displayPrefab { get; protected set; } public override void Initialize() { base.Initialize(); } public override void InitializeCharacter() { SeamstressUnlockables.Init(); SeamstressCrosshair.Init(assetBundle); base.InitializeCharacter(); DamageTypes.Init(); SeamstressConfig.Init(); SeamstressStates.Init(); SeamstressTokens.Init(); SeamstressAssets.Init(assetBundle); SeamstressBuffs.Init(assetBundle); Dots.Init(); InitializeEntityStateMachines(); InitializeSkills(); InitializeSkins(); InitializeCharacterMaster(); AdditionalBodySetup(); characterPrefab = bodyPrefab; AddHooks(); } private void AdditionalBodySetup() { //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Expected O, but got Unknown //IL_0062: Expected O, but got Unknown //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Expected O, but got Unknown //IL_008a: Expected O, but got Unknown AddHitboxes(); bodyPrefab.AddComponent<SeamstressController>(); bodyPrefab.AddComponent<ScissorController>(); bodyPrefab.AddComponent<NeedleController>(); bodyPrefab.AddComponent<Tracker>(); TempVisualEffectAPI.AddTemporaryVisualEffect(SeamstressAssets.sewnCdEffect, new EffectRadius(pee), new EffectCondition(tempAdd), ""); TempVisualEffectAPI.AddTemporaryVisualEffect(SeamstressAssets.sewnEffect, new EffectRadius(pee), new EffectCondition(tempAdd2), ""); static float pee(CharacterBody body) { return 2f * body.radius; } static bool tempAdd(CharacterBody body) { return body.HasBuff(SeamstressBuffs.manipulatedCd); } static bool tempAdd2(CharacterBody body) { return body.HasBuff(SeamstressBuffs.manipulated); } } public void AddHitboxes() { Prefabs.SetupHitBoxGroup(characterModelObject, "Sword", "SwordHitbox"); Prefabs.SetupHitBoxGroup(characterModelObject, "SwordBig", "SwordHitboxBig"); Prefabs.SetupHitBoxGroup(characterModelObject, "Weave", "WeaveHitbox"); Prefabs.SetupHitBoxGroup(characterModelObject, "WeaveBig", "WeaveHitboxBig"); Prefabs.SetupHitBoxGroup(characterModelObject, "Right", "RightScissorHitbox"); Prefabs.SetupHitBoxGroup(characterModelObject, "Left", "LeftScissorHitbox"); } public override void InitializeEntityStateMachines() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_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_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //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) bodyPrefab.GetComponent<CharacterBody>().preferredInitialStateType = new SerializableEntityStateType(typeof(SeamstressSpawnState)); EntityStateMachine[] components = bodyPrefab.GetComponents<EntityStateMachine>(); foreach (EntityStateMachine val in components) { if (val.customName == "Body") { val.mainStateType = new SerializableEntityStateType(typeof(MainState)); } } EntityStateMachine val2 = bodyPrefab.AddComponent<EntityStateMachine>(); val2.initialStateType = new SerializableEntityStateType(typeof(SeamstressJump)); val2.mainStateType = new SerializableEntityStateType(typeof(SeamstressJump)); val2.customName = "Passive"; Prefabs.AddEntityStateMachine(bodyPrefab, "Weapon"); Prefabs.AddEntityStateMachine(bodyPrefab, "Weapon2"); } public override void InitializeSkills() { bodyPrefab.AddComponent<SeamstressPassive>(); Skills.CreateSkillFamilies(bodyPrefab); AddPassiveSkills(); AddPrimarySkills(); AddSecondarySkills(); AddUtilitySkills(); AddSpecialSkills(); } private void AddPassiveSkills() { //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: Unknown result type (might be due to invalid IL or missing references) SeamstressPassive component = bodyPrefab.GetComponent<SeamstressPassive>(); SkillLocator component2 = bodyPrefab.GetComponent<SkillLocator>(); component2.passiveSkill.enabled = false; component.blinkPassive = Skills.CreateSkillDef(new SkillDefInfo { skillName = "KENKO_SEAMSTRESS_PASSIVE_NAME", skillNameToken = "KENKO_SEAMSTRESS_PASSIVE_NAME", skillDescriptionToken = "KENKO_SEAMSTRESS_PASSIVE_DESCRIPTION", skillIcon = assetBundle.LoadAsset<Sprite>("texItHungersIcon"), keywordTokens = new string[2] { Tokens.insatiableKeyword, Tokens.whatCountsAsHealth }, activationState = new SerializableEntityStateType(typeof(Idle)), activationStateMachineName = "", baseMaxStock = 1, baseRechargeInterval = 0f, beginSkillCooldownOnSkillEnd = false, canceledFromSprinting = false, forceSprintDuringState = false, fullRestockOnAssign = true, interruptPriority = (InterruptPriority)0, resetCooldownTimerOnUse = false, isCombatSkill = false, mustKeyPress = false, cancelSprintingOnActivation = false, rechargeStock = 1, requiredStock = 2, stockToConsume = 1 }); Skills.AddPassiveSkills(component.passiveSkillSlot.skillFamily, component.blinkPassive); component.impGauge = Skills.CreateSkillDef(new SkillDefInfo { skillName = "KENKO_SEAMSTRESS_NEEDLE_NAME", skillNameToken = "KENKO_SEAMSTRESS_NEEDLE_NAME", skillDescriptionToken = "KENKO_SEAMSTRESS_NEEDLE_DESCRIPTION", skillIcon = assetBundle.LoadAsset<Sprite>("texImpTouchedIcon"), keywordTokens = new string[1] { Tokens.needleKeyword }, activationState = new SerializableEntityStateType(typeof(Idle)), activationStateMachineName = "", baseMaxStock = 1, baseRechargeInterval = 0f, beginSkillCooldownOnSkillEnd = false, canceledFromSprinting = false, forceSprintDuringState = false, fullRestockOnAssign = true, interruptPriority = (InterruptPriority)0, resetCooldownTimerOnUse = false, isCombatSkill = false, mustKeyPress = false, cancelSprintingOnActivation = false, rechargeStock = 1, requiredStock = 2, stockToConsume = 1 }); Skills.AddPassiveSkills(component.impGaugeSkillSlot.skillFamily, component.impGauge); } private void AddPrimarySkills() { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) SteppedSkillDef val = Skills.CreateSkillDef<SteppedSkillDef>(new SkillDefInfo("Trim", "KENKO_SEAMSTRESS_PRIMARY_TRIM_NAME", "KENKO_SEAMSTRESS_PRIMARY_TRIM_DESCRIPTION", assetBundle.LoadAsset<Sprite>("texFlurryIcon"), new SerializableEntityStateType(typeof(Trim)))); val.stepCount = 3; val.stepGraceDuration = 1f; Skills.AddPrimarySkills(bodyPrefab, (SkillDef)val); SteppedSkillDef val2 = Skills.CreateSkillDef<SteppedSkillDef>(new SkillDefInfo("Flurry", "KENKO_SEAMSTRESS_PRIMARY_FLURRY_NAME", "KENKO_SEAMSTRESS_PRIMARY_FLURRY_DESCRIPTION", assetBundle.LoadAsset<Sprite>("texFlurryIcon"), new SerializableEntityStateType(typeof(Flurry)))); val2.stepCount = 2; val2.stepGraceDuration = 1f; Skills.AddPrimarySkills(bodyPrefab, (SkillDef)val2); } private void AddSecondarySkills() { //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_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) SkillDefInfo skillDefInfo = new SkillDefInfo(); skillDefInfo.skillName = "Clip"; skillDefInfo.skillNameToken = "KENKO_SEAMSTRESS_SECONDARY_CLIP_NAME"; skillDefInfo.skillDescriptionToken = "KENKO_SEAMSTRESS_SECONDARY_CLIP_DESCRIPTION"; skillDefInfo.keywordTokens = new string[2] { Tokens.sentienceRangeKeyword, Tokens.needleKeyword }; skillDefInfo.skillIcon = assetBundle.LoadAsset<Sprite>("texClipIcon"); skillDefInfo.activationState = new SerializableEntityStateType(typeof(Clip)); skillDefInfo.activationStateMachineName = "Weapon"; skillDefInfo.interruptPriority = (InterruptPriority)1; skillDefInfo.baseMaxStock = 1; skillDefInfo.baseRechargeInterval = 6f; skillDefInfo.rechargeStock = 1; skillDefInfo.requiredStock = 1; skillDefInfo.stockToConsume = 1; skillDefInfo.resetCooldownTimerOnUse = false; skillDefInfo.fullRestockOnAssign = false; skillDefInfo.dontAllowPastMaxStocks = false; skillDefInfo.beginSkillCooldownOnSkillEnd = false; skillDefInfo.mustKeyPress = true; skillDefInfo.isCombatSkill = true; skillDefInfo.canceledFromSprinting = false; skillDefInfo.cancelSprintingOnActivation = true; skillDefInfo.forceSprintDuringState = false; SkillDef val = Skills.CreateSkillDef(skillDefInfo); Skills.AddSecondarySkills(bodyPrefab, val); skillDefInfo = new SkillDefInfo(); skillDefInfo.skillName = "PlanarManipulation"; skillDefInfo.skillNameToken = "KENKO_SEAMSTRESS_SECONDARY_PLANMAN_NAME"; skillDefInfo.skillDescriptionToken = "KENKO_SEAMSTRESS_SECONDARY_PLANMAN_DESCRIPTION"; skillDefInfo.keywordTokens = new string[1] { Tokens.manipulateKeyword }; skillDefInfo.skillIcon = assetBundle.LoadAsset<Sprite>("texPlanarManipulationIcon"); skillDefInfo.activationState = new SerializableEntityStateType(typeof(Telekinesis)); skillDefInfo.activationStateMachineName = "Weapon2"; skillDefInfo.interruptPriority = (InterruptPriority)1; skillDefInfo.baseMaxStock = 1; skillDefInfo.baseRechargeInterval = 0.5f; skillDefInfo.rechargeStock = 1; skillDefInfo.requiredStock = 0; skillDefInfo.stockToConsume = 0; skillDefInfo.resetCooldownTimerOnUse = false; skillDefInfo.fullRestockOnAssign = false; skillDefInfo.dontAllowPastMaxStocks = false; skillDefInfo.beginSkillCooldownOnSkillEnd = false; skillDefInfo.mustKeyPress = true; skillDefInfo.isCombatSkill = true; skillDefInfo.canceledFromSprinting = false; skillDefInfo.cancelSprintingOnActivation = false; skillDefInfo.forceSprintDuringState = false; TrackingSkillDef trackingSkillDef = Skills.CreateSkillDef<TrackingSkillDef>(skillDefInfo); Skills.AddSecondarySkills(bodyPrefab, trackingSkillDef); } private void AddUtilitySkills() { //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_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_0253: Unknown result type (might be due to invalid IL or missing references) //IL_0258: Unknown result type (might be due to invalid IL or missing references) //IL_026a: Unknown result type (might be due to invalid IL or missing references) SkillDefInfo skillDefInfo = new SkillDefInfo(); skillDefInfo.skillName = "HeartDashSeamstress"; skillDefInfo.skillNameToken = "KENKO_SEAMSTRESS_UTILITY_HEARTDASH_NAME"; skillDefInfo.skillDescriptionToken = "KENKO_SEAMSTRESS_UTILITY_HEARTDASH_DESCRIPTION"; skillDefInfo.keywordTokens = new string[1] { Tokens.insatiableKeyword }; skillDefInfo.skillIcon = assetBundle.LoadAsset<Sprite>("texGlimpseOfCorruptionIcon"); skillDefInfo.activationState = new SerializableEntityStateType(typeof(HealthCostDash)); skillDefInfo.activationStateMachineName = "Weapon"; skillDefInfo.interruptPriority = (InterruptPriority)1; skillDefInfo.baseRechargeInterval = 8f; skillDefInfo.baseMaxStock = 1; skillDefInfo.rechargeStock = 1; skillDefInfo.requiredStock = 1; skillDefInfo.stockToConsume = 1; skillDefInfo.resetCooldownTimerOnUse = false; skillDefInfo.fullRestockOnAssign = false; skillDefInfo.dontAllowPastMaxStocks = false; skillDefInfo.mustKeyPress = true; skillDefInfo.beginSkillCooldownOnSkillEnd = false; skillDefInfo.isCombatSkill = true; skillDefInfo.canceledFromSprinting = false; skillDefInfo.cancelSprintingOnActivation = false; skillDefInfo.forceSprintDuringState = false; SkillDef val = Skills.CreateSkillDef(skillDefInfo); Skills.AddUtilitySkills(bodyPrefab, val); skillDefInfo = new SkillDefInfo(); skillDefInfo.skillName = "ParrySeamstress"; skillDefInfo.skillNameToken = "KENKO_SEAMSTRESS_UTILITY_PARRY_NAME"; skillDefInfo.skillDescriptionToken = "KENKO_SEAMSTRESS_UTILITY_PARRY_DESCRIPTION"; skillDefInfo.keywordTokens = new string[2] { Tokens.sentienceRangeKeyword, Tokens.insatiableKeyword }; skillDefInfo.skillIcon = assetBundle.LoadAsset<Sprite>("texGlimpseOfPurityIcon"); skillDefInfo.activationState = new SerializableEntityStateType(typeof(Parry)); skillDefInfo.activationStateMachineName = "Weapon"; skillDefInfo.interruptPriority = (InterruptPriority)2; skillDefInfo.baseRechargeInterval = 8f; skillDefInfo.baseMaxStock = 1; skillDefInfo.rechargeStock = 1; skillDefInfo.requiredStock = 1; skillDefInfo.stockToConsume = 1; skillDefInfo.resetCooldownTimerOnUse = false; skillDefInfo.fullRestockOnAssign = true; skillDefInfo.dontAllowPastMaxStocks = false; skillDefInfo.mustKeyPress = true; skillDefInfo.beginSkillCooldownOnSkillEnd = false; skillDefInfo.isCombatSkill = true; skillDefInfo.canceledFromSprinting = false; skillDefInfo.cancelSprintingOnActivation = true; skillDefInfo.forceSprintDuringState = false; SkillDef val2 = Skills.CreateSkillDef(skillDefInfo); Skills.AddUtilitySkills(bodyPrefab, val2); skillDefInfo = new SkillDefInfo(); skillDefInfo.skillName = "SnapBack"; skillDefInfo.skillNameToken = "SnapBack"; skillDefInfo.skillDescriptionToken = "Snapback to core"; skillDefInfo.keywordTokens = new string[0]; skillDefInfo.skillIcon = assetBundle.LoadAsset<Sprite>("texImpTouchedIcon"); skillDefInfo.activationState = new SerializableEntityStateType(typeof(Snapback)); skillDefInfo.activationStateMachineName = "Body"; skillDefInfo.interruptPriority = (InterruptPriority)3; skillDefInfo.baseRechargeInterval = 0f; skillDefInfo.baseMaxStock = 1; skillDefInfo.rechargeStock = 0; skillDefInfo.requiredStock = 0; skillDefInfo.stockToConsume = 0; skillDefInfo.resetCooldownTimerOnUse = false; skillDefInfo.fullRestockOnAssign = true; skillDefInfo.dontAllowPastMaxStocks = true; skillDefInfo.beginSkillCooldownOnSkillEnd = false; skillDefInfo.mustKeyPress = true; skillDefInfo.isCombatSkill = false; skillDefInfo.canceledFromSprinting = false; skillDefInfo.cancelSprintingOnActivation = false; skillDefInfo.forceSprintDuringState = false; snapBackSkillDef = Skills.CreateSkillDef(skillDefInfo); } private void AddSpecialSkills() { //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_0074: Unknown result type (might be due to invalid IL or missing references) SkillDefInfo skillDefInfo = new SkillDefInfo(); skillDefInfo.skillName = "FireSeamstress"; skillDefInfo.skillNameToken = "KENKO_SEAMSTRESS_SPECIAL_FIRE_NAME"; skillDefInfo.skillDescriptionToken = "KENKO_SEAMSTRESS_SPECIAL_FIRE_DESCRIPTION"; skillDefInfo.keywordTokens = new string[1] { Tokens.sentienceKeyword }; skillDefInfo.skillIcon = assetBundle.LoadAsset<Sprite>("texSkewerIcon"); skillDefInfo.activationState = new SerializableEntityStateType(typeof(FireScissor)); skillDefInfo.activationStateMachineName = "Weapon"; skillDefInfo.interruptPriority = (InterruptPriority)1; skillDefInfo.baseRechargeInterval = 16f; skillDefInfo.baseMaxStock = 2; skillDefInfo.rechargeStock = 2; skillDefInfo.requiredStock = 1; skillDefInfo.stockToConsume = 1; skillDefInfo.resetCooldownTimerOnUse = false; skillDefInfo.fullRestockOnAssign = false; skillDefInfo.dontAllowPastMaxStocks = true; skillDefInfo.mustKeyPress = true; skillDefInfo.beginSkillCooldownOnSkillEnd = false; skillDefInfo.isCombatSkill = true; skillDefInfo.canceledFromSprinting = false; skillDefInfo.cancelSprintingOnActivation = true; skillDefInfo.forceSprintDuringState = false; SkillDef val = Skills.CreateSkillDef(skillDefInfo); Skills.AddSpecialSkills(bodyPrefab, val); } public override void InitializeSkins() { ModelSkinController val = ((Component)prefabCharacterModel).gameObject.AddComponent<ModelSkinController>(); ChildLocator component = ((Component)prefabCharacterModel).GetComponent<ChildLocator>(); RendererInfo[] baseRendererInfos = prefabCharacterModel.baseRendererInfos; List<SkinDef> list = new List<SkinDef>(); SkinDef val2 = Skins.CreateSkinDef("DEFAULT_SKIN", assetBundle.LoadAsset<Sprite>("texMainSkin"), baseRendererInfos, ((Component)prefabCharacterModel).gameObject); val2.meshReplacements = Skins.getMeshReplacements(assetBundle, baseRendererInfos, "meshSeamstress", "meshScissors"); list.Add(val2); SkinDef val3 = Skins.CreateSkinDef("KENKO_SEAMSTRESS_MASTERY_SKIN_NAME", assetBundle.LoadAsset<Sprite>("texVergilAchievement"), baseRendererInfos, ((Component)prefabCharacterModel).gameObject); val3.meshReplacements = Skins.getMeshReplacements(assetBundle, baseRendererInfos, "meshPrincess", "meshPrincessSword"); val3.rendererInfos[0].defaultMaterial = assetBundle.LoadMaterial("matPrincessBlue"); val3.rendererInfos[1].defaultMaterial = assetBundle.LoadMaterial("matPrincessSword"); SkinDef val4 = Skins.CreateSkinDef("KENKO_SEAMSTRESS_MASTERY_SKIN_NAME", assetBundle.LoadAsset<Sprite>("texDanteAchievement"), baseRendererInfos, ((Component)prefabCharacterModel).gameObject); val4.meshReplacements = Skins.getMeshReplacements(assetBundle, baseRendererInfos, "meshPrincess", "meshPrincessSword"); val4.rendererInfos[0].defaultMaterial = assetBundle.LoadMaterial("matPrincessRed"); val4.rendererInfos[1].defaultMaterial = assetBundle.LoadMaterial("matPrincessSwordAlt"); SkinDef val5 = Skins.CreateSkinDef("KENKO_SEAMSTRESS_MASTERY_SKIN_NAME", assetBundle.LoadAsset<Sprite>("texDanteAchievement"), baseRendererInfos, ((Component)prefabCharacterModel).gameObject); val5.meshReplacements = Skins.getMeshReplacements(assetBundle, baseRendererInfos, "RavenBody", "ShadowClaws"); val5.rendererInfos[0].defaultMaterial = assetBundle.LoadMaterial("matRaven"); val5.rendererInfos[1].defaultMaterial = assetBundle.LoadMaterial("matHands"); SkinDef val6 = Skins.CreateSkinDef("KENKO_SEAMSTRESS_MASTERY_SKIN_NAME", assetBundle.LoadAsset<Sprite>("texDanteAchievement"), baseRendererInfos, ((Component)prefabCharacterModel).gameObject); val6.meshReplacements = Skins.getMeshReplacements(assetBundle, baseRendererInfos, "RavenBodyAlt", "ShadowClaws"); val6.rendererInfos[0].defaultMaterial = assetBundle.LoadMaterial("matRavenAlt"); val6.rendererInfos[1].defaultMaterial = assetBundle.LoadMaterial("matHands"); list.Add(val3); list.Add(val4); list.Add(val5); list.Add(val6); val.skins = list.ToArray(); } public override void InitializeCharacterMaster() { SeamstressAI.Init(bodyPrefab, masterName); } private void AddHooks() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown HUD.onHudTargetChangedGlobal += HUDSetup; HealthComponent.Heal += new hook_Heal(HealthComponent_Heal); CharacterModel.UpdateOverlays += new hook_UpdateOverlays(CharacterModel_UpdateOverlays); HealthComponent.TakeDamage += new hook_TakeDamage(HealthComponent_TakeDamage); CharacterBody.RecalculateStats += new hook_RecalculateStats(CharacterBody_RecalculateStats); LoadoutPanelController.Rebuild += new hook_Rebuild(LoadoutPanelController_Rebuild); } private static void LoadoutPanelController_Rebuild(orig_Rebuild orig, LoadoutPanelController self) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (self.currentDisplayData.bodyIndex != BodyCatalog.FindBodyIndex("SeamstressBody")) { return; } LanguageTextMeshController[] componentsInChildren = ((Component)self).gameObject.GetComponentsInChildren<LanguageTextMeshController>(); foreach (LanguageTextMeshController val in componentsInChildren) { if (Object.op_Implicit((Object)(object)val) && val.token == "LOADOUT_SKILL_MISC") { val.token = "Passive"; } } } private void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo) { //IL_00b1: 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 (!NetworkServer.active) { return; } CharacterBody body = self.body; if (Object.op_Implicit((Object)(object)body) && body.baseNameToken == "KENKO_SEAMSTRESS_NAME") { if (body.HasBuff(SeamstressBuffs.parryStart) && damageInfo.damage > 0f) { body.RemoveBuff(SeamstressBuffs.parryStart); if (!body.HasBuff(SeamstressBuffs.parrySuccess)) { body.AddBuff(SeamstressBuffs.parrySuccess); } body.AddTimedBuff(Buffs.Immune, 0.9f); return; } if (body.HasBuff(SeamstressBuffs.instatiable) && damageInfo.dotIndex != Dots.SeamstressBleed) { SeamstressController component = ((Component)body).gameObject.GetComponent<SeamstressController>(); if (Object.op_Implicit((Object)(object)component)) { component.FillHunger(0f - damageInfo.damage); if (component.fiendMeter - damageInfo.damage <= 0f && (Object)(object)body.skillLocator.utility.skillDef == (Object)(object)snapBackSkillDef) { body.skillLocator.utility.ExecuteIfReady(); } return; } } } orig.Invoke(self, damageInfo); if (Object.op_Implicit((Object)(object)body) && body.baseNameToken == "KENKO_SEAMSTRESS_NAME") { body.RecalculateStats(); } } private void CharacterModel_UpdateOverlays(orig_UpdateOverlays orig, CharacterModel self) { orig.Invoke(self); if (!Object.op_Implicit((Object)(object)self) || !Object.op_Implicit((Object)(object)self.body) || self.body.baseNameToken != "KENKO_SEAMSTRESS_NAME") { return; } SeamstressController component = ((Component)self.body).GetComponent<SeamstressController>(); if (self.body.HasBuff(SeamstressBuffs.instatiable) && !component.inInsatiable) { TemporaryOverlay val = ((Component)self).gameObject.AddComponent<TemporaryOverlay>(); val.duration = 6f; val.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0.4f); val.animateShaderAlpha = true; val.destroyComponentOnEnd = true; val.originalMaterial = SeamstressAssets.insatiableOverlayMat; val.AddToCharacerModel(self); component.inInsatiable = true; } else if (!self.body.HasBuff(SeamstressBuffs.instatiable) && component.inInsatiable) { component.inInsatiable = false; if ((Object)(object)((Component)self).gameObject.GetComponent<TemporaryOverlay>() != (Object)null) { Object.Destroy((Object)(object)((Component)self).gameObject.GetComponent<TemporaryOverlay>()); } } if (self.body.HasBuff(SeamstressBuffs.parryStart)) { TemporaryOverlay val2 = ((Component)self).gameObject.AddComponent<TemporaryOverlay>(); val2.duration = 0.4f; val2.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f); val2.animateShaderAlpha = true; val2.destroyComponentOnEnd = true; val2.originalMaterial = SeamstressAssets.parryMat; val2.AddToCharacerModel(self); } } private float HealthComponent_Heal(orig_Heal orig, HealthComponent self, float amount, ProcChainMask procChainMask, bool nonRegen = true) { //IL_0045: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)self) && self.body.HasBuff(SeamstressBuffs.instatiable) && self.body.baseNameToken == "KENKO_SEAMSTRESS_NAME") { amount *= 0.001f; } float num = orig.Invoke(self, amount, procChainMask, nonRegen); SeamstressController seamstressController = default(SeamstressController); if (self.body.baseNameToken == "KENKO_SEAMSTRESS_NAME" && ((Component)self.body).TryGetComponent<SeamstressController>(ref seamstressController) && self.body.HasBuff(SeamstressBuffs.instatiable)) { if (self.health >= self.fullHealth) { seamstressController.FillHunger(amount / 0.001f * 0.999f); } else { seamstressController.FillHunger(num / 0.001f * 0.999f); } } return num; } private void CharacterBody_RecalculateStats(orig_RecalculateStats orig, CharacterBody self) { orig.Invoke(self); if (!Object.op_Implicit((Object)(object)self) || self.baseNameToken != "KENKO_SEAMSTRESS_NAME") { return; } SeamstressController component = ((Component)self).GetComponent<SeamstressController>(); HealthComponent component2 = ((Component)self).GetComponent<HealthComponent>(); SkillLocator component3 = ((Component)self).GetComponent<SkillLocator>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component2) && Object.op_Implicit((Object)(object)component3)) { component.maxHunger = component2.fullHealth * 2f; float num = component2.fullHealth + (component2.fullShield + component2.barrier) / 2f + component.fiendMeter / 8f - component2.health; float num2 = component2.fullHealth * 0.66f; if (component.inInsatiable && component3.utility.skillNameToken == "KENKO_SEAMSTRESS_UTILITY_PARRY_NAME") { self.baseDamage = 8f + num2 * 0.05f + num * 0.05f; } else { self.baseDamage = 8f + num * 0.05f; } if (component.fiendMeter > 0f) { self.moveSpeed += 2f * Util.Remap(component.fiendMeter, 0f, component.maxHunger, 0f, 2f); self.attackSpeed += 0.1f * Util.Remap(component.fiendMeter, 0f, component.maxHunger, 0f, 2f); } } if (!self.HasBuff(SeamstressBuffs.scissorLeftBuff)) { self.attackSpeed += 0.1f; self.moveSpeed += 1f; } if (!self.HasBuff(SeamstressBuffs.scissorRightBuff)) { self.attackSpeed += 0.1f; self.moveSpeed += 1f; } if (Object.op_Implicit((Object)(object)self.inventory) && self.inventory.GetItemCount(Items.EquipmentMagazineVoid) != 0) { self.attackSpeed += 0.1f * (float)self.inventory.GetItemCount(Items.EquipmentMagazineVoid); self.moveSpeed += 1f * (float)self.inventory.GetItemCount(Items.EquipmentMagazineVoid); } } internal static void HUDSetup(HUD hud) { //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_024c: Unknown result type (might be due to invalid IL or missing references) //IL_0263: Unknown result type (might be due to invalid IL or missing references) //IL_0268: Unknown result type (might be due to invalid IL or missing references) //IL_027f: Unknown result type (might be due to invalid IL or missing references) //IL_0284: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)hud.targetBodyObject) && (Object)(object)hud.targetMaster.bodyPrefab == (Object)(object)characterPrefab && ((NetworkBehaviour)hud.targetMaster).hasAuthority) { Transform val = ((Component)hud).transform.Find("MainContainer").Find("MainUIArea").Find("SpringCanvas") .Find("BottomLeftCluster") .Find("BarRoots") .Find("LevelDisplayCluster"); if (!Object.op_Implicit((Object)(object)((Component)hud).transform.Find("MainContainer").Find("MainUIArea").Find("SpringCanvas") .Find("BottomLeftCluster") .Find("ImpGauge"))) { GameObject val2 = Object.Instantiate<GameObject>(((Component)val).gameObject, ((Component)hud).transform.Find("MainContainer").Find("MainUIArea").Find("SpringCanvas") .Find("BottomLeftCluster")); ((Object)val2).name = "ImpGauge"; Object.DestroyImmediate((Object)(object)((Component)val2.transform.GetChild(0)).gameObject); Object.Destroy((Object)(object)val2.GetComponentInChildren<LevelText>()); Object.Destroy((Object)(object)val2.GetComponentInChildren<ExpBar>()); ImpGauge impGauge = val2.AddComponent<ImpGauge>(); impGauge.targetHUD = hud; impGauge.fillRectTransform = ((Component)val2.transform.Find("ExpBarRoot").GetChild(0).GetChild(0)).GetComponent<RectTransform>(); ((Component)val2.transform.Find("LevelDisplayRoot").Find("ValueText")).gameObject.SetActive(false); ((Component)val2.transform.Find("LevelDisplayRoot").Find("PrefixText")).gameObject.SetActive(false); ((Behaviour)((Component)val2.transform.Find("ExpBarRoot").GetChild(0)).GetComponent<Image>()).enabled = true; ((Component)val2.transform.Find("LevelDisplayRoot")).GetComponent<RectTransform>().anchoredPosition = new Vector2(-12f, 0f); RectTransform component = val2.GetComponent<RectTransform>(); component.anchorMax = new Vector2(1f, 1f); component.sizeDelta = new Vector2(1f, 1f); ((Transform)component).localPosition = Vector2.op_Implicit(new Vector2(740f, 430f)); ((Transform)component).localScale = Vector2.op_Implicit(new Vector2(0.5f, 0.5f)); } if (!Object.op_Implicit((Object)(object)((Component)hud).transform.Find("MainContainer").Find("MainUIArea").Find("CrosshairCanvas") .Find("SeamstressCrosshair"))) { GameObject val3 = Object.Instantiate<GameObject>(SeamstressCrosshair.seamstressCrosshair, ((Component)hud).transform.Find("MainContainer").Find("MainUIArea").Find("CrosshairCanvas")); ((Object)val3).name = "SeamstressCrosshair"; val3.gameObject.GetComponent<HudElement>().targetBodyObject = hud.targetBodyObject; val3.gameObject.GetComponent<HudElement>().targetCharacterBody = hud.targetBodyObject.GetComponent<CharacterBody>(); } } } } } namespace SeamstressMod.Seamstress.SkillStates { public class Clip : BaseSeamstressSkillState { public static GameObject clawSlash = SeamstressAssets.clawSlashEffect; public static GameObject hitEffectPrefab = SeamstressAssets.scissorsHitImpactEffect; public static GameObject swingEffectPrefab = SeamstressAssets.scissorsComboSlashEffect; public static GameObject wideEffectPrefab = SeamstressAssets.wideSlashEffect; protected Animator animator; private OverlapAttack overlapAttack; private DamageType damageType = (DamageType)0; private ModdedDamageType moddedDamageType3 = DamageTypes.Empty; private ModdedDamageType moddedDamageType2 = DamageTypes.ClipLifeSteal; private ModdedDamageType moddedDamageType = DamageTypes.CutDamage; private float damageCoefficient = 1f; private float procCoefficient = 1f; private float pushForce = 0f; private Vector3 bonusForce = Vector3.zero; protected float stopwatch; private HitStopCachedState hitStopCachedState; private float hitPauseTimer; protected float hitStopDuration = 0.04f; private bool hasHopped; protected bool inHitPause; protected string playbackRateParam = "Slash.playbackRate"; protected string hitBoxString = "SwordBig"; private int snips; private int alternateSwings = 0; private float baseDuration = 0.75f; private float duration; private float firstSnip; private float secondSnip; private float snipInterval; private float lastSnip; private bool hasFired; private bool hasFired2; private bool noScissors; private bool inAir; private Vector3 storedVelocity; public override void OnEnter() { //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) base.OnEnter(); baseDuration = 0.75f - 0.5f * (0.5f * (seamCom.fiendMeter / (((EntityState)this).healthComponent.fullHealth * 2f))); snips = needleCount; if (!scissorRight || !scissorLeft) { moddedDamageType3 = DamageTypes.NoScissors; noScissors = true; } if (noScissors) { hitBoxString = "Sword"; } animator = ((EntityState)this).GetModelAnimator(); duration = baseDuration / ((BaseState)this).attackSpeedStat; firstSnip = duration * 0.2f; secondSnip = duration * 0.4f; snipInterval = 0f; lastSnip = duration - firstSnip; if (!((EntityState)this).characterMotor.isGrounded) { inAir = true; } ((BaseState)this).StartAimMode(duration, false); PlayAttackAnimation(); if (inAir) { ((BaseState)this).SmallHop(((EntityState)this).characterMotor, 6f); } } public override void FixedUpdate() { //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_007c: 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_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_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) base.FixedUpdate(); hitPauseTimer -= Time.fixedDeltaTime; if (hitPauseTimer <= 0f && inHitPause) { RemoveHitstop(); } if (!inHitPause) { stopwatch += Time.fixedDeltaTime; if (inAir && ((EntityState)this).isAuthority) { Vector3 velocity = ((EntityState)this).characterDirection.forward * ((BaseState)this).moveSpeedStat * Mathf.Lerp(3f, 1f, ((EntityState)this).age / duration); velocity.y = ((EntityState)this).characterMotor.velocity.y; ((EntityState)this).characterMotor.velocity = velocity; } } else { if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor)) { ((EntityState)this).characterMotor.velocity = Vector3.zero; } if (Object.op_Implicit((Object)(object)animator)) { animator.SetFloat(playbackRateParam, 0f); } } if (stopwatch >= firstSnip && !hasFired) { hasFired = true; EnterAttack(); FireAttack(); } if (stopwatch >= secondSnip + snipInterval && snipInterval <= secondSnip && snips > 0) { EnterAttack(); FireAttack(); snips--; snipInterval += secondSnip / 5f; Util.PlaySound("Play_bandit2_m2_alt_throw", ((EntityState)this).gameObject); if (NetworkServer.active) { ((EntityState)this).characterBody.RemoveBuff(SeamstressBuffs.needles); } } if (stopwatch >= lastSnip && !hasFired2) { hasFired2 = true; EnterAttack(); FireAttack(); } if (stopwatch >= duration && snips == 0 && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } protected void ApplyHitstop() { //IL_0025: 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_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) if (!inHitPause && hitStopDuration > 0f) { storedVelocity = ((EntityState)this).characterMotor.velocity; hitStopCachedState = ((BaseState)this).CreateHitStopCachedState(((EntityState)this).characterMotor, animator, playbackRateParam); hitPauseTimer = hitStopDuration / ((BaseState)this).attackSpeedStat; inHitPause = true; } } private void RemoveHitstop() { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).ConsumeHitStopCachedState(hitStopCachedState, ((EntityState)this).characterMotor, animator); inHitPause = false; ((EntityState)this).characterMotor.velocity = storedVelocity; } protected virtual void OnHitEnemyAuthority() { if (!hasHopped) { if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && !((EntityState)this).characterMotor.isGrounded) { ((BaseState)this).SmallHop(((EntityState)this).characterMotor, 4f); } hasHopped = true; } ApplyHitstop(); } private void EnterAttack() { if (noScissors) { Util.PlayAttackSpeedSound("Play_imp_attack", ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat); } else { Util.PlayAttackSpeedSound("Play_bandit2_m2_impact", ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat); } } protected virtual void PlaySwingEffect() { if (!Object.op_Implicit((Object)(object)clawSlash)) { Log.Error("Error, no effect?"); return; } Transform val = ((BaseState)this).FindModelChild("SwingCenter"); Transform val2 = ((BaseState)this).FindModelChild("SwingRightSmall"); Transform val3 = ((BaseState)this).FindModelChild("SwingLeftSmall"); Transform val4 = ((BaseState)this).FindModelChild("SwingCharAirCenter"); Transform val5 = ((BaseState)this).FindModelChild("SwingCharAirCenter2"); if (!Object.op_Implicit((Object)(object)val) || !Object.op_Implicit((Object)(object)val2) || !Object.op_Implicit((Object)(object)val3) || !Object.op_Implicit((Object)(object)val) || !Object.op_Implicit((Object)(object)val4) || !Object.op_Implicit((Object)(object)val5)) { return; } if (noScissors) { if (hasFired && !hasFired2) { if (alternateSwings == 0) { Object.Instantiate<GameObject>(clawSlash, val2); alternateSwings = 1; } else if (alternateSwings == 1) { Object.Instantiate<GameObject>(clawSlash, val3); alternateSwings = 0; } } else if (hasFired2) { Object.Instantiate<GameObject>(clawSlash, val3); } } else if (inAir) { if (hasFired && !hasFired2) { if (alternateSwings == 0) { Object.Instantiate<GameObject>(wideEffectPrefab, val5); alternateSwings = 1; } else if (alternateSwings == 1) { Object.Instantiate<GameObject>(wideEffectPrefab, val4); alternateSwings = 0; } } else if (hasFired2) { Object.Instantiate<GameObject>(wideEffectPrefab, val4); } } else { Object.Instantiate<GameObject>(swingEffectPrefab, val); } } protected virtual void FireAttack() { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Expected O, but got Unknown //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_005a: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //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_0149: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) hasHopped = false; overlapAttack = new OverlapAttack(); overlapAttack.damageType = damageType; if (insatiable) { DamageAPI.AddModdedDamageType(overlapAttack, moddedDamageType2); DamageAPI.AddModdedDamageType(overlapAttack, moddedDamageType); } DamageAPI.AddModdedDamageType(overlapAttack, DamageTypes.ClipLifeSteal); DamageAPI.AddModdedDamageType(overlapAttack, moddedDamageType3); overlapAttack.attacker = ((EntityState)this).gameObject; overlapAttack.inflictor = ((EntityState)this).gameObject; overlapAttack.teamIndex = ((BaseState)this).GetTeam(); overlapAttack.damage = damageCoefficient * ((BaseState)this).damageStat; overlapAttack.procCoefficient = procCoefficient; overlapAttack.hitEffectPrefab = hitEffectPrefab; overlapAttack.forceVector = bonusForce; overlapAttack.pushAwayForce = pushForce; overlapAttack.hitBoxGroup = ((BaseState)this).FindHitBoxGroup(hitBoxString); overlapAttack.isCrit = ((BaseState)this).RollCrit(); if (((EntityState)this).isAuthority) { Ray aimRay = ((BaseState)this).GetAimRay(); Vector3 direction = ((Ray)(ref aimRay)).direction; direction.y = Mathf.Max(direction.y, direction.y * 0.5f); ((BaseState)this).FindModelChild("SwingPivot").rotation = Util.QuaternionSafeLookRotation(direction); if (overlapAttack.Fire((List<HurtBox>)null)) { OnHitEnemyAuthority(); } } PlaySwingEffect(); } 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 (stopwatch >= duration) { return (InterruptPriority)0; } return (InterruptPriority)2; } private void PlayAttackAnimation() { ((EntityState)this).PlayCrossfade("Gesture, Override", "Slash1", "Slash.playbackRate", duration, 0.1f * duration); } public override void OnExit() { ((EntityState)this).OnExit(); } } public class FireScissor : BaseSeamstressSkillState { public static float baseDuration = 0.5f; public static float damageCoefficient = 4f; public static float procCoefficient = 1f; public static GameObject scissorFiringPrefab = SeamstressAssets.impDashEffect; public static string attackSoundString = "Play_imp_overlord_attack1_throw"; private GameObject projectilePrefab; private Animator modelAnimator; private float duration; private int chosenAnim = 2; private bool hasFired; private Ray aimRay; private string fireString; public override void OnEnter() { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) base.OnEnter(); Util.PlaySound("Play_item_lunar_specialReplace_explode", ((EntityState)this).gameObject); ((Component)((EntityState)this).characterBody).GetComponent<ScissorController>().isRight = true; duration = baseDuration / ((BaseState)this).attackSpeedStat; aimRay = ((BaseState)this).GetAimRay(); ((BaseState)this).StartAimMode(aimRay, 2f, false); modelAnimator = ((EntityState)this).GetModelAnimator(); if (Object.op_Implicit((Object)(object)modelAnimator)) { ((EntityState)this).PlayAnimation("Gesture, Override", "ThrowBomb", "ThrowBomb.playbackRate", duration); } if (scissorRight && scissorLeft) { chosenAnim = 2; } else if (scissorRight && !scissorLeft) { chosenAnim = 1; } else if (scissorLeft && !scissorRight) { chosenAnim = 2; } else { chosenAnim = 2; } } public override void OnExit() { RefreshState(); if (!scissorLeft && !scissorRight) { ((Component)((EntityState)this).characterBody).GetComponent<SeamstressController>().ReactivateScissor("meshScissors", activate: false); } ((EntityState)this).OnExit(); } public override void FixedUpdate() { //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) base.FixedUpdate(); if (Object.op_Implicit((Object)(object)modelAnimator) && !hasFired) { if (chosenAnim == 2) { projectilePrefab = SeamstressAssets.scissorLPrefab; fireString = "SwingRightSmall"; } else { projectilePrefab = SeamstressAssets.scissorRPrefab; fireString = "SwingLeftSmall"; } if (insatiable) { projectilePrefab.GetComponent<ModdedDamageTypeHolderComponent>().Add(DamageTypes.CutDamage); } else { projectilePrefab.GetComponent<ModdedDamageTypeHolderComponent>().Remove(DamageTypes.CutDamage); } Fire(aimRay, fireString); hasFired = true; } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } private void Fire(Ray aimRay, string muzzleName) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: 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_007b: 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) Util.PlaySound(attackSoundString, ((EntityState)this).gameObject); Transform val = ((BaseState)this).FindModelChild(muzzleName); if (Object.op_Implicit((Object)(object)val)) { EffectData val2 = new EffectData(); val2.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction); val2.origin = val.position; val2.scale = 0.5f; EffectManager.SpawnEffect(scissorFiringPrefab, val2, false); } if (((EntityState)this).isAuthority) { ProjectileManager.instance.FireProjectile(projectilePrefab, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction), ((EntityState)this).gameObject, ((BaseState)this).damageStat * damageCoefficient, 0f, Util.CheckRoll(((BaseState)this).critStat, ((EntityState)this).characterBody.master), (DamageColorIndex)0, (GameObject)null, -1f); } } 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; } public override void OnSerialize(NetworkWriter writer) { ((BaseSkillState)this).OnSerialize(writer); writer.Write((char)chosenAnim); } public override void OnDeserialize(NetworkReader reader) { ((BaseSkillState)this).OnDeserialize(reader); chosenAnim = reader.ReadChar(); } } public class Flurry : BaseMeleeAttack { public override void OnEnter() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_0206: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Unknown result type (might be due to invalid IL or missing references) RefreshState(); hitboxGroupName = "Sword"; damageType = (DamageType)0; damageTotal = 1.2f; procCoefficient = 1f; pushForce = 300f; bonusForce = Vector3.zero; baseDuration = 1.1f - 1.1f * (0.5f * (seamCom.fiendMeter / (((EntityState)this).healthComponent.fullHealth * 2f))); baseScissorDuration = 2f - 2f * (0.5f * (seamCom.fiendMeter / (((EntityState)this).healthComponent.fullHealth * 2f))); attackStartPercentTime = 0.2f; attackEndPercentTime = 0.4f; earlyExitPercentTime = 0.5f; hitStopDuration = 0.05f; attackRecoil = 2f / ((BaseState)this).attackSpeedStat; hitHopVelocity = 3.5f; swingSoundString = "Play_acrid_m1_slash"; hitSoundString = ""; hitEffectPrefab = SeamstressAssets.scissorsHitImpactEffect; swingEffectPrefab = SeamstressAssets.clawSlashEffect; bonusSwingEffectPrefab = SeamstressAssets.scissorsSlashEffect; muzzleString = ((swingIndex % 2 == 0) ? "SwingLeftSmall" : "SwingRightSmall"); buffer = false; if (insatiable) { moddedDamageTypeHolder.Add(DamageTypes.CutDamage); moddedDamageTypeHolder.Add(DamageTypes.InsatiableLifeSteal); } scissorHit = true; if (muzzleString == "SwingLeftSmall" && !scissorLeft) { moddedDamageTypeHolder.Add(DamageTypes.NoScissors); scissorHit = false; } if (muzzleString == "SwingRightSmall" && !scissorRight) { moddedDamageTypeHolder.Add(DamageTypes.NoScissors); scissorHit = false; } impactSound = SeamstressAssets.scissorsHitSoundEvent.index; base.OnEnter(); } public override void FixedUpdate() { base.FixedUpdate(); } protected override void FireAttack() { //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_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_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0044: 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) if (((EntityState)this).isAuthority) { Ray aimRay = ((BaseState)this).GetAimRay(); Vector3 direction = ((Ray)(ref aimRay)).direction; direction.y = Mathf.Max(direction.y, direction.y * 0.5f); ((BaseState)this).FindModelChild("SwingPivot").rotation = Util.QuaternionSafeLookRotation(direction); if (attack.Fire((List<HurtBox>)null)) { OnHitEnemyAuthority(); } } } protected override void PlayAttackAnimation() { ((EntityState)this).PlayCrossfade("Gesture, Override", (swingIndex % 2 == 0) ? "Slash1" : "Slash2", "Slash.playbackRate", duration, 0.1f * duration); } protected override void PlaySwingEffect() { if (Object.op_Implicit((Object)(object)swingEffectPrefab)) { Transform val = ((BaseState)this).FindModelChild(muzzleString); if (Object.op_Implicit((Object)(object)val)) { Object.Instantiate<GameObject>(swingEffectPrefab, val); } } } protected override void OnHitEnemyAuthority() { base.OnHitEnemyAuthority(); } public override void OnExit() { base.OnExit(); } } public class HealthCostDash : BaseSeamstressSkillState { public static float baseDuration = 0.3f; public static float dashPower = 6f; public static float damageCoefficient = 4f; public static GameObject uppercutEffect = SeamstressAssets.uppercutEffect; public static GameObject projectilePrefab = SeamstressAssets.heartPrefab; private Vector3 dashVector; private OverlapAttack attack; private List<HurtBox> victimsStruck = new List<HurtBox>(); protected string hitBoxString = "Sword"; private bool hasHit; public override void OnEnter() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Expected O, but got Unknown //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: 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_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_01c9: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Expected O, but got Unknown //IL_0230: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_024d: Unknown result type (might be due to invalid IL or missing references) //IL_0252: Unknown result type (might be due to invalid IL or missing references) //IL_0257: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Unknown result type (might be due to invalid IL or missing references) //IL_0280: Unknown result type (might be due to invalid IL or missing references) //IL_0285: Unknown result type (might be due to invalid IL or missing references) //IL_0286: Unknown result type (might be due to invalid IL or missing references) //IL_0287: Unknown result type (might be due to invalid IL or missing references) //IL_0298: Unknown result type (might be due to invalid IL or missing references) //IL_02bc: Unknown result type (might be due to invalid IL or missing references) //IL_02c1: Unknown result type (might be due to invalid IL or missing references) //IL_02c2: Unknown result type (might be due to invalid IL or missing references) //IL_02c9: Unknown result type (might be due to invalid IL or missing references) //IL_02ca: Unknown result type (might be due to invalid IL or missing references) //IL_02cf: Unknown result type (might be due to invalid IL or missing references) //IL_02d4: Unknown result type (might be due to invalid IL or missing references) //IL_02d5: Unknown result type (might be due to invalid IL or missing references) //IL_02da: Unknown result type (might be due to invalid IL or missing references) //IL_02df: Unknown result type (might be due to invalid IL or missing references) //IL_02ea: Expected O, but got Unknown //IL_02f7: Unknown result type (might be due to invalid IL or missing references) //IL_02fc: Unknown result type (might be due to invalid IL or missing references) //IL_0307: Unknown result type (might be due to invalid IL or missing references) //IL_030c: Unknown result type (might be due to invalid IL or missing references) //IL_0313: Unknown result type (might be due to invalid IL or missing references) //IL_0315: Unknown result type (might be due to invalid IL or missing references) //IL_02b0: Unknown result type (might be due to invalid IL or missing references) //IL_02b5: Unknown result type (might be due to invalid IL or missing references) //IL_0361: Unknown result type (might be due to invalid IL or missing references) base.OnEnter(); dashVector = ((EntityState)this).inputBank.aimDirection; ((EntityState)this).characterMotor.disableAirControlUntilCollision = false; Transform modelTransform = ((EntityState)this).GetModelTransform(); Animator component = ((Component)modelTransform).GetComponent<Animator>(); if (Object.op_Implicit((Object)(object)modelTransform) && Object.op_Implicit((Object)(object)SeamstressAssets.destealthMaterial)) { TemporaryOverlay val = ((Component)component).gameObject.AddComponent<TemporaryOverlay>(); val.duration = 1f; val.destroyComponentOnEnd = true; val.originalMaterial = SeamstressAssets.destealthMaterial; val.inspectorCharacterModel = ((Component)component).gameObject.GetComponent<CharacterModel>(); val.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f); val.animateShaderAlpha = true; } attack = new OverlapAttack(); attack.attacker = ((EntityState)this).gameObject; attack.inflictor = ((EntityState)this).gameObject; attack.damageType = (DamageType)32; attack.procCoefficient = 1f; attack.teamIndex = ((BaseState)this).GetTeam(); attack.isCrit = ((BaseState)this).RollCrit(); attack.forceVector = Vector3.up * 3000f; attack.damage = damageCoefficient * ((BaseState)this).damageStat; attack.hitBoxGroup = ((BaseState)this).FindHitBoxGroup(hitBoxString); attack.hitEffectPrefab = SeamstressAssets.scissorsHitImpactEffect; if (insatiable) { DamageAPI.AddModdedDamageType(attack, DamageTypes.CutDamage); DamageAPI.AddModdedDamageType(attack, DamageTypes.InsatiableLifeSteal); } EffectData val2 = new EffectData { origin = ((EntityState)this).characterBody.corePosition, rotation = Util.QuaternionSafeLookRotation(dashVector), scale = 3f }; EffectManager.SpawnEffect(SeamstressAssets.impDashEffect, val2, false); EffectManager.SpawnEffect(SeamstressAssets.smallBlinkEffect, val2, false); ((EntityState)this).PlayAnimation("FullBody, Override", "Roll", "Roll.playbackRate", baseDuration); ((EntityState)this).characterMotor.velocity.y = 0f; CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.velocity += dashVector * (dashPower * (((BaseState)this).moveSpeedStat + 1f)); if (NetworkServer.active) { ((EntityState)this).characterBody.AddBuff(Buffs.HiddenInvincibility); } Vector3 val3 = ((EntityState)this).transform.localPosition; RaycastHit val4 = default(RaycastHit); if (Physics.Raycast(val3, Vector3.one, ref val4, 10f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask))) { val3 = ((RaycastHit)(ref val4)).point; } EffectManager.SpawnEffect(SeamstressAssets.bloodSplatterEffect, new EffectData { origin = val3, rotation = Quaternion.identity, color = Color32.op_Implicit(SeamstressAssets.coolRed) }, false); seamCom.snapBackPosition = ((EntityState)this).characterBody.corePosition; Vector3 corePosition = ((EntityState)this).characterBody.corePosition; GameObject val5 = Object.Instantiate<GameObject>(projectilePrefab, corePosition, Quaternion.identity); ProjectileController component2 = val5.GetComponent<ProjectileController>(); if (Object.op_Implicit((Object)(object)component2)) { component2.owner = ((EntityState)this).gameObject; component2.Networkowner = ((EntityState)this).gameObject; } val5.GetComponent<TeamFilter>().teamIndex = ((EntityState)this).GetComponent<TeamComponent>().teamIndex; } public override void FixedUpdate() { //IL_001d: 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_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Expected O, but got Unknown //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) base.FixedUpdate(); if (!((EntityState)this).isAuthority) { return; } ((EntityState)this).characterDirection.forward = dashVector; ((EntityState)this).characterBody.isSprinting = true; if (attack.Fire(victimsStruck)) { hasHit = true; Transform val = ((BaseState)this).FindModelChild("UpperCut"); if (Object.op_Implicit((Object)(object)val)) { Object.Instantiate<GameObject>(uppercutEffect, val); } ((EntityState)this).characterMotor.velocity = Vector3.zero; ((BaseState)this).SmallHop(((EntityState)this).characterMotor, 4f); ((EntityState)this).outer.SetNextStateToMain(); } if (((EntityState)this).fixedAge >= baseDuration) { EffectData val2 = new EffectData { origin = ((EntityState)this).characterBody.corePosition, rotation = Util.QuaternionSafeLookRotation(dashVector), scale = 3f }; EffectManager.SpawnEffect(SeamstressAssets.impDashEffect, val2, false); ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { //IL_003d: 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_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) if (NetworkServer.active && Object.op_Implicit((Object)(object)((EntityState)this).healthComponent)) { seamCom.inInsatiable = false; DotController.InflictDot(((Component)((EntityState)this).characterBody).gameObject, ((Component)((EntityState)this).characterBody).gameObject, Dots.SeamstressBleed, 6f, 1f, (uint?)1u); } if (!hasHit) { CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.velocity *= 0.2f; } if (NetworkServer.active) { ((EntityState)this).characterBody.RemoveBuff(Buffs.HiddenInvincibility); ((EntityState)this).characterBody.AddTimedBuff(Buffs.HiddenInvincibility, 0.2f); } ((EntityState)this).skillLocator.utility.SetSkillOverride((object)((EntityState)this).gameObject, SeamstressSurvivor.snapBackSkillDef, (SkillOverridePriority)4); ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)3; } } public class HeartSpawnState : BaseState { public static float duration = 0.01f; public static string enterSoundString = "Play_bleedOnCritAndExplode_impact"; public override void OnEnter() { ((BaseState)this).OnEnter(); Util.PlaySound(enterSoundString, ((EntityState)this).gameObject); ((Component)((BaseState)this).FindModelChild("ChargeUpFX")).gameObject.SetActive(true); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration) { ((EntityState)this).outer.SetNextState((EntityState)(object)new HeartStandBy()); } } } public class HeartStandBy : BaseState { public static GameObject chain = SeamstressAssets.chainToHeart; public static AnimationCurve yankSuitabilityCurve; private CharacterBody ownerBody; private SeamstressController seamCom; private GameObject owner; private TeamIndex teamIndex = (TeamIndex)(-1); private float snapBackDelay; private bool hasFired; private bool splat; private bool ownerIsEmpowered; public override void OnEnter() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); splat = false; ProjectileController component = ((EntityState)this).GetComponent<ProjectileController>(); if (Object.op_Implicit((Object)(object)component)) { owner = component.owner; teamIndex = component.teamFilter.teamIndex; } ((EntityState)this).PlayAnimation("Base", "SpawnToIdle"); Util.PlaySound("Play_treeBot_R_yank", owner); seamCom = owner.GetComponent<SeamstressController>(); ownerBody = owner.GetComponent<CharacterBody>(); ((Behaviour)chain.GetComponent<DestroyOnCondition>()).enabled = true; chain.GetComponent<DestroyOnCondition>().seamCom = seamCom; } public override void FixedUpdate() { //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); ownerIsEmpowered = ownerBody.HasBuff(SeamstressBuffs.instatiable); if (ownerIsEmpowered && !hasFired) { ChainUpdate(6f); hasFired = true; } if (!ownerIsEmpowered && ((EntityState)this).fixedAge > 1f) { if (!splat) { splat = true; Vector3 val = ownerBody.corePosition - ((EntityState)this).transform.position; snapBackDelay = ((Vector3)(ref val)).magnitude / 10f; snapBackDelay = Mathf.Clamp(snapBackDelay, 0.2f, 1f); ((Behaviour)chain.GetComponent<DestroyOnCondition>()).enabled = false; ChainUpdate(snapBackDelay); } snapBackDelay -= Time.fixedDeltaTime; if (snapBackDelay <= 0.2f) { EntityState.Destroy((Object)(object)((EntityState)this).gameObject); } } } private void ChainUpdate(float num) { //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_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_001d: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Expected O, but got Unknown Vector3 position = ((EntityState)this).transform.position; EffectData val = new EffectData { scale = 1f, origin = position, genericFloat = num }; val.SetHurtBoxReference(owner); EffectManager.SpawnEffect(chain, val, false); } public override void OnExit() { if ((Object)(object)ownerBody != (Object)null) { ownerBody = null; } ((EntityState)this).OnExit(); } } public class MainState : GenericCharacterMain { private Animator animator; private SeamstressController seamCom; public override void OnEnter() { ((GenericCharacterMain)this).OnEnter(); animator = ((BaseCharacterMain)this).modelAnimator; seamCom = ((EntityState)this).GetComponent<SeamstressController>(); } public override void ProcessJump() { //IL_0203: Unknown result type (might be due to invalid IL or missing references) //IL_0208: Unknown result type (might be due to invalid IL or missing references) //IL_020f: Unknown result type (might be due to invalid IL or missing references) //IL_0220: Expected O, but got Unknown //IL_0243: Unknown result type (might be due to invalid IL or missing references) //IL_0248: Unknown result type (might be due to invalid IL or missing references) //IL_024f: Unknown result type (might be due to invalid IL or missing references) //IL_025a: Unknown result type (might be due to invalid IL or missing references) //IL_0271: Expected O, but got Unknown //IL_0285: Unknown result type (might be due to invalid IL or missing references) //IL_028a: Unknown result type (might be due to invalid IL or missing references) //IL_0291: Unknown result type (might be due to invalid IL or missing references) //IL_029c: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02a8: Unknown result type (might be due to invalid IL or missing references) //IL_02ad: Unknown result type (might be due to invalid IL or missing references) //IL_02b8: Expected O, but got Unknown if (!((BaseCharacterMain)this).hasCharacterMotor || !seamCom.blinkReady) { return; } bool flag = false; bool flag2 = false; if (!base.jumpInputReceived || !Object.op_Implicit((Object)(object)((EntityState)this).characterBody) || ((EntityState)this).characterMotor.jumpCount >= ((EntityState)this).characterBody.maxJumpCount) { return; } int itemCount = ((EntityState)this).characterBody.inventory.GetItemCount(Items.JumpBoost); float num = 1f; float num2 = 1f; if (((EntityState)this).characterMotor.jumpCount >= ((EntityState)this).characterBody.baseJumpCount) { flag = true; num = 1.5f; num2 = 1.5f; } else if (itemCount > 0 && ((EntityState)this).characterBody.isSprinting) { float num3 = ((EntityState)this).characterBody.acceleration * ((EntityState)this).characterMotor.airControl; if (((EntityState)this).characterBody.moveSpeed > 0f && num3 > 0f) { flag2 = true; float num4 = Mathf.Sqrt(10f * (float)itemCount / num3); float num5 = ((EntityState)this).characterBody.moveSpeed / num3; num = (num4 + num5) / num5; } } GenericCharacterMain.ApplyJumpVelocity(((EntityState)this).characterMotor, ((EntityState)this).characterBody, num, num2, false); CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.jumpCount++; if (((BaseCharacterMain)this).hasModelAnimator) { int layerIndex = ((BaseCharacterMain)this).modelAnimator.GetLayerIndex("Body"); if (layerIndex >= 0) { if (((EntityState)this).characterMotor.jumpCount == 0) { ((BaseCharacterMain)this).modelAnimator.CrossFadeInFixedTime("Jump", ((BaseCharacterMain)this).smoothingParameters.intoJumpTransitionTime, layerIndex); } else { ((BaseCharacterMain)this).modelAnimator.CrossFadeInFixedTime("BonusJump", ((BaseCharacterMain)this).smoothingParameters.intoJumpTransitionTime, layerIndex); } } } if (flag) { EffectManager.SpawnEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/FeatherEffect"), new EffectData { origin = ((EntityState)this).characterBody.footPosition }, false); } else if (((EntityState)this).characterMotor.jumpCount > 0) { EffectManager.SpawnEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/ImpactEffects/CharacterLandImpact"), new EffectData { origin = ((EntityState)this).characterBody.footPosition, scale = ((EntityState)this).characterBody.radius }, false); } if (flag2) { EffectManager.SpawnEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/BoostJumpEffect"), new EffectData { origin = ((EntityState)this).characterBody.footPosition, rotation = Util.QuaternionSafeLookRotation(((EntityState)this).characterMotor.velocity) }, false); } } } public class Parry : BaseSeamstressSkillState { public static NetworkSoundEventDef parrySoundDef = SeamstressAssets.parrySuccessSoundEvent; private GameObject blinkPrefab; public static string enterSoundString = "Play_bandit2_m2_impact"; public static float duration = 0.4f; public static float attackDelay = 0.4f; public static float invulnDuration = 0.5f; public override void OnEnter() { base.OnEnter(); Util.PlaySound(enterSoundString, ((EntityState)this).gameObject); if (NetworkServer.active) { CleanBuffsServer(); ((EntityState)this).characterBody.AddBuff(SeamstressBuffs.parryStart); } ((EntityState)this).PlayAnimation("FullBody, Override", "Roll", "Roll.playbackRate", duration); } public override void FixedUpdate() { base.FixedUpdate(); bool flag = ((EntityState)this).characterBody.HasBuff(SeamstressBuffs.parrySuccess); if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration && flag) { blinkPrefab = SeamstressAssets.blinkEffect; DoAttackServer(); ((EntityState)this).outer.SetNextState((EntityState)(object)new ParryDash()); } else if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration && !flag) { GenericSkill utility = ((EntityState)this).skillLocator.utility; utility.rechargeStopwatch += 0.5f * ((EntityState)this).skillLocator.utility.cooldownRemaining; ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { CleanBuffsServer(); ((EntityState)this).OnExit(); } private void CleanBuffsServer() { if (NetworkServer.active) { if (((EntityState)this).characterBody.HasBuff(SeamstressBuffs.parryStart)) { ((EntityState)this).characterBody.RemoveBuff(SeamstressBuffs.parryStart); } if (((EntityState)this).characterBody.HasBuff(SeamstressBuffs.parrySuccess)) { ((EntityState)this).characterBody.RemoveBuff(SeamstressBuffs.parrySuccess); } } } private void DoAttackServer() { //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) if (NetworkServer.active) { ((EntityState)this).characterBody.AddTimedBuff(SeamstressBuffs.instatiable, 6f, 1); SeamstressController component = ((Component)((EntityState)this).characterBody).GetComponent<SeamstressController>(); component.inInsatiable = false; CleanBuffsServer(); if (Object.op_Implicit((Object)(object)parrySoundDef)) { EffectManager.SimpleSoundEffect(parrySoundDef.index, ((EntityState)this).characterBody.corePosition, 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 class ParryDash : BaseSeamstressSkillState { public static GameObject hitEffectPrefab = SeamstressAssets.scissorsHitImpactEffect; public static float speedCoefficient = 100f; public static float damageCoefficient = 4f; public static float hitPauseDuration = 0.075f; private Vector3 dashVector; private OverlapAttack overlapAttack; private ChildLocator childLocator; private Transform modelTransform; private AimRequest aimRequest; private float stopwatch; private float dashDuration; private bool isDashing; private bool inHitPause; private float hitPauseTimer; private bool noScissors; private string hitSound; private string hitBox; public bool hasHit { get; private set; } public override void OnEnter() { //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_00db: 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) inDash = true; dashDuration = 0.3f; base.OnEnter(); RefreshState(); modelTransform = ((EntityState)this).GetModelTransform(); childLocator = ((Component)modelTransform).GetComponent<ChildLocator>(); if (Object.op_Implicit((Object)(object)((EntityState)this).cameraTargetParams)) { aimRequest = ((EntityState)this).cameraTargetParams.RequestAimType((AimType)2); } dashVector = ((EntityState)this).inputBank.aimDirection; if (!scissorRight && !scissorLeft) { noScissors = true; } if (noScissors) { hitBox = "Weave"; } else { hitBox = "WeaveBig"; } overlapAttack = ((BaseState)this).InitMeleeOverlap(0f, hitEffectPrefab, modelTransform, hitBox); DamageAPI.AddModdedDamageType(overlapAttack, DamageTypes.PullDamage); overlapAttack.damageType = (DamageType)32; Util.PlaySound("Play_imp_overlord_attack2_tell", ((EntityState)this).gameObject); hitSound = "Play_imp_overlord_impact"; ((EntityState)this).PlayAnimation("FullBody, Override", "Roll", "Roll.playbackRate", dashDuration); } public override void FixedUpdate() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: 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_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) base.FixedUpdate(); ((EntityState)this).characterDirection.forward = dashVector; if (!isDashing) { isDashing = true; dashVector = ((EntityState)this).inputBank.aimDirection; seamCom.heldDashVector = dashVector; seamCom.heldOrigin = Util.GetCorePosition(((EntityState)this).gameObject); ((EntityState)this).gameObject.layer = LayerIndex.fakeActor.intVal; ((BaseCharacterController)((EntityState)this).characterMotor).Motor.RebuildCollidableLayers(); } if (!isDashing) { stopwatch += Time.fixedDeltaTime; } else if (((EntityState)this).isAuthority) { if (!inHitPause) { bool flag = overlapAttack.Fire((List<HurtBox>)null); stopwatch += Time.fixedDeltaTime; if (flag) { if (!hasHit) { Util.PlaySound(hitSound, ((EntityState)this).gameObject); hasHit = true; dashDuration *= 0.75f; } inHitPause = true; hitPauseTimer = hitPauseDuration / ((BaseState)this).attackSpeedStat; } CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.rootMotion += dashVector * speedCoefficient * Time.fixedDeltaTime; } else { hitPauseTimer -= Time.fixedDeltaTime; if (hitPauseTimer < 0f) { inHitPause = false; } } } if (stopwatch >= dashDuration / ((BaseState)this).attackSpeedStat && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) seamCom.StartDashEffectTimer(); ((EntityState)this).gameObject.layer = LayerIndex.defaultLayer.intVal; ((BaseCharacterController)((EntityState)this).characterMotor).Motor.RebuildCollidableLayers(); if (!insatiable) { Util.PlaySound("Play_item_proc_whip", ((EntityState)this).gameObject); } if (((EntityState)this).isAuthority) { ((EntityState)this).characterMotor.disableAirControlUntilCollision = false; ((EntityState)this).characterMotor.airControl = 0.25f; CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.velocity *= 0.3f; ((BaseState)this).SmallHop(((EntityState)this).characterMotor, 3f); } AimRequest obj = aimRequest; if (obj != null) { obj.Dispose(); } inDash = false; RefreshState(); ((EntityState)this).OnExit(); } public override void OnSerialize(NetworkWriter writer) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) ((BaseSkillState)this).OnSerialize(writer); writer.Write(dashVector); } public override void OnDeserialize(NetworkReader reader) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) ((BaseSkillState)this).OnDeserialize(reader); dashVector = reader.ReadVector3(); } 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; } } public class SeamstressBlink : BaseSeamstressSkillState { protected Transform modelTransform; protected GameObject dashPrefab = SeamstressAssets.impDashEffect; protected GameObject blinkPrefab = SeamstressAssets.smallBlinkEffect; protected AimRequest request; protected Vector3 blinkVector; public static float duration = 0.2f; protected float speedCoefficient; public static string beginSoundString = "Play_imp_attack_blink"; protected CharacterModel characterModel; protected HurtBoxGroup hurtboxGroup; public bool split; protected Animator animator; public override void OnEnter() { //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_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_0168: 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_014b: Unknown result type (might be due to invalid IL or missing references) base.OnEnter(); Util.PlaySound(beginSoundString, ((EntityState)this).gameObject); ((EntityState)this).PlayAnimation("FullBody, Override", "Roll", "Roll.playbackRate", duration); modelTransform = ((EntityState)this).GetModelTransform(); if (Object.op_Implicit((Object)(object)modelTransform)) { characterModel = ((Component)modelTransform).GetComponent<CharacterModel>(); hurtboxGroup = ((Component)modelTransform).GetComponent<HurtBoxGroup>(); animator = ((Component)modelTransform).GetComponent<Animator>(); } if (Object.op_Implicit((Object)(object)characterModel)) { CharacterModel obj = characterModel; obj.invisibilityCount++; } if (Object.op_Implicit((Object)(object)hurtboxGroup)) { HurtBoxGroup val = hurtboxGroup; int hurtBoxesDeactivatorCounter = val.hurtBoxesDeactivatorCounter + 1; val.hurtBoxesDeactivatorCounter = hurtBoxesDeactivatorCounter; } if (Object.op_Implicit((Object)(object)((EntityState)this).cameraTargetParams)) { request = ((EntityState)this).cameraTargetParams.RequestAimType((AimType)2); } blinkVector = GetBlinkVector(); if (((Vector3)(ref blinkVector)).sqrMagnitude < Mathf.Epsilon) { blinkVector = ((EntityState)this).inputBank.aimDirection; } if (((EntityState)this).characterMotor.isGrounded) { ((EntityState)this).characterMotor.velocity = Vector3.zero; } ((EntityState)this).characterDirection.moveVector = blinkVector; CreateBlinkEffect(((EntityState)this).characterBody.corePosition, first: true); speedCoefficient = 0.3f * ((EntityState)this).characterBody.jumpPower * Mathf.Clamp(((EntityState)this).characterBody.moveSpeed, 1f, 5f); ((EntityState)this).gameObject.layer = LayerIndex.fakeActor.intVal; ((BaseCharacterController)((EntityState)this).characterMotor).Motor.RebuildCollidableLayers(); } protected virtual Vector3 GetBlinkVector() { //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_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: 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_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: 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_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) Vector3 aimDirection = ((EntityState)this).inputBank.aimDirection; aimDirection.y = 0f; Vector3 val = -Vector3.Cross(Vector3.up, aimDirection); float num = Vector3.Angle(((EntityState)this).inputBank.aimDirection, aimDirection); if (((EntityState)this).inputBank.aimDirection.y < 0f) { num = 0f - num; } return Vector3.Normalize(Quaternion.AngleAxis(num, val) * ((EntityState)this).inputBank.moveVector); } protected void CreateBlinkEffect(Vector3 origin, bool first) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: 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) if (Object.op_Implicit((Object)(object)blinkPrefab)) { EffectData val = new EffectData(); val.rotation = Util.QuaternionSafeLookRotation(blinkVector); val.origin = origin; val.scale = 0.15f; EffectManager.SpawnEffect(blinkPrefab, val, false); val.scale = 3f; if (!first) { EffectManager.SpawnEffect(dashPrefab, val, false); } } } public override void FixedUpdate() { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) base.FixedUpdate(); if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection) && ((EntityState)this).isAuthority) { ((BaseCharacterController)((EntityState)this).characterMotor).Motor.ForceUnground(); ((EntityState)this).characterMotor.velocity = blinkVector * speedCoefficient; } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { //IL_0045: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).gameObject.layer = LayerIndex.defaultLayer.intVal; ((BaseCharacterController)((EntityState)this).characterMotor).Motor.RebuildCollidableLayers(); if (!((EntityState)this).outer.destroying) { CreateBlinkEffect(((EntityState)this).characterBody.corePosition, first: false); modelTransform = ((EntityState)this).GetModelTransform(); if (Object.op_Implicit((Object)(object)modelTransform) && Object.op_Implicit((Object)(object)SeamstressAssets.destealthMaterial)) { TemporaryOverlay val = ((Component)animator).gameObject.AddComponent<TemporaryOverlay>(); val.duration = 1f; val.destroyComponentOnEnd = true; val.originalMaterial = SeamstressAssets.destealthMaterial; val.inspectorCharacterModel = ((Component)animator).gameObject.GetComponent<CharacterModel>(); val.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f); val.animateShaderAlpha = true; } if (Object.op_Implicit((Object)(object)characterModel)) { CharacterModel obj = characterModel; obj.invisibilityCount--; } if (Object.op_Implicit((Object)(object)hurtboxGroup)) { HurtBoxGroup val2 = hurtboxGroup; int hurtBoxesDeactivatorCounter = val2.hurtBoxesDeactivatorCounter - 1; val2.hurtBoxesDeactivatorCounter = hurtBoxesDeactivatorCounter; } if (Object.op_Implicit((Object)(object)((EntityState)this).cameraTargetParams)) { request.Dispose(); } } ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)3; } public override void OnSerialize(NetworkWriter writer) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) ((BaseSkillState)this).OnSerialize(writer); writer.Write(blinkVector); } public override void OnDeserialize(NetworkReader reader) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) ((BaseSkillState)this).OnDeserialize(reader); blinkVector = reader.ReadVector3(); } } public class SeamstressBlinkUp : SeamstressBlink { public override void OnEnter() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) base.OnEnter(); speedCoefficient = 0.3f * ((EntityState)this).characterBody.jumpPower * 3f; blinkVector = Vector3.up; } public override void FixedUpdate() { base.FixedUpdate(); } public override void OnExit() { base.OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)3; } public override void OnSerialize(NetworkWriter writer) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) base.OnSerialize(writer); writer.Write(blinkVector); } public override void OnDeserialize(NetworkReader reader) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) base.OnDeserialize(reader); blinkVector = reader.ReadVector3(); } } public class SeamstressJump : BaseSeamstressState { public float minSpread; public float maxSpread; public float projectilePitchBonus; private Ray aimRay; private GameObject projectilePrefab; public override void OnEnter() { base.OnEnter(); } public override void FixedUpdate() { //IL_00e9: 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_0190: 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 refer