Decompiled source of Jhin v1.4.1
JhinMod.dll
Decompiled 2 months 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.UI; using JhinMod.Modules; using JhinMod.Modules.Characters; using JhinMod.Modules.CustomProjectiles; using JhinMod.Modules.SkillDefs; 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.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.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] public class ProjectMaskGlitchFX : MonoBehaviour { [SerializeField] public MeshRenderer maskRenderer; public float minimumStableTime = 2f; public float maximumStableTime = 15f; public float timeBetweenAttempts = 0.2f; public float maskFrameHoldMin = 0.1f; public float maskFrameHoldMax = 0.3f; public float maskFrameHoldTime = 0.2f; public float glitchFrameHoldMin = 0.1f; public float glitchFrameHoldMax = 0.3f; public float glitchFrameHoldTime = 0.2f; public float timeSinceTry; public float timeSinceMask; public float timeSinceGlitch; public float maskGlitchChance = 5f; public float maskGlitchMultipleChance = 30f; public int maskFrame = 0; public int glitchActive = 0; public List<int> possibleMaskFrames = new List<int> { 1, 2, 3 }; private void Awake() { } private void Start() { } private void Update() { timeSinceTry += Time.deltaTime; timeSinceMask += Time.deltaTime; timeSinceGlitch += Time.deltaTime; if (!(timeSinceTry < timeBetweenAttempts)) { if (maskFrame != 0 && timeSinceMask > maskFrameHoldTime) { RollMask(maskGlitchMultipleChance, maskFrame); } if (timeSinceMask > minimumStableTime && timeSinceMask > maskFrameHoldTime) { RollMask(maskGlitchChance); } if (glitchActive != 0 && timeSinceGlitch > glitchFrameHoldTime) { RollGlitchOverlay(maskGlitchMultipleChance); } if (timeSinceGlitch > minimumStableTime && timeSinceGlitch > glitchFrameHoldTime) { RollGlitchOverlay(maskGlitchChance); } timeSinceTry = 0f; } } public void RollMask(float chance, int avoidFrame = 0) { int num = Random.Range(0, 100); if ((float)num <= chance) { List<int> list = new List<int>(possibleMaskFrames); if (avoidFrame != 0) { list.Remove(avoidFrame); } int count = list.Count; int index = Random.Range(0, count); maskFrame = list[index]; maskFrameHoldTime = Random.Range(maskFrameHoldMin, maskFrameHoldMax); timeSinceMask = 0f; } else { maskFrame = 0; } ((Renderer)maskRenderer).materials[0].SetInt("_MaskFrame", maskFrame); } public void RollGlitchOverlay(float chance) { //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) int num = Random.Range(0, 100); if ((float)num <= chance) { glitchActive = 1; float num2 = Random.Range(0f, 1f); float num3 = Random.Range(0f, 1f); ((Renderer)maskRenderer).materials[0].SetVector("_GlitchOffset", Vector4.op_Implicit(new Vector2(num2, num3))); glitchFrameHoldTime = Random.Range(glitchFrameHoldMin, glitchFrameHoldMax); timeSinceGlitch = 0f; } else { glitchActive = 0; } ((Renderer)maskRenderer).materials[0].SetInt("_GlitchActive", glitchActive); } } 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.4.1")] [R2APISubmoduleDependency(new string[] { "PrefabAPI", "LanguageAPI", "SoundAPI", "UnlockableAPI" })] public class JhinPlugin : BaseUnityPlugin { public const string MODUID = "com.seroronin.JhinMod"; public const string MODNAME = "JhinMod"; public const string MODVERSION = "1.4.1"; public const string DEVELOPER_PREFIX = "SERORONIN"; public static JhinPlugin instance; public bool emoteSetup; public bool CustomEmotesActive; 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(); } if (Chainloader.PluginInfos.ContainsKey("com.weliveinasociety.CustomEmotesAPI")) { Log.Warning("EMOTES ACTIVE"); CustomEmotesActive = true; } else { Log.Warning("EMOTES INACTIVE"); } 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 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(); CustomEmotesAPI.CreateNameTokenSpritePair("SERORONIN_JHIN_BODY_NAME", Asset.mainAssetBundle.LoadAsset<Sprite>("texCustomEmotes_JhinIcon")); } } 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 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(); } } 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); 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); JhinStateController component = ((Component)self).GetComponent<JhinStateController>(); 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) { JhinStateController component = ((EntityState)self).GetComponent<JhinStateController>(); 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) { JhinStateController component = ((EntityState)self).GetComponent<JhinStateController>(); if (Object.op_Implicit((Object)(object)component)) { component.StopReload(); } } } private void Shadowfade_OnEnter(orig_OnEnter orig, GhostUtilitySkillState self) { JhinStateController component = ((EntityState)self).GetComponent<JhinStateController>(); 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) { JhinStateController component = ((EntityState)self).GetComponent<JhinStateController>(); 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) { JhinStateController component = ((EntityState)self).GetComponent<JhinStateController>(); 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); JhinStateController component = ((EntityState)self).GetComponent<JhinStateController>(); if (Object.op_Implicit((Object)(object)component)) { component.PauseReload(); } } public void FrozenState_OnExit(orig_OnExit orig, FrozenState self) { JhinStateController component = ((EntityState)self).GetComponent<JhinStateController>(); 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)) { JhinStateController component = obj.targetBodyObject.GetComponent<JhinStateController>(); 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.ammoComponent = component; ammoUI.skillLocator = component2; ammoUI.ultActiveStateMachine = entityStateMachine; } else { ((Component)ammoUI).gameObject.SetActive(false); ammoUI.ammoComponent = 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 JhinStateController jhinStateController; private EntityStateMachine ultStateMachine; public override void OnEnter() { ((BaseState)this).OnEnter(); jhinStateController = ((EntityState)this).GetComponent<JhinStateController>(); ultStateMachine = Helpers.GetEntityStateMachine(((EntityState)this).gameObject, "WeaponMode"); jhinStateController.StopReload(interrupt: true); jhinStateController.Reload(full: true); jhinStateController.isUlting = true; Helpers.PlaySound("UltCast", ((EntityState)this).gameObject); Helpers.PlaySound("UltMusic", ((EntityState)this).gameObject); ultStateMachine.SetNextState((EntityState)(object)new JhinWeaponUltActiveState()); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority && jhinStateController.isUlting && !(((EntityState)this).fixedAge > duration)) { } } 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)5; } } public class CurtainCallCancel : BaseSkillState { public float duration = 1f; private JhinStateController jhinStateController; private EntityStateMachine ultStateMachine; private bool wantsCancel; public override void OnEnter() { jhinStateController = ((EntityState)this).GetComponent<JhinStateController>(); ultStateMachine = Helpers.GetEntityStateMachine(((EntityState)this).gameObject, "WeaponMode"); if (ultStateMachine.state is JhinWeaponUltActiveState) { JhinWeaponUltActiveState jhinWeaponUltActiveState = ultStateMachine.state as JhinWeaponUltActiveState; jhinWeaponUltActiveState.duration = ((EntityState)jhinWeaponUltActiveState).fixedAge + jhinWeaponUltActiveState.exitDuration + 0.25f; } } 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)5; } } public class CurtainCallShoot : BaseSkillState { public static float damageCoefficient = Config.specialDamageCoefficient.Value; 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 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 JhinStateController jhinStateController; public override void OnEnter() { ((BaseState)this).OnEnter(); jhinStateController = ((EntityState)this).GetComponent<JhinStateController>(); 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)jhinStateController.ultFX != (Object)null) { Animator component = jhinStateController.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_0149: 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_015a: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) 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; val.damageTypeOverride = DamageTypeCombo.op_Implicit((DamageType)0); FireProjectileInfo val2 = val; ProjectileManager.instance.FireProjectile(val2); } jhinStateController.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 OnExit() { jhinStateController.ultHasFiredLastShot = true; base.OnExit(); } } 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 JhinStateController 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<JhinStateController>(); 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 JhinStateController 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<JhinStateController>(); 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_0051: 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_009c: 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_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); if (((EntityState)this).isAuthority) { Ray aimRay = ((BaseState)this).GetAimRay(); ((BaseState)this).AddRecoil(-1f * recoil, -2f * recoil, -0.5f * recoil, 0.5f * recoil); Helpers.PlayVFXDynamic("DeadlyFlourishBeam", ((EntityState)this).gameObject, muzzleString, useAim: true, aimRay); Helpers.PlayVFXDynamic("DeadlyFlourishMuzzle", ((EntityState)this).gameObject, muzzleString, useAim: true, aimRay); 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 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 JhinStateController jhinStateController; private float duration; private float durationAnimation; private float fireTime; private bool hasFired; private bool isCrit; private string muzzleString; public override void OnEnter() { ((BaseState)this).OnEnter(); jhinStateController = ((EntityState)this).GetComponent<JhinStateController>(); jhinStateController.timeSinceFire = 0f; jhinStateController.isAttacking = true; jhinStateController.ResetReload(); Helpers.StopSound("PassiveCritSpin", ((EntityState)this).gameObject, null, "Jhin"); Helpers.StopSound("PassiveCritMusic", ((EntityState)this).gameObject, null, "Jhin"); ((EntityState)this).characterBody.SetAimTimer(3f); int num = jhinStateController.ammoMax - (jhinStateController.ammoCount - 1); durationAnimation = baseDuration * (((EntityState)this).characterBody.baseAttackSpeed / ((EntityState)this).characterBody.attackSpeed); duration = 1f / ((EntityState)this).characterBody.attackSpeed; fireTime = baseFireDelayPercent * durationAnimation; muzzleString = "Muzzle"; 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(); } public void PlayFireAnimation() { int num = jhinStateController.ammoMax - (jhinStateController.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 (jhinStateController.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); } jhinStateController.TakeAmmo(1); jhinStateController.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; JhinStateController component = ((EntityState)this).GetComponent<JhinStateController>(); 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_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_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0182: 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) { CustomTracer component = vFXDynamic.GetComponent<CustomTracer>(); 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_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_0081: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) int num = jhinStateController.ammoMax - (jhinStateController.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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) SkillLocator component = ((EntityState)this).GetComponent<SkillLocator>(); if (Object.op_Implicit((Object)(object)component) && component.utility.cooldownRemaining < 4f) { DamageAPI.AddModdedDamageType(damageInfo, Buffs.JhinMarkDamage); } int num = jhinStateController.ammoMax - (jhinStateController.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() { ((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 WhisperReload : BaseState { private JhinStateController jhinStateController; public float duration; private bool hasReloaded; public override void OnEnter() { ((BaseState)this).OnEnter(); jhinStateController = ((EntityState)this).GetComponent<JhinStateController>(); 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() { if (!hasReloaded) { } ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (jhinStateController.startedReload && ((EntityState)this).fixedAge >= duration) { PerformReload(); ((EntityState)this).outer.SetNextStateToMain(); } if (((EntityState)this).isAuthority && !(((EntityState)this).fixedAge < duration)) { } } 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_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 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(); } } public class BaseTimedSkillState : BaseSkillState { public static float TimedBaseDuration; public static float TimedBaseCastStartTime; public static float TimedBaseCastEndTime; protected float duration; protected float castStartTime; protected float castEndTime; protected bool hasFired; protected bool isFiring; protected bool hasExited; protected virtual void InitDurationValues(float baseDuration, float baseCastStartTime, float baseCastEndTime = 1f) { TimedBaseDuration = baseDuration; TimedBaseCastStartTime = baseCastStartTime; TimedBaseCastEndTime = baseCastEndTime; duration = TimedBaseDuration / ((BaseState)this).attackSpeedStat; castStartTime = baseCastStartTime * duration; castEndTime = baseCastEndTime * duration; } protected virtual void OnCastEnter() { } protected virtual void OnCastFixedUpdate() { } protected virtual void OnCastUpdate() { } protected virtual void OnCastExit() { } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (!hasFired && ((EntityState)this).fixedAge > castStartTime) { hasFired = true; OnCastEnter(); } bool flag = ((EntityState)this).fixedAge >= castStartTime; bool flag2 = ((EntityState)this).fixedAge >= castEndTime; isFiring = false; if ((flag && !flag2) || (flag && flag2 && !hasFired)) { isFiring = true; OnCastFixedUpdate(); } if (flag2 && !hasExited) { hasExited = true; OnCastExit(); } if (((EntityState)this).fixedAge > duration) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void Update() { ((EntityState)this).Update(); if (isFiring) { OnCastUpdate(); } } } public class ExampleTimedSkillState : BaseTimedSkillState { public static float SkillBaseDuration = 1.5f; public static float SkillStartTime = 0.2f; public static float SkillEndTime = 0.9f; public override void OnEnter() { ((BaseState)this).OnEnter(); InitDurationValues(SkillBaseDuration, SkillStartTime, SkillEndTime); } protected override void OnCastEnter() { } protected override void OnCastFixedUpdate() { } protected override void OnCastExit() { } } public class ExampleDelayedSkillState : BaseTimedSkillState { public static float SkillBaseDuration = 1.5f; public static float SkillStartTime = 0.2f; public override void OnEnter() { ((BaseState)this).OnEnter(); InitDurationValues(SkillBaseDuration, SkillStartTime); } protected override void OnCastEnter() { } } 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 JhinStateController 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<JhinStateController>(); 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 (((EntityState)this).isAuthority && 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 (((EntityState)this).isAuthority && 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 JhinWeaponUltActiveState : BaseState { public float baseDuration = 10f; public float duration = 10f; public bool startedExit = false; public bool startedExitEffects = false; public float exitDuration = 0.5f; [SerializeField] public SkillDef primaryOverrideSkillDef; public SkillDef primaryOverrideCritSkillDef; public SkillDef specialCancelSkillDef; protected JhinStateController 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_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_016a: 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_024a: Unknown result type (might be due to invalid IL or missing references) //IL_024f: Unknown result type (might be due to invalid IL or missing references) //IL_0294: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); jhinStateController = ((EntityState)this).GetComponent<JhinStateController>(); animatorComponent = ((EntityState)this).GetModelAnimator(); string text = "SERORONIN"; primaryOverrideSkillDef = Skills.CreateSkillDef(new SkillDefInfo { skillName = text + "_JHIN_BODY_SPECIAL_ULT_NAME", skillNameToken = text + "_JHIN_BODY_SPECIAL_ULT_NAME", skillDescriptionToken = text + "_JHIN_BODY_SPECIAL_ULT_SHOT_DESCRIPTION", skillIcon = Asset.mainAssetBundle.LoadAsset<Sprite>("texSpecialShotIcon"), activationState = new SerializableEntityStateType(typeof(CurtainCallShoot)), activationStateMachineName = "Weapon", baseMaxStock = 1, baseRechargeInterval = Config.specialCD.Value, beginSkillCooldownOnSkillEnd = false, canceledFromSprinting = false, forceSprintDuringState = false, fullRestockOnAssign = true, interruptPriority = (InterruptPriority)0, resetCooldownTimerOnUse = false, isCombatSkill = true, mustKeyPress = true, cancelSprintingOnActivation = true, rechargeStock = 0, requiredStock = 0, stockToConsume = 0 }); primaryOverrideCritSkillDef = Skills.CreateSkillDef(new SkillDefInfo { skillName = text + "_JHIN_BODY_SPECIAL_ULT_NAME", skillNameToken = text + "_JHIN_BODY_SPECIAL_UL