Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Jhin v1.4.3
JhinMod.dll
Decompiled a year 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.3")] [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.3"; public const string DEVELOPER_PREFIX = "SERORONIN"; public static JhinPlugin instance; public bool emoteSetup; public bool CustomEmotesActive = false; public static Dictionary<Transform, GameObject> playerLobbyModelFX = new Dictionary<Transform, GameObject>(); private JhinAmmoUI ammoUI; private void Awake() { instance = this; Log.Init(((BaseUnityPlugin)this).Logger); Asset.Initialize(); Config.ReadConfig(); if (Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions")) { Config.CreateRiskofOptionsCompat(); } CustomEmotesActive = Chainloader.PluginInfos.ContainsKey("com.weliveinasociety.CustomEmotesAPI"); Log.Warning(CustomEmotesActive ? "Emotes active" : "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(); } } 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_ULT_NAME", skillDescriptionToken = text + "_JHIN_BODY_SPECIAL_ULT_SHOT_CRIT_DESCRIPTION", skillIcon = Asset.mainAssetBundle.LoadAsset<Sprite>("texSpecialShotCritIcon"),