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