Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Jhin v1.5.0
JhinMod.dll
Decompiled 2 weeks 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.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using EmotesAPI; using EntityStates; using EntityStates.Commando; using EntityStates.Commando.CommandoWeapon; using EntityStates.GlobalSkills.LunarDetonator; using EntityStates.GlobalSkills.LunarNeedle; using EntityStates.Mage.Weapon; using EntityStates.Railgunner.Scope; using HG; using HG.BlendableTypes; using JetBrains.Annotations; using JhinMod.Content; using JhinMod.Content.Components; using JhinMod.Content.Projectiles; using JhinMod.Content.SkillDefs; using JhinMod.Content.UI; using JhinMod.Modules; using JhinMod.Modules.Characters; using JhinMod.Modules.Survivors; using JhinMod.SkillStates; using JhinMod.SkillStates.BaseStates; using JhinMod.SkillStates.Henry; using On.EntityStates; using On.EntityStates.GlobalSkills.LunarDetonator; using On.EntityStates.Mage.Weapon; using On.RoR2; using On.RoR2.Networking; using On.RoR2.SurvivorMannequins; using On.RoR2.UI; using R2API; using R2API.Utils; using RiskOfOptions; using RiskOfOptions.OptionConfigs; using RiskOfOptions.Options; using RoR2; using RoR2.Achievements; using RoR2.Audio; using RoR2.ContentManagement; using RoR2.Networking; using RoR2.Orbs; using RoR2.Projectile; using RoR2.Skills; using RoR2.SurvivorMannequins; using RoR2.UI; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; using UnityEngine.Rendering; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("JhinMod")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("JhinMod")] [assembly: AssemblyTitle("JhinMod")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: UnverifiableCode] namespace JhinMod { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.seroronin.JhinMod", "JhinMod", "1.5.0")] [R2APISubmoduleDependency(new string[] { "PrefabAPI", "LanguageAPI", "SoundAPI", "UnlockableAPI" })] public class JhinPlugin : BaseUnityPlugin { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_OnClientConnect <>9__9_0; public static hook_OnClientConnect <>9__10_0; internal void <Hook>b__9_0(orig_OnClientConnect s, NetworkManagerSystemSteam u, NetworkConnection t) { } internal void <UnHooks>b__10_0(orig_OnClientConnect s, NetworkManagerSystemSteam u, NetworkConnection t) { } } public const string MODUID = "com.seroronin.JhinMod"; public const string MODNAME = "JhinMod"; public const string MODVERSION = "1.5.0"; public const string DEVELOPER_PREFIX = "SERORONIN"; public static JhinPlugin instance; public bool emoteSetup; public bool CustomEmotesActive = false; public static Dictionary<Transform, GameObject> playerLobbyModelFX = new Dictionary<Transform, GameObject>(); private JhinAmmoUI ammoUI; private void Awake() { instance = this; Log.Init(((BaseUnityPlugin)this).Logger); Asset.Initialize(); Config.ReadConfig(); if (Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions")) { Config.CreateRiskofOptionsCompat(); } CustomEmotesActive = Chainloader.PluginInfos.ContainsKey("com.weliveinasociety.CustomEmotesAPI"); States.RegisterStates(); Buffs.RegisterBuffs(); Projectiles.RegisterProjectiles(); Tokens.AddTokens(); ItemDisplays.PopulateDisplays(); new JhinSurvivor().Initialize(); new ContentPacks().Initialize(); Hook(); } public void OnDestroy() { try { UnHooks(); } catch (Exception ex) { ((BaseUnityPlugin)this).Logger.LogError((object)(ex.Message + " - " + ex.StackTrace)); } } private void Hook() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Expected O, but got Unknown //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Expected O, but got Unknown //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Expected O, but got Unknown //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Expected O, but got Unknown //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Expected O, but got Unknown //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Expected O, but got Unknown SurvivorMannequinSlotController.ApplyLoadoutToMannequinInstance += new hook_ApplyLoadoutToMannequinInstance(SurvivorMannequinSlotController_ApplyLoadoutToMannequinInstance); GlobalEventManager.OnHitEnemy += new hook_OnHitEnemy(GlobalEventManager_OnHitEnemy); HealthComponent.TakeDamage += new hook_TakeDamage(HealthComponent_OnTakeDamage); CharacterBody.RecalculateStats += new hook_RecalculateStats(CharacterBody_RecalculateStats); HUD.Awake += new hook_Awake(HUD_Awake); HUD.onHudTargetChangedGlobal += HUD_onHudTargetChangedGlobal; BaseChargeBombState.OnEnter += new hook_OnEnter(SlicingMaelstrom_Charge_OnEnter); BaseChargeBombState.OnExit += new hook_OnExit(SlicingMaelstrom_Charge_OnExit); GhostUtilitySkillState.OnEnter += new hook_OnEnter(Shadowfade_OnEnter); GhostUtilitySkillState.OnExit += new hook_OnExit(Shadowfade_OnExit); Detonate.OnEnter += new hook_OnEnter(Ruin_OnEnter); FrozenState.OnEnter += new hook_OnEnter(FrozenState_OnEnter); FrozenState.OnExit += new hook_OnExit(FrozenState_OnExit); if (CustomEmotesActive) { CustomEmotesAPISupport.HookCustomEmoteAPI(); } if (Config.devLocalMultiplayerTesting.Value) { Config.devLMTWasEnabled = true; object obj = <>c.<>9__9_0; if (obj == null) { hook_OnClientConnect val = delegate { }; <>c.<>9__9_0 = val; obj = (object)val; } NetworkManagerSystemSteam.OnClientConnect += (hook_OnClientConnect)obj; } } private void UnHooks() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Expected O, but got Unknown //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Expected O, but got Unknown //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Expected O, but got Unknown //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Expected O, but got Unknown //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Expected O, but got Unknown SurvivorMannequinSlotController.ApplyLoadoutToMannequinInstance -= new hook_ApplyLoadoutToMannequinInstance(SurvivorMannequinSlotController_ApplyLoadoutToMannequinInstance); GlobalEventManager.OnHitEnemy -= new hook_OnHitEnemy(GlobalEventManager_OnHitEnemy); CharacterBody.RecalculateStats -= new hook_RecalculateStats(CharacterBody_RecalculateStats); HUD.Awake -= new hook_Awake(HUD_Awake); HUD.onHudTargetChangedGlobal -= HUD_onHudTargetChangedGlobal; BaseChargeBombState.OnEnter -= new hook_OnEnter(SlicingMaelstrom_Charge_OnEnter); BaseChargeBombState.OnExit -= new hook_OnExit(SlicingMaelstrom_Charge_OnExit); GhostUtilitySkillState.OnEnter -= new hook_OnEnter(Shadowfade_OnEnter); GhostUtilitySkillState.OnExit -= new hook_OnExit(Shadowfade_OnExit); Detonate.OnEnter -= new hook_OnEnter(Ruin_OnEnter); FrozenState.OnEnter -= new hook_OnEnter(FrozenState_OnEnter); FrozenState.OnExit -= new hook_OnExit(FrozenState_OnExit); if (CustomEmotesActive) { CustomEmotesAPISupport.UnhookCustomEmoteAPI(); } if (Config.devLMTWasEnabled) { object obj = <>c.<>9__10_0; if (obj == null) { hook_OnClientConnect val = delegate { }; <>c.<>9__10_0 = val; obj = (object)val; } NetworkManagerSystemSteam.OnClientConnect -= (hook_OnClientConnect)obj; } } private void SurvivorMannequinSlotController_ApplyLoadoutToMannequinInstance(orig_ApplyLoadoutToMannequinInstance orig, SurvivorMannequinSlotController self) { //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_0044: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (!Object.op_Implicit((Object)(object)self.mannequinInstanceTransform)) { return; } Transform mannequinInstanceTransform = self.mannequinInstanceTransform; BodyIndex bodyIndexFromSurvivorIndex = SurvivorCatalog.GetBodyIndexFromSurvivorIndex(self.currentSurvivorDef.survivorIndex); int skinIndex = (int)self.currentLoadout.bodyLoadoutManager.GetSkinIndex(bodyIndexFromSurvivorIndex); if (!((Object)((Component)mannequinInstanceTransform).gameObject).name.Contains("JhinDisplay")) { return; } if (playerLobbyModelFX.ContainsKey(self.mannequinInstanceTransform) && (Object)(object)playerLobbyModelFX[self.mannequinInstanceTransform] != (Object)null) { Object.Destroy((Object)(object)playerLobbyModelFX[self.mannequinInstanceTransform]); playerLobbyModelFX.Remove(self.mannequinInstanceTransform); } if (!playerLobbyModelFX.ContainsKey(self.mannequinInstanceTransform)) { GameObject vFXDynamic = Helpers.GetVFXDynamic("ModelFX", skinIndex, defaultToBase: false, ignoreOverride: true); if ((Object)(object)vFXDynamic != (Object)null) { GameObject val = Object.Instantiate<GameObject>(vFXDynamic, self.mannequinInstanceTransform); BindPairLocator component = val.GetComponent<BindPairLocator>(); component.target = ((Component)self.mannequinInstanceTransform).gameObject; component.BindPairs(); playerLobbyModelFX[self.mannequinInstanceTransform] = val; } } } private void GlobalEventManager_OnHitEnemy(orig_OnHitEnemy orig, GlobalEventManager self, DamageInfo damageInfo, GameObject victim) { orig.Invoke(self, damageInfo, victim); if (damageInfo.crit && Object.op_Implicit((Object)(object)damageInfo.attacker) && !damageInfo.rejected) { CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component) && component.baseNameToken == "SERORONIN_JHIN_BODY_NAME" && NetworkServer.active) { component.AddTimedBuff(Buffs.jhinCritMovespeedBuff, Config.passiveBuffDuration.Value); } } } private void HealthComponent_OnTakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo info) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) if (DamageAPI.HasModdedDamageType(info, Buffs.JhinMarkDamage) && NetworkServer.active) { self.body.AddTimedBuff(Buffs.jhinMarkDebuff, Config.utilityMarkDuration.Value); } if (self.body.HasBuff(Buffs.jhinMarkDebuff) && DamageAPI.HasModdedDamageType(info, Buffs.JhinConsumeMarkDamage) && NetworkServer.active) { self.body.ClearTimedBuffs(Buffs.jhinMarkDebuff); self.body.AddTimedBuff(Buffs.Nullified, Config.utilityRootDuration.Value); } orig.Invoke(self, info); } private void CharacterBody_RecalculateStats(orig_RecalculateStats orig, CharacterBody self) { orig.Invoke(self); if (Object.op_Implicit((Object)(object)self) && self.baseNameToken == "SERORONIN_JHIN_BODY_NAME") { float damage = self.damage; float attackSpeed = self.attackSpeed; float moveSpeed = self.moveSpeed; float num = self.baseAttackSpeed + self.levelAttackSpeed * self.level; float attakSpeedBonus = Mathf.Max(attackSpeed - num, 0f); float num2 = CalculateDamageBonus(damage, attakSpeedBonus, num); JhinStateManager component = ((Component)self).GetComponent<JhinStateManager>(); if (Object.op_Implicit((Object)(object)component)) { component.preModAtkSpeed = attackSpeed; } self.damage += num2; self.attackSpeed = num; if (self.HasBuff(Buffs.jhinCritMovespeedBuff)) { float num3 = CalculateMovespeedBonus(moveSpeed, attakSpeedBonus, num); self.moveSpeed += num3; } } } public float CalculateDamageBonus(float damage, float attakSpeedBonus, float attackSpeedLocked) { float value = Config.passiveDamageConversion.Value; float num = attakSpeedBonus / attackSpeedLocked; return damage * (value * num); } public float CalculateMovespeedBonus(float movespeed, float attakSpeedBonus, float attackSpeedLocked) { float value = Config.passiveMovespeedConversion.Value; float num = attakSpeedBonus / attackSpeedLocked; return movespeed * (0.1f + value * num); } private void SlicingMaelstrom_Charge_OnEnter(orig_OnEnter orig, BaseChargeBombState self) { orig.Invoke(self); if (self is ChargeLunarSecondary) { JhinStateManager component = ((EntityState)self).GetComponent<JhinStateManager>(); if (Object.op_Implicit((Object)(object)component)) { component.PauseReload(); } } } private void SlicingMaelstrom_Charge_OnExit(orig_OnExit orig, BaseChargeBombState self) { orig.Invoke(self); if (self is ChargeLunarSecondary) { JhinStateManager component = ((EntityState)self).GetComponent<JhinStateManager>(); if (Object.op_Implicit((Object)(object)component)) { component.StopReload(); } } } private void Shadowfade_OnEnter(orig_OnEnter orig, GhostUtilitySkillState self) { JhinStateManager component = ((EntityState)self).GetComponent<JhinStateManager>(); if ((Object)(object)component != (Object)null) { if (component.ammoCount != 0) { component.PauseReload(); } GameObject modelFX = component.modelFX; if (Object.op_Implicit((Object)(object)modelFX)) { modelFX.SetActive(false); } GameObject ultFX = component.ultFX; if (Object.op_Implicit((Object)(object)ultFX)) { ultFX.SetActive(false); } } orig.Invoke(self); } private void Shadowfade_OnExit(orig_OnExit orig, GhostUtilitySkillState self) { JhinStateManager component = ((EntityState)self).GetComponent<JhinStateManager>(); if ((Object)(object)component != (Object)null) { if (component.ammoCount != 0) { component.StopReload(); } GameObject modelFX = component.modelFX; if (Object.op_Implicit((Object)(object)modelFX)) { modelFX.SetActive(true); } GameObject ultFX = component.ultFX; if (Object.op_Implicit((Object)(object)ultFX)) { ultFX.SetActive(true); } } orig.Invoke(self); } private void Ruin_OnEnter(orig_OnEnter orig, Detonate self) { JhinStateManager component = ((EntityState)self).GetComponent<JhinStateManager>(); if ((Object)(object)component != (Object)null && component.ammoCount != 0) { component.StopReload(); } orig.Invoke(self); } public void FrozenState_OnEnter(orig_OnEnter orig, FrozenState self) { orig.Invoke(self); JhinStateManager component = ((EntityState)self).GetComponent<JhinStateManager>(); if (Object.op_Implicit((Object)(object)component)) { component.PauseReload(); } } public void FrozenState_OnExit(orig_OnExit orig, FrozenState self) { JhinStateManager component = ((EntityState)self).GetComponent<JhinStateManager>(); if (Object.op_Implicit((Object)(object)component)) { component.StopReload(); } orig.Invoke(self); } private void CreateAmmoUI(HUD hud) { //IL_00aa: 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_00d8: 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_0106: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)ammoUI) && (Object)(object)hud != (Object)null && (Object)(object)hud.mainUIPanel != (Object)null) { ammoUI = hud.mainUIPanel.GetComponentInChildren<JhinAmmoUI>(); if (!Object.op_Implicit((Object)(object)ammoUI)) { GameObject val = Object.Instantiate<GameObject>(Asset.mainAssetBundle.LoadAsset<GameObject>("JhinAmmoUI")); ammoUI = val.AddComponent<JhinAmmoUI>(); val.transform.SetParent(hud.mainUIPanel.transform); RectTransform component = val.GetComponent<RectTransform>(); component.anchorMin = new Vector2(0.5f, 0.5f); component.anchorMax = new Vector2(0.5f, 0.5f); component.pivot = new Vector2(0.5f, 0.5f); component.sizeDelta = new Vector2(1f, 1f); component.anchoredPosition = new Vector2(530f, -355f); ((Transform)component).localRotation = Quaternion.Euler(0f, 0f, 0f); ((Transform)component).localScale = new Vector3(0.2f, 0.2f, 0.2f); val.gameObject.SetActive(false); } } } private void HUD_Awake(orig_Awake orig, HUD self) { CreateAmmoUI(self); orig.Invoke(self); } private void HUD_onHudTargetChangedGlobal(HUD obj) { if (Object.op_Implicit((Object)(object)obj) && Object.op_Implicit((Object)(object)obj.targetBodyObject) && Object.op_Implicit((Object)(object)ammoUI)) { JhinStateManager component = obj.targetBodyObject.GetComponent<JhinStateManager>(); SkillLocator component2 = obj.targetBodyObject.GetComponent<SkillLocator>(); EntityStateMachine entityStateMachine = Helpers.GetEntityStateMachine(obj.targetBodyObject, "WeaponMode"); if (Object.op_Implicit((Object)(object)component)) { ((Component)ammoUI).gameObject.SetActive(true); ammoUI.jhinManager = component; ammoUI.skillLocator = component2; ammoUI.ultActiveStateMachine = entityStateMachine; } else { ((Component)ammoUI).gameObject.SetActive(false); ammoUI.jhinManager = null; ammoUI.skillLocator = null; ammoUI.ultActiveStateMachine = null; } } } } internal static class Log { internal static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object data) { _logSource.LogDebug(data); } internal static void Error(object data) { _logSource.LogError(data); } internal static void Fatal(object data) { _logSource.LogFatal(data); } internal static void Info(object data) { _logSource.LogInfo(data); } internal static void Message(object data) { _logSource.LogMessage(data); } internal static void Warning(object data) { _logSource.LogWarning(data); } } } namespace JhinMod.SkillStates { public class CurtainCall : BaseSkillState { public float duration = 10f; private JhinStateManager jhinManager; private EntityStateMachine weaponStateMachine; public override void OnEnter() { ((BaseState)this).OnEnter(); jhinManager = ((EntityState)this).GetComponent<JhinStateManager>(); weaponStateMachine = Helpers.GetEntityStateMachine(((EntityState)this).gameObject, "WeaponMode"); jhinManager.StopReload(interrupt: true); jhinManager.Reload(full: true); jhinManager.specialState = JhinStateManager.SpecialState.Armed; Helpers.PlaySound("UltCast", ((EntityState)this).gameObject); Helpers.PlaySound("UltMusic", ((EntityState)this).gameObject); weaponStateMachine.SetNextState((EntityState)(object)new JhinWeaponSpecialActiveState()); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); } protected virtual BaseWindDown GetNextState() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown return new BaseWindDown(); } 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)7; } } public class CurtainCallCancel : BaseSkillState { private JhinStateManager jhinManager; public override void OnEnter() { jhinManager = ((EntityState)this).GetComponent<JhinStateManager>(); JhinWeaponSpecialActiveState jhinWeaponSpecialActiveState = Helpers.GetEntityStateMachine(((EntityState)this).gameObject, "WeaponMode").state as JhinWeaponSpecialActiveState; jhinWeaponSpecialActiveState.duration = ((EntityState)jhinWeaponSpecialActiveState).fixedAge + jhinWeaponSpecialActiveState.exitDuration; jhinManager.specialState = JhinStateManager.SpecialState.ExitStarted; } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); } protected virtual BaseWindDown GetNextState() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown return new BaseWindDown(); } 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)7; } } public class CurtainCallShoot : BaseSkillState { public static float damageCoefficient = Config.specialDamageCoefficient.Value; public static float procCoefficient = 1f; public static float baseDuration = 0.5f; public static float force = 800f; public static float recoil = 3f; public static float range = 256f; public static float projectileSpeed = 200f; public static GameObject tracerEffectPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/Tracers/TracerGoldGat"); private float duration; private float fireTime; private bool hasFired; private string muzzleString; public JhinStateManager jhinManager; public override void OnEnter() { ((BaseState)this).OnEnter(); jhinManager = ((EntityState)this).GetComponent<JhinStateManager>(); duration = baseDuration / ((BaseState)this).attackSpeedStat; fireTime = 0.2f * duration; ((EntityState)this).characterBody.SetAimTimer(2f); muzzleString = "Muzzle"; Helpers.PlaySound("UltLoadShot", ((EntityState)this).gameObject); if ((Object)(object)jhinManager.ultFX != (Object)null) { Animator component = jhinManager.ultFX.GetComponent<Animator>(); if (Object.op_Implicit((Object)(object)component)) { EntityState.PlayAnimationOnAnimator(component, "Base Layer", "Fire"); } } ((EntityState)this).PlayAnimation("UpperBody, Override", "CurtainCallAttack"); } public virtual bool CheckCrit() { return ((BaseState)this).RollCrit(); } public override void OnExit() { ((EntityState)this).OnExit(); } private void Fire() { //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_00af: 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_00c6: 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_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) if (!hasFired) { hasFired = true; GameObject ultMissilePrefab = Projectiles.ultMissilePrefab; ((EntityState)this).characterBody.AddSpreadBloom(1.5f); EffectManager.SimpleMuzzleFlash(FirePistol2.muzzleEffectPrefab, ((EntityState)this).gameObject, muzzleString, false); Helpers.PlaySound("UltFire", ((EntityState)this).gameObject); if (((EntityState)this).isAuthority) { Ray aimRay = ((BaseState)this).GetAimRay(); ((BaseState)this).AddRecoil(-1f * recoil, -2f * recoil, -0.5f * recoil, 0.5f * recoil); FireProjectileInfo val = default(FireProjectileInfo); val.projectilePrefab = ultMissilePrefab; val.position = ((Ray)(ref aimRay)).origin; val.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction); val.owner = ((EntityState)this).gameObject; val.damage = ((EntityState)this).characterBody.damage * damageCoefficient; val.force = force; val.crit = CheckCrit(); val.damageColorIndex = (DamageColorIndex)0; val.target = null; ((FireProjectileInfo)(ref val)).speedOverride = projectileSpeed; ((FireProjectileInfo)(ref val)).fuseOverride = -1f; FireProjectileInfo val2 = val; ProjectileManager.instance.FireProjectile(val2); } jhinManager.TakeAmmo(1); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= fireTime) { Fire(); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } } public class CurtainCallShootCrit : CurtainCallShoot { public override bool CheckCrit() { return true; } public override void OnEnter() { base.OnEnter(); JhinWeaponSpecialActiveState jhinWeaponSpecialActiveState = Helpers.GetEntityStateMachine(((EntityState)this).gameObject, "WeaponMode").state as JhinWeaponSpecialActiveState; jhinWeaponSpecialActiveState.duration = ((EntityState)jhinWeaponSpecialActiveState).fixedAge + jhinWeaponSpecialActiveState.exitDuration + 1f; jhinManager.specialState = JhinStateManager.SpecialState.ExitStarted; } } public class DancingGrenade : BaseState { public static float baseDuration = 1f; public static float baseDelay = 0.25f; public static float projectileProcCoefficient = 1f; public static float projectileTravelSpeed = 40f; public static float projectileBounceRange = 25f; public static int maxBounceCount = 3; public static string attackSoundString; public float damageCoefficient; public float damageCoefficientOnBounceKill; private float duration; private float stopwatch; private Transform modelTransform; private JhinTracker tracker; private ChildLocator childLocator; private JhinStateManager jhinStateController; private bool hasTriedToFire; private bool hasFired; private HurtBox initialOrbTarget; public override void OnEnter() { ((BaseState)this).OnEnter(); stopwatch = 0f; duration = baseDuration; damageCoefficient = Config.secondaryDamageCoefficient.Value; damageCoefficientOnBounceKill = Config.secondaryDamageBounceCoefficient.Value; modelTransform = ((EntityState)this).GetModelTransform(); tracker = ((EntityState)this).GetComponent<JhinTracker>(); childLocator = ((Component)modelTransform).GetComponent<ChildLocator>(); jhinStateController = ((EntityState)this).GetComponent<JhinStateManager>(); jhinStateController.isAttacking = false; if (Object.op_Implicit((Object)(object)tracker) && ((EntityState)this).isAuthority) { initialOrbTarget = tracker.GetTrackingTarget(); } if (jhinStateController.ammoCount != 0) { jhinStateController.StopReload(interrupt: true); } ((EntityState)this).PlayAnimation("UpperBody, Override", "DancingGrenade"); Helpers.PlaySound("QCast", ((EntityState)this).gameObject); } public override void OnExit() { ((EntityState)this).OnExit(); if (!hasFired && NetworkServer.active) { ((EntityState)this).skillLocator.secondary.AddOneStock(); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); stopwatch += Time.fixedDeltaTime; if (!hasTriedToFire && !hasFired && stopwatch > baseDelay) { FireOrbDancingGrenade(); } if (stopwatch >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } private void FireOrbDancingGrenade() { //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) if (NetworkServer.active && !hasTriedToFire) { hasTriedToFire = true; ProjectileDancingGrenade projectileDancingGrenade = new ProjectileDancingGrenade(); ((LightningOrb)projectileDancingGrenade).targetsToFindPerBounce = 1; ((LightningOrb)projectileDancingGrenade).damageValue = ((EntityState)this).characterBody.damage * damageCoefficient; ((LightningOrb)projectileDancingGrenade).isCrit = Util.CheckRoll(((EntityState)this).characterBody.crit, ((EntityState)this).characterBody.master); ((LightningOrb)projectileDancingGrenade).teamIndex = TeamComponent.GetObjectTeam(((EntityState)this).gameObject); ((LightningOrb)projectileDancingGrenade).attacker = ((EntityState)this).gameObject; ((LightningOrb)projectileDancingGrenade).procCoefficient = projectileProcCoefficient; ((LightningOrb)projectileDancingGrenade).bouncesRemaining = maxBounceCount; ((LightningOrb)projectileDancingGrenade).speed = projectileTravelSpeed; ((LightningOrb)projectileDancingGrenade).bouncedObjects = new List<HealthComponent>(); projectileDancingGrenade.deadObjects = new List<HealthComponent>(); ((LightningOrb)projectileDancingGrenade).range = projectileBounceRange; projectileDancingGrenade.damageCoefficientOnBounceKill = damageCoefficientOnBounceKill; HurtBox val = initialOrbTarget; if (Object.op_Implicit((Object)(object)val)) { hasFired = true; Transform val2 = childLocator.FindChild("ShoulderR"); ((Orb)projectileDancingGrenade).origin = val2.position; ((Orb)projectileDancingGrenade).target = val; OrbManager.instance.AddOrb((Orb)(object)projectileDancingGrenade); } Helpers.PlaySound("QFire", ((EntityState)this).gameObject); } } 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) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) NetworkExtensions.Write(writer, HurtBoxReference.FromHurtBox(initialOrbTarget)); } public override void OnDeserialize(NetworkReader reader) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) HurtBoxReference val = NetworkExtensions.ReadHurtBoxReference(reader); initialOrbTarget = ((HurtBoxReference)(ref val)).ResolveHurtBox(); } } public class DeadlyFlourish : BaseSkillState { public static float damageCoefficient = Config.utilityDamageCoefficient.Value; public static float procCoefficient = 1f; public static float baseDuration = 1.15f; public static float baseFireDelay = 0.75f; public static float force = 800f; public static float recoil = 3f; public static float range = 256f; public static GameObject tracerEffectPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/Tracers/TracerGoldGat"); private float duration; private float fireTime; private bool hasFired; private string muzzleString; private JhinStateManager jhinStateController; public override void OnEnter() { //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) ((BaseState)this).OnEnter(); jhinStateController = ((EntityState)this).GetComponent<JhinStateManager>(); jhinStateController.isAttacking = false; if (jhinStateController.ammoCount != 0) { jhinStateController.StopReload(interrupt: true, 2f); } duration = baseDuration; fireTime = baseFireDelay; ((BaseState)this).StartAimMode(duration, true); muzzleString = "Muzzle"; if (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection)) { ((EntityState)this).characterDirection.moveVector = ((EntityState)this).characterDirection.forward; } Helpers.PlaySound("WCast", ((EntityState)this).gameObject); ((EntityState)this).PlayAnimation("FullBody, Override", "DeadlyFlourish"); } public override void OnExit() { ((EntityState)this).OnExit(); } private void Fire() { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_005b: 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_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: 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_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0137: 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_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_0164: 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_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Unknown result type (might be due to invalid IL or missing references) //IL_019a: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_01e2: Unknown result type (might be due to invalid IL or missing references) //IL_01e7: Unknown result type (might be due to invalid IL or missing references) //IL_01ef: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Expected O, but got Unknown //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_0201: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Expected O, but got Unknown //IL_020b: Unknown result type (might be due to invalid IL or missing references) if (!hasFired) { hasFired = true; ((EntityState)this).characterBody.AddSpreadBloom(1.5f); EffectManager.SimpleMuzzleFlash(FirePistol2.muzzleEffectPrefab, ((EntityState)this).gameObject, muzzleString, false); Ray aimRay = ((BaseState)this).GetAimRay(); Helpers.PlayVFXDynamic("DeadlyFlourishBeam", ((EntityState)this).gameObject, muzzleString, useAim: true, aimRay); Helpers.PlayVFXDynamic("DeadlyFlourishMuzzle", ((EntityState)this).gameObject, muzzleString, useAim: true, aimRay); if (((EntityState)this).isAuthority) { ((BaseState)this).AddRecoil(-1f * recoil, -2f * recoil, -0.5f * recoil, 0.5f * recoil); new BulletAttack { bulletCount = 1u, aimVector = ((Ray)(ref aimRay)).direction, origin = ((Ray)(ref aimRay)).origin, damage = damageCoefficient * ((BaseState)this).damageStat, damageColorIndex = (DamageColorIndex)0, damageType = DamageTypeCombo.op_Implicit((DamageType)32), falloffModel = (FalloffModel)0, maxDistance = range, force = force, hitMask = CommonMasks.bullet, minSpread = 0f, maxSpread = 0f, isCrit = ((BaseState)this).RollCrit(), owner = ((EntityState)this).gameObject, muzzleName = muzzleString, smartCollision = false, procChainMask = default(ProcChainMask), procCoefficient = procCoefficient, radius = 1f, sniper = false, stopperMask = LayerMask.op_Implicit(0), weapon = null, tracerEffectPrefab = tracerEffectPrefab, spreadPitchScale = 0f, spreadYawScale = 0f, queryTriggerInteraction = (QueryTriggerInteraction)0, hitCallback = new HitCallback(BulletHitCallback), modifyOutgoingDamageCallback = new ModifyOutgoingDamageCallback(ModifyDamage), hitEffectPrefab = FirePistol2.hitEffectPrefab }.Fire(); } } } private bool BulletHitCallback(BulletAttack bulletAttack, ref BulletHit hitInfo) { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) bool result = BulletAttack.defaultHitCallback.Invoke(bulletAttack, ref hitInfo); HealthComponent val = (Object.op_Implicit((Object)(object)hitInfo.hitHurtBox) ? hitInfo.hitHurtBox.healthComponent : null); if (Object.op_Implicit((Object)(object)val) && hitInfo.hitHurtBox.teamIndex != ((EntityState)this).teamComponent.teamIndex) { ((EntityState)this).characterBody.AddTimedBuff(Buffs.jhinCritMovespeedBuff, Config.passiveBuffDuration.Value * Config.utilityBuffMultiplier.Value); } return result; } private void ModifyDamage(BulletAttack _bulletAttack, ref BulletHit hitInfo, DamageInfo damageInfo) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) DamageAPI.AddModdedDamageType(damageInfo, Buffs.JhinConsumeMarkDamage); } public override void FixedUpdate() { //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (!hasFired) { AimAnimator aimAnimator = ((EntityState)this).GetAimAnimator(); if (Object.op_Implicit((Object)(object)aimAnimator)) { aimAnimator.AimImmediate(); } if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && Object.op_Implicit((Object)(object)((EntityState)this).inputBank)) { ((EntityState)this).characterDirection.moveVector = ((EntityState)this).inputBank.aimDirection; } } HandleMovements(); if (((EntityState)this).fixedAge >= fireTime) { Fire(); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public virtual void HandleMovements() { //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) if (!((EntityState)this).characterMotor.isGrounded) { ((EntityState)this).characterMotor.moveDirection = ((EntityState)this).inputBank.moveVector; } else { ((EntityState)this).characterMotor.moveDirection = Vector3.zero; } } 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 JhinWeaponMainState : BaseState { public override void OnEnter() { ((BaseState)this).OnEnter(); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); } } public class JhinWeaponPassiveCritReadyState : BaseState { [SerializeField] public SkillDef primaryOverrideSkillDef; protected JhinStateManager jhinStateController; protected Animator animatorComponent; public override void OnEnter() { //IL_0080: 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_0097: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); jhinStateController = ((EntityState)this).GetComponent<JhinStateManager>(); animatorComponent = ((EntityState)this).GetModelAnimator(); string text = "SERORONIN_JHIN_BODY_"; primaryOverrideSkillDef = (SkillDef)(object)Skills.CreateSkillDef<JhinAmmoSkillDef>(new SkillDefInfo { skillName = text + "PRIMARY_WHISPER_NAME", skillNameToken = text + "PRIMARY_WHISPER_NAME", skillDescriptionToken = text + "PRIMARY_WHISPER_CRIT_DESCRIPTION", skillIcon = Asset.mainAssetBundle.LoadAsset<Sprite>("texPrimaryCritIcon"), activationState = new SerializableEntityStateType(typeof(WhisperPrimary)), activationStateMachineName = "Weapon", interruptPriority = (InterruptPriority)0, isCombatSkill = true, baseRechargeInterval = 0f, requiredStock = 0, stockToConsume = 0, cancelSprintingOnActivation = false, keywordTokens = new string[2] { "KEYWORD_AGILE", "KEYWORD_EXECUTING" } }); Helpers.PlaySound("PassiveCritSpin", ((EntityState)this).gameObject); Helpers.PlaySound("PassiveCritMusic", ((EntityState)this).gameObject); if (Object.op_Implicit((Object)(object)animatorComponent)) { int layerIndex = animatorComponent.GetLayerIndex("UpperBody Idle, Override"); animatorComponent.SetLayerWeight(layerIndex, 1f); } if (Object.op_Implicit((Object)(object)((EntityState)this).skillLocator)) { ((EntityState)this).skillLocator.primary.SetSkillOverride((object)this, primaryOverrideSkillDef, (SkillOverridePriority)2); } } public override void OnExit() { Helpers.StopSound("PassiveCritSpin", ((EntityState)this).gameObject); Helpers.StopSound("PassiveCritMusic", ((EntityState)this).gameObject); if (Object.op_Implicit((Object)(object)animatorComponent)) { int layerIndex = animatorComponent.GetLayerIndex("UpperBody Idle, Override"); animatorComponent.SetLayerWeight(layerIndex, 0f); } if (Object.op_Implicit((Object)(object)((EntityState)this).skillLocator)) { ((EntityState)this).skillLocator.primary.UnsetSkillOverride((object)this, primaryOverrideSkillDef, (SkillOverridePriority)2); } ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)0; } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); } } public class JhinWeaponSpecialActiveState : BaseState { public float baseDuration = Config.specialDuration.Value; public float duration = Config.specialDuration.Value; public float exitDuration = 0.5f; protected JhinStateManager jhinManager; protected Animator animatorComponent; public override void OnEnter() { ((BaseState)this).OnEnter(); jhinManager = ((EntityState)this).GetComponent<JhinStateManager>(); animatorComponent = ((EntityState)this).GetModelAnimator(); SetOverride(jhinManager.specialPrimaryOverrideSkillDef, "primary"); EntityStateMachine entityStateMachine = Helpers.GetEntityStateMachine(((EntityState)this).gameObject, "Slide"); entityStateMachine.SetNextStateToMain(); SetOverride(jhinManager.specialCancelSkillDef, "special"); if (Object.op_Implicit((Object)(object)animatorComponent)) { int layerIndex = animatorComponent.GetLayerIndex("UpperBody Ult, Override"); animatorComponent.SetLayerWeight(layerIndex, 1f); } ((EntityState)this).PlayAnimation("UpperBody, Override", "CurtainCallStart"); GameObject vFXDynamic = Helpers.GetVFXDynamic("UltModelFX", ((EntityState)this).gameObject); if ((Object)(object)jhinManager.ultFX == (Object)null && Object.op_Implicit((Object)(object)vFXDynamic)) { jhinManager.ultFX = Object.Instantiate<GameObject>(vFXDynamic, ((EntityState)this).gameObject.transform); BindPairLocator component = jhinManager.ultFX.GetComponent<BindPairLocator>(); ModelLocator component2 = ((EntityState)this).gameObject.GetComponent<ModelLocator>(); component.target = ((component2 != null) ? ((Component)component2.modelTransform).gameObject : null); component.BindPairs(); } } public override void OnExit() { DoOnExitEffects(); ClearOverrides(); GenericSkill special = ((EntityState)this).skillLocator.special; special.DeductStock(1); special.RunRecharge((float)jhinManager.ammoCount * (Config.specialCDRefund.Value / (float)JhinStateManager.ammoMax) * Config.specialCD.Value); jhinManager.StopReload(interrupt: true); jhinManager.Reload(full: true); EntityStateMachine entityStateMachine = Helpers.GetEntityStateMachine(((EntityState)this).gameObject, "Slide"); entityStateMachine.SetNextStateToMain(); if (Object.op_Implicit((Object)(object)jhinManager.ultFX)) { BindPairLocator component = jhinManager.ultFX.GetComponent<BindPairLocator>(); foreach (GameObject allObject in component.allObjects) { EntityState.Destroy((Object)(object)allObject); } jhinManager.ultFX = null; } jhinManager.specialState = JhinStateManager.SpecialState.Inactive; ((EntityState)this).OnExit(); } public void SetOverride(SkillDef skillDef, string skillSlot) { string text = skillSlot.ToLower(); if (!Object.op_Implicit((Object)(object)((EntityState)this).skillLocator)) { return; } string text2 = text; string text3 = text2; if (!(text3 == "primary")) { if (text3 == "special") { ((EntityState)this).skillLocator.special.SetSkillOverride((object)this, skillDef, (SkillOverridePriority)4); } } else { ((EntityState)this).skillLocator.primary.SetSkillOverride((object)this, skillDef, (SkillOverridePriority)3); } } public void ClearOverrides() { if (Object.op_Implicit((Object)(object)((EntityState)this).skillLocator)) { ((EntityState)this).skillLocator.primary.UnsetSkillOverride((object)this, jhinManager.specialPrimaryOverrideSkillDef, (SkillOverridePriority)3); ((EntityState)this).skillLocator.primary.UnsetSkillOverride((object)this, jhinManager.primaryOverrideCritSkillDef, (SkillOverridePriority)3); ((EntityState)this).skillLocator.special.UnsetSkillOverride((object)this, jhinManager.specialCancelSkillDef, (SkillOverridePriority)4); } } 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)0; } public virtual void DoExitOutEffects() { //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_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).PlayAnimation("UpperBody, Override", "CurtainCallEnd"); if (!((Object)(object)jhinManager.ultFX != (Object)null)) { return; } Animator component = jhinManager.ultFX.GetComponent<Animator>(); if (Object.op_Implicit((Object)(object)component)) { component.SetTrigger("End"); } ParticleSystem[] componentsInChildren = jhinManager.ultFX.GetComponentsInChildren<ParticleSystem>(); Particle[] array = (Particle[])(object)new Particle[0]; ParticleSystem[] array2 = componentsInChildren; foreach (ParticleSystem val in array2) { MainModule main; if (array != null) { int num2 = array.Length; main = val.main; if (num2 >= ((MainModule)(ref main)).maxParticles) { goto IL_00bb; } } main = val.main; array = (Particle[])(object)new Particle[((MainModule)(ref main)).maxParticles]; goto IL_00bb; IL_00bb: int particles = val.GetParticles(array); for (int i = 0; i < particles; i++) { ((Particle)(ref array[i])).remainingLifetime = exitDuration; } val.SetParticles(array, particles); } } public void DoOnExitEffects() { Helpers.StopSound("UltMusic", ((EntityState)this).gameObject); if (Object.op_Implicit((Object)(object)animatorComponent)) { int layerIndex = animatorComponent.GetLayerIndex("UpperBody Ult, Override"); animatorComponent.SetLayerWeight(layerIndex, 0f); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (jhinManager.specialState != JhinStateManager.SpecialState.LastShot && !JhinStateManager.SpecialState.Exiting.HasFlag(jhinManager.specialState) && jhinManager.ammoCount == 1) { jhinManager.specialState = JhinStateManager.SpecialState.LastShot; SetOverride(jhinManager.primaryOverrideCritSkillDef, "primary"); } if (((EntityState)this).fixedAge > duration - exitDuration && jhinManager.specialState != JhinStateManager.SpecialState.ExitOutStarted) { DoExitOutEffects(); jhinManager.specialState = JhinStateManager.SpecialState.ExitOutStarted; } if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge > duration) { ((EntityState)this).outer.SetNextStateToMain(); } } } public class WhisperPrimary : BaseSkillState { public static float damageCoefficient = Config.primaryDamageCoefficient.Value; public static float procCoefficient = 1f; public static float baseDuration = 2.57f; public static float baseFireDelayPercent = 0.1f; public static float force = 800f; public static float recoil = 3f; public static float range = 256f; public static GameObject tracerEffectPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/Tracers/TracerGoldGat"); private JhinStateManager jhinManager; private float duration; private float durationAnimation; private float fireTime; private bool hasFired; private bool isCrit; private string muzzleString; private bool debugFlag; public override void OnEnter() { ((BaseState)this).OnEnter(); jhinManager = ((EntityState)this).GetComponent<JhinStateManager>(); jhinManager.timeSinceFire = 0f; jhinManager.isAttacking = true; jhinManager.ResetReload(); Helpers.StopSound("PassiveCritSpin", ((EntityState)this).gameObject, null, "Jhin"); Helpers.StopSound("PassiveCritMusic", ((EntityState)this).gameObject, null, "Jhin"); ((EntityState)this).characterBody.SetAimTimer(3f); int num = JhinStateManager.ammoMax - (jhinManager.ammoCount - 1); durationAnimation = baseDuration * (((EntityState)this).characterBody.baseAttackSpeed / ((EntityState)this).characterBody.attackSpeed); duration = 1f / ((EntityState)this).characterBody.attackSpeed; fireTime = baseFireDelayPercent * durationAnimation; muzzleString = "Muzzle"; if (((EntityState)this).isAuthority) { isCrit = ((BaseState)this).RollCrit(); } if (Config.primaryInstantShot.Value && num != 4) { fireTime = 0f; } else { Helpers.PlaySound((num == 4) ? "PassiveCritCast" : (isCrit ? "AttackCastCrit" : $"AttackCast{num}"), ((EntityState)this).gameObject, null, "", defaultToBase: true, "AttackCast1"); } PlayFireAnimation(); Debug.LogWarning((object)$"WhisperFireEnter current shotIndex: {num}"); } public void PlayFireAnimation() { int num = JhinStateManager.ammoMax - (jhinManager.ammoCount - 1); Animator modelAnimator = ((EntityState)this).GetModelAnimator(); float num2 = baseDuration / durationAnimation; float cycleOffset = (Config.primaryInstantShot.Value ? (5f / 32f * num2) : 0f); if (num == 4) { int layerIndex = modelAnimator.GetLayerIndex("UpperBody, Override"); modelAnimator.SetLayerWeight(layerIndex, 0f); ((EntityState)this).PlayAnimation("FullBody Passive Crit, Override", "AttackPassiveCrit", "ShootGun.playbackRate", durationAnimation, 0f); } else { PlayAnimationOnAnimatorCustom(modelAnimator, "UpperBody, Override", isCrit ? "AttackCrit" : $"Attack{num}", "ShootGun.playbackRate", durationAnimation, cycleOffset); } } protected static void PlayAnimationOnAnimatorCustom(Animator modelAnimator, string layerName, string animationStateName, string playbackRateParam, float duration, float cycleOffset) { //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) modelAnimator.speed = 1f; modelAnimator.Update(0f); int layerIndex = modelAnimator.GetLayerIndex(layerName); if (layerIndex >= 0) { modelAnimator.SetFloat(playbackRateParam, 1f); modelAnimator.PlayInFixedTime(animationStateName, layerIndex, cycleOffset); modelAnimator.Update(0f); AnimatorStateInfo currentAnimatorStateInfo = modelAnimator.GetCurrentAnimatorStateInfo(layerIndex); float length = ((AnimatorStateInfo)(ref currentAnimatorStateInfo)).length; modelAnimator.SetFloat(playbackRateParam, length / duration); } } public override void OnExit() { ((EntityState)this).OnExit(); } private void Fire() { //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: 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) if (!hasFired) { hasFired = true; if (jhinManager.ammoCount == 1) { isCrit = true; Animator modelAnimator = ((EntityState)this).GetModelAnimator(); int layerIndex = modelAnimator.GetLayerIndex("UpperBody, Override"); modelAnimator.SetLayerWeight(layerIndex, 1f); } ((EntityState)this).characterBody.SetAimTimer(duration * 2f); ((EntityState)this).characterBody.AddSpreadBloom(1.5f); DoFireEffects(); ((BaseState)this).AddRecoil(-1f * recoil, -2f * recoil, -0.5f * recoil, 0.5f * recoil); if (((EntityState)this).isAuthority) { Ray aimRay = ((BaseState)this).GetAimRay(); BulletAttack val = GenerateBulletAttack(aimRay); val.Fire(); OnFireBulletAuthority(aimRay); } jhinManager.TakeAmmo(1); jhinManager.isAttacking = false; } } protected BulletAttack GenerateBulletAttack(Ray aimRay) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0009: 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_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007f: 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_0091: 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_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: 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_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Expected O, but got Unknown //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Expected O, but got Unknown //IL_0135: Expected O, but got Unknown return new BulletAttack { aimVector = ((Ray)(ref aimRay)).direction, origin = ((Ray)(ref aimRay)).origin, owner = ((EntityState)this).gameObject, weapon = null, bulletCount = 1u, damage = ((BaseState)this).damageStat * damageCoefficient, damageColorIndex = (DamageColorIndex)0, damageType = DamageTypeCombo.op_Implicit((DamageType)0), falloffModel = (FalloffModel)1, force = force, HitEffectNormal = false, procChainMask = default(ProcChainMask), procCoefficient = CalculateProcCoefficient(), maxDistance = range, radius = 0.25f, isCrit = isCrit, muzzleName = muzzleString, minSpread = 0f, maxSpread = 0f, hitEffectPrefab = FirePistol2.hitEffectPrefab, smartCollision = false, sniper = false, spreadPitchScale = 0f, spreadYawScale = 0f, tracerEffectPrefab = tracerEffectPrefab, hitCallback = new HitCallback(BulletHitCallback), modifyOutgoingDamageCallback = new ModifyOutgoingDamageCallback(ModifyDamage) }; } public virtual float CalculateProcCoefficient() { float num = procCoefficient; JhinStateManager component = ((EntityState)this).GetComponent<JhinStateManager>(); CharacterBody component2 = ((EntityState)this).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component2)) { num *= component.preModAtkSpeed / (component2.baseAttackSpeed + component2.levelAttackSpeed * (component2.level - 1f)); } return num; } public virtual bool CreateTracer(string tracerName, Ray aimRay, string fallback = "") { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0009: 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_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //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) //IL_0186: Expected O, but got Unknown LayerMask defaultHitMask = BulletAttack.defaultHitMask; RaycastHit val = default(RaycastHit); Physics.SphereCast(((Ray)(ref aimRay)).origin, 0.25f, ((Ray)(ref aimRay)).direction, ref val, range, LayerMask.op_Implicit(defaultHitMask), (QueryTriggerInteraction)1); GameObject vFXDynamic = Helpers.GetVFXDynamic(tracerName, ((EntityState)this).gameObject); if ((Object)(object)vFXDynamic == (Object)null) { vFXDynamic = Helpers.GetVFXDynamic(fallback, ((EntityState)this).gameObject); } if ((Object)(object)vFXDynamic != (Object)null) { BulletTracer component = vFXDynamic.GetComponent<BulletTracer>(); component.origin = ((Ray)(ref aimRay)).origin; component.target = (((Object)(object)((RaycastHit)(ref val)).collider != (Object)null) ? ((RaycastHit)(ref val)).point : (((Ray)(ref aimRay)).origin + ((Ray)(ref aimRay)).direction * range)); component.projectileSpeed = 250f; component.maxDistance = (((Object)(object)((RaycastHit)(ref val)).collider != (Object)null) ? ((RaycastHit)(ref val)).distance : range); ModelLocator component2 = ((EntityState)this).gameObject.GetComponent<ModelLocator>(); if (Object.op_Implicit((Object)(object)component2) && Object.op_Implicit((Object)(object)component2.modelTransform)) { ChildLocator component3 = ((Component)component2.modelTransform).GetComponent<ChildLocator>(); if (Object.op_Implicit((Object)(object)component3)) { int num = component3.FindChildIndex(muzzleString); Transform val2 = component3.FindChild(num); if (Object.op_Implicit((Object)(object)val2)) { EffectData val3 = new EffectData { origin = val2.position, rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction) }; val3.SetChildLocatorTransformReference(((EntityState)this).gameObject, num); EffectManager.SpawnEffect(vFXDynamic, val3, false); } } } component.isActive = true; return true; } return false; } protected virtual void DoFireEffects() { //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_007b: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) int num = JhinStateManager.ammoMax - (jhinManager.ammoCount - 1); Ray aimRay = ((BaseState)this).GetAimRay(); Helpers.PlaySound((num == 4) ? "PassiveCritFire" : (isCrit ? "AttackCritFire" : $"AttackFire{num}"), ((EntityState)this).gameObject, null, "", defaultToBase: true, "AttackFire1"); Helpers.PlayVFXDynamic((num == 4) ? "MuzzleFlashFourth" : "MuzzleFlash", ((EntityState)this).gameObject, muzzleString, useAim: true, aimRay, null, transmit: false, defaultToBase: true, "MuzzleFlash"); CreateTracer((num == 4) ? "TracerFourth" : "Tracer", aimRay, "Tracer"); } protected virtual void OnFireBulletAuthority(Ray aimRay) { } private bool BulletHitCallback(BulletAttack bulletAttack, ref BulletHit hitInfo) { bool result = BulletAttack.defaultHitCallback.Invoke(bulletAttack, ref hitInfo); HealthComponent val = (Object.op_Implicit((Object)(object)hitInfo.hitHurtBox) ? hitInfo.hitHurtBox.healthComponent : null); return result; } private void ModifyDamage(BulletAttack _bulletAttack, ref BulletHit hitInfo, DamageInfo damageInfo) { //IL_002b: 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_0083: Unknown result type (might be due to invalid IL or missing references) SkillLocator component = ((EntityState)this).GetComponent<SkillLocator>(); if (Object.op_Implicit((Object)(object)component) && component.utility.cooldownRemaining < 4f) { DamageAPI.AddModdedDamageType(damageInfo, Buffs.JhinMarkDamage); } int num = JhinStateManager.ammoMax - (jhinManager.ammoCount - 1); HealthComponent val = (Object.op_Implicit((Object)(object)hitInfo.hitHurtBox) ? hitInfo.hitHurtBox.healthComponent : null); if (Object.op_Implicit((Object)(object)val) && hitInfo.hitHurtBox.teamIndex != ((EntityState)this).teamComponent.teamIndex && num == 4) { float num2 = val.missingCombinedHealth * Config.primaryExecuteMissingHealthPercentage.Value; float val2 = damageInfo.damage * Config.primaryExecuteDamageCap.Value; if (Config.primaryExecuteDamageCap.Value != 0f) { damageInfo.damage += Math.Min(num2, val2); } else { damageInfo.damage += num2; } } } public override void FixedUpdate() { jhinManager.debugLastFireTime = fireTime; jhinManager.debugLastFixedAge = ((EntityState)this).fixedAge; jhinManager.debugLastDuration = duration; if (((EntityState)this).fixedAge >= fireTime) { Fire(); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority && hasFired) { ((EntityState)this).outer.SetNextStateToMain(); } else { ((EntityState)this).FixedUpdate(); } } 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 WhisperReload : BaseState { private JhinStateManager jhinStateController; public float duration; private bool hasReloaded; public override void OnEnter() { ((BaseState)this).OnEnter(); jhinStateController = ((EntityState)this).GetComponent<JhinStateManager>(); duration = jhinStateController.reloadTime; bool flag = jhinStateController.ammoCount == 0 && jhinStateController.timeSinceFire < 0.5f; ((EntityState)this).PlayCrossfade("UpperBody, Override", flag ? "Reload_FromFireEmpty" : "Reload", "", duration, 0.2f); Helpers.PlaySound(flag ? "ReloadEmpty" : "Reload", ((EntityState)this).gameObject); Helpers.StopSound("PassiveCritSpin", ((EntityState)this).gameObject); Helpers.StopSound("PassiveCritMusic", ((EntityState)this).gameObject); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (jhinStateController.startedReload && ((EntityState)this).fixedAge >= duration) { Debug.LogWarning((object)"Exit Reload State"); PerformReload(); if (((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } } private void PerformReload() { if (!hasReloaded) { hasReloaded = true; jhinStateController.Reload(full: true); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)0; } } } namespace JhinMod.SkillStates.Henry { public class Roll : BaseSkillState { public static float duration = 0.5f; public static float initialSpeedCoefficient = 5f; public static float finalSpeedCoefficient = 2.5f; public static string dodgeSoundString = "JhinRoll"; public static float dodgeFOV = DodgeState.dodgeFOV; private float rollSpeed; private Vector3 forwardDirection; private Animator animator; private Vector3 previousPosition; public override void OnEnter() { //IL_0045: 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) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: 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_00bd: 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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0119: 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_012c: 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_0147: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); animator = ((EntityState)this).GetModelAnimator(); if (((EntityState)this).isAuthority && Object.op_Implicit((Object)(object)((EntityState)this).inputBank) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection)) { Vector3 val = ((((EntityState)this).inputBank.moveVector == Vector3.zero) ? ((EntityState)this).characterDirection.forward : ((EntityState)this).inputBank.moveVector); forwardDirection = ((Vector3)(ref val)).normalized; } Vector3 val2 = (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection) ? ((EntityState)this).characterDirection.forward : forwardDirection); Vector3 val3 = Vector3.Cross(Vector3.up, val2); float num = Vector3.Dot(forwardDirection, val2); float num2 = Vector3.Dot(forwardDirection, val3); RecalculateRollSpeed(); if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection)) { ((EntityState)this).characterMotor.velocity.y = 0f; ((EntityState)this).characterMotor.velocity = forwardDirection * rollSpeed; } Vector3 val4 = (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) ? ((EntityState)this).characterMotor.velocity : Vector3.zero); previousPosition = ((EntityState)this).transform.position - val4; ((EntityState)this).PlayAnimation("FullBody, Override", "Roll", "Roll.playbackRate", duration, 0f); Util.PlaySound(dodgeSoundString, ((EntityState)this).gameObject); if (NetworkServer.active) { ((EntityState)this).characterBody.AddTimedBuff(Buffs.armorBuff, 3f * duration); ((EntityState)this).characterBody.AddTimedBuff(Buffs.HiddenInvincibility, 0.5f * duration); } } private void RecalculateRollSpeed() { rollSpeed = ((BaseState)this).moveSpeedStat * Mathf.Lerp(initialSpeedCoefficient, finalSpeedCoefficient, ((EntityState)this).fixedAge / duration); } public override void FixedUpdate() { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: 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_0083: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); RecalculateRollSpeed(); if (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection)) { ((EntityState)this).characterDirection.forward = forwardDirection; } if (Object.op_Implicit((Object)(object)((EntityState)this).cameraTargetParams)) { ((EntityState)this).cameraTargetParams.fovOverride = Mathf.Lerp(dodgeFOV, 60f, ((EntityState)this).fixedAge / duration); } Vector3 val = ((EntityState)this).transform.position - previousPosition; Vector3 normalized = ((Vector3)(ref val)).normalized; if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection) && normalized != Vector3.zero) { Vector3 val2 = normalized * rollSpeed; float num = Mathf.Max(Vector3.Dot(val2, forwardDirection), 0f); val2 = forwardDirection * num; val2.y = 0f; ((EntityState)this).characterMotor.velocity = val2; } previousPosition = ((EntityState)this).transform.position; if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { if (Object.op_Implicit((Object)(object)((EntityState)this).cameraTargetParams)) { ((EntityState)this).cameraTargetParams.fovOverride = -1f; } ((EntityState)this).OnExit(); ((EntityState)this).characterMotor.disableAirControlUntilCollision = false; } 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(forwardDirection); } 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); forwardDirection = reader.ReadVector3(); } } public class Shoot : BaseSkillState { public static float damageCoefficient = 4.2f; public static float procCoefficient = 1f; public static float baseDuration = 0.6f; public static float force = 800f; public static float recoil = 3f; public static float range = 256f; public static GameObject tracerEffectPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/Tracers/TracerGoldGat"); private float duration; private float fireTime; private bool hasFired; private string muzzleString; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = DeadlyFlourish.baseDuration / ((BaseState)this).attackSpeedStat; fireTime = 0.2f * duration; ((EntityState)this).characterBody.SetAimTimer(2f); muzzleString = "Muzzle"; ((EntityState)this).PlayAnimation("UpperBody, Override", "Attack", "ShootGun.playbackRate", 1.8f, 0f); } public override void OnExit() { ((EntityState)this).OnExit(); } private void Fire() { //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_0151: 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_015d: 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_0173: 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_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) if (!hasFired) { hasFired = true; ((EntityState)this).characterBody.AddSpreadBloom(1.5f); EffectManager.SimpleMuzzleFlash(FirePistol2.muzzleEffectPrefab, ((EntityState)this).gameObject, muzzleString, false); Util.PlaySound("Play_Seroronin_Jhin_AttackCast", ((EntityState)this).gameObject); if (((EntityState)this).isAuthority) { Ray aimRay = ((BaseState)this).GetAimRay(); ((BaseState)this).AddRecoil(-1f * recoil, -2f * recoil, -0.5f * recoil, 0.5f * recoil); new BulletAttack { bulletCount = 1u, aimVector = ((Ray)(ref aimRay)).direction, origin = ((Ray)(ref aimRay)).origin, damage = damageCoefficient * ((BaseState)this).damageStat, damageColorIndex = (DamageColorIndex)0, damageType = DamageTypeCombo.op_Implicit((DamageType)0), falloffModel = (FalloffModel)1, maxDistance = range, force = force, hitMask = CommonMasks.bullet, minSpread = 0f, maxSpread = 0f, isCrit = ((BaseState)this).RollCrit(), owner = ((EntityState)this).gameObject, muzzleName = muzzleString, smartCollision = false, procChainMask = default(ProcChainMask), procCoefficient = procCoefficient, radius = 0.75f, sniper = false, stopperMask = CommonMasks.bullet, weapon = null, tracerEffectPrefab = tracerEffectPrefab, spreadPitchScale = 0f, spreadYawScale = 0f, queryTriggerInteraction = (QueryTriggerInteraction)0, hitEffectPrefab = FirePistol2.hitEffectPrefab }.Fire(); } } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= fireTime) { Fire(); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } } public class SlashCombo : BaseMeleeAttack { public override void OnEnter() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_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) hitboxName = "Sword"; damageType = (DamageType)0; damageCoefficient = 2.8f; procCoefficient = 1f; pushForce = 300f; bonusForce = Vector3.zero; baseDuration = 1f; attackStartTime = 0.2f; attackEndTime = 0.4f; baseEarlyExitTime = 0.4f; hitStopDuration = 0.012f; attackRecoil = 0.5f; hitHopVelocity = 4f; swingSoundString = "JhinSwordSwing"; hitSoundString = ""; muzzleString = ((swingIndex % 2 == 0) ? "SwingLeft" : "SwingRight"); swingEffectPrefab = Asset.swordSwingEffect; hitEffectPrefab = Asset.swordHitImpactEffect; impactSound = Asset.swordHitSoundEvent.index; base.OnEnter(); } protected override void PlayAttackAnimation() { base.PlayAttackAnimation(); } protected override void PlaySwingEffect() { base.PlaySwingEffect(); } protected override void OnHitEnemyAuthority() { base.OnHitEnemyAuthority(); } protected override void SetNextState() { int num = ((swingIndex == 0) ? 1 : 0); ((EntityState)this).outer.SetNextState((EntityState)(object)new SlashCombo { swingIndex = num }); } public override void OnExit() { base.OnExit(); } } public class ThrowBomb : GenericProjectileBaseState { public static float BaseDuration = 0.65f; public static float BaseDelayDuration = 0.35f * BaseDuration; public static float DamageCoefficient = 1.6f; public override void OnEnter() { base.projectilePrefab = Projectiles.bombPrefab; base.attackSoundString = "JhinBombThrow"; base.baseDuration = BaseDuration; base.baseDelayBeforeFiringProjectile = BaseDelayDuration; base.damageCoefficient = DamageCoefficient; base.force = 80f; base.recoilAmplitude = 0.1f; base.bloom = 10f; ((GenericProjectileBaseState)this).OnEnter(); } public override void FixedUpdate() { ((GenericProjectileBaseState)this).FixedUpdate(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } public override void PlayAnimation(float duration) { if (Object.op_Implicit((Object)(object)((EntityState)this).GetModelAnimator())) { ((EntityState)this).PlayAnimation("Gesture, Override", "ThrowBomb", "ThrowBomb.playbackRate", base.duration, 0f); } } } } namespace JhinMod.SkillStates.BaseStates { internal class AnimatedDeathState : GenericCharacterDeath { public override void FixedUpdate() { ((GenericCharacterDeath)this).FixedUpdate(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)9; } public override void OnEnter() { ((GenericCharacterDeath)this).OnEnter(); Helpers.PlaySound("DeathSFX", ((EntityState)this).gameObject); Animator modelAnimator = ((EntityState)this).GetModelAnimator(); if (Object.op_Implicit((Object)(object)modelAnimator)) { modelAnimator.CrossFadeInFixedTime("Death", 0.1f); } } public override void OnExit() { ((GenericCharacterDeath)this).OnExit(); } } public class BaseMeleeAttack : BaseSkillState { public int swingIndex; protected string hitboxName = "Sword"; protected DamageType damageType = (DamageType)0; protected float damageCoefficient = 3.5f; protected float procCoefficient = 1f; protected float pushForce = 300f; protected Vector3 bonusForce = Vector3.zero; protected float baseDuration = 1f; protected float attackStartTime = 0.2f; protected float attackEndTime = 0.4f; protected float baseEarlyExitTime = 0.4f; protected float hitStopDuration = 0.012f; protected float attackRecoil = 0.75f; protected float hitHopVelocity = 4f; protected bool cancelled = false; protected string swingSoundString = ""; protected string hitSoundString = ""; protected string muzzleString = "SwingCenter"; protected GameObject swingEffectPrefab; protected GameObject hitEffectPrefab; protected NetworkSoundEventIndex impactSound; private float earlyExitTime; public float duration; private bool hasFired; private float hitPauseTimer; private OverlapAttack attack; protected bool inHitPause; private bool hasHopped; protected float stopwatch; protected Animator animator; private HitStopCachedState hitStopCachedState; private Vector3 storedVelocity; public override void OnEnter() { //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Expected O, but got Unknown //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; earlyExitTime = baseEarlyExitTime / ((BaseState)this).attackSpeedStat; hasFired = false; animator = ((EntityState)this).GetModelAnimator(); ((BaseState)this).StartAimMode(0.5f + duration, false); ((EntityState)this).characterBody.outOfCombatStopwatch = 0f; animator.SetBool("attacking", true); HitBoxGroup hitBoxGroup = null; Transform modelTransform = ((EntityState)this).GetModelTransform(); if (Object.op_Implicit((Object)(object)modelTransform)) { hitBoxGroup = Array.Find(((Component)modelTransform).GetComponents<HitBoxGroup>(), (HitBoxGroup element) => element.groupName == hitboxName); } PlayAttackAnimation(); attack = new OverlapAttack(); attack.damageType = DamageTypeCombo.op_Implicit(damageType); attack.attacker = ((EntityState)this).gameObject; attack.inflictor = ((EntityState)this).gameObject; attack.teamIndex = ((BaseState)this).GetTeam(); attack.damage = damageCoefficient * ((BaseState)this).damageStat; attack.procCoefficient = procCoefficient; attack.hitEffectPrefab = hitEffectPrefab; attack.forceVector = bonusForce; attack.pushAwayForce = pushForce; attack.hitBoxGroup = hitBoxGroup; attack.isCrit = ((BaseState)this).RollCrit(); attack.impactSound = impactSound; } protected virtual void PlayAttackAnimation() { ((EntityState)this).PlayCrossfade("Gesture, Override", "Slash" + (1 + swingIndex), "Slash.playbackRate", duration, 0.05f); } public override void OnExit() { if (!hasFired && !cancelled) { FireAttack(); } ((EntityState)this).OnExit(); animator.SetBool("attacking", false); } protected virtual void PlaySwingEffect() { EffectManager.SimpleMuzzleFlash(swingEffectPrefab, ((EntityState)this).gameObject, muzzleString, true); } protected virtual void OnHitEnemyAuthority() { //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) Util.PlaySound(hitSoundString, ((EntityState)this).gameObject); if (!hasHopped) { if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && !((EntityState)this).characterMotor.isGrounded && hitHopVelocity > 0f) { ((BaseState)this).SmallHop(((EntityState)this).characterMotor, hitHopVelocity); } hasHopped = true; } if (!inHitPause && hitStopDuration > 0f) { storedVelocity = ((EntityState)this).characterMotor.velocity; hitStopCachedState = ((BaseState)this).CreateHitStopCachedState(((EntityState)this).characterMotor, animator, "Slash.playbackRate"); hitPauseTimer = hitStopDuration / ((BaseState)this).attackSpeedStat; inHitPause = true; } } private void FireAttack() { if (!hasFired) { hasFired = true; Util.PlayAttackSpeedSound(swingSoundString, ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat); if (((EntityState)this).isAuthority) { PlaySwingEffect(); ((BaseState)this).AddRecoil(-1f * attackRecoil, -2f * attackRecoil, -0.5f * attackRecoil, 0.5f * attackRecoil); } } if (((EntityState)this).isAuthority && attack.Fire((List<HurtBox>)null)) { OnHitEnemyAuthority(); } } protected virtual void SetNextState() { int num = ((swingIndex == 0) ? 1 : 0); ((EntityState)this).outer.SetNextState((EntityState)(object)new BaseMeleeAttack { swingIndex = num }); } public override void FixedUpdate() { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //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) ((EntityState)this).FixedUpdate(); hitPauseTimer -= Time.fixedDeltaTime; if (hitPauseTimer <= 0f && inHitPause) { ((BaseState)this).ConsumeHitStopCachedState(hitStopCachedState, ((EntityState)this).characterMotor, animator); inHitPause = false; ((EntityState)this).characterMotor.velocity = storedVelocity; } if (!inHitPause) { stopwatch += Time.fixedDeltaTime; } 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("Swing.playbackRate", 0f); } } if (stopwatch >= duration * attackStartTime && stopwatch <= duration * attackEndTime) { FireAttack(); } if (stopwatch >= duration - earlyExitTime && ((EntityState)this).isAuthority && ((EntityState)this).inputBank.skill1.down) { if (!hasFired) { FireAttack(); } SetNextState(); } else if (stopwatch >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } public override void OnSerialize(NetworkWriter writer) { ((BaseSkillState)this).OnSerialize(writer); writer.Write(swingIndex); } public override void OnDeserialize(NetworkReader reader) { ((BaseSkillState)this).OnDeserialize(reader); swingIndex = reader.ReadInt32(); } } publ