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 Vegeta v1.4.3
PlayableVegeta.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; [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("PlayableVegeta")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: AssemblyProduct("PlayableVegeta")] [assembly: AssemblyTitle("PlayableVegeta")] [assembly: AssemblyInformationalVersion("1.0.0+f2f955e7b924cb1b05acd47131e33099e566f8ec")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyVersion("1.0.0.0")] namespace NS_Vegeta; public class MajinHandler : CharacterModComponent { private static bool s_majinModeActive; private static bool s_majinModeRequested; private static bool s_majinModeLost; private static bool s_refuseVoiceDone_0; private static bool s_refuseVoiceDone_1; private static bool s_refuseVoiceDone_2; private static bool s_majinDebuffsDisabled; private bool m_majinModeActive; private readonly int MIN_MASTERY_FOR_MAJIN = 22; private readonly int MAX_MASTERY_FOR_MAJIN = 32; private readonly int MIN_MASTERY_FOR_BREAKOUT = 48; private const string m_firstTimeMajinTransformationStateName = "Majin_Transform_0"; private const string m_majinSufferAnimationStateName = "Majin_Suffer_0"; private const string m_majinBreakoutAnimationStateName = "Majin_Breakout_0"; private TransformationHandler m_transformationHandler; private float m_buttonHeldTimer; private const float MIN_TIME_ACCEPT = 3f; private const float MIN_FADE_VALUE = 0f; private const float MAX_FADE_VALUE = 0.4f; private float m_currentAlphaFadeValue; private float m_targetAlphaFadeValue; private float m_currentAlphaChangeSpeedMult; private float m_timeSpentBlinded; private const string m_bsbName = "MajinBonus"; private float m_sufferTimer; private const float MIN_SUFFER_TIME_DELAY = 20f; private const float MAX_SUFFER_TIME_DELAY = 40f; private uint m_currentMajinBreakoutSoundEvent; public bool GetMajinModeActive() { return m_majinModeActive; } public bool GetsMajinDebuffsDisabled() { return s_majinDebuffsDisabled; } public static void ResetStaticValues() { MainPlugin.DebugLog("MajinHandler::ResetStaticValues() Called"); s_majinModeActive = false; s_majinModeRequested = false; s_majinModeLost = false; s_refuseVoiceDone_0 = false; s_refuseVoiceDone_1 = false; s_refuseVoiceDone_2 = false; s_majinDebuffsDisabled = false; } public override void Init() { m_transformationHandler = ((Component)this).GetComponent<TransformationHandler>(); if ((Object)(object)m_transformationHandler != (Object)null) { if (((NetworkComponent)this).IsAuthority()) { ResetSufferTimer(); } ((CharacterModComponent)this).Init(); } } protected override bool InitUI() { if (UIManager.Get().FindHUDUIElement("UI_Majin") is UI_Majin uI_Majin && uI_Majin.Init(this)) { return true; } return false; } protected override void InternalUpdate() { //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) if (!((NetworkComponent)this).IsAuthority()) { return; } if (MainPlugin.DEBUG_MODE && Input.GetKeyDown((KeyCode)110)) { m_sufferTimer = 0f; } if (CanRequestMajinMode()) { if (!s_majinModeRequested) { s_majinModeRequested = true; MainPlugin.GetPopUpTextHandler().AddNewPopUpText("An evil power tries to control you", false); PopUpTextHandler popUpTextHandler = MainPlugin.GetPopUpTextHandler(); string[] obj = new string[5] { "Hold ", null, null, null, null }; KeyCode value = MainPlugin.Config_TransformKey.Value; obj[1] = ((object)(KeyCode)(ref value)).ToString(); obj[2] = " for "; obj[3] = 3f.ToString("n0"); obj[4] = " seconds to accept it"; popUpTextHandler.AddNewPopUpText(string.Concat(obj), false); } else if (!s_majinModeLost && ((CharacterModComponent)this).IsInMainState()) { if (Input.GetKey(MainPlugin.Config_TransformKey.Value)) { m_buttonHeldTimer += Time.deltaTime; } else { m_buttonHeldTimer = 0f; } } } else if (CanNoLongerRequestMajinMode() && !s_majinModeLost) { s_majinModeLost = true; MainPlugin.GetPopUpTextHandler().AddNewPopUpText("The evil power fades away...", false); } if (m_majinModeActive && !s_majinDebuffsDisabled) { m_sufferTimer -= Time.deltaTime; m_sufferTimer = Mathf.Clamp(m_sufferTimer, 0f, 40f); if (m_sufferTimer == 0f && CanTriggerSuffer()) { if (m_transformationHandler.GetTotalMasteryLevels() > MIN_MASTERY_FOR_BREAKOUT) { s_majinDebuffsDisabled = true; MainPlugin.DebugLog("Majin power debuffs disabled!"); TriggerMajinBreakout(); } else { TriggerSuffer(0.4f, babidiCommand: true); } } } CheckStaticMajinMode(); CheckMajinMode(); } private bool CanTriggerSuffer() { if (((CharacterModComponent)this).CanBeStunned()) { return ((CharacterModComponent)this).GetCharacterBody().healthComponent.alive; } return false; } private void TriggerMajinBreakout() { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Expected O, but got Unknown //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: 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) ((Component)this).GetComponent<NetworkHandler>().PlaySoundNetworked(((Component)this).gameObject, BaseSounds.kicharge_start, 100, false); m_currentMajinBreakoutSoundEvent = MainPlugin.PlaySoundEvent(((Component)this).gameObject, BaseSounds.kicharge_loop, 100); ((Component)this).GetComponent<NetworkHandler>().PlaySoundNetworked(((Component)this).gameObject, VegetaSounds.vgt_majin_reject_FINAL, 100, true); TransformationCutsceneState val = new TransformationCutsceneState(); val.cutsceneTime = 8f; val.forceToGround = true; ((CharacterModComponent)this).GetEntityStateMachine().SetState((EntityState)(object)val); ((Component)this).GetComponent<NetworkHandler>().ApplyBuffNetworked(((Component)this).gameObject, Buffs.Immune.buffIndex, 10f); ((Component)this).GetComponent<NetworkHandler>().PlayAnimationNetworked(((CharacterModComponent)this).GetCharacterDirection(), "Majin_Breakout_0", 0.1f, 0, false); ((Component)this).GetComponent<NetworkHandler>().PlayAnimationNetworked(((CharacterModComponent)this).GetCharacterDirection(), "UpperIdle", 0f, 1, false); MainPlugin.CreateCameraShake(((Component)this).transform.position, 6.3f, 100f, 0.35f, 180f, 0f, false); MainPlugin.SpawnFX(BaseAssets.EmpoweredKiChargeFX, ((Component)this).transform.position, Quaternion.identity, 6.3f); ((MonoBehaviour)this).Invoke("PostMajinBreakout", 6.3f); } private void ResetSufferTimer() { m_sufferTimer = Random.Range(20f, 40f); } private void TriggerSuffer(float fadeInSpeedMult, bool babidiCommand) { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown ResetSufferTimer(); MainPlugin.PlayVoiceSoundEvent(((Component)this).gameObject, VegetaSounds.vgt_majin_pains, 100); if (babidiCommand) { MainPlugin.PlayVoiceSoundEvent(((Component)this).gameObject, VegetaSounds.vgt_babidi_commands, 100); TransformationCutsceneState val = new TransformationCutsceneState(); val.cutsceneTime = 2.1f; val.forceToGround = false; ((CharacterModComponent)this).GetEntityStateMachine().SetState((EntityState)(object)val); ((Component)this).GetComponent<NetworkHandler>().PlayAnimationNetworked(((CharacterModComponent)this).GetCharacterDirection(), ((CharacterModComponent)this).GetCharacterMotor().isGrounded ? "UpperIdle" : "Idle", 0.1f, ((CharacterModComponent)this).GetCharacterMotor().isGrounded ? 1 : 0, false); ((Component)this).GetComponent<NetworkHandler>().PlayAnimationNetworked(((CharacterModComponent)this).GetCharacterDirection(), "Majin_Suffer_0", 0.1f, (!((CharacterModComponent)this).GetCharacterMotor().isGrounded) ? 1 : 0, false); } SetTargetFadeValue(0.4f, fadeInSpeedMult); ((MonoBehaviour)this).Invoke("TryVegetaReject", 3f); } private void TryVegetaReject() { if (!s_refuseVoiceDone_2 && m_transformationHandler.GetTotalMasteryLevels() > Mathf.RoundToInt(Mathf.Lerp((float)MAX_MASTERY_FOR_MAJIN, (float)MIN_MASTERY_FOR_BREAKOUT, 0.9f))) { s_refuseVoiceDone_2 = true; MainPlugin.PlayVoiceSoundEvent(((Component)this).gameObject, VegetaSounds.vgt_majin_reject_2, 100); } else if (!s_refuseVoiceDone_1 && m_transformationHandler.GetTotalMasteryLevels() > Mathf.RoundToInt(Mathf.Lerp((float)MAX_MASTERY_FOR_MAJIN, (float)MIN_MASTERY_FOR_BREAKOUT, 0.7f))) { s_refuseVoiceDone_1 = true; MainPlugin.PlayVoiceSoundEvent(((Component)this).gameObject, VegetaSounds.vgt_majin_reject_1, 100); } else if (!s_refuseVoiceDone_0 && m_transformationHandler.GetTotalMasteryLevels() > Mathf.RoundToInt(Mathf.Lerp((float)MAX_MASTERY_FOR_MAJIN, (float)MIN_MASTERY_FOR_BREAKOUT, 0.4f))) { s_refuseVoiceDone_0 = true; MainPlugin.PlayVoiceSoundEvent(((Component)this).gameObject, VegetaSounds.vgt_majin_reject_0, 100); } } private void PostMajinBreakout() { //IL_002f: 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_004a: Unknown result type (might be due to invalid IL or missing references) ((Component)this).GetComponent<NetworkHandler>().PlaySoundNetworked(((Component)this).gameObject, BaseSounds.transformation, 100, false); MainPlugin.StopSoundEvent(ref m_currentMajinBreakoutSoundEvent); MainPlugin.SpawnFX(VegetaAssets.BigBangAttackExplosionFX, ((Component)this).transform.position, Quaternion.identity, 3f); MainPlugin.CreateCameraShake(((Component)this).transform.position, 2.5f, 100f, 0.65f, 180f, 0f, true); ((MonoBehaviour)this).Invoke("PostMajinBreakoutMessage", 1.5f); } private void PostMajinBreakoutMessage() { MainPlugin.GetPopUpTextHandler().AddNewPopUpText("The evil vanishes, but the power remains...", false); } private bool CanRequestMajinMode() { if (m_transformationHandler.GetTotalMasteryLevels() > MIN_MASTERY_FOR_MAJIN) { return m_transformationHandler.GetTotalMasteryLevels() < MAX_MASTERY_FOR_MAJIN; } return false; } private bool CanNoLongerRequestMajinMode() { if (m_transformationHandler.GetTotalMasteryLevels() > MAX_MASTERY_FOR_MAJIN) { return !s_majinModeActive; } return false; } private void CheckMajinMode() { if (s_majinModeActive && !m_majinModeActive) { m_majinModeActive = true; OnMajinModeActivated(); } } private void OnMajinModeActivated() { //IL_0044: 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_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_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_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: 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) VegetaCharacterModelSwap vegetaCharacterModelSwap = ((CharacterModComponent)this).GetCharacterModelSwap() as VegetaCharacterModelSwap; if ((Object)(object)vegetaCharacterModelSwap != (Object)null) { vegetaCharacterModelSwap.EnableMajinMark(enable: true); } BonusStatBundle val = default(BonusStatBundle); ((BonusStatBundle)(ref val))..ctor("MajinBonus", (GameObject)null, 0f); BonusStat val2 = new BonusStat("damage", 0f, KingUtil.PercentToMult(50f)); ((BonusStatBundle)(ref val)).AddBonusStat(ref val2); val2 = new BonusStat("armor", 0f, KingUtil.PercentToMult(50f)); ((BonusStatBundle)(ref val)).AddBonusStat(ref val2); val2 = new BonusStat("moveSpeed", 0f, KingUtil.PercentToMult(20f)); ((BonusStatBundle)(ref val)).AddBonusStat(ref val2); val2 = new BonusStat("attackSpeed", 0f, KingUtil.PercentToMult(20f)); ((BonusStatBundle)(ref val)).AddBonusStat(ref val2); ((Component)this).GetComponent<BonusStatHandler>().AddBonusStatBundle(val); ((CharacterModComponent)this).GetCharacterModelSwap().ChangeLoopingAura(VegetaAssets.Aura_Majin_FX, (ETransformationType)1, Vector3.zero); } private void OnMajinFirstActivated() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) TriggerSuffer(0.3f, babidiCommand: false); MainPlugin.PlayVoiceSoundEvent(((Component)this).gameObject, VegetaSounds.vgt_babidi_laugh, 100); TransformationCutsceneState val = new TransformationCutsceneState(); val.cutsceneTime = 4f; val.forceToGround = false; val.lerpingZoomCam = true; ((CharacterModComponent)this).GetEntityStateMachine().SetState((EntityState)(object)val); ((Component)this).GetComponent<NetworkHandler>().PlayAnimationNetworked(((CharacterModComponent)this).GetCharacterDirection(), "Majin_Transform_0", 0.1f, 0, false); ((Component)this).GetComponent<NetworkHandler>().PlayAnimationNetworked(((CharacterModComponent)this).GetCharacterDirection(), "UpperIdle", 0f, 1, false); ((Component)this).GetComponent<NetworkHandler>().ApplyBuffNetworked(((Component)this).gameObject, Buffs.Immune.buffIndex, 4f); MainPlugin.CreateCameraShake(((Component)this).transform.position, 3.8f, 100f, 0.25f, 180f, 0f, false); ((MonoBehaviour)this).Invoke("OnMajinFirstActivatedTransformed", 2.6f); } private void OnMajinFirstActivatedTransformed() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) ((Component)this).GetComponent<NetworkHandler>().PlaySoundNetworked(((Component)this).gameObject, BaseSounds.transformation, 100, false); GameObject val = MainPlugin.SpawnFX(VegetaAssets.AuraStart_Majin_FX, ((Component)this).transform.position, Quaternion.identity, 3f); if (Object.op_Implicit((Object)(object)val)) { val.transform.SetParent(((Component)this).transform.root); } ((MonoBehaviour)this).Invoke("OnMajinFirstActivatedTransformedMessage", 2.5f); } private void OnMajinFirstActivatedTransformedMessage() { MainPlugin.GetPopUpTextHandler().AddNewPopUpText("Majin power gained...", false); MainPlugin.GetPopUpTextHandler().AddNewPopUpText("But at a price...", false); } private void CheckStaticMajinMode() { if (CanTriggerSuffer() && ((CharacterModComponent)this).IsInMainState() && m_buttonHeldTimer > 3f && !s_majinModeActive) { s_majinModeActive = true; OnMajinFirstActivated(); } } private void OnGUI() { if (((NetworkComponent)this).IsAuthority() && MainPlugin.ShowInGameUI) { UpdateMajinActivationUI(); } } private void UpdateMajinActivationUI() { //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_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: 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_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_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: 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_00d2: 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) if (!m_majinModeActive) { return; } m_currentAlphaFadeValue = Mathf.Lerp(m_currentAlphaFadeValue, m_targetAlphaFadeValue, Time.deltaTime * m_currentAlphaChangeSpeedMult); if (m_currentAlphaFadeValue > 0.01f) { Rect val = new Rect(MainPlugin.GetScreenSizeScaled(new Vector2(0f, 0f)), MainPlugin.GetScreenSizeScaled(new Vector2(1f, 1f))); Rect val2 = default(Rect); ((Rect)(ref val2))..ctor(MainPlugin.GetScreenSizeScaled(new Vector2(0f, 0f)), MainPlugin.GetScreenSizeScaled(new Vector2(1f, 1f))); GUI.DrawTexture(val, (Texture)(object)BaseAssets.Black_Background.texture, (ScaleMode)0, true, 0f, new Color(1f, 1f, 1f, m_currentAlphaFadeValue), 0f, 0f); GUI.DrawTexture(val2, (Texture)(object)VegetaAssets.Babidi_Scare.texture, (ScaleMode)2, true, 0f, new Color(1f, 1f, 1f, m_currentAlphaFadeValue), 0f, 0f); } if (m_currentAlphaFadeValue >= 0.3f) { m_timeSpentBlinded += Time.deltaTime; if (m_timeSpentBlinded > 0.5f) { SetTargetFadeValue(0f, 2f); } } else { m_timeSpentBlinded = 0f; } } private void SetTargetFadeValue(float targetValue, float fadeSpeed) { m_targetAlphaFadeValue = targetValue; m_currentAlphaChangeSpeedMult = fadeSpeed; } 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 VegetaCharacterModelSwap : CharacterModelSwapBase { protected Transform m_currentMajinMark; private const string MAJIN_MARK_NAME = "MAJIN_MARK"; protected override GameObject GetCharacterAssetPrefab() { return VegetaAssets.LocalAssetBundle.LoadAsset<GameObject>(VegetaCharacterRegistration.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(VegetaCharacterRegistration.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, VegetaSounds.vgt_vegeta_select, 100); } protected override void InitAdditionalParts(Transform currentSkinTransform) { m_currentMajinMark = MainPlugin.FindTransformRecursive(currentSkinTransform, ((CharacterModelSwapBase)this).GetSkinTransformName() + "_MAJIN_MARK"); EnableMajinMark(enable: false); } public void EnableMajinMark(bool enable) { if ((Object)(object)m_currentMajinMark != (Object)null) { ((Component)m_currentMajinMark).gameObject.SetActive(enable); } } 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 VegetaDuoSkillHandler : DuoSkillHandler { protected override uint GetRequestSoundID() { return VegetaSounds.vgt_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 VegetaNetworkHandler : NetworkComponent { private void UNetVersion() { } 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 VegetaTransformationData : CharacterTransformationData { public override string GetTransformationSkillName(string transformationSkillNameID) { switch (transformationSkillNameID) { case "TSuperSaiyan": return BigBangAttackSkill.SkillName; case "TAscendedSuperSaiyan": return "Final Flash"; case "TSuperSaiyan2": return FinalExplosionSkill.SkillName; case "TSuperSaiyan3": return "Final Flash"; case "TSuperSaiyanGod3": case "TSuperSaiyanGod": return "Prominence Flash"; case "TSuperSaiyanBlue": case "TSuperSaiyanBlue3": return NiagraPummelSkill.SkillName; case "TSuperSaiyanBlueEvolved": case "TSuperSaiyanBlueEvolved3": return FullPowerFinalExplosionSkill.SkillName; case "TSuperSaiyan4": return "Final Shine Attack"; 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_0069: Unknown result type (might be due to invalid IL or missing references) TModifier transformationModifier = ((CharacterTransformationData)this).GetTransformationModifier(); ((TModifier)(ref transformationModifier)).AddElement("m_damagePercentBonus", KingUtil.PercentToMult(10f), 1f); ((TModifier)(ref transformationModifier)).AddElement("m_armorPercentBonus", KingUtil.PercentToMult(10f), 1f); ((TModifier)(ref transformationModifier)).AddElement("m_chargeMultMod", 0.1f, 1f); ((TModifier)(ref transformationModifier)).AddElement("m_totalMasteryLevelsToUnlock", 0f, 1.25f); 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 VegetaTransformationHandler : TransformationHandler { protected override void OnTransformedFirstTime(MainTransformationState mTState) { if (mTState != null) { uint num = 0u; switch (((TransformationState)mTState).GetName()) { case "Super Saiyan": num = VegetaSounds.vgt_first_ssj; break; case "Ascended Super Saiyan": num = VegetaSounds.vgt_first_assj; break; case "Super Saiyan God": num = VegetaSounds.vgt_first_ssg; break; case "Super Saiyan Blue": num = VegetaSounds.vgt_first_ssb; break; case "Super Saiyan Blue Evolved": num = VegetaSounds.vgt_first_ssbe; break; case "Super Saiyan 4": num = VegetaSounds.vgt_first_ssj4; break; } ((CharacterModComponent)this).GetNetworkHandler().PlaySoundNetworked(((Component)this).gameObject, num, 100, true); } } protected override void OnStartTransforming(MainTransformationState mTState) { ((CharacterModComponent)this).GetNetworkHandler().PlaySoundNetworked(((Component)this).gameObject, VegetaSounds.vgt_medium_yell, 100, true); } protected override float GetMasteryTimeExperienceMult() { return ((TransformationHandler)this).GetMasteryTimeExperienceMult() * 2f; } 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 DuoFinalKamehamehaSkill_Vegeta : DuoFinalKamehamehaSkill { private bool spawnedChargeFX; private GameObject m_chargeFX_0; private GameObject m_chargeFX_1; public override void OnEnter() { ((DuoFinalKamehamehaSkill)this).OnEnter(); _ = ((EntityState)this).isAuthority; } public override void Update() { //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) ((DuoFinalKamehamehaSkill)this).Update(); if (!spawnedChargeFX && ((EntityState)this).fixedAge > 2.1f) { spawnedChargeFX = true; SpawnChargeFX(); } if ((Object)(object)m_chargeFX_0 != (Object)null && (Object)(object)m_chargeFX_1 != (Object)null) { m_chargeFX_0.transform.position = ((CharacterModSkillState)this).GetLeftHandBonePosition(); m_chargeFX_1.transform.position = ((CharacterModSkillState)this).GetRightHandBonePosition(); } _ = ((EntityState)this).isAuthority; } public override void OnExit() { ((DuoFinalKamehamehaSkill)this).OnExit(); DestroyChargeFX(); _ = ((EntityState)this).isAuthority; } private void SpawnChargeFX() { //IL_0006: 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) //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) m_chargeFX_0 = MainPlugin.SpawnFX(VegetaAssets.FinalFlashChargeFX, Vector3.zero, Quaternion.identity, -1f); m_chargeFX_1 = MainPlugin.SpawnFX(VegetaAssets.FinalFlashChargeFX, Vector3.zero, Quaternion.identity, -1f); } private void DestroyChargeFX() { if ((Object)(object)m_chargeFX_0 != (Object)null) { EntityState.Destroy((Object)(object)m_chargeFX_0); } if ((Object)(object)m_chargeFX_1 != (Object)null) { EntityState.Destroy((Object)(object)m_chargeFX_1); } } } public class DuoGalickGunSkill_Vegeta : DuoGalickGunSkill { public override void OnEnter() { ((DuoGalickGunSkill)this).OnEnter(); MainPlugin.PlayVoiceSoundEvent(((EntityState)this).gameObject, VegetaSounds.vgt_galickgun_voices, 100); } public override void Update() { ((DuoGalickGunSkill)this).Update(); } public override void OnExit() { ((DuoGalickGunSkill)this).OnExit(); MainPlugin.PlayVoiceSoundEvent(((EntityState)this).gameObject, VegetaSounds.vgt_long_yell, 100); } } public class VegetaMeleeStrikeSkill : MeleeStrikeSkill { public static string GetSkillDescription() { return MeleeStrikeSkill.GetBaseSkillDescription(); } protected override string ConstructMeleeAttackAnimName(int num) { if (num < 10) { return $"VGT_BAS_BONE|VGT_BAS_BONE|VGT_ATC_00{num}|VGT_ATC_00{num}_Layer0"; } return $"VGT_BAS_BONE|VGT_BAS_BONE|VGT_ATC_0{num}|VGT_ATC_0{num}_Layer0"; } protected override uint GetSwingVoiceSoundID(int voiceIdx) { uint result = 0u; switch (voiceIdx) { case 0: result = VegetaSounds.vgt_primary_swing_voices_0; break; case 1: result = VegetaSounds.vgt_primary_swing_voices_1; break; case 2: result = VegetaSounds.vgt_primary_swing_voices_2; break; } return result; } protected override void InitMeleeAttackData() { //IL_0029: 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_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) base.m_meleeAttacks = (NewMeleeAttackData[])(object)new NewMeleeAttackData[6] { new NewMeleeAttackData(((MeleeStrikeSkill)this).ConstructMeleeAttackAnimStateName(0), ((MeleeStrikeSkill)this).ConstructMeleeAttackAnimName(6), 0, BaseSounds.primary_swing_0, 0, 0.33f, 0.15f, false), new NewMeleeAttackData(((MeleeStrikeSkill)this).ConstructMeleeAttackAnimStateName(1), ((MeleeStrikeSkill)this).ConstructMeleeAttackAnimName(7), 0, BaseSounds.primary_swing_1, 1, 0.32f, 0.05f, true), new NewMeleeAttackData(((MeleeStrikeSkill)this).ConstructMeleeAttackAnimStateName(2), ((MeleeStrikeSkill)this).ConstructMeleeAttackAnimName(10), 0, BaseSounds.primary_swing_2, 2, 0.38f, 0.08f, false), new NewMeleeAttackData(((MeleeStrikeSkill)this).ConstructMeleeAttackAnimStateName(3), ((MeleeStrikeSkill)this).ConstructMeleeAttackAnimName(5), 0, BaseSounds.primary_swing_1, 1, 0.3f, 0.15f, true), new NewMeleeAttackData(((MeleeStrikeSkill)this).ConstructMeleeAttackAnimStateName(4), ((MeleeStrikeSkill)this).ConstructMeleeAttackAnimName(3), 0, BaseSounds.primary_swing_0, 0, 0.39f, 0.15f, false), new NewMeleeAttackData(((MeleeStrikeSkill)this).ConstructMeleeAttackAnimStateName(5), ((MeleeStrikeSkill)this).ConstructMeleeAttackAnimName(4), 0, BaseSounds.primary_swing_1, 1, 0.29f, 0.05f, true) }; } protected override void LockHipPosition() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) ((CharacterModSkillState)this).m_characterModelSwap.SetLockHipPosition(true, new Vector3(0f, 0.75f, 0f), true); } } public class ContinuousEnergyBlastSkill : CharacterModSkillState { private string FireAnimationStateName = "ContinuousEnergyBlast_Skill_0"; public const string SkillName = "Continuous Energy Blast"; public const float SkillDamageMult = 1.2f; public const float SkillMinimumDuration = 1f; public const string KiblastProjectileName = "YellowKiBlastProjectile"; public const float ProjectileSpeed = 110f; public const float ProjectileSpread = 2.5f; public const float ProjectileCollisionRadius = 0.8f; private Transform m_handRightBone; private Transform m_handLeftBone; public static float BaseKiCost = 10f; public static float KiCostPerSecond = 18f; private float m_baseAttackTime = 0.22f; private float m_attackTimer; public static string GetSkillDescription() { return string.Format(MainPlugin.CreateKiCostDescription(BaseKiCost.ToString("n0")) + "\nConcentrate and rapidly fire Ki Blasts, Dealing " + MainPlugin.CreateDamageDescription(GetDisplayBaseDamage()) + " with each one!\n" + MainPlugin.ColorText("Holding this skill drains ", "#03f4fc") + MainPlugin.ColorText(KiCostPerSecond + " Ki ", "#03bcff") + MainPlugin.ColorText("per second.", "#03f4fc")); } public static string GetDisplayBaseDamage() { return 120.00001f.ToString(); } private bool HasValidHandBones() { if ((Object)(object)m_handRightBone != (Object)null) { return (Object)(object)m_handLeftBone != (Object)null; } return false; } private Vector3 GetCentreHandsPosition() { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0013: 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) //IL_0032: Unknown result type (might be due to invalid IL or missing references) if (HasValidHandBones()) { return (((Component)m_handRightBone).transform.position + ((Component)m_handLeftBone).transform.position) / 2f; } return Vector3.zero; } private void FireKiblast() { //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_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_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_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_012b: 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_0173: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) Vector3 centreHandsPosition = GetCentreHandsPosition(); Quaternion val = Util.QuaternionSafeLookRotation(((CharacterModSkillState)this).GetAimRayDirection()); val *= Quaternion.Euler(Random.Range(-2.5f, 2.5f), Random.Range(-2.5f, 2.5f), Random.Range(-2.5f, 2.5f)); GameObject projectilePrefab = ProjectileCatalog.GetProjectilePrefab(ProjectileCatalog.FindProjectileIndex("YellowKiBlastProjectile")); if ((Object)(object)projectilePrefab != (Object)null) { ProjectileManager.instance.FireProjectile(projectilePrefab, centreHandsPosition, val, ((EntityState)this).gameObject, ((BaseState)this).damageStat * 1.2f, 1f, Util.CheckRoll(((BaseState)this).critStat, ((EntityState)this).characterBody.master), (DamageColorIndex)0, (GameObject)null, 110f, (DamageTypeCombo?)null); ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((Component)((EntityState)this).characterBody).gameObject, BaseSounds.kiblast_fire, 100, false); } Vector3 aimRayDirection = ((CharacterModSkillState)this).GetAimRayDirection(); aimRayDirection.y = 0f; Quaternion val2 = Quaternion.LookRotation(aimRayDirection, Vector3.up) * Quaternion.Euler(0f, 0f, 0f); ((CharacterModSkillState)this).GetNetworkHandler().SpawnFXNetworked(VegetaAssets.YellowKiBlastFireFX, centreHandsPosition, val2, 1f, -1f, false); MainPlugin.SpawnFX(VegetaAssets.YellowKiBlastFireFX, centreHandsPosition, val2, 1f).transform.SetParent(((EntityState)this).transform); Wave val3 = default(Wave); val3.amplitude = 0.12f; val3.frequency = 50f; val3.cycleOffset = 0f; Wave val4 = val3; ShakeEmitter.CreateSimpleShakeEmitter(((EntityState)this).transform.position, val4, 0.1f, 100f, true); } public override void OnEnter() { ((CharacterModSkillState)this).OnEnter(); if (((EntityState)this).isAuthority) { m_handRightBone = ((EntityState)this).characterDirection.modelAnimator.GetBoneTransform((HumanBodyBones)18); m_handLeftBone = ((EntityState)this).characterDirection.modelAnimator.GetBoneTransform((HumanBodyBones)17); base.m_allowHover = true; base.m_skillAttackSpeedCap = 8f; ((CharacterModSkillState)this).PlaySkillAnimation(FireAnimationStateName, 0f, 1, true, true); ((BaseState)this).StartAimMode(1f, true); m_attackTimer = 0.4f; } } public override void Update() { ((EntityState)this).Update(); if (((EntityState)this).isAuthority) { ((CharacterModSkillState)this).ProcessMainStateMovement(true); if (m_attackTimer <= 0f) { m_attackTimer = m_baseAttackTime / ((EntityState)this).characterBody.attackSpeed; FireKiblast(); ((BaseState)this).StartAimMode(m_attackTimer, true); } else { m_attackTimer -= Time.deltaTime; } ((CharacterModSkillState)this).GetKiHandler().AddCurrentKi((0f - KiCostPerSecond) * Time.deltaTime); if (((CharacterModSkillState)this).GetKiHandler().GetCurrentKi() <= 0f) { ((EntityState)this).outer.SetNextStateToMain(); } } } public override void FixedUpdate() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002a: 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) ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority) { base.m_characterModelSwap.SetChestTargetLookAt(((EntityState)this).transform.position + ((CharacterModSkillState)this).GetAimRayDirection() * 10f); if (((EntityState)this).fixedAge > 1f && !((EntityState)this).inputBank.skill2.down) { ((EntityState)this).outer.SetNextStateToMain(); } } } public override void OnExit() { //IL_002d: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).OnExit(); if (((EntityState)this).isAuthority) { ((CharacterModSkillState)this).PlaySkillAnimation("UpperIdle", 0f, 1, true, true); ((CharacterModSkillState)this).ResetMainStateMovement(); base.m_characterModelSwap.SetChestTargetLookAt(Vector3.zero); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)9; } } public class SledgehammerSkill : CharacterModSkillState { public const string SkillName = "Rising Sledgehammer"; private float m_currentAnimationTime; private const string m_animationStateNameP1 = "Sledgehammer_Skill_0"; private const string m_animationNameP1 = "VGT_BAS_BONE|VGT_BAS_BONE|VGT_ATC_011|VGT_ATC_011_Layer0"; private const string m_animationStateNameP2 = "Sledgehammer_Skill_1"; private const string m_animationNameP2 = "SledgehammerAnim"; private TargetTracker m_targetTracker; private const float m_SkillDamageMult_P1 = 4f; private const float m_SkillDamageMult_P2 = 11f; private const float m_hitRadius = 3.5f; private const float groundedForwardOffset = 1f; private const float groundedMaxYDiff = 3f; private const float groundedCoef = 1f; public const float BaseKiCost = 30f; private const float m_hitTimePercentP1 = 0.33f; private const float m_hitTimePercentP2 = 0.31f; private bool m_p1HitDone; private bool m_p2Started; private bool m_p2HitDone; private List<HurtBox> m_possibleHitTargets = new List<HurtBox>(); private HurtBox m_hitTarget; private float m_p1HitTime; private float m_p2StartTime; private const float m_timeDelayForP2 = 0.4f; private Vector3 m_offsetPositionForP2 = Vector3.zero; private bool m_hadTarget; public static string GetSkillDescription() { return string.Format(MainPlugin.CreateKiCostDescription(30f.ToString()) + "\nStrike and launch enemies upwards, dealing " + MainPlugin.CreateDamageDescription(GetDisplayBaseDamageP1()) + "!\nHolding the button follows-up with an additional downward strike, knocking-down enemies and dealing " + MainPlugin.CreateDamageDescription(GetDisplayBaseDamageP2()) + "!\n"); } public override void OnEnter() { //IL_00de: Unknown result type (might be due to invalid IL or missing references) ((CharacterModSkillState)this).OnEnter(); base.m_animationSpeedMulti = 0.75f; base.m_skillAttackSpeedCap = 3f; if (((EntityState)this).isAuthority) { m_targetTracker = ((EntityState)this).GetComponent<TargetTracker>(); base.m_skillAttackSpeedCap = 3f; ((CharacterModSkillState)this).AddGravityDisableCounter(); m_currentAnimationTime = ((CharacterModSkillState)this).GetAnimationTime("VGT_BAS_BONE|VGT_BAS_BONE|VGT_ATC_011|VGT_ATC_011_Layer0"); ((CharacterModSkillState)this).PlaySkillAnimation("Sledgehammer_Skill_0", 0.1f, 0, true, true); ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, BaseSounds.primary_swing_0, 100, false); ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, VegetaSounds.vgt_primary_swing_voices_1, 80, true); ((CharacterModSkillState)this).TryMoveTowardsTarget(m_targetTracker, 28f, 14f, 10f, true, 0.33f); ((BaseState)this).StartAimMode(m_currentAnimationTime, true); } base.m_characterModelSwap.SetLockHipPosition(true, new Vector3(0f, 0.75f, 0f), true); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); } public override void Update() { //IL_0228: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Unknown result type (might be due to invalid IL or missing references) //IL_0233: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).Update(); if (!((EntityState)this).isAuthority) { return; } if (!m_p1HitDone) { if (((EntityState)this).fixedAge > m_currentAnimationTime * 0.33f) { m_p1HitDone = true; ((CharacterModSkillState)this).EnableCollisions(false); ApplyDamageP1(4f); SpawnSwingFX(270); m_p1HitTime = ((EntityState)this).fixedAge; } } else if (((EntityState)this).fixedAge > m_p1HitTime + 0.4f * (1f / ((EntityState)this).characterBody.attackSpeed)) { if (!m_p2Started) { if (((EntityState)this).inputBank.skill2.down) { m_p2Started = true; m_p2StartTime = ((EntityState)this).fixedAge; foreach (HurtBox possibleHitTarget in m_possibleHitTargets) { if (possibleHitTarget.healthComponent.alive) { m_hitTarget = possibleHitTarget; break; } } if ((Object)(object)m_hitTarget != (Object)null) { float num = Mathf.Pow(m_hitTarget.volume, 0.25f); Vector3 zero = Vector3.zero; m_offsetPositionForP2 = new Vector3(0f, num, 0f) + zero; ((CharacterModSkillState)this).DoTeleport(Vector3.zero, ((Component)m_hitTarget).transform.position + m_offsetPositionForP2, 0f); ((MonoBehaviour)base.m_characterModelSwap).Invoke("RemoveHideBodyCounter", 0.1f); m_currentAnimationTime = ((CharacterModSkillState)this).GetAnimationTime("SledgehammerAnim"); ((CharacterModSkillState)this).PlaySkillAnimation("Sledgehammer_Skill_1", 0.1f, 0, true, true); ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, BaseSounds.primary_swing_2, 100, false); ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, VegetaSounds.vgt_primary_swing_voices_2, 100, true); ((BaseState)this).StartAimMode(m_currentAnimationTime, true); m_hadTarget = true; } } } else if ((Object)(object)m_hitTarget != (Object)null) { if (!m_p2HitDone) { ((BaseCharacterController)((EntityState)this).characterMotor).Motor.SetPosition(((Component)m_hitTarget).transform.position + m_offsetPositionForP2, true); } if (((EntityState)this).fixedAge - m_p2StartTime > m_currentAnimationTime * 0.31f && !m_p2HitDone) { m_p2HitDone = true; ApplyDamageP2(m_hitTarget, 11f); SpawnSwingFX(90); } } } if (!m_p1HitDone) { return; } bool flag = false; if ((Object)(object)m_hitTarget == (Object)null) { if (((EntityState)this).fixedAge > m_currentAnimationTime * 0.9f) { flag = true; } } else if (m_p2Started && m_p2HitDone && ((EntityState)this).fixedAge - m_p2StartTime > m_currentAnimationTime * 0.95f) { flag = true; } if (flag) { ((EntityState)this).outer.SetNextStateToMain(); } } public static string GetDisplayBaseDamageP1() { return 400f.ToString(); } public static string GetDisplayBaseDamageP2() { return 1100f.ToString(); } private void ApplyDamageP1(float dmgMult) { //IL_000c: 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_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) Collider[] array = CollectEnemies(3.5f, ((EntityState)this).transform.position + ((EntityState)this).characterDirection.forward * 1f, 3f); if (ColliderDamage(array, dmgMult, 1f, 1f)) { ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, BaseSounds.hits_medium, 100, false); ((EntityState)this).characterMotor.velocity = Vector3.zero; } } private void ApplyDamageP2(HurtBox hurtBoxToDamage, float dmgMult) { //IL_000c: 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_0087: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) Collider[] array = CollectEnemies(3.5f, ((EntityState)this).transform.position + ((EntityState)this).characterDirection.forward * 1f, 3f); Collider[] array2 = (Collider[])(object)new Collider[array.Length + 1]; array.CopyTo(array2, 0); array2[^1] = ((Component)hurtBoxToDamage).GetComponent<Collider>(); if (ColliderDamage(array2, dmgMult, 1f, -2.5f)) { ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, BaseSounds.hits_large, 100, false); MainPlugin.CreateCameraShake(((EntityState)this).transform.position, 0.5f, 100f, 1f, 180f, 0f, true); ((EntityState)this).characterMotor.velocity = Vector3.zero; } } 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, float yAxisMult) { //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_0125: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: 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_0197: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_01e5: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: 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)32); float num = 2800f; num *= yAxisMult; float mass = ((Component)hurtBox2.healthComponent).GetComponent<Rigidbody>().mass; num *= mass / 100f; if (hurtBox2.healthComponent.body.isChampion) { num = 0f; } val.force = new Vector3(0f, 1f, 0f) * num; ((CharacterModSkillState)this).GetNetworkHandler().ApplyDamageNetworked(val, ((Component)hurtBox2.healthComponent).gameObject); m_possibleHitTargets.Add(hurtBox2); 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; } private void SpawnSwingFX(int rotVal) { //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_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0020: 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_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) 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)rotVal); ((CharacterModSkillState)this).GetNetworkHandler().SpawnFXNetworked(BaseAssets.PrimaryAttackFX, position, val, 2f, -1f, false); MainPlugin.SpawnFX(BaseAssets.PrimaryAttackFX, position, val, 2f).transform.SetParent(((EntityState)this).transform); } public override void OnExit() { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) if (((EntityState)this).isAuthority) { ((CharacterModSkillState)this).PlaySkillAnimation("Idle", 0.1f, 0, true, true); ((CharacterModSkillState)this).RemoveGravityDisableCounter(); } ((CharacterModSkillState)this).EnableCollisions(true); base.m_characterModelSwap.SetLockHipPosition(false, default(Vector3), true); ((EntityState)this).OnExit(); } private void TryGiveKi() { bool flag = false; if ((Object)(object)m_hitTarget != (Object)null) { if (!m_hitTarget.healthComponent.alive) { flag = true; } } else if (m_hadTarget) { flag = true; } if (flag) { ((CharacterModSkillState)this).GetKiHandler().AddCurrentKi(30f); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)0; } } public class GalaxyBreakerSkill : BaseBeamChargeSkillState { public const string SkillName = "Galaxy Breaker"; public const float skillBaseDamageMult = 36f; public const float skillDamagePerChargeMult = 16f; public const float BaseKiCost = 100f; private GameObject m_chargeFX; private GameObject m_chargeFX2; private ShakeEmitter m_currentShake; protected override void InitSkillValues() { //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) base.m_beamChargeValues.chargeAnimationStateName = "GalaxyBreaker_Skill_0"; base.m_beamChargeValues.beamMinChargeTime = 2f; base.m_beamChargeValues.addBSB = true; base.m_beamChargeValues.bsb_baseArmorAdd = 400f; base.m_beamChargeValues.beamChargeSoundEventID = VegetaSounds.vgt_galaxybreaker_charge; base.m_beamChargeValues.beamChargeVoiceSoundEventID = VegetaSounds.vgt_galaxybreaker_charge_voices; 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 = 1.8f; base.m_beamFireValuesToSend.beamBaseRange = 100f; base.m_beamFireValuesToSend.beamBaseRadius = 3.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 = VegetaAssets.GalaxyBreakerFX; base.m_beamFireValuesToSend.beamFireSoundID = VegetaSounds.vgt_galaxybreaker_fire; base.m_beamFireValuesToSend.beamFireVoiceSoundID = VegetaSounds.vgt_long_yell; base.m_beamFireValuesToSend.fireAnimationStateName = "GalaxyBreaker_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() { return !((EntityState)this).inputBank.skill4.down; } 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!\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 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_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) ((BaseBeamChargeSkillState)this).OnEnter(); m_chargeFX = MainPlugin.SpawnFX(BaseAssets.KiChargeFX, ((EntityState)this).transform.position, Quaternion.identity, -1f); m_chargeFX2 = MainPlugin.SpawnFX(VegetaAssets.GalaxyBreakerChargeFX, ((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); } 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_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //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) ((BaseBeamChargeSkillState)this).Update(); if ((Object)(object)m_chargeFX != (Object)null) { m_chargeFX.transform.position = ((EntityState)this).transform.position; KichargeSkill.ModifyKiChargeColor(((CharacterModSkillState)this).GetTransformationHandler(), m_chargeFX); } if ((Object)(object)m_chargeFX2 != (Object)null) { m_chargeFX2.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); } } public override void FixedUpdate() { ((BaseBeamChargeSkillState)this).FixedUpdate(); } public override void OnExit() { ((BaseBeamChargeSkillState)this).OnExit(); if ((Object)(object)m_chargeFX != (Object)null) { EntityState.Destroy((Object)(object)m_chargeFX); } if ((Object)(object)m_chargeFX2 != (Object)null) { EntityState.Destroy((Object)(object)m_chargeFX2); } if ((Object)(object)m_currentShake != (Object)null) { Object.Destroy((Object)(object)m_currentShake); } _ = ((EntityState)this).isAuthority; } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)9; } } public class GalickGunSkill : BaseBeamChargeSkillState { public const string SkillName = "Galick Gun"; public const float skillBaseDamageMult = 15f; public const float skillDamageChargeAddMult = 8f; public const float BaseKiCost = 40f; protected override void InitSkillValues() { //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) base.m_beamChargeValues.chargeAnimationStateName = "GalickGun_Skill_0"; base.m_beamChargeValues.beamMinChargeTime = 1.5f; base.m_beamChargeValues.addBSB = true; base.m_beamChargeValues.bsb_baseArmorAdd = 35f; base.m_beamChargeValues.bsb_multMovementSpeed = 0.5f; base.m_beamChargeValues.beamChargeSoundEventID = BaseSounds.galickgun_charge; base.m_beamChargeValues.beamChargeVoiceSoundEventID = VegetaSounds.vgt_galickgun_voices; base.m_beamChargeValues.chargeFX = VegetaAssets.GalickGunChargeFX; base.m_beamChargeValues.baseKiDrainPerSecond = 15f; base.m_beamChargeValues.addKiDrainPerSecond = 30f; base.m_beamFireValuesToSend.beamDuration = 2f; base.m_beamFireValuesToSend.beamBaseRange = 75f; base.m_beamFireValuesToSend.beamRangePerCharge = 20f; base.m_beamFireValuesToSend.beamBaseRadius = 1.4f; base.m_beamFireValuesToSend.beamRadiusChargeAdd = 0.33f; base.m_beamFireValuesToSend.beamBaseDamageMult = 15f; base.m_beamFireValuesToSend.beamDamageChargeAddMult = 8f; base.m_beamFireValuesToSend.beamCoeff = 1f; base.m_beamFireValuesToSend.beamFX = VegetaAssets.GalickGunFX; base.m_beamFireValuesToSend.beamFireSoundID = VegetaSounds.vgt_galickgun_fire; base.m_beamFireValuesToSend.beamFireVoiceSoundID = VegetaSounds.vgt_long_yell; base.m_beamFireValuesToSend.fireAnimationStateName = "GalickGun_Skill_1"; base.m_beamFireValuesToSend.fireChestRotationOffset = new Vector3(0f, 90f, 0f); } protected override bool ChildCanFireBeam() { return !((EntityState)this).inputBank.skill4.down; } public static string GetSkillDescription() { return string.Format(MainPlugin.CreateKiCostDescription(40f.ToString("n0")) + "\nCharge and unleash a Galick Gun, Dealing " + MainPlugin.CreateDamageDescription(GetDisplayBaseDamage()) + " per second whilst the blast is active! \nConsume additional Ki and increase damage by " + MainPlugin.CreateDamageDescription(GetDisplayDamagePerCharge()) + " per second of charging!\n" + MainPlugin.ColorText("Ki consumption gradually increases the longer you charge!", "#03f4fc")); } public static string GetDisplayBaseDamage() { return 1500f.ToString(); } public static string GetDisplayDamagePerCharge() { return 800f.ToString(); } public override void OnEnter() { ((BaseBeamChargeSkillState)this).OnEnter(); if (((EntityState)this).isAuthority) { ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, BaseSounds.prepare_move_0, 100, false); } } public override void Update() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_002a: 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_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) ((BaseBeamChargeSkillState)this).Update(); if (((EntityState)this).isAuthority) { Vector3 aimRayDirection = ((CharacterModSkillState)this).GetAimRayDirection(); aimRayDirection = MainPlugin.RotateAroundPoint(Vector3.zero, aimRayDirection, Quaternion.Euler(0f, 90f, 0f)); ((CharacterModSkillState)this).m_characterModelSwap.SetChestTargetLookAt(((EntityState)this).transform.position + aimRayDirection * 10f); } } public override void FixedUpdate() { ((BaseBeamChargeSkillState)this).FixedUpdate(); } public override void OnExit() { ((BaseBeamChargeSkillState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)9; } } public class BigBangAttackSkill : CharacterModSkillState { public static string SkillName = "Big Bang Attack"; public const string ProjectileName = "BigBangAttackProjectile"; public const float ProjectileCollisionRadius = 1.25f; public const float ProjectileExplosionCollisionRadius = 10f; public const float kiblastBaseDamageMult = 16f; public float kiblastProjectileSpeed = 100f; public float kiblastCoeff = 1f; public float SkillDuration = 1.8f; private Transform m_handRightBone; private Transform m_handLeftBone; public const int BaseKiCost = 60; private bool m_hasFired; private bool m_hasSpawnedChargeFX; private GameObject m_chargeFX; private bool HasValidHandBones() { if ((Object)(object)m_handRightBone != (Object)null) { return (Object)(object)m_handLeftBone != (Object)null; } return false; } public static string GetSkillDescription() { return string.Format(MainPlugin.CreateKiCostDescription(60.ToString()) + "\nUnleash an explosive ball of energy! \nExplodes on hit, Dealing " + MainPlugin.CreateDamageDescription(GetDisplayBaseDamage()) + "!\n"); } public static string GetDisplayBaseDamage() { return 1600f.ToString(); } public override void OnEnter() { //IL_004b: 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("BigBangAttack_Skill_0", 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(); ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, VegetaSounds.vgt_bigbangattack_start, 100, false); } m_handRightBone = ((EntityState)this).characterDirection.modelAnimator.GetBoneTransform((HumanBodyBones)18); m_handLeftBone = ((EntityState)this).characterDirection.modelAnimator.GetBoneTransform((HumanBodyBones)17); } public override void FixedUpdate() { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_005f: 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_006b: 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_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: 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_00fe: 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_0110: 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) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if ((Object)(object)m_chargeFX != (Object)null && (Object)(object)m_handRightBone != (Object)null) { m_chargeFX.transform.position = m_handRightBone.position; } if (!m_hasSpawnedChargeFX && ((EntityState)this).fixedAge > 0.75f) { m_hasSpawnedChargeFX = true; Vector3 position = m_handRightBone.position; m_chargeFX = MainPlugin.SpawnFX(VegetaAssets.BigBangAttackChargeFX, position, Quaternion.identity, 5f); ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, VegetaSounds.vgt_bigbangattack_charge, 100, false); ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, VegetaSounds.vgt_bigbangattack_voices, 70, true); } if (!((EntityState)this).isAuthority) { return; } ((EntityState)this).characterMotor.velocity = Vector3.zero; if (!m_hasFired) { Vector3 aimRayDirection = ((CharacterModSkillState)this).GetAimRayDirection(); aimRayDirection = MainPlugin.RotateAroundPoint(Vector3.zero, aimRayDirection, Quaternion.Euler(new Vector3(0f, 45f, 0f))); base.m_characterModelSwap.SetChestTargetLookAt(((EntityState)this).transform.position + aimRayDirection * 10f); ((EntityState)this).characterDirection.moveVector = ((CharacterModSkillState)this).GetAimRayDirection(); if (((EntityState)this).fixedAge > SkillDuration * 0.7f) { FireBigBangAttackProjectile(); m_hasFired = true; } } if (((EntityState)this).fixedAge >= SkillDuration) { ((EntityState)this).outer.SetNextStateToMain(); } } private void FireBigBangAttackProjectile() { //IL_0006: 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) //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_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: 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_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) Vector3 position = m_handRightBone.position; Quaternion val = Util.QuaternionSafeLookRotation(((CharacterModSkillState)this).GetAimRayDirection()); GameObject projectilePrefab = ProjectileCatalog.GetProjectilePrefab(ProjectileCatalog.FindProjectileIndex("BigBangAttackProjectile")); if ((Object)(object)projectilePrefab != (Object)null) { ProjectileManager.instance.FireProjectile(projectilePrefab, position, val, ((EntityState)this).gameObject, ((BaseState)this).damageStat * 16f, 1f, Util.CheckRoll(((BaseState)this).critStat, ((EntityState)this).characterBody.master), (DamageColorIndex)0, (GameObject)null, kiblastProjectileSpeed, (DamageTypeCombo?)null); ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, VegetaSounds.vgt_bigbangattack_fire, 100, false); } Vector3 aimRayDirection = ((CharacterModSkillState)this).GetAimRayDirection(); aimRayDirection.y = 0f; Vector3 position2 = m_handRightBone.position; Quaternion val2 = Quaternion.LookRotation(aimRayDirection, Vector3.up) * Quaternion.Euler(0f, 0f, 0f); ((CharacterModSkillState)this).GetNetworkHandler().SpawnFXNetworked(VegetaAssets.YellowKiBlastFireFX, position2, val2, 1f, -1f, false); MainPlugin.SpawnFX(VegetaAssets.YellowKiBlastFireFX, position2, val2, 1f).transform.SetParent(((EntityState)this).transform); MainPlugin.CreateCameraShake(((EntityState)this).transform.position, 0.25f, 50f, 1f, 180f, 0f, true); } public override void OnExit() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) if (((EntityState)this).isAuthority) { ((CharacterModSkillState)this).PlaySkillAnimation("Idle", 0.1f, 0, true, true); base.m_characterModelSwap.SetChestTargetLookAt(Vector3.zero); ((CharacterModSkillState)this).RemoveGravityDisableCounter(); base.m_characterModelSwap.SetLockHipPosition(false, default(Vector3), true); } ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)9; } } public class FinalExplosionSkill : CharacterModSkillState { public static string SkillName = "Final Explosion"; public const float SkillBaseDamageMult = 25f; public float SkillCoeff = 1f; public const float SkillStartTime = 0.55f; public const float SkillExplosionStartTime = 10f; public const float SkillExplosionStartTimeFast = 3f; public const int BaseKiCost = 200; public const float DrainValuePercentPerSecond = 0.4f; private GameObject m_currentChargeFX; private GameObject m_currentExplosionFX; private const float ScaleGrowthPerSecond = 8.3f; private float m_currentScale = 1f; private const float HitTimerMax = 0.1f; private float m_hitTimer; private bool m_explosionStarted; private bool m_skillStarted; private bool m_screamStarted; private bool m_healthDraining; private float m_calculatedDamage; private const float CameraPositionGrowthScale = 1.15f; protected bool m_isLethal = true; protected bool m_fasterMode; protected virtual float GetCalculatedDrainCost() { return 0.4f * ((CharacterModSkillState)this).GetKiHandler().GetMaxKi(); } protected virtual float GetScaleGrowthPerSecond() { return 8.3f; } protected virtual GameObject GetFinalExplosionChargeFX() { return VegetaAssets.FinalExplosionChargeFX; } protected virtual GameObject GetFinalExplosionExplosionFX() { return VegetaAssets.FinalExplosionExplodeFX; } protected virtual float GetSkillBaseDamageMult() { return 25f; } protected virtual float GetCameraPositionGrowthScale() { return 1.15f; } private float GetTotalSkillDuration() { return GetExplosionStartTime() + 7f; } private float GetExplosionDuration() { return GetTotalSkillDuration() - GetExplosionStartTime(); } private float GetExplosionStartTime() { if (!m_fasterMode) { return 10f; } return 3f; } public static string GetSkillDescription() { return string.Format(MainPlugin.CreateKiCostDescription(200.ToString()) + "\nRelease a massively expanding explosion, Dealing " + MainPlugin.CreateDamageDescription(GetDisplayBaseDamage()) + " and\ndraining " + MainPlugin.ColorText(40f.ToString("n0") + "% of Max Ki", "#03bcff") + " per second!\n" + MainPlugin.ColorText("Once Ki reaches 0, Health is drained instead, Can be fatal...", "#FF0000")); } public static string GetDisplayBaseDamage() { return 2500f.ToString(); } public override void OnEnter() { //IL_001c: 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_00e6: Unknown result type (might be due to invalid IL or missing references) //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_0068: Unknown result type (might be due to invalid IL or missing references) ((CharacterModSkillState)this).OnEnter(); base.m_characterModelSwap.SetLockHipPosition(true, new Vector3(0f, 1.1f, 0f), true); if (((EntityState)this).isAuthority) { base.m_canBeStunned = false; ((CharacterModSkillState)this).PlaySkillAnimation("FinalExplosion_Skill_0", 0.1f, 0, true, true); ((CharacterModSkillState)this).AddGravityDisableCounter(); ((CharacterModSkillState)this).GetNetworkHandler().ApplyBuffNetworked(((Component)((EntityState)this).characterBody).gameObject, Buffs.ArmorBoost.buffIndex, GetExplosionStartTime()); m_calculatedDamage = ((BaseState)this).damageStat * GetSkillBaseDamageMult(); ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, BaseSounds.prepare_move_1, 100, false); if (!m_fasterMode) { ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, VegetaSounds.vgt_finalexplosion_speech, 100, true); } } m_currentChargeFX = MainPlugin.SpawnFX(GetFinalExplosionChargeFX(), ((EntityState)this).transform.position + new Vector3(0f, 0.33f, 0f), Quaternion.identity, GetTotalSkillDuration() + 1f); } 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) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority) { ((EntityState)this).characterMotor.velocity = Vector3.zero; ((EntityState)this).characterMotor.rootMotion = Vector3.zero; if (((EntityState)this).fixedAge >= GetTotalSkillDuration()) { ((EntityState)this).outer.SetNextStateToMain(); } } } public override void Update() { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_01f0: Unknown result type (might be due to invalid IL or missing references) //IL_0223: Unknown result type (might be due to invalid IL or missing references) //IL_0237: Unknown result type (might be due to invalid IL or missing references) //IL_023c: Unknown result type (might be due to invalid IL or missing references) //IL_0241: 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) ((EntityState)this).Update(); if (((EntityState)this).isAuthority) { if (m_hitTimer <= 0f) { Collider[] array = CollectEnemies(m_currentScale, ((EntityState)this).transform.position); if (array.Length != 0) { ColliderDamage(array, m_calculatedDamage * 0.1f, SkillCoeff); } if (((EntityState)this).fixedAge > GetExplosionStartTime()) { if (m_healthDraining) { ((CharacterModSkillState)this).GetKiHandler().SetCurrentKi(0f); DamageSelf(); } else { ((CharacterModSkillState)this).GetKiHandler().AddCurrentKi(0f - GetCalculatedDrainCost() * 0.1f); if (((CharacterModSkillState)this).GetKiHandler().GetCurrentKi() <= 0f) { m_healthDraining = true; } } } m_hitTimer = 0.1f; } else { m_hitTimer -= Time.deltaTime; } if (((EntityState)this).fixedAge > 0.55f && !m_skillStarted) { m_skillStarted = true; MainPlugin.CreateCameraShake(((EntityState)this).transform.position, GetExplosionStartTime(), 100f, 0.15f, 180f, 0f, false); ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, VegetaSounds.vgt_finalexplosion_charge, 100, false); } if (!m_screamStarted && ((EntityState)this).fixedAge > GetExplosionStartTime() - 1.3f) { m_screamStarted = true; ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, VegetaSounds.vgt_finalexplosion_scream, 100, true); ((CharacterModSkillState)this).PlaySkillAnimation("FinalExplosion_Skill_1", 0.1f, 0, true, true); } } if (!(((EntityState)this).fixedAge > GetExplosionStartTime())) { return; } if (((EntityState)this).isAuthority) { m_currentScale += Time.deltaTime * GetScaleGrowthPerSecond(); } if (!m_explosionStarted) { m_explosionStarted = true; if (((EntityState)this).isAuthority) { ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, VegetaSounds.vgt_finalexplosion_explode, 100, false); } MainPlugin.CreateCameraShake(((EntityState)this).transform.position, GetExplosionDuration(), 400f, 1f, 180f, 0f, false); m_currentExplosionFX = MainPlugin.SpawnFX(GetFinalExplosionExplosionFX(), ((EntityState)this).transform.position + new Vector3(0f, 0.33f, 0f), Quaternion.identity, GetExplosionDuration() + 1f); } } public override void OnExit() { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) base.m_characterModelSwap.SetLockHipPosition(false, default(Vector3), true); if (((EntityState)this).isAuthority) { ((CharacterModSkillState)this).PlaySkillAnimation("Idle", 0.1f, 0, true, true); base.m_characterModelSwap.SetChestTargetLookAt(Vector3.zero); ((CharacterModSkillState)this).RemoveGravityDisableCounter(); } EntityState.Destroy((Object)(object)m_currentChargeFX); m_currentChargeFX = null; EntityState.Destroy((Object)(object)m_currentExplosionFX); m_currentExplosionFX = null; ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)9; } 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 damage, 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_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0152: 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_015b: 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 = damage; 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; } private void DamageSelf() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown //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_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_001c: 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_0027: 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) DamageInfo val = new DamageInfo(); val.damageType = DamageTypeCombo.op_Implicit((DamageType)2); if (!m_isLethal) { val.damageType |= DamageTypeCombo.op_Implicit((DamageType)1); } val.damage = GetCalculatedDrainCost() * 0.1f; val.attacker = null; val.procCoefficient = 0f; val.position = ((EntityState)this).transform.position; val.crit = ((BaseState)this).RollCrit(); ((CharacterModSkillState)this).GetNetworkHandler().ApplyDamageNetworked(val, ((Component)((EntityState)this).healthComponent).gameObject); } } public class FinalFlashSkill : BaseBeamChargeSkillState { public const string SkillName = "Final Flash"; public const float skillBaseDamageMult = 30f; public static float BaseKiCost = 120f; private bool m_hasSaidFiringVoice; protected bool m_sayStartVoice = true; protected override void InitSkillValues() { //IL_005f: 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) base.m_beamChargeValues.chargeAnimationStateName = "FinalFlash_Skill_0"; base.m_beamChargeValues.chargeAnimationStateLayer = 0; base.m_beamChargeValues.beamMinChargeTime = 2.75f; base.m_beamChargeValues.addBSB = false; base.m_beamChargeValues.beamChargeSoundEventID = VegetaSounds.vgt_finalflash_charge; base.m_beamChargeValues.chargeFX = VegetaAssets.FinalFlashChargeFX; base.m_beamChargeValues.chargeEffectLocation = (EChargeEffectLocation)3; base.m_beamChargeValues.baseKiDrainPerSecond = 0f; base.m_beamChargeValues.addKiDrainPerSecond = 0f; base.m_beamChargeValues.canMoveDuringCharge = false; base.m_beamChargeValues.freezePositionDuringCharge = true; base.m_beamChargeValues.increaseChargeMultFromCharging = false; base.m_beamFireValuesToSend.beamDuration = 3f; base.m_beamFireValuesToSend.beamBaseRange = 200f; base.m_beamFireValuesToSend.beamBaseRadius = 2.33f; base.m_beamFireValuesToSend.beamBaseDamageMult = 30f; base.m_beamFireValuesToSend.fireAnimationStateName = "FinalFlash_Skill_1"; base.m_beamFireValuesToSend.beamFX = VegetaAssets.FinalFlashFX; base.m_beamFireValuesToSend.fireBeamLocation = (EFireBeamLocation)2; base.m_beamFireValuesToSend.beamFireSoundID = VegetaSounds.vgt_finalflash_fire; base.m_beamFireValuesToSend.scaleBeamVisuals = false; } protected override bool ChildCanFireBeam() { return true; } public static string GetSkillDescription() { return string.Format(MainPlugin.CreateKiCostDescription(BaseKiCost.ToString("n0")) + "\nCharge up and unleash a devastating Final Flash, Dealing " + MainPlugin.CreateDamageDescription(GetDisplayBaseDamage()) + " per second whilst the blast is active!"); } public static string GetDisplayBaseDamage() { return 3000f.ToString(); } public static string GetDisplayMaxDamage() { return 3000f.ToString(); } public override void OnEnter() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) ((BaseBeamChargeSkillState)this).OnEnter(); if (((EntityState)this).isAuthority) { ((CharacterModSkillState)this).m_canBeStunned = false; MainPlugin.CreateCameraShake(((EntityState)this).transform.position, base.m_beamChargeValues.beamMinChargeTime, 200f, 0.25f, 180f, 0f, false); ((CharacterModSkillState)this).GetNetworkHandler().ApplyBuffNetworked(((Component)((EntityState)this).characterBody).gameObject, Buffs.ArmorBoost.buffIndex, base.m_beamChargeValues.beamMinChargeTime + base.m_beamFireValuesToSend.beamDuration); if (m_sayStartVoice) { ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, VegetaSounds.vgt_final_flash_voices_start, 50, true); } } } public override void Update() { ((BaseBeamChargeSkillState)this).Update(); if (((EntityState)this).isAuthority && !m_hasSaidFiringVoice && ((EntityState)this).fixedAge > 2.15f) { ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, VegetaSounds.vgt_final_flash_voices, 100, true); m_hasSaidFiringVoice = true; } } public override void FixedUpdate() { ((BaseBeamChargeSkillState)this).FixedUpdate(); } public override void OnExit() { ((BaseBeamChargeSkillState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)9; } } public class FinalShineAttackSkill : BaseBeamChargeSkillState { public const string SkillName = "Final Shine Attack"; public const float skillBaseDamageMult = 36f; public const float BaseKiCost = 80f; protected override void InitSkillValues() { //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) base.m_beamChargeValues.chargeAnimationStateName = "FinalShineAttack_Skill_0"; base.m_beamChargeValues.beamMinChargeTime = 1.5f; base.m_beamChargeValues.addBSB = true; base.m_beamChargeValues.bsb_baseArmorAdd = 45f; base.m_beamChargeValues.bsb_multMovementSpeed = 0.5f; base.m_beamChargeValues.beamChargeSoundEventID = VegetaSounds.vgt_finalshineattack_charge; base.m_beamChargeValues.beamChargeVoiceSoundEventID = VegetaSounds.vgt_finalshineattack_charge_voice; base.m_beamChargeValues.chargeFX = VegetaAssets.FinalShineAttackChargeFX; base.m_beamChargeValues.chargeEffectLocation = (EChargeEffectLocation)1; base.m_beamChargeValues.increaseChargeMultFromCharging = false; base.m_beamFireValuesToSend.beamDuration = 2f; base.m_beamFireValuesToSend.beamBaseRange = 100f; base.m_beamFireValuesToSend.beamBaseRadius = 1.4f; base.m_beamFireValuesToSend.beamBaseDamageMult = 36f; base.m_beamFireValuesToSend.beamCoeff = 1f; base.m_beamFireValuesToSend.beamFX = VegetaAssets.FinalShineAttackFX; base.m_beamFireValuesToSend.beamFireSoundID = VegetaSounds.vgt_galickgun_fire; base.m_beamFireValuesToSend.beamFireVoiceSoundID = VegetaSounds.vgt_finalshineattack_fire_voice; base.m_beamFireValuesToSend.fireAnimationStateName = "FinalShineAttack_Skill_1"; base.m_beamFireValuesToSend.fireChestRotationOffset = new Vector3(0f, 90f, 0f); base.m_beamFireValuesToSend.fireBeamLocation = (EFireBeamLocation)1; } protected override bool ChildCanFireBeam() { return true; } public static string GetSkillDescription() { return string.Format(MainPlugin.CreateKiCostDescription(80f.ToString("n0")) + "\nUnleash a powerful Final Shine Attack, Dealing " + MainPlugin.CreateDamageDescription(GetDisplayBaseDamage()) + " per second whilst the blast is active!"); } public static string GetDisplayBaseDamage() { return 3600f.ToString(); } public override void OnEnter() { ((BaseBeamChargeSkillState)this).OnEnter(); if (((EntityState)this).isAuthority) { ((CharacterModSkillState)this).GetNetworkHandler().PlaySoundNetworked(((EntityState)this).gameObject, BaseSounds.prepare_move_0, 100, false); } } public override void Update() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_002a: 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_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) ((BaseBeamChargeSkillState)this).Update(); if (((EntityState)this).isAuthority) { Vector3 aimRayDirection = ((CharacterModSkillState)this).GetAimRayDirection(); aimRayDirection = MainPlugin.RotateAroundPoint(Vector3.zero, aimRayDirection, Quaternion.Euler(0f, -45f, 0f)); ((CharacterModSkillState)this).m_characterModelSwap.SetChestTargetLookAt(((EntityState)this).transform.position + aimRayDirection * 10f); } } public override void FixedUpdate() { ((BaseBeamChargeSkillState)this).FixedUpdate(); } public override void OnExit() { ((BaseBeamChargeSkillState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)9; } } public class FullPowerFinalExplosionSkill : FinalExplosionSkill { public new static string SkillName = "Full Power Final Explosion"; public new const float SkillBaseDamageMult = 27f; public new const int BaseKiCost = 400; public new const float DrainValuePercentPerSecond = 0.2f; public const float CameraPositionGrowthScale = 2.3f; private const float ScaleGrowthPerSecond = 16.8f; public new static string GetSkillDescription() { return string.Format(MainPlugin.CreateKiCostDescription(400.ToString()) + "\nRelease a massively expanding explosion, Dealing " + MainPlugin.CreateDamageDescription(GetDisplayBaseDamage()) + " and\ndraining " + MainPlugin.ColorText(20f.ToString("n0") + "% of Max Ki", "#03bcff") + " per second!\n" + MainPlugin.ColorText("Once Ki reaches 0, Health is drained instead, this version won't kill you...", "#FF0000")); } public new static string GetDisplayBaseDamage() { return 2700f.ToString(); } public override void OnEnter() { m_fasterMode = true; base.OnEnter(); if (((EntityState)this).isAuthority) { m_isLethal = false; } } public override void FixedUpdate() { base.FixedUpdate(); _ = ((EntityState)this).isAuthority; } public override void Update() { base.Update(); _ = ((EntityState)this).isAuthority; } public override void OnExit() { _ = ((EntityState)this).isAuthority; base.OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)9; } protected override float GetCalculatedDrainCost() { return 0.2f * ((CharacterModSkillState)this).GetKiHandler().GetMaxKi(); } protected override float GetScaleGrowthPerSecond() { return 16.8f; } protected override GameObject GetFinalExplosionChargeFX() { return VegetaAssets.FullPowerFinalExplosionChargeFX; } protected override GameObject GetFinalExplosionExplosionFX() { return VegetaAssets.FullPowerFinalExplosionExplodeFX; } protected override float GetSkillBaseDamageMult() { return 27f; } protected override float GetCameraPositionGrowthScale() { return 2.3f; } } public class NiagraPummelSkill : CharacterModSkillState { public static string SkillName = "Niagra Pummel"; private static float m_damagePerHitPercent = KingUtil.PercentToMult(222); private const float m_finalHitDamageMult = 3f; private float groundedForwardOffset = 1f; private float groundedRadius = 2.5f; private float groundedMaxYDiff = 3f; private float groundedCoef = 0.75f; private float m_skillMovementSpeed = 21f; private float m_minTimeExecuting = 4f; private string m_startAnimName = "NiagraPummel_Skill_0"; private string m_endAnimName = "NiagraPummel_Skill_1"; private string m_loopAnimName = "RaidBlastAnimLoop"; private float m_attackTimerMax = 0.1f; private float m_attackTimer; public static float BaseKiCost = 300f; private GameObject m_loopingFX; private bool m_shouldFinish; private float m_timeFinished; public const string m_bsbName = "NiagraPummelBonus"; private const float m_baseArmorAdd = 200f; private bool m_appliedfinalHit; private const float m_startStrikeTime = 1f; private Vector3 m_endingDirection = Vector3.zero; private bool m_strikesStarted; private Transform m_handRightBone; private Transform m_handLeftBone; private GameObject m_handFX_right; private GameObject m_handFX_left; private float currentAnimDuration; private void ResetAttackTimer() { m_a