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 Trunks v1.2.3
PlayableTrunks.dll
Decompiled 6 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using EntityStates; using KinematicCharacterController; using NS_KingModUtilities; using R2API; using RoR2; using RoR2.CharacterAI; using RoR2.Projectile; using RoR2.Skills; using UnityEngine; using UnityEngine.Networking; using UnityEngine.UI; using Xft; [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("PlayableTrunks")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: AssemblyProduct("PlayableTrunks")] [assembly: AssemblyTitle("PlayableTrunks")] [assembly: AssemblyInformationalVersion("1.0.0+f2f955e7b924cb1b05acd47131e33099e566f8ec")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyVersion("1.0.0.0")] namespace NS_Trunks; public class LightSwordHandler : CharacterModComponent { private const string m_bsbName = "LightSwordBonus"; private float m_currentLightCharge; private const float m_maxLightCharge = 100f; public static float m_maxDamageMultBoost = KingUtil.PercentToMult(40f); public static float m_maxCritBoost = 30f; private float m_drainRate = 4f; private float m_buttonHeldTimer; private const float MIN_TIME_PRESS = 0.4f; private SwordHandler m_swordHandler; private bool m_lightSwordActive; private bool m_hopeSwordActive; public const float m_hopeSwordMult = 2f; private void SetLightCharge(float val) { float num = Mathf.Clamp(val, 0f, 100f); if (m_currentLightCharge != num) { m_currentLightCharge = num; OnLightChargeSet(); } } private void AddLightCharge(float val) { SetLightCharge(GetLightCharge() + val); } public float GetLightCharge() { return m_currentLightCharge; } public float GetLightChargeRatio() { return m_currentLightCharge / 100f; } public bool IsLightChargeFull() { return GetLightCharge() == 100f; } public bool IsLightChargeEmpty() { return GetLightCharge() == 0f; } public bool GetLightSwordActive() { return m_lightSwordActive; } public bool GetHopeSwordActive() { return m_hopeSwordActive; } private void OnLightChargeSet() { if (!GetLightSwordActive() && m_currentLightCharge == 100f) { MainPlugin.PlaySoundEvent(((Component)this).gameObject, TrunksSounds.trx_lightsword_full, 100); } } protected override bool InitUI() { if (UIManager.Get().FindHUDUIElement("UI_LightSword") is UI_LightSword uI_LightSword && uI_LightSword.Init(this)) { return true; } return false; } public override void Init() { ((CharacterModComponent)this).Init(); m_swordHandler = ((Component)this).GetComponent<SwordHandler>(); ((NetworkComponent)this).IsAuthority(); } protected override void InternalUpdate() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) if (((NetworkComponent)this).IsAuthority()) { if (((CharacterModComponent)this).IsInMainState()) { if (Input.GetKey(MainPlugin.Config_TransformKey.Value)) { m_buttonHeldTimer += Time.deltaTime; } else { m_buttonHeldTimer = 0f; } if (m_buttonHeldTimer > 0.4f) { TryActivateLightSword(); } } CheckLightSwordMode(); } if (MainPlugin.DEBUG_MODE && Input.GetKeyDown((KeyCode)106)) { if (IsLightChargeEmpty()) { AddLightCharge(100f); } else { AddLightCharge(-100f); } } } public void BoostLightCharge_Minor() { AddLightCharge(2f); } public void ActivateLightSword() { //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) m_lightSwordActive = true; m_swordHandler.SetSwordMode(ESwordMode.LIGHT); AddCharacterBuffs(); ((CharacterModComponent)this).GetNetworkHandler().PlaySoundNetworked(((Component)this).gameObject, TrunksSounds.trx_lightsword_activate, 100, false); ((CharacterModComponent)this).GetNetworkHandler().SpawnFXNetworked(TrunksAssets.LightSwordActivation, m_swordHandler.GetHeldSwordGO().transform.position, Quaternion.identity, 2f, -1f, false); MainPlugin.SpawnFX(TrunksAssets.LightSwordActivation, m_swordHandler.GetHeldSwordGO().transform.position, Quaternion.identity, 2f).transform.SetParent(m_swordHandler.GetHeldSwordGO().transform, true); } public void ActivateSwordOfHope() { m_lightSwordActive = true; m_hopeSwordActive = true; m_swordHandler.SetSwordMode(ESwordMode.HOPE); AddCharacterBuffs(2f); } private void TryActivateLightSword() { if (IsLightChargeFull() && !m_lightSwordActive && ((object)((CharacterModComponent)this).GetEntityStateMachine().state).GetType() != typeof(LightSwordCutsceneState)) { LightSwordCutsceneState lightSwordCutsceneState = new LightSwordCutsceneState(); lightSwordCutsceneState.cutsceneTime = 0.75f; ((CharacterModComponent)this).GetEntityStateMachine().SetState((EntityState)(object)lightSwordCutsceneState); } } private void CheckLightSwordMode() { if (m_lightSwordActive) { if (!((CharacterModComponent)this).IsInTransformingCutscene() && !(((CharacterModComponent)this).GetEntityStateMachine().state is SwordOfHopeSkill)) { AddLightCharge((0f - m_drainRate) * Time.deltaTime); } if (IsLightChargeEmpty()) { m_lightSwordActive = false; m_hopeSwordActive = false; m_swordHandler.SetSwordMode(ESwordMode.NORMAL); RemoveCharacterBuffs(); } } } private void AddCharacterBuffs(float mult = 1f) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_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_0058: Unknown result type (might be due to invalid IL or missing references) BonusStatBundle val = default(BonusStatBundle); ((BonusStatBundle)(ref val))..ctor("LightSwordBonus", (GameObject)null, 0f); BonusStat val2 = new BonusStat("damage", 0f, m_maxDamageMultBoost * mult); ((BonusStatBundle)(ref val)).AddBonusStat(ref val2); val2 = new BonusStat("crit", m_maxCritBoost * mult, 0f); ((BonusStatBundle)(ref val)).AddBonusStat(ref val2); ((Component)this).GetComponent<BonusStatHandler>().AddBonusStatBundle(val); } private void RemoveCharacterBuffs() { BonusStatHandler component = ((Component)this).GetComponent<BonusStatHandler>(); string text = "LightSwordBonus"; component.RemoveBonusStatBundle(ref text); } private void UNetVersion() { } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { bool flag = ((CharacterModComponent)this).OnSerialize(writer, forceAll); bool flag2 = default(bool); return flag2 || flag; } public override void OnDeserialize(NetworkReader reader, bool initialState) { ((CharacterModComponent)this).OnDeserialize(reader, initialState); } } public enum ESwordMode { NORMAL, LIGHT, HOPE, COUNT } public class SwordHandler : CharacterModComponent { private GameObject m_Sword_Sheathed; private GameObject m_Sword_Held; private GameObject m_heldSword_hiltHandle; private GameObject m_heldSword_blade; private GameObject m_heldSword_light; private GameObject m_heldSword_hope; private ESwordMode m_currentSwordMode; private GameObject m_defaultSwordTrail; private GameObject m_lightSwordTrail; private GameObject m_hopeSwordTrail; public override void Init() { //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_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: 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_011d: Unknown result type (might be due to invalid IL or missing references) ((CharacterModComponent)this).Init(); m_Sword_Sheathed = ((Component)MainPlugin.FindTransformRecursive(((CharacterModComponent)this).GetCharacterModelSwap().GetBodyModelTransform(), "Sheathe_Sword_Position")).gameObject; m_Sword_Held = ((Component)MainPlugin.FindTransformRecursive(((CharacterModComponent)this).GetCharacterModelSwap().GetBodyModelTransform(), "Hold_Sword_Position")).gameObject; m_heldSword_hiltHandle = ((Component)MainPlugin.FindTransformRecursive(GetHeldSwordGO().transform, "Sword_HiltHandle")).gameObject; m_heldSword_blade = ((Component)MainPlugin.FindTransformRecursive(GetHeldSwordGO().transform, "Sword_Blade")).gameObject; m_heldSword_light = ((Component)MainPlugin.FindTransformRecursive(GetHeldSwordGO().transform, "light_sword")).gameObject; m_heldSword_hope = ((Component)MainPlugin.FindTransformRecursive(GetHeldSwordGO().transform, "hope_sword")).gameObject; m_defaultSwordTrail = Object.Instantiate<GameObject>(TrunksAssets.default_sword_trail, Vector3.zero, Quaternion.identity); m_defaultSwordTrail.SetActive(false); m_lightSwordTrail = Object.Instantiate<GameObject>(TrunksAssets.light_sword_trail, Vector3.zero, Quaternion.identity); m_lightSwordTrail.SetActive(false); m_hopeSwordTrail = Object.Instantiate<GameObject>(TrunksAssets.hope_sword_trail, Vector3.zero, Quaternion.identity); m_hopeSwordTrail.SetActive(false); SetSwordMode(ESwordMode.NORMAL); SheatheSword(); } public void SetSwordMode(ESwordMode newMode) { m_currentSwordMode = newMode; m_heldSword_hiltHandle.SetActive(newMode == ESwordMode.NORMAL || newMode == ESwordMode.LIGHT); m_heldSword_blade.SetActive(newMode == ESwordMode.NORMAL || newMode == ESwordMode.LIGHT); m_heldSword_light.SetActive(newMode == ESwordMode.LIGHT); m_heldSword_hope.SetActive(newMode == ESwordMode.HOPE); bool isSheathed = !IsSwordHeld(); OnSwordHandlingChanged(in isSheathed); if (((NetworkComponent)this).IsAuthority()) { TrunksNetworkHandler component = ((Component)this).GetComponent<TrunksNetworkHandler>(); if ((Object)(object)component != (Object)null) { component.SetSwordModeNetworked(m_currentSwordMode); } } } public ESwordMode GetSwordMode() { return m_currentSwordMode; } public void SheatheSword() { if ((Object)(object)m_Sword_Sheathed != (Object)null && (Object)(object)m_Sword_Held != (Object)null) { if (m_Sword_Held.activeInHierarchy) { MainPlugin.PlaySoundEvent(((Component)this).gameObject, TrunksSounds.trx_sheathe_sword, 100); } m_Sword_Sheathed.SetActive(true); m_Sword_Held.SetActive(false); } bool isSheathed = true; OnSwordHandlingChanged(in isSheathed); } public void HoldSword() { if ((Object)(object)m_Sword_Sheathed != (Object)null && (Object)(object)m_Sword_Held != (Object)null) { if (m_Sword_Sheathed.activeInHierarchy) { MainPlugin.PlaySoundEvent(((Component)this).gameObject, TrunksSounds.trx_unsheathe_sword, 100); } m_Sword_Sheathed.SetActive(false); m_Sword_Held.SetActive(true); } bool isSheathed = false; OnSwordHandlingChanged(in isSheathed); } private bool IsSwordHeld() { return m_Sword_Held.activeInHierarchy; } private void OnSwordHandlingChanged(in bool isSheathed) { m_defaultSwordTrail.SetActive(!isSheathed && GetSwordMode() == ESwordMode.NORMAL); m_lightSwordTrail.SetActive(!isSheathed && GetSwordMode() == ESwordMode.LIGHT); m_hopeSwordTrail.SetActive(!isSheathed && GetSwordMode() == ESwordMode.HOPE); } public GameObject GetHeldSwordGO() { if ((Object)(object)m_Sword_Held != (Object)null) { return ((Component)m_Sword_Held.transform.GetChild(0)).gameObject; } return null; } public GameObject GetSheathedSwordGO() { if ((Object)(object)m_Sword_Sheathed != (Object)null) { return ((Component)m_Sword_Sheathed.transform.GetChild(0)).gameObject; } return null; } private void OnUpdateSwordTrails() { UpdateSwordTrail(ref m_defaultSwordTrail); UpdateSwordTrail(ref m_lightSwordTrail); UpdateSwordTrail(ref m_hopeSwordTrail); } private void UpdateSwordTrail(ref GameObject swordTrail) { //IL_002a: 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) if ((Object)(object)swordTrail != (Object)null && (Object)(object)m_Sword_Held != (Object)null) { swordTrail.transform.position = m_Sword_Held.transform.position; swordTrail.transform.rotation = m_Sword_Held.transform.rotation; } } protected override void InternalUpdate() { OnUpdateSwordTrails(); if (Input.GetKeyDown((KeyCode)257)) { SetSwordMode(ESwordMode.NORMAL); } if (Input.GetKeyDown((KeyCode)258)) { SetSwordMode(ESwordMode.LIGHT); } if (Input.GetKeyDown((KeyCode)259)) { SetSwordMode(ESwordMode.HOPE); } } private void UNetVersion() { } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { bool flag = ((CharacterModComponent)this).OnSerialize(writer, forceAll); bool flag2 = default(bool); return flag2 || flag; } public override void OnDeserialize(NetworkReader reader, bool initialState) { ((CharacterModComponent)this).OnDeserialize(reader, initialState); } } public class TrunksCharacterModelSwap : CharacterModelSwapBase { protected override GameObject GetCharacterAssetPrefab() { return TrunksAssets.LocalAssetBundle.LoadAsset<GameObject>(TrunksCharacterRegistration.CharacterAssetPrefabName); } private void Start() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) base.m_skinCount = 2; ((CharacterModelSwapBase)this).InitCharacterModel(CharacterModDataManager.GetCharacterNameData(TrunksCharacterRegistration.CharacterName)); } protected override void SetEyebrowMaterial(Material newMat) { if (Object.op_Implicit((Object)(object)base.m_faceRenderer)) { Material[] materials = ((Renderer)base.m_faceRenderer).materials; materials[0] = newMat; materials[1] = newMat; RendererSetMaterialsExtension.SetMaterials((Renderer)(object)base.m_faceRenderer, materials, materials.Length); } } protected override void OnDisplayModelEnter() { //IL_000d: 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_0026: Unknown result type (might be due to invalid IL or missing references) ((CharacterModelSwapBase)this).OnDisplayModelEnter(); Transform transform = ((Component)this).transform; transform.rotation *= Quaternion.Euler(0f, -45f, 0f); MainPlugin.PlayVoiceSoundEvent(((Component)this).gameObject, TrunksSounds.trx_select_voice, 100); } protected override void InitAdditionalParts(Transform currentSkinTransform) { } protected override Material GetDefaultHairMaterial() { int currentSkinID = ((CharacterModelSwapBase)this).GetCurrentSkinID(); if (currentSkinID == 0 || currentSkinID != 1) { return BaseAssets.COL_LightBlue; } return TrunksAssets.TRX_COL_Pink; } private void UNetVersion() { } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { bool flag = ((CharacterModelSwapBase)this).OnSerialize(writer, forceAll); bool flag2 = default(bool); return flag2 || flag; } public override void OnDeserialize(NetworkReader reader, bool initialState) { ((CharacterModelSwapBase)this).OnDeserialize(reader, initialState); } } public class TrunksDuoSkillHandler : DuoSkillHandler { protected override uint GetRequestSoundID() { return TrunksSounds.trx_request_voices; } private void UNetVersion() { } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { bool flag = ((DuoSkillHandler)this).OnSerialize(writer, forceAll); bool flag2 = default(bool); return flag2 || flag; } public override void OnDeserialize(NetworkReader reader, bool initialState) { ((DuoSkillHandler)this).OnDeserialize(reader, initialState); } } public class TrunksNetworkHandler : NetworkComponent { private static int kCmdCmdSetSwordModeNetworked; private static int kRpcRpcSetSwordModeNetworked; [Command] private void CmdSetSwordModeNetworked(ESwordMode swordModeValue) { if (!((NetworkComponent)this).IsAuthority()) { ((Component)this).GetComponent<SwordHandler>().SetSwordMode(swordModeValue); } CallRpcSetSwordModeNetworked(swordModeValue); } [ClientRpc] private void RpcSetSwordModeNetworked(ESwordMode swordModeValue) { if (!((NetworkComponent)this).IsServer() && !((NetworkComponent)this).IsAuthority()) { ((Component)this).GetComponent<SwordHandler>().SetSwordMode(swordModeValue); } } public void SetSwordModeNetworked(ESwordMode swordModeValue) { if (((NetworkComponent)this).IsServer()) { CallRpcSetSwordModeNetworked(swordModeValue); } else { CallCmdSetSwordModeNetworked(swordModeValue); } } private void UNetVersion() { } protected static void InvokeCmdCmdSetSwordModeNetworked(NetworkBehaviour obj, NetworkReader reader) { if (!NetworkServer.active) { Debug.LogError((object)"Command CmdSetSwordModeNetworked called on client."); } else { ((TrunksNetworkHandler)(object)obj).CmdSetSwordModeNetworked((ESwordMode)reader.ReadInt32()); } } public void CallCmdSetSwordModeNetworked(ESwordMode swordModeValue) { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown //IL_0058: Unknown result type (might be due to invalid IL or missing references) if (!NetworkClient.active) { Debug.LogError((object)"Command function CmdSetSwordModeNetworked called on server."); return; } if (((NetworkBehaviour)this).isServer) { CmdSetSwordModeNetworked(swordModeValue); return; } NetworkWriter val = new NetworkWriter(); val.Write((short)0); val.Write((short)5); val.WritePackedUInt32((uint)kCmdCmdSetSwordModeNetworked); val.Write(((Component)this).GetComponent<NetworkIdentity>().netId); val.Write((int)swordModeValue); ((NetworkBehaviour)this).SendCommandInternal(val, 0, "CmdSetSwordModeNetworked"); } protected static void InvokeRpcRpcSetSwordModeNetworked(NetworkBehaviour obj, NetworkReader reader) { if (!NetworkClient.active) { Debug.LogError((object)"RPC RpcSetSwordModeNetworked called on server."); } else { ((TrunksNetworkHandler)(object)obj).RpcSetSwordModeNetworked((ESwordMode)reader.ReadInt32()); } } public void CallRpcSetSwordModeNetworked(ESwordMode swordModeValue) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0041: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active) { Debug.LogError((object)"RPC Function RpcSetSwordModeNetworked called on client."); return; } NetworkWriter val = new NetworkWriter(); val.Write((short)0); val.Write((short)2); val.WritePackedUInt32((uint)kRpcRpcSetSwordModeNetworked); val.Write(((Component)this).GetComponent<NetworkIdentity>().netId); val.Write((int)swordModeValue); ((NetworkBehaviour)this).SendRPCInternal(val, 0, "RpcSetSwordModeNetworked"); } static TrunksNetworkHandler() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown kCmdCmdSetSwordModeNetworked = 2821620; NetworkBehaviour.RegisterCommandDelegate(typeof(TrunksNetworkHandler), kCmdCmdSetSwordModeNetworked, new CmdDelegate(InvokeCmdCmdSetSwordModeNetworked)); kRpcRpcSetSwordModeNetworked = -492123170; NetworkBehaviour.RegisterRpcDelegate(typeof(TrunksNetworkHandler), kRpcRpcSetSwordModeNetworked, new CmdDelegate(InvokeRpcRpcSetSwordModeNetworked)); NetworkCRC.RegisterBehaviour("TrunksNetworkHandler", 0); } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { bool flag = ((NetworkComponent)this).OnSerialize(writer, forceAll); bool flag2 = default(bool); return flag2 || flag; } public override void OnDeserialize(NetworkReader reader, bool initialState) { ((NetworkComponent)this).OnDeserialize(reader, initialState); } } public class TrunksTransformationData : CharacterTransformationData { public override string GetTransformationSkillName(string transformationSkillNameID) { switch (transformationSkillNameID) { case "TSuperSaiyanGod3": case "TSuperSaiyanGod": case "TSuperSaiyan": return ChangeTheFutureSkill.SkillName; case "TSuperSaiyan3": case "TAscendedSuperSaiyan": return "Heat Dome Attack"; case "TUltraSuperSaiyan": return "Inexperienced Power Up"; case "TSuperSaiyan2": return "Masenko"; case "TSuperSaiyanBlue": case "TSuperSaiyanRage": case "TSuperSaiyanBlue3": return "Sword Of Hope"; default: return "None"; } } public override TModifier GetTransformationModifier() { //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_0039: Unknown result type (might be due to invalid IL or missing references) TModifier transformationModifier = ((CharacterTransformationData)this).GetTransformationModifier(); ((TModifier)(ref transformationModifier)).AddElement("m_damagePercentBonus", 0f - KingUtil.PercentToMult(10f), 1f); ((TModifier)(ref transformationModifier)).AddElement("m_totalMasteryLevelsToUnlock", 0f, 1.1f); return transformationModifier; } private void UNetVersion() { } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { bool flag = ((CharacterTransformationData)this).OnSerialize(writer, forceAll); bool flag2 = default(bool); return flag2 || flag; } public override void OnDeserialize(NetworkReader reader, bool initialState) { ((CharacterTransformationData)this).OnDeserialize(reader, initialState); } } public class TrunksTransformationHandler : TransformationHandler { private LightSwordHandler m_lightSwordHandler; protected override void Start() { m_lightSwordHandler = ((Component)this).GetComponent<LightSwordHandler>(); } protected override void OnTransformedFirstTime(MainTransformationState mTState) { if (mTState != null) { uint num = 0u; switch (((TransformationState)mTState).GetName()) { case "Super Saiyan": num = TrunksSounds.trx_first_ssj_voice; break; case "Ascended Super Saiyan": num = TrunksSounds.trx_first_assj_voice; break; case "Ultra Super Saiyan": num = TrunksSounds.trx_first_ussj_voice; break; case "Super Saiyan 2": num = TrunksSounds.trx_first_ssj2_voice; break; } ((CharacterModComponent)this).GetNetworkHandler().PlaySoundNetworked(((Component)this).gameObject, num, 100, true); } } protected override void OnStartTransforming(MainTransformationState mTState) { ((CharacterModComponent)this).GetNetworkHandler().PlaySoundNetworked(((Component)this).gameObject, TrunksSounds.trx_transformation_voices, 100, true); } protected override void TriggerCutsceneTransformation(MainTransformationState mTState, int nextETransformationStateIdx) { if (((TransformationState)mTState).GetName() == "Super Saiyan Rage") { TriggerSuperSaiyanRageCutscene(mTState, nextETransformationStateIdx); } else { ((TransformationHandler)this).TriggerCutsceneTransformation(mTState, nextETransformationStateIdx); } } private void TriggerSuperSaiyanRageCutscene(MainTransformationState mTState, int tIndex) { //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_013b: 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_0144: 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_0188: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Expected O, but got Unknown //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Expected O, but got Unknown //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01be: Expected O, but got Unknown //IL_00bd: 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) float num = 7.5f; float num2 = 4.5f; if (mTState != null) { ((TransformationHandler)this).GetKiHandler().SetLockCurrentKi(true); ((TransformationHandler)this).ResetTransformations(true, true, true, true); base.m_delayedTransformationStateIdx = tIndex; if ((Object)(object)mTState.GetCutsceneStartAura() != (Object)null) { ((TransformationHandler)this).CreateStartAura(mTState.GetCutsceneStartAura()); ((CharacterModComponent)this).GetNetworkHandler().SpawnFXNetworked(mTState.GetCutsceneStartAura(), ((Component)this).transform.position, Quaternion.identity, 10f, -1f, false); } ((CharacterModComponent)this).GetNetworkHandler().PlaySoundNetworked(((Component)this).gameObject, BaseSounds.prepare_move_0, 100, false); ((CharacterModComponent)this).GetNetworkHandler().PlaySoundNetworked(((Component)this).gameObject, TrunksSounds.trx_transformation_ssrg_cutscene, 100, false); ((CharacterModComponent)this).GetNetworkHandler().ApplyBuffNetworked(((Component)((CharacterModComponent)this).GetCharacterBody()).gameObject, Buffs.Immune.buffIndex, num + 2f); ((CharacterModComponent)this).GetNetworkHandler().PlaySoundNetworked(((Component)this).gameObject, BaseSounds.rumble, 100, false); ((MonoBehaviour)this).Invoke("FakeTransformToSuperSaiyan", 2f); ((MonoBehaviour)this).Invoke("FakeTransformationSound", num2); ((MonoBehaviour)this).Invoke("DelayedCutsceneTransformInto", num2); } Wave val = default(Wave); val.amplitude = 0.1f; val.frequency = 180f; val.cycleOffset = 0f; Wave val2 = val; ShakeEmitter.CreateSimpleShakeEmitter(((Component)this).transform.position, val2, num - 0.65f, 200f, false); if ((Object)(object)((CharacterModComponent)this).GetCharacterDirection() != (Object)null) { ((CharacterModComponent)this).GetNetworkHandler().PlayAnimationNetworked(((CharacterModComponent)this).GetCharacterDirection(), "SuperSaiyanRage_Transform", 0.15f, 0, false); } TransformationCutsceneState val3 = new TransformationCutsceneState(); val3.cutsceneTime = num; val3.forceToGround = true; val3.OnExit_Delegate = (OnExit_DelegateDeclaration)Delegate.Combine((Delegate?)(object)val3.OnExit_Delegate, (Delegate?)new OnExit_DelegateDeclaration(OnSuperSaiyanRageCutsceneEnd)); ((CharacterModComponent)this).GetEntityStateMachine().SetState((EntityState)(object)val3); } private void OnSuperSaiyanRageCutsceneEnd() { ((TransformationHandler)this).GetKiHandler().SetLockCurrentKi(false); } private void FakeTransformationSound() { ((CharacterModComponent)this).GetNetworkHandler().PlaySoundNetworked(((Component)this).gameObject, BaseSounds.transformation, 100, false); } private void FakeTransformToSuperSaiyan() { ((TransformationHandler)this).TransformInto_Visual(TransformationBank.FindLoadedTransformation("Super Saiyan")); } public override bool AdditionalCheckForUniqueTransformationSkill(string skillName) { if (skillName == "Sword Of Hope") { if (!m_lightSwordHandler.GetHopeSwordActive()) { if (!m_lightSwordHandler.IsLightChargeFull()) { if (m_lightSwordHandler.GetLightSwordActive()) { return m_lightSwordHandler.GetLightChargeRatio() > 0.33f; } return false; } return true; } return false; } return true; } private void UNetVersion() { } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { bool flag = ((TransformationHandler)this).OnSerialize(writer, forceAll); bool flag2 = default(bool); return flag2 || flag; } public override void OnDeserialize(NetworkReader reader, bool initialState) { ((TransformationHandler)this).OnDeserialize(reader, initialState); } } public class DuoGalickGunSkill_Trunks : DuoGalickGunSkill { public override void OnEnter() { ((DuoGalickGunSkill)this).OnEnter(); MainPlugin.PlayVoiceSoundEvent(((EntityState)this).gameObject, TrunksSounds.trx_duoskill_galickgun_voice, 100); } protected override Vector3 GetMoveToPositionOffset() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) return ((DuoGalickGunSkill)this).GetMoveToPositionOffset() * -1f; } public override void Update() { ((DuoGalickGunSkill)this).Update(); } public override void OnExit() { ((DuoGalickGunSkill)this).OnExit(); MainPlugin.PlayVoiceSoundEvent(((EntityState)this).gameObject, TrunksSounds.trx_duoskill_galickgun_fire_voice, 100); } } public class LightSwordCutsceneState : CharacterModSkillState { public float cutsceneTime; public bool lerpingZoomCam; public bool instantZoomCam; private const string m_animState = "LightSwordActivation"; private float m_lightSwordTriggerTime = 0.1f; private bool m_triggerdLightSword; public override void OnEnter() { ((CharacterModSkillState)this).OnEnter(); ((EntityState)this).GetComponent<SwordHandler>().HoldSword(); if (((EntityState)this).isAuthority) { base.m_canBeStunned = false; _ = instantZoomCam; base.m_canBeStunned = false; ((CharacterModSkillState)this).PlaySkillAnimation("LightSwordActivation", 0.1f, 1, true, true); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority) { ((CharacterModSkillState)this).ProcessMainStateMovement(true); if (((EntityState)this).fixedAge > cutsceneTime) { ((EntityState)this).outer.SetNextStateToMain(); } else if (!m_triggerdLightSword && ((EntityState)this).fixedAge > m_lightSwordTriggerTime) { ((EntityState)this).GetComponent<LightSwordHandler>().ActivateLightSword(); m_triggerdLightSword = true; } } } public override void OnExit() { ((EntityState)this).OnExit(); ((EntityState)this).GetComponent<SwordHandler>().SheatheSword(); if (((EntityState)this).isAuthority) { ((CharacterModSkillState)this).PlaySkillAnimation("UpperIdle", 0.1f, 1, true, true); } } } public class TrunksMeleeStrikeSkillAlt : TrunksMeleeStrikeSkill { public new const string SkillName = "Sword Strike Alternate"; public override void OnEnter() { ((MeleeStrikeSkill)this).m_lockedMovement = false; base.OnEnter(); } public override void OnExit() { base.OnExit(); } public new static string GetSkillDescription(bool displayAutoMove) { return TrunksMeleeStrikeSkill.GetSkillDescription(displayAutoMove) + MainPlugin.ColorText("Free movement, but does not Auto-Move.", "#03f4fc"); } } public class TrunksMeleeStrikeSkill : MeleeStrikeSkill { public const string SkillName = "Sword Strike"; private const float m_skillDamage = 3.2f; private const float m_collisionForwardOffsetMult = 2f; private SwordHandler m_swordSheatheHandler; private LightSwordHandler m_lightSwordHandler; public override void OnEnter() { m_swordSheatheHandler = ((EntityState)this).GetComponent<SwordHandler>(); m_lightSwordHandler = ((EntityState)this).GetComponent<LightSwordHandler>(); if ((Object)(object)m_swordSheatheHandler != (Object)null) { m_swordSheatheHandler.HoldSword(); } ((MeleeStrikeSkill)this).OnEnter(); } public override void OnExit() { if ((Object)(object)m_swordSheatheHandler != (Object)null) { m_swordSheatheHandler.SheatheSword(); } ((MeleeStrikeSkill)this).OnExit(); } protected override float GetCollisionForwardOffsetMult() { return 2f; } protected override float GetCollisionRadius() { float num = ((MeleeStrikeSkill)this).GetCollisionRadius(); if (m_lightSwordHandler.GetHopeSwordActive()) { num *= 2f; } return num; } protected override bool ShowSwingFX() { return false; } protected override void OnDamageApplied() { ((MeleeStrikeSkill)this).OnDamageApplied(); if ((Object)(object)m_lightSwordHandler != (Object)null) { m_lightSwordHandler.BoostLightCharge_Minor(); } } public static string GetSkillDescription(bool displayAutoMove) { return MeleeStrikeSkill.CreateBaseSkillDescription(3.2f, displayAutoMove); } protected override string ConstructMeleeAttackAnimName(int num) { if (num < 10) { return string.Format("TRX_BAS_BONE|TRX_BAS_BONE|TRX_ATC_00{0}|Base Layer", num, num); } return string.Format("TRX_BAS_BONE|TRX_BAS_BONE|TRX_ATC_0{0}|Base Layer", num, num); } protected override uint GetSwingVoiceSoundID(int voiceIdx) { uint result = 0u; switch (voiceIdx) { case 0: result = TrunksSounds.trx_primary_swing_0; break; case 1: result = TrunksSounds.trx_primary_swing_1; break; case 2: result = TrunksSounds.trx_primary_swing_2; break; case 3: result = TrunksSounds.trx_primary_swing_3; break; case 4: result = TrunksSounds.trx_primary_swing_4; break; } return result; } protected override uint GetHitSound() { return TrunksSounds.trx_sword_hits; } protected override void InitMeleeAttackData() { GenerateMeleeAttackData(base.m_lockedMovement); } private void GenerateMeleeAttackData(bool isLocked) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: 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_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) base.m_meleeAttacks = (NewMeleeAttackData[])(object)new NewMeleeAttackData[5] { new NewMeleeAttackData(((MeleeStrikeSkill)this).ConstructMeleeAttackAnimStateName(0), ((MeleeStrikeSkill)this).ConstructMeleeAttackAnimName(4), (!isLocked) ? 1 : 0, BaseSounds.primary_swing_0, 0, 0.19f, 0.15f, false), new NewMeleeAttackData(((MeleeStrikeSkill)this).ConstructMeleeAttackAnimStateName(1), ((MeleeStrikeSkill)this).ConstructMeleeAttackAnimName(5), (!isLocked) ? 1 : 0, BaseSounds.primary_swing_1, 1, 0.21f, 0.15f, true), new NewMeleeAttackData(((MeleeStrikeSkill)this).ConstructMeleeAttackAnimStateName(2), ((MeleeStrikeSkill)this).ConstructMeleeAttackAnimName(2), (!isLocked) ? 1 : 0, BaseSounds.primary_swing_0, 2, 0.33f, 0.15f, true), new NewMeleeAttackData(((MeleeStrikeSkill)this).ConstructMeleeAttackAnimStateName(3), ((MeleeStrikeSkill)this).ConstructMeleeAttackAnimName(5), (!isLocked) ? 1 : 0, BaseSounds.primary_swing_1, 3, 0.21f, 0.15f, false), new NewMeleeAttackData(((MeleeStrikeSkill)this).ConstructMeleeAttackAnimStateName(4), ((MeleeStrikeSkill)this).ConstructMeleeAttackAnimName(8), (!isLocked) ? 1 : 0, BaseSounds.primary_swing_0, 4, 0.14f, 0.15f, true) }; } protected override void LockHipPosition() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) ((CharacterModSkillState)this).GetCharacterModelSwap().SetLockHipPosition(true, new Vector3(0f, 1.15f, 0f), true); } } public class ShiningSwordAttackSkill : CharacterModSkillState { public static string SkillName = "Shining Sword Attack"; private static float m_damagePerHitPercent = KingUtil.PercentToMult(240); private static float m_finalBlastdamagePerHitPercent = KingUtil.PercentToMult(660); private float groundedForwardOffset = 1f; private float groundedRadius = 3f; private float fireBlastRadius = 6f; private float groundedMaxYDiff = 3f; private float groundedCoef = 0.75f; private float m_skillMovementSpeed = 12.5f; private float m_minTimeExecuting = 0.5f; private float m_dashTime = 0.25f; private string m_startAnimName = "ShiningSwordAttack_Dash"; private string m_attackAnimName = "ShiningSwordAttack_0"; private string m_attackAnimClipName = "ShiningSwordAttack_P1"; private string m_endAnimName = "ShiningSwordAttack_1"; private float m_attackTimerMax = 0.2f; private float m_attackTimer; public static float m_kiCostPercentPerSecond = 0.1f; public static float BaseKiCost = 30f; private bool m_shouldFinish; private bool m_shouldEarlyFinish; private bool m_startSlashing; private float m_timeFinished; private bool m_fireFinalBlast; public const string m_bsbName = "ShiningSwordAttackBonus"; private const float m_baseArmorAdd = 40f; private SwordHandler m_swordHandler; private LightSwordHandler m_lightSwordHandler; private Vector3 m_endingDirection; private float currentAnimDuration; private void ResetAttackTimer() { m_attackTimer = m_attackTimerMax; } protected float GetCollisionRadius() { float num = groundedRadius; if (m_lightSwordHandler.GetHopeSwordActive()) { num *= 2f; } return num; } public override void OnEnter() { //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) ((CharacterModSkillState)this).OnEnter(); m_swordHandler = ((EntityState)this).GetComponent<SwordHandler>(); m_lightSwordHandler = ((EntityState)this).GetComponent<LightSwordHandler>(); base.m_animationSpeedMulti = 1f; base.m_skillAttackSpeedCap = 3f; if (((EntityState)this).isAuthority) { ((CharacterModSkillState)this).GetAnimationTime(m_attackAnimClipName); ((CharacterModSkillState)this).PlaySkillAnimation(m_startAnimName, 0f, 0, true, true); ((CharacterModSkillState)this).AddGravityDisableCounter(); ((CharacterModSkillState)this).TryMoveTowardsTarget(((EntityState)this).GetComponent<TargetTracker>(), 60f, 55f, 24f, false, 0.33f); ((CharacterModSkillState)this).GetNetworkHandler().ApplyBuffNetworked(((Component)((EntityState)this).characterBody).gameObject, Buffs.Immune.buffIndex, m_dashTime); BonusStatBundle val = default(BonusStatBundle); ((BonusStatBundle)(ref val))..ctor("ShiningSwordAttackBonus", (GameObject)null, 0f); BonusStat val2 = new BonusStat("armor", 40f, 0f); ((BonusStatBundle)(ref val)).AddBonusStat(ref val2); ((CharacterModSkillState)this).GetBonusStatHandler().AddBonusStatBundle(val); } else if ((Object)(object)m_swordHandler != (Object)null) { m_swordHandler.HoldSword(); } MainPlugin.PlaySoundEvent(((EntityState)this).gameObject, BaseSounds.movement_dash, 100); MainPlugin.PlayVoiceSoundEvent(((EntityState)this).gameObject, TrunksSounds.trx_shiningswordslash_voices, 40); ((CharacterModSkillState)this).GetCharacterModelSwap().SetLockHipPosition(true, new Vector3(0f, 1.15f, 0f), true); } private float GetAttackSpeedScale() { return 1f + (((EntityState)this).characterBody.attackSpeed - 1f) * 0.5f; } private void OnStartSlashing() { if (((EntityState)this).isAuthority) { ((CharacterModSkillState)this).GetAnimationTime(m_attackAnimClipName); ((CharacterModSkillState)this).PlaySkillAnimation(m_attackAnimName, 0.1f, 0, true, true); } if ((Object)(object)m_swordHandler != (Object)null) { m_swordHandler.HoldSword(); } } public override void Update() { //IL_0273: Unknown result type (might be due to invalid IL or missing references) //IL_0278: Unknown result type (might be due to invalid IL or missing references) //IL_0031: 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) ((EntityState)this).Update(); if (!m_shouldFinish) { if (((EntityState)this).fixedAge > m_dashTime) { if (((EntityState)this).isAuthority) { ((EntityState)this).characterMotor.velocity = ((CharacterModSkillState)this).GetAimRayDirection() * (ShouldStopMoving() ? 0f : Mathf.Max(m_skillMovementSpeed, ((EntityState)this).characterBody.moveSpeed)); } if (!m_startSlashing) { if (!((EntityState)this).inputBank.skill2.down) { if (!m_shouldEarlyFinish && ((EntityState)this).isAuthority) { m_shouldEarlyFinish = true; ((EntityState)this).outer.SetNextStateToMain(); } } else { m_startSlashing = true; OnStartSlashing(); } } if (((EntityState)this).isAuthority && !m_shouldEarlyFinish) { if (m_attackTimer > 0f) { m_attackTimer -= Time.deltaTime * GetAttackSpeedScale(); } else { if (ApplyDamage(GetCollisionRadius(), m_damagePerHitPercent, TrunksSounds.trx_sword_hits, showSwingFX: false)) { m_lightSwordHandler.BoostLightCharge_Minor(); } ResetAttackTimer(); ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, BaseSounds.swings, 100, false); } } } else if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge > 0.1f && MainPlugin.MainStatePerformInputs_Hack(((EntityState)this).inputBank, ((EntityState)this).skillLocator, ((EntityState)this).outer, ((EntityState)this).isAuthority, true, false, true, true, true)) { return; } if (!((EntityState)this).isAuthority) { return; } ((BaseState)this).StartAimMode(1f, true); if (((EntityState)this).characterMotor.isGrounded) { ((BaseCharacterController)((EntityState)this).characterMotor).Motor.ForceUnground(0.1f); } if (!m_shouldEarlyFinish) { if (((EntityState)this).fixedAge >= m_dashTime + m_minTimeExecuting) { float num = ((CharacterModSkillState)this).GetKiHandler().GetMaxKi() * m_kiCostPercentPerSecond * ((BaseSkillState)this).activatorSkillSlot.cooldownScale * Time.deltaTime; ((CharacterModSkillState)this).GetKiHandler().AddCurrentKi(0f - num); } if (((CharacterModSkillState)this).GetKiHandler().GetCurrentKi() <= 0f || (!((EntityState)this).inputBank.skill2.down && ((EntityState)this).fixedAge >= m_dashTime + m_minTimeExecuting)) { OnSkillFinish(); } } } else if (((EntityState)this).isAuthority) { float num2 = 0.8f; if (Time.time > m_timeFinished + 0.2f && !m_fireFinalBlast) { m_fireFinalBlast = true; OnFireFinalBlast(); } ((EntityState)this).characterMotor.velocity = Vector3.zero; if (Time.time > m_timeFinished + num2) { ((EntityState)this).outer.SetNextStateToMain(); } } } private void OnFireFinalBlast() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) Vector3 val = ((CharacterModSkillState)this).GetLeftHandBonePosition() + m_endingDirection * 2f; ((CharacterModSkillState)this).GetNetworkHandler().SpawnFXNetworked(TrunksAssets.ShiningSwordAttack_Explode_FX, val, Quaternion.identity, 1f, -1f, false); EffectLayer[] componentsInChildren = MainPlugin.SpawnFX(TrunksAssets.ShiningSwordAttack_Explode_FX, val, Quaternion.identity, 1f).GetComponentsInChildren<EffectLayer>(); foreach (EffectLayer obj in componentsInChildren) { Vector3 aimRayDirection = ((CharacterModSkillState)this).GetAimRayDirection(); obj.OriVelocityAxis = ((Vector3)(ref aimRayDirection)).normalized; } MainPlugin.CreateCameraShake(((EntityState)this).transform.position, 0.4f, 100f, 1.25f, 180f, 0f, true); ApplyDamage(fireBlastRadius, m_finalBlastdamagePerHitPercent, BaseSounds.hits_medium, showSwingFX: false); ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, TrunksSounds.trx_shiningswordslash_fireblast, 100, false); } public static string GetDisplayBaseDamage() { return (m_damagePerHitPercent * 100f).ToString(); } public static string GetSkillDescription() { return string.Format(MainPlugin.CreateKiCostDescription(BaseKiCost.ToString()) + "\nDash towards a target and rapidly unleash a barrage of sword strikes! \nDealing " + MainPlugin.CreateDamageDescription((m_damagePerHitPercent * 100f).ToString()) + " for each one!\n" + MainPlugin.ColorText("Holding this skill drains ", "#03f4fc") + MainPlugin.ColorText(KingUtil.MultToPercent(m_kiCostPercentPerSecond) + "% Ki ", "#03bcff") + MainPlugin.ColorText("per second.", "#03f4fc") + "\nOnce released, unleash an additional energy blast, dealing " + MainPlugin.CreateDamageDescription((m_finalBlastdamagePerHitPercent * 100f).ToString()) + "!"); } private void OnSkillFinish() { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: 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_004f: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)m_swordHandler != (Object)null) { m_swordHandler.SheatheSword(); } m_shouldFinish = true; m_timeFinished = Time.time; ((BaseState)this).StartAimMode(0f, true); m_endingDirection = ((CharacterModSkillState)this).GetAimRayDirectionXZ(); ((EntityState)this).characterDirection.moveVector = m_endingDirection; ((CharacterModSkillState)this).PlaySkillAnimation(m_endAnimName, 0f, 0, true, true); } private bool ShouldStopMoving() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) Collider[] source = CollectEnemies(1f, ((EntityState)this).transform.position, groundedMaxYDiff); source.Where((Collider x) => (Object)(object)((Component)x).GetComponent<HurtBox>() != (Object)null); return source.Where((Collider x) => ((Component)x).GetComponent<HurtBox>().teamIndex != ((EntityState)this).teamComponent.teamIndex).Count() > 0; } private bool ApplyDamage(float collisionRadius, float damageMult, uint hitSoundID, bool showSwingFX) { //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0046: 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) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) bool result = false; if (showSwingFX) { Vector3 aimRayDirection = ((CharacterModSkillState)this).GetAimRayDirection(); aimRayDirection.y = 0f; Vector3 position = ((EntityState)this).transform.position; Quaternion val = Quaternion.LookRotation(aimRayDirection, Vector3.up) * Quaternion.Euler(0f, 0f, (float)Random.Range(0, 360)); MainPlugin.SpawnFX(BaseAssets.PrimaryAttackFX, position, val, 2f).transform.SetParent(((EntityState)this).transform); } Collider[] array = CollectEnemies(collisionRadius, ((EntityState)this).transform.position + ((EntityState)this).characterDirection.forward * groundedForwardOffset, groundedMaxYDiff); if (ColliderDamage(array, damageMult, groundedCoef)) { MainPlugin.PlaySoundEvent(((Component)((EntityState)this).characterBody).gameObject, hitSoundID, 100); result = true; } return result; } private Collider[] CollectEnemies(float radius, Vector3 position, float maxYDiff) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) LayerIndex entityPrecise = LayerIndex.entityPrecise; return (from x in Physics.OverlapSphere(position, radius, LayerMask.op_Implicit(((LayerIndex)(ref entityPrecise)).mask)) where Mathf.Abs(x.ClosestPoint(((EntityState)this).transform.position).y - ((EntityState)this).transform.position.y) <= maxYDiff select x).ToArray(); } private bool ColliderDamage(Collider[] array, float damageMulti, float coeff) { //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Expected O, but got Unknown //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_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_0159: 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_0162: 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) IEnumerable<Collider> enumerable = array.Where((Collider x) => (Object)(object)((Component)x).GetComponent<HurtBox>() != (Object)null); List<HurtBoxGroup> list = new List<HurtBoxGroup>(); foreach (Collider item in enumerable) { HurtBox hurtBox2 = ((Component)item).GetComponentInChildren<HurtBox>(); if (!((Object)(object)hurtBox2 == (Object)null) && !((Object)(object)hurtBox2.healthComponent == (Object)(object)((EntityState)this).healthComponent) && list.Where((HurtBoxGroup x) => (Object)(object)x == (Object)(object)hurtBox2.hurtBoxGroup).Count() <= 0 && (hurtBox2.teamIndex != ((EntityState)this).teamComponent.teamIndex || (int)FriendlyFireManager.friendlyFireMode != 0)) { _ = hurtBox2; list.Add(hurtBox2.hurtBoxGroup); DamageInfo val = new DamageInfo(); val.damage = ((BaseState)this).damageStat * damageMulti; val.attacker = ((EntityState)this).gameObject; val.procCoefficient = coeff; val.position = ((Component)hurtBox2).transform.position; val.crit = ((BaseState)this).RollCrit(); ((CharacterModSkillState)this).GetNetworkHandler().ApplyDamageNetworked(val, ((Component)hurtBox2.healthComponent).gameObject); Vector3 val2 = hurtBox2.collider.ClosestPoint(((EntityState)this).transform.position); MainPlugin.SpawnFX(BaseAssets.HitFX, val2, Quaternion.identity, 1f); } } if (list == null) { return false; } return list.Count() > 0; } public override void OnExit() { if (((EntityState)this).isAuthority) { ((CharacterModSkillState)this).PlaySkillAnimation("Idle", 0.15f, 0, true, true); ((CharacterModSkillState)this).RemoveGravityDisableCounter(); BonusStatHandler bonusStatHandler = ((CharacterModSkillState)this).GetBonusStatHandler(); string text = "ShiningSwordAttackBonus"; bonusStatHandler.RemoveBonusStatBundle(ref text); } ((MonoBehaviour)((CharacterModSkillState)this).GetCharacterModelSwap()).Invoke("ResetLockHipPosition", 0.15f); m_swordHandler.SheatheSword(); ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)0; } } public class BurningAttackSkill : CharacterModSkillState { public static string SkillName = "Burning Attack"; public const string ProjectileName = "BurningAttackProjectile"; public const string ProjectileNameInvisibleBurn = "BurningAttackProjectileInvisibleBurn"; public const float ProjectileCollisionRadius = 0.9f; public const float ProjectileExplosionCollisionRadius = 10f; public const float kiblastBaseDamageMult = 17f; public float kiblastProjectileSpeed = 140f; public float kiblastCoeff = 1f; public float SkillDuration = 2.25f; public float FireSkillTime = 1.5f; public const int BaseKiCost = 50; private bool m_hasFired; private bool m_hasTriggeredVoice; private string m_skillAnimationName = "BurningAttack_Skill_0"; public static string GetSkillDescription() { return string.Format(MainPlugin.CreateKiCostDescription(50.ToString()) + "\nPerform a series of rapid arm movements, firing a flaming explosive ball of energy! \nExplodes on hit, Dealing " + MainPlugin.CreateDamageDescription(GetDisplayBaseDamage()) + "!\n"); } public static string GetDisplayBaseDamage() { return 1700f.ToString(); } public override void OnEnter() { //IL_0056: Unknown result type (might be due to invalid IL or missing references) ((CharacterModSkillState)this).OnEnter(); if (((EntityState)this).isAuthority) { base.m_canBeStunned = false; base.m_allowHover = true; ((CharacterModSkillState)this).PlaySkillAnimation(m_skillAnimationName, 0.1f, 1, true, true); ((BaseState)this).StartAimMode(SkillDuration, true); base.m_characterModelSwap.SetLockHipPosition(true, new Vector3(0f, 1.1f, 0f), true); ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, TrunksSounds.trx_burningattack_start, 100, false); ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, TrunksSounds.trx_burningattack_start_voice, 40, true); } } public override void FixedUpdate() { //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_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_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (!m_hasTriggeredVoice && ((EntityState)this).fixedAge > FireSkillTime - 0.5f) { m_hasTriggeredVoice = true; ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, TrunksSounds.trx_burningattack_ready, 100, false); ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, TrunksSounds.trx_burningattack_voices, 50, true); } if (!((EntityState)this).isAuthority) { return; } if (!m_hasFired) { Vector3 aimRayDirection = ((CharacterModSkillState)this).GetAimRayDirection(); aimRayDirection = MainPlugin.RotateAroundPoint(Vector3.zero, aimRayDirection, Quaternion.Euler(new Vector3(0f, 180f, 0f))); base.m_characterModelSwap.SetChestTargetLookAt(((EntityState)this).transform.position + aimRayDirection * 10f); if (((EntityState)this).fixedAge > FireSkillTime) { FireProjectile(); m_hasFired = true; } ((CharacterModSkillState)this).ProcessMainStateMovement(true); } else { ((EntityState)this).characterDirection.moveVector = ((CharacterModSkillState)this).GetAimRayDirection(); ((EntityState)this).characterMotor.velocity = Vector3.zero; } if (((EntityState)this).fixedAge >= SkillDuration) { ((EntityState)this).outer.SetNextStateToMain(); } } private void FireProjectile() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, TrunksSounds.trx_shiningswordslash_fireblast, 100, false); MainPlugin.CreateCameraShake(((EntityState)this).transform.position, 0.25f, 50f, 1f, 180f, 0f, true); FireProjectile("BurningAttackProjectile", ((BaseState)this).damageStat * 17f, 1f, canCrit: true); for (int i = 0; i < 9; i++) { FireProjectile("BurningAttackProjectileInvisibleBurn", 0f, 0f, canCrit: false); } } private void FireProjectile(string projectileName, float damage, float force, bool canCrit) { //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_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) Vector3 rightHandBonePosition = ((CharacterModSkillState)this).GetRightHandBonePosition(); Quaternion val = Util.QuaternionSafeLookRotation(((CharacterModSkillState)this).GetAimRayDirection()); GameObject projectilePrefab = ProjectileCatalog.GetProjectilePrefab(ProjectileCatalog.FindProjectileIndex(projectileName)); if ((Object)(object)projectilePrefab != (Object)null) { ProjectileManager.instance.FireProjectile(projectilePrefab, rightHandBonePosition, val, ((EntityState)this).gameObject, damage, force, canCrit && Util.CheckRoll(((BaseState)this).critStat, ((EntityState)this).characterBody.master), (DamageColorIndex)0, (GameObject)null, kiblastProjectileSpeed, (DamageTypeCombo?)null); } } public override void OnExit() { //IL_0021: 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_003a: Unknown result type (might be due to invalid IL or missing references) if (((EntityState)this).isAuthority) { ((CharacterModSkillState)this).PlaySkillAnimation("UpperIdle", 0.1f, 1, true, true); base.m_characterModelSwap.SetChestTargetLookAt(Vector3.zero); base.m_characterModelSwap.SetLockHipPosition(false, default(Vector3), true); } ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)9; } public static void SetupBurningAttackProjectile() { GameObject val = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("prefabs/projectiles/MageLightningBombProjectile"), "BurningAttackProjectile"); OnProjectileDestroyComponent obj = val.AddComponent<OnProjectileDestroyComponent>(); obj.cameraShakeOnDestroy = true; obj.shakeDuration = 1.1f; obj.shakeRadius = 150f; obj.shakeAmplitude = 2f; obj.shakeDecayAmplitude = true; obj.shakeFrequency = 180f; obj.SoundIDToPlayOnDestroy = BaseSounds.explosion_0; obj.ExplosionFX = TrunksAssets.BurningAttackExplosionFX; MainPlugin.s_projectileRegistrationManager.InitProjectileImpactData(ref val, false, 0.9f, 10f, true, true); MainPlugin.s_projectileRegistrationManager.CreateNewProjectile("BurningAttackProjectile", (DamageType)128, val, TrunksAssets.BurningAttackProjectileGO, BaseAssets.BlankGO); } public static void SetupBurningAttackProjectile_InvisibleBurn() { GameObject val = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("prefabs/projectiles/MageLightningBombProjectile"), "BurningAttackProjectileInvisibleBurn"); OnProjectileDestroyComponent obj = val.AddComponent<OnProjectileDestroyComponent>(); obj.cameraShakeOnDestroy = false; obj.SoundIDToPlayOnDestroy = 0u; obj.ExplosionFX = null; MainPlugin.s_projectileRegistrationManager.InitProjectileImpactData(ref val, false, 0.9f, 10f, true, true); MainPlugin.s_projectileRegistrationManager.CreateNewProjectile("BurningAttackProjectileInvisibleBurn", (DamageType)128, val, BaseAssets.BlankGO, BaseAssets.BlankGO); } } public class SwiftMassacreSkill : CharacterModSkillState { private struct DamageRequest { public HurtBox hurtbox; public int timesHit; } private SwordHandler m_swordHandler; private string StartAnimationStateName = "Unsheathe"; private string EndAnimationStateName = "Sheathe"; public const string SkillName = "Swift Massacre"; public const float SkillDamageMult = 14f; public const float SkillDamagePerExtraHitMult = 1.2f; public const float SkillStartupTime = 0.3f; public const float SkillEndDuration = 0.6f; public const float SkillRange = 30f; private const float SkillDuration = 2f; private const float BonusSkillDuration = 1f; public const float BaseKiCost = 100f; public const float KiDrainPerSecond = 80f; private List<HurtBox> m_enemyList = new List<HurtBox>(); private const float m_baseAttackTimerMax = 0.16f; private float m_attackTimerMax = 0.16f; private float m_attackTimer; private bool m_attackingComplete; private bool m_successfulEnd; private float m_bonusDuration; private float m_timeCompleted; private float m_stunTimer; private const float m_stunTimerMax = 0.8f; private int m_targetsHit; private bool m_targetIncremented; private Vector3 m_startingPosition = Vector3.zero; private int m_maxNumberOfAttacks; private int m_numberOfAttacksPerTarget = 1; private int m_numberOfAttacksHit; private bool m_attackingStarted; private bool m_successfulStart; private DynamicArray<DamageRequest> m_damageRequests = new DynamicArray<DamageRequest>(); private LightSwordHandler m_lightSwordHandler; public static string GetSkillDescription() { return string.Format(MainPlugin.CreateKiCostDescription(100f.ToString("n0")) + "\nVanish at light speed and swiftly strike nearby enemies in front dealing " + MainPlugin.CreateDamageDescription(GetDisplayBaseDamage()) + "!\n" + MainPlugin.ColorText("Additional Damage is dealt when the same target is hit more than once.", "#03f4fc") + "\n" + MainPlugin.ColorText("Duration can be extended at the cost of ", "#03f4fc") + MainPlugin.ColorText(80f.ToString("n0") + " Ki", "#03bcff") + MainPlugin.ColorText(" per second!", "#03f4fc") + "\n" + MainPlugin.ColorText("The number of strikes scales off attack speed.", "#999999")); } public static string GetDisplayBaseDamage() { return 1400f.ToString(); } private void FindMoreTargets() { m_enemyList.AddRange(CollectEnemies(30f)); } public override void OnEnter() { ((CharacterModSkillState)this).OnEnter(); m_swordHandler = ((EntityState)this).GetComponent<SwordHandler>(); m_lightSwordHandler = ((EntityState)this).GetComponent<LightSwordHandler>(); if ((Object)(object)m_swordHandler != (Object)null) { m_swordHandler.HoldSword(); } if (!((EntityState)this).isAuthority) { ((MonoBehaviour)base.m_characterModelSwap).Invoke("AddHideBodyCounter", 0f); } if (((EntityState)this).isAuthority) { m_attackTimerMax /= ((EntityState)this).characterBody.attackSpeed; m_maxNumberOfAttacks = Mathf.FloorToInt(2f / m_attackTimerMax); ((CharacterModSkillState)this).PlaySkillAnimation(StartAnimationStateName, 0.1f, 1, true, true); base.m_canBeStunned = false; } } private void CalculateNumberOfAttacksPerTarget() { m_numberOfAttacksPerTarget = Mathf.FloorToInt((float)(m_maxNumberOfAttacks / m_enemyList.Count)); MainPlugin.DebugLog("CalculateNumberOfAttacksPerTarget(); m_numberOfAttacksPerTarget = " + m_numberOfAttacksPerTarget); } private float GetTotalDuration() { return 2.3f + m_bonusDuration; } public override void Update() { //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).Update(); if (!((EntityState)this).isAuthority) { return; } if (!m_attackingComplete) { UpdateAttackingActive(); } else if (((EntityState)this).fixedAge > m_timeCompleted + 0.6f) { ((EntityState)this).outer.SetNextStateToMain(); } if (m_stunTimer <= 0f) { m_stunTimer = 0.8f; for (int i = 0; i < m_targetsHit; i++) { if (i < m_damageRequests.GetCount()) { StunEnemy(m_damageRequests.AccessElement(i).hurtbox); } } } else { m_stunTimer -= Time.deltaTime; } if (((EntityState)this).fixedAge < 0.3f || m_attackingComplete || !m_successfulStart) { ((CharacterModSkillState)this).ProcessMainStateMovement(true); } else { ((EntityState)this).characterMotor.velocity = Vector3.zero; } } private void OnAttackAttemptStarted() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) m_startingPosition = ((EntityState)this).transform.position; FindMoreTargets(); if (m_enemyList.Count > 0) { m_successfulStart = true; CalculateNumberOfAttacksPerTarget(); base.m_characterModelSwap.AddHideBodyCounter(); ((CharacterModSkillState)this).EnableCollisions(false); } if (m_successfulStart) { ((CharacterModSkillState)this).GetNetworkHandler().ApplyBuffNetworked(((Component)((EntityState)this).characterBody).gameObject, Buffs.HiddenInvincibility.buffIndex, 2.6f); ((CharacterModSkillState)this).AddGravityDisableCounter(); ((CharacterModSkillState)this).ResetMainStateMovement(); } } private void UpdateAttackingActive() { //IL_0384: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: 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_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0158: 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_0190: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) if (((EntityState)this).fixedAge >= 0.3f && ((EntityState)this).fixedAge < GetTotalDuration()) { if (!m_attackingStarted) { m_attackingStarted = true; OnAttackAttemptStarted(); } if (m_successfulStart) { if (m_attackTimer <= 0f) { if (m_enemyList.Count > 0) { HurtBox enemyHurtBox = m_enemyList[0]; if ((Object)(object)enemyHurtBox != (Object)null && enemyHurtBox.healthComponent.alive) { ((BaseCharacterController)((EntityState)this).characterMotor).Motor.SetPosition(((Component)enemyHurtBox).transform.position, !MainPlugin.IsInStage("bazaar")); Wave val = default(Wave); val.amplitude = 0.1f; val.frequency = 50f; val.cycleOffset = 0f; Wave val2 = val; ShakeEmitter.CreateSimpleShakeEmitter(((EntityState)this).transform.position, val2, 0.1f, 50f, true); ((CharacterModSkillState)this).GetNetworkHandler().SpawnFXNetworked(BaseAssets.HitFX, ((Component)enemyHurtBox).transform.position, Quaternion.identity, 1f, -1f, false); MainPlugin.SpawnFX(BaseAssets.HitFX, ((Component)enemyHurtBox).transform.position, Quaternion.identity, 1f); float num = Random.Range(0, 360); ((CharacterModSkillState)this).GetNetworkHandler().SpawnFXNetworked(BaseAssets.PrimaryAttackFX, ((Component)enemyHurtBox).transform.position, Quaternion.Euler(num, num, num), 1f, -1f, false); MainPlugin.SpawnFX(BaseAssets.PrimaryAttackFX, ((Component)enemyHurtBox).transform.position, Quaternion.Euler(num, num, num), 1f); ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, TrunksSounds.trx_sword_hits, 100, false); m_numberOfAttacksHit++; if (m_damageRequests != null) { int num2 = m_damageRequests.FindFirstElementIndex((Predicate<DamageRequest>)((DamageRequest x) => (Object)(object)x.hurtbox.hurtBoxGroup == (Object)(object)enemyHurtBox.hurtBoxGroup)); if (num2 == -1) { DamageRequest damageRequest = default(DamageRequest); damageRequest.hurtbox = enemyHurtBox; damageRequest.timesHit = 1; m_damageRequests.AddElement(damageRequest); } else { m_damageRequests.AccessElement(num2).timesHit++; } } if (!m_targetIncremented) { m_targetsHit++; m_targetIncremented = true; ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, BaseSounds.dodges, 100, false); } if (m_numberOfAttacksHit > m_numberOfAttacksPerTarget) { m_enemyList.RemoveAt(0); m_numberOfAttacksHit = 0; m_targetIncremented = false; } if ((Object)(object)m_lightSwordHandler != (Object)null) { m_lightSwordHandler.BoostLightCharge_Minor(); } m_attackTimer = m_attackTimerMax; m_stunTimer = 0f; } else { m_enemyList.RemoveAt(0); } } } else { m_attackTimer -= Time.deltaTime; } } } if (m_successfulStart && ((EntityState)this).inputBank.skill4.down && (m_enemyList.Count == 0 || ((EntityState)this).fixedAge >= GetTotalDuration())) { FindMoreTargets(); if (m_enemyList.Count > 0) { m_bonusDuration += 1f; CalculateNumberOfAttacksPerTarget(); ((CharacterModSkillState)this).GetNetworkHandler().ApplyBuffNetworked(((Component)((EntityState)this).characterBody).gameObject, Buffs.HiddenInvincibility.buffIndex, 1f); } } if (m_bonusDuration > 0f) { ((CharacterModSkillState)this).GetKiHandler().AddCurrentKi(-80f * Time.deltaTime); } if (((EntityState)this).fixedAge > GetTotalDuration() || (((EntityState)this).fixedAge > 0.3f && (m_enemyList.Count == 0 || !m_successfulStart)) || ((CharacterModSkillState)this).GetKiHandler().GetCurrentKi() == 0f || (m_bonusDuration > 0f && !((EntityState)this).inputBank.skill4.down)) { m_attackingComplete = true; OnSkillEnd(); } } public override void OnExit() { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).OnExit(); if ((Object)(object)m_swordHandler != (Object)null) { if (!((EntityState)this).isAuthority || m_successfulStart) { MainPlugin.SpawnFX(TrunksAssets.LightSwordActivation, m_swordHandler.GetHeldSwordGO().transform.position, Quaternion.identity, 2f).transform.SetParent(m_swordHandler.GetSheathedSwordGO().transform, true); } m_swordHandler.SheatheSword(); } ((MonoBehaviour)base.m_characterModelSwap).CancelInvoke("AddHideBodyCounter"); base.m_characterModelSwap.RemoveHideBodyCounter(); if (!((EntityState)this).isAuthority) { return; } for (int i = 0; i < m_targetsHit; i++) { if (i < m_damageRequests.GetCount() && (Object)(object)m_damageRequests.AccessElement(i).hurtbox != (Object)null) { DamageEnemy(m_damageRequests.AccessElement(i).hurtbox, 14f + (float)(m_damageRequests.AccessElement(i).timesHit - 1) * 1.2f, 1f); } } if (!m_successfulEnd) { ((CharacterModSkillState)this).RemoveGravityDisableCounter(); if (m_successfulStart) { ((BaseCharacterController)((EntityState)this).characterMotor).Motor.SetPosition(m_startingPosition, false); } } ((CharacterModSkillState)this).PlaySkillAnimation("UpperIdle", 0.15f, 1, true, true); ((CharacterModSkillState)this).PlaySkillAnimation("Idle", 0.15f, 0, true, true); ((CharacterModSkillState)this).EnableCollisions(true); } private void OnSkillEnd() { //IL_0043: Unknown result type (might be due to invalid IL or missing references) ((MonoBehaviour)base.m_characterModelSwap).CancelInvoke("AddHideBodyCounter"); base.m_characterModelSwap.RemoveHideBodyCounter(); if (((EntityState)this).isAuthority) { if (m_successfulStart && !MainPlugin.IsInStage("bazaar")) { ((BaseCharacterController)((EntityState)this).characterMotor).Motor.SetPosition(m_startingPosition, false); } ((CharacterModSkillState)this).PlaySkillAnimation(EndAnimationStateName, 0.1f, 1, true, true); m_timeCompleted = ((EntityState)this).fixedAge; if (m_successfulStart) { ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, BaseSounds.dodges, 100, false); ((CharacterModSkillState)this).RemoveGravityDisableCounter(); } } m_successfulEnd = true; } private List<HurtBox> CollectEnemies(float radius) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0017: 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_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: 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_0103: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) List<HurtBox> list = new List<HurtBox>(); Vector3 val = m_startingPosition + ((CharacterModSkillState)this).GetAimRayDirection() * 30f / 2f; LayerIndex entityPrecise = LayerIndex.entityPrecise; IEnumerable<Collider> enumerable = from x in Physics.OverlapSphere(val, radius, LayerMask.op_Implicit(((LayerIndex)(ref entityPrecise)).mask)) where (Object)(object)((Component)x).GetComponent<HurtBox>() != (Object)null where ((Component)x).GetComponent<HurtBox>().healthComponent.alive select x; List<HurtBoxGroup> list2 = new List<HurtBoxGroup>(); foreach (Collider item in enumerable) { HurtBox hurtBox2 = ((Component)item).GetComponentInChildren<HurtBox>(); if (!((Object)(object)hurtBox2 == (Object)null) && !((Object)(object)hurtBox2.healthComponent == (Object)(object)((EntityState)this).healthComponent) && list2.Where((HurtBoxGroup x) => (Object)(object)x == (Object)(object)hurtBox2.hurtBoxGroup).Count() <= 0 && (hurtBox2.teamIndex != ((EntityState)this).teamComponent.teamIndex || (int)FriendlyFireManager.friendlyFireMode != 0)) { list2.Add(hurtBox2.hurtBoxGroup); list.Add(hurtBox2); } } return list; } private void StunEnemy(HurtBox hurtBox) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //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_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)hurtBox != (Object)null && hurtBox.healthComponent.alive) { DamageInfo val = new DamageInfo(); val.damage = 0f; val.attacker = ((EntityState)this).gameObject; val.procCoefficient = 1f; val.position = ((Component)hurtBox).transform.position; val.crit = false; val.damageType = DamageTypeCombo.op_Implicit((DamageType)32); ((CharacterModSkillState)this).GetNetworkHandler().ApplyDamageNetworked(val, ((Component)hurtBox.healthComponent).gameObject); } } private void DamageEnemy(HurtBox hurtBox, float damageMulti, float coeff) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown //IL_004a: 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_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_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: 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_00a0: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)hurtBox != (Object)null && hurtBox.healthComponent.alive) { DamageInfo val = new DamageInfo(); val.damage = ((BaseState)this).damageStat * damageMulti; val.attacker = ((EntityState)this).gameObject; val.procCoefficient = coeff; val.position = ((Component)hurtBox).transform.position; val.crit = ((BaseState)this).RollCrit(); val.damageType = DamageTypeCombo.op_Implicit((DamageType)0); ((CharacterModSkillState)this).GetNetworkHandler().ApplyDamageNetworked(val, ((Component)hurtBox.healthComponent).gameObject); Vector3 val2 = hurtBox.collider.ClosestPoint(((EntityState)this).transform.position); MainPlugin.SpawnFX(BaseAssets.HitFX, val2, Quaternion.identity, 1f); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)9; } } public class ChangeTheFutureSkill : CharacterModSkillState { public static string SkillName = "Change The Future"; public const float SkillDamageMult = 10f; public float SkillDuration = 1f; public float FireSkillTime = 0.2f; private float m_skillCollisionRadius = 10f; private float m_skillForwardOffset = 3f; private float m_skillCoeff = 1f; public const int BaseKiCost = 100; private bool m_hasFired; private string m_skillAnimationName = "ChangeTheFuture_Skill_0"; private Vector3 m_startingDirection; public static string GetSkillDescription() { return string.Format(MainPlugin.CreateKiCostDescription(100.ToString()) + "\nQuickly fire a large explosion! \nDamaging all enemies in front, Dealing " + MainPlugin.CreateDamageDescription(GetDisplayBaseDamage()) + "!\n"); } public static string GetDisplayBaseDamage() { return 1000f.ToString(); } public override void OnEnter() { //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0064: 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_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) ((CharacterModSkillState)this).OnEnter(); if (((EntityState)this).isAuthority) { base.m_canBeStunned = false; ((CharacterModSkillState)this).PlaySkillAnimation(m_skillAnimationName, 0.1f, 0, true, true); ((BaseState)this).StartAimMode(SkillDuration, true); base.m_characterModelSwap.SetLockHipPosition(true, new Vector3(0f, 1.1f, 0f), true); ((CharacterModSkillState)this).AddGravityDisableCounter(); ((EntityState)this).characterDirection.moveVector = ((CharacterModSkillState)this).GetAimRayDirection(); m_startingDirection = ((CharacterModSkillState)this).GetAimRayDirectionXZ(); } MainPlugin.PlaySoundEvent(((EntityState)this).gameObject, BaseSounds.prepare_move_0, 100); } public override void FixedUpdate() { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority) { ((EntityState)this).characterMotor.velocity = Vector3.zero; if (!m_hasFired && ((EntityState)this).fixedAge > FireSkillTime) { FireBlast(); m_hasFired = true; } if (((EntityState)this).fixedAge >= SkillDuration) { ((EntityState)this).outer.SetNextStateToMain(); } } } private void FireBlast() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0049: 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_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_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_00bb: Unknown result type (might be due to invalid IL or missing references) ApplyDamage(); Vector3 val = ((CharacterModSkillState)this).GetRightHandBonePosition() + m_startingDirection * m_skillForwardOffset; ((CharacterModSkillState)this).GetNetworkHandler().SpawnFXNetworked(TrunksAssets.ChangeTheFuture_Explode_FX, val, Quaternion.identity, 1f, -1f, false); EffectLayer[] componentsInChildren = MainPlugin.SpawnFX(TrunksAssets.ChangeTheFuture_Explode_FX, val, Quaternion.identity, 1f).GetComponentsInChildren<EffectLayer>(); foreach (EffectLayer obj in componentsInChildren) { Vector3 aimRayDirectionXZ = ((CharacterModSkillState)this).GetAimRayDirectionXZ(); obj.OriVelocityAxis = ((Vector3)(ref aimRayDirectionXZ)).normalized; } ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, TrunksSounds.trx_changethefuture_fire, 100, false); ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, TrunksSounds.trx_changethefuture_fire_voices, 70, true); MainPlugin.CreateCameraShake(((EntityState)this).transform.position, 0.75f, 50f, 2f, 180f, 0f, true); } public override void OnExit() { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) if (((EntityState)this).isAuthority) { ((CharacterModSkillState)this).PlaySkillAnimation("Idle", 0.15f, 0, true, true); ((CharacterModSkillState)this).RemoveGravityDisableCounter(); base.m_characterModelSwap.SetLockHipPosition(false, default(Vector3), true); } ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)9; } private void ApplyDamage() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) Collider[] array = CollectEnemies(m_skillCollisionRadius, ((EntityState)this).transform.position + ((EntityState)this).characterDirection.forward * m_skillForwardOffset); if (ColliderDamage(array, 10f, m_skillCoeff)) { ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, BaseSounds.hits_large, 100, false); } } private Collider[] CollectEnemies(float radius, Vector3 position) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) LayerIndex entityPrecise = LayerIndex.entityPrecise; return Physics.OverlapSphere(position, radius, LayerMask.op_Implicit(((LayerIndex)(ref entityPrecise)).mask)); } private bool ColliderDamage(Collider[] array, float damageMulti, float coeff) { //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Expected O, but got Unknown //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_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_0159: 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_0162: 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) IEnumerable<Collider> enumerable = array.Where((Collider x) => (Object)(object)((Component)x).GetComponent<HurtBox>() != (Object)null); List<HurtBoxGroup> list = new List<HurtBoxGroup>(); foreach (Collider item in enumerable) { HurtBox hurtBox2 = ((Component)item).GetComponentInChildren<HurtBox>(); if (!((Object)(object)hurtBox2 == (Object)null) && !((Object)(object)hurtBox2.healthComponent == (Object)(object)((EntityState)this).healthComponent) && list.Where((HurtBoxGroup x) => (Object)(object)x == (Object)(object)hurtBox2.hurtBoxGroup).Count() <= 0 && (hurtBox2.teamIndex != ((EntityState)this).teamComponent.teamIndex || (int)FriendlyFireManager.friendlyFireMode != 0)) { _ = hurtBox2; list.Add(hurtBox2.hurtBoxGroup); DamageInfo val = new DamageInfo(); val.damage = ((BaseState)this).damageStat * damageMulti; val.attacker = ((EntityState)this).gameObject; val.procCoefficient = coeff; val.position = ((Component)hurtBox2).transform.position; val.crit = ((BaseState)this).RollCrit(); ((CharacterModSkillState)this).GetNetworkHandler().ApplyDamageNetworked(val, ((Component)hurtBox2.healthComponent).gameObject); Vector3 val2 = hurtBox2.collider.ClosestPoint(((EntityState)this).transform.position); MainPlugin.SpawnFX(BaseAssets.HitFX, val2, Quaternion.identity, 1f); } } if (list == null) { return false; } return list.Count() > 0; } } public class HeatDomeAttackSkill : BaseBeamChargeSkillState { public const string SkillName = "Heat Dome Attack"; public const float skillBaseDamageMult = 36f; public const float skillChargeAuraDamageMult = 3f; public const float skillChargeAuraRadius = 7f; public const float skillDamagePerChargeMult = 16f; public const float BaseKiCost = 100f; private GameObject m_chargeFX; private ShakeEmitter m_currentShake; private float m_auraDamageTimer; private const float m_auraDamageTimerMax = 0.1f; protected override void InitSkillValues() { //IL_0152: 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_0187: Unknown result type (might be due to invalid IL or missing references) base.m_beamChargeValues.chargeAnimationStateLayer = 0; base.m_beamChargeValues.chargeAnimationStateName = "HeatDomeAttack_Skill_0"; base.m_beamChargeValues.beamMinChargeTime = 1.6f; base.m_beamChargeValues.addBSB = true; base.m_beamChargeValues.bsb_baseArmorAdd = 300f; base.m_beamChargeValues.beamChargeSoundEventID = TrunksSounds.trx_heatdomeattack_charge; base.m_beamChargeValues.chargeFX = null; base.m_beamChargeValues.baseKiDrainPerSecond = 50f; base.m_beamChargeValues.addKiDrainPerSecond = 50f; base.m_beamChargeValues.canMoveDuringCharge = false; base.m_beamChargeValues.canAimDuringCharge = false; base.m_beamFireValuesToSend.beamDuration = 3f; base.m_beamFireValuesToSend.beamBaseRange = 100f; base.m_beamFireValuesToSend.beamBaseRadius = 2.5f; base.m_beamFireValuesToSend.beamRadiusChargeAdd = 3.5f; base.m_beamFireValuesToSend.beamDamageChargeAddMult = 16f; base.m_beamFireValuesToSend.beamBaseDamageMult = 36f; base.m_beamFireValuesToSend.beamCoeff = 1f; base.m_beamFireValuesToSend.beamFX = TrunksAssets.HeatDomeAttackFX; base.m_beamFireValuesToSend.beamFireSoundID = BaseSounds.beam_fire_4; base.m_beamFireValuesToSend.beamFireVoiceSoundID = TrunksSounds.trx_heatdomeattack_fire_voices; base.m_beamFireValuesToSend.fireAnimationStateName = "HeatDomeAttack_Skill_1"; base.m_beamFireValuesToSend.forcedFireDirection = Vector3.up; base.m_beamFireValuesToSend.rotateChestToFiringDirection = false; base.m_beamFireValuesToSend.scaleBeamVisuals = true; base.m_beamFireValuesToSend.sendChargingCameraOffset = true; base.m_beamFireValuesToSend.fireBeamLocation = (EFireBeamLocation)3; } protected override bool ChildCanFireBeam() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) return !Input.GetKey(MainPlugin.Config_UniqueSkillKey.Value); } public static string GetSkillDescription() { return string.Format(MainPlugin.CreateKiCostDescription(100f.ToString("n0")) + "\nGenerate immense power to fire an energy wave upwards, dealing " + MainPlugin.CreateDamageDescription(GetDisplayBaseDamage()) + " per second whilst the blast is active!\nBurn nearby enemies while charging, dealing " + MainPlugin.CreateDamageDescription(GetDisplayChargeAuraDamage()) + " per second!\nConsume additional Ki and increase damage by " + MainPlugin.CreateDamageDescription(GetDisplayDamagePerCharge()) + " and size per second of charging!\n" + MainPlugin.ColorText("Ki consumption gradually increases the longer you charge!", "#03f4fc")); } public static string GetDisplayBaseDamage() { return 3600f.ToString(); } public static string GetDisplayChargeAuraDamage() { return 300f.ToString(); } public static string GetDisplayDamagePerCharge() { return 1600f.ToString(); } public override void OnEnter() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0098: 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) ((BaseBeamChargeSkillState)this).OnEnter(); m_chargeFX = MainPlugin.SpawnFX(TrunksAssets.HeatDomeAttackChargeFX, ((EntityState)this).transform.position, Quaternion.identity, -1f); if (((EntityState)this).isAuthority) { ((CharacterModSkillState)this).m_canBeStunned = false; ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, BaseSounds.prepare_move_0, 100, false); ((CharacterModSkillState)this).GetNetworkHandler().ApplyBuffNetworked(((Component)((EntityState)this).characterBody).gameObject, Buffs.ArmorBoost.buffIndex, base.m_beamChargeValues.beamMinChargeTime); } MainPlugin.PlayVoiceSoundEvent(((EntityState)this).gameObject, TrunksSounds.trx_heatdomeattack_charge_voice, 50); m_currentShake = MainPlugin.CreateCameraShake(((EntityState)this).transform.position, 999f, 100f, 0.2f, 180f, 0f, false); } public override void Update() { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) ((BaseBeamChargeSkillState)this).Update(); if ((Object)(object)m_chargeFX != (Object)null) { m_chargeFX.transform.position = ((EntityState)this).transform.position; } if (((EntityState)this).isAuthority) { ((EntityState)this).characterMotor.velocity = Vector3.zero; base.m_beamFireValuesToSend.customFireBeamLocation = ((EntityState)this).transform.position - new Vector3(0f, 0.5f, 0f); m_auraDamageTimer -= Time.deltaTime; m_auraDamageTimer = Mathf.Clamp(m_auraDamageTimer, 0f, 0.1f); if (m_auraDamageTimer <= 0f) { m_auraDamageTimer = 0.1f; ApplyDamage(7f, 0.3f, 0u); } } } public override void FixedUpdate() { ((BaseBeamChargeSkillState)this).FixedUpdate(); } public override void OnExit() { //IL_0067: Unknown result type (might be due to invalid IL or missing references) ((BaseBeamChargeSkillState)this).OnExit(); if ((Object)(object)m_chargeFX != (Object)null) { Object.Destroy((Object)(object)m_chargeFX, base.m_beamFireValuesToSend.beamDuration + 0.07f); } if ((Object)(object)m_currentShake != (Object)null) { Object.Destroy((Object)(object)m_currentShake); } if (((EntityState)this).isAuthority) { ((CharacterModSkillState)this).GetNetworkHandler().ApplyBuffNetworked(((Component)((EntityState)this).characterBody).gameObject, Buffs.ArmorBoost.buffIndex, base.m_beamFireValuesToSend.beamDuration); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)9; } private void ApplyDamage(float collisionRadius, float damageMult, uint hitSoundID) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) Collider[] array = CollectEnemies(collisionRadius, ((EntityState)this).transform.position); if (ColliderDamage(array, damageMult, 1f)) { MainPlugin.PlaySoundEvent(((Component)((EntityState)this).characterBody).gameObject, hitSoundID, 100); } } private Collider[] CollectEnemies(float radius, Vector3 position) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) LayerIndex entityPrecise = LayerIndex.entityPrecise; return Physics.OverlapSphere(position, radius, LayerMask.op_Implicit(((LayerIndex)(ref entityPrecise)).mask)); } private bool ColliderDamage(Collider[] array, float damageMulti, float coeff) { //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Expected O, but got Unknown //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_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_016a: 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_0173: 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) IEnumerable<Collider> enumerable = array.Where((Collider x) => (Object)(object)((Component)x).GetComponent<HurtBox>() != (Object)null); List<HurtBoxGroup> list = new List<HurtBoxGroup>(); foreach (Collider item in enumerable) { HurtBox hurtBox2 = ((Component)item).GetComponentInChildren<HurtBox>(); if (!((Object)(object)hurtBox2 == (Object)null) && !((Object)(object)hurtBox2.healthComponent == (Object)(object)((EntityState)this).healthComponent) && list.Where((HurtBoxGroup x) => (Object)(object)x == (Object)(object)hurtBox2.hurtBoxGroup).Count() <= 0 && (hurtBox2.teamIndex != ((EntityState)this).teamComponent.teamIndex || (int)FriendlyFireManager.friendlyFireMode != 0)) { _ = hurtBox2; list.Add(hurtBox2.hurtBoxGroup); DamageInfo val = new DamageInfo(); val.damage = ((BaseState)this).damageStat * damageMulti; val.attacker = ((EntityState)this).gameObject; val.procCoefficient = coeff; val.position = ((Component)hurtBox2).transform.position; val.crit = ((BaseState)this).RollCrit(); val.damageType = DamageTypeCombo.op_Implicit((DamageType)160); ((CharacterModSkillState)this).GetNetworkHandler().ApplyDamageNetworked(val, ((Component)hurtBox2.healthComponent).gameObject); Vector3 val2 = hurtBox2.collider.ClosestPoint(((EntityState)this).transform.position); MainPlugin.SpawnFX(BaseAssets.HitFX, val2, Quaternion.identity, 1f); } } if (list == null) { return false; } return list.Count() > 0; } } public class MasenkoSkill : BaseBeamChargeSkillState { public const string SkillName = "Masenko"; public const float beamBaseDamageMult = 18.5f; public static float BaseKiCost = 70f; protected override void InitSkillValues() { //IL_0063: 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) base.m_beamChargeValues.add