Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of JJBA Kira v1.0.1
plugins/JJBAKira.dll
Decompiled 8 hours ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using EntityStates; using EntityStates.Commando; using JJBAMod.Modules; using JJBAMod.Modules.Achievements; using JJBAMod.Modules.BaseStates; using JJBAMod.Modules.Characters; using JJBAMod.Modules.Stands; using JJBAMod.Survivors.Kira.Components; using JJBAMod.Survivors.Kira.SkillStates; using R2API; using R2API.Utils; using RoR2; using RoR2.CharacterAI; using RoR2.Projectile; using RoR2.Skills; using RoR2.WwiseUtils; using TMPro; using UnityEngine; using UnityEngine.Networking; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("JJBAKira")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("JJBAKira")] [assembly: AssemblyTitle("JJBAKira")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace JJBAMod.Survivors.Kira { public class BitesTheDustSkillDef : StandSkillDef { protected override bool StandAvailable(GenericSkill skillSlot) { CharacterBody characterBody = skillSlot.characterBody; StandUser val = (Object.op_Implicit((Object)(object)characterBody) ? ((Component)characterBody).GetComponent<StandUser>() : null); KiraBitesTheDust kiraBitesTheDust = (Object.op_Implicit((Object)(object)characterBody) ? ((Component)characterBody).GetComponent<KiraBitesTheDust>() : null); if (Object.op_Implicit((Object)(object)kiraBitesTheDust) && kiraBitesTheDust.HasSave) { return true; } if (!Object.op_Implicit((Object)(object)val)) { return true; } if (!val.IsBroken && !val.IsSealed) { return val.GaugeFraction >= 0.4f; } return false; } } public class FirstBombSkillDef : StandSkillDef { protected override bool StandAvailable(GenericSkill skillSlot) { CharacterBody characterBody = skillSlot.characterBody; StandUser val = (Object.op_Implicit((Object)(object)characterBody) ? ((Component)characterBody).GetComponent<StandUser>() : null); KiraBombTracker kiraBombTracker = (Object.op_Implicit((Object)(object)characterBody) ? ((Component)characterBody).GetComponent<KiraBombTracker>() : null); if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)kiraBombTracker) && kiraBombTracker.HasTarget) { if (!val.IsBroken) { return !val.IsSealed; } return false; } return ((StandSkillDef)this).StandAvailable(skillSlot); } } public static class KiraAI { public static void Init(GameObject bodyPrefab, string masterName) { //IL_0035: 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_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: 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_0170: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01fc: Unknown result type (might be due to invalid IL or missing references) //IL_0218: Unknown result type (might be due to invalid IL or missing references) //IL_022a: Unknown result type (might be due to invalid IL or missing references) //IL_0230: Unknown result type (might be due to invalid IL or missing references) //IL_0248: Unknown result type (might be due to invalid IL or missing references) //IL_0288: Unknown result type (might be due to invalid IL or missing references) //IL_02a4: Unknown result type (might be due to invalid IL or missing references) //IL_02b6: Unknown result type (might be due to invalid IL or missing references) //IL_02bc: Unknown result type (might be due to invalid IL or missing references) //IL_02d3: Unknown result type (might be due to invalid IL or missing references) //IL_02f7: Unknown result type (might be due to invalid IL or missing references) //IL_0313: Unknown result type (might be due to invalid IL or missing references) //IL_0325: Unknown result type (might be due to invalid IL or missing references) //IL_032b: Unknown result type (might be due to invalid IL or missing references) GameObject obj = Prefabs.CreateBlankMasterPrefab(bodyPrefab, masterName); BaseAI component = obj.GetComponent<BaseAI>(); component.aimVectorDampTime = 0.1f; component.aimVectorMaxSpeed = 360f; AISkillDriver obj2 = obj.AddComponent<AISkillDriver>(); obj2.customName = "Use Primary Swing"; obj2.skillSlot = (SkillSlot)0; obj2.requiredSkill = null; obj2.requireSkillReady = false; obj2.requireEquipmentReady = false; obj2.minUserHealthFraction = float.NegativeInfinity; obj2.maxUserHealthFraction = float.PositiveInfinity; obj2.minTargetHealthFraction = float.NegativeInfinity; obj2.maxTargetHealthFraction = float.PositiveInfinity; obj2.minDistance = 0f; obj2.maxDistance = 8f; obj2.selectionRequiresTargetLoS = false; obj2.selectionRequiresOnGround = false; obj2.selectionRequiresAimTarget = false; obj2.maxTimesSelected = -1; obj2.moveTargetType = (TargetType)0; obj2.activationRequiresTargetLoS = false; obj2.activationRequiresAimTargetLoS = false; obj2.activationRequiresAimConfirmation = false; obj2.movementType = (MovementType)1; obj2.moveInputScale = 1f; obj2.aimType = (AimType)1; obj2.ignoreNodeGraph = false; obj2.shouldSprint = false; obj2.shouldFireEquipment = false; obj2.buttonPressType = (ButtonPressType)0; obj2.driverUpdateTimerOverride = -1f; obj2.resetCurrentEnemyOnNextDriverSelection = false; obj2.noRepeat = false; obj2.nextHighPriorityOverride = null; AISkillDriver obj3 = obj.AddComponent<AISkillDriver>(); obj3.customName = "Use Secondary First Bomb"; obj3.skillSlot = (SkillSlot)1; obj3.requireSkillReady = true; obj3.minDistance = 0f; obj3.maxDistance = 8f; obj3.selectionRequiresTargetLoS = false; obj3.selectionRequiresOnGround = false; obj3.selectionRequiresAimTarget = false; obj3.maxTimesSelected = -1; obj3.moveTargetType = (TargetType)0; obj3.activationRequiresTargetLoS = false; obj3.activationRequiresAimTargetLoS = false; obj3.activationRequiresAimConfirmation = true; obj3.movementType = (MovementType)1; obj3.moveInputScale = 1f; obj3.aimType = (AimType)1; obj3.buttonPressType = (ButtonPressType)0; AISkillDriver obj4 = obj.AddComponent<AISkillDriver>(); obj4.customName = "Use Utility Bomb Dash"; obj4.skillSlot = (SkillSlot)2; obj4.requireSkillReady = true; obj4.minDistance = 8f; obj4.maxDistance = 20f; obj4.selectionRequiresTargetLoS = true; obj4.selectionRequiresOnGround = false; obj4.selectionRequiresAimTarget = false; obj4.maxTimesSelected = -1; obj4.moveTargetType = (TargetType)0; obj4.activationRequiresTargetLoS = false; obj4.activationRequiresAimTargetLoS = false; obj4.activationRequiresAimConfirmation = false; obj4.movementType = (MovementType)2; obj4.moveInputScale = 1f; obj4.aimType = (AimType)1; obj4.buttonPressType = (ButtonPressType)0; AISkillDriver obj5 = obj.AddComponent<AISkillDriver>(); obj5.customName = "Use Special Sheer Heart Attack"; obj5.skillSlot = (SkillSlot)3; obj5.requireSkillReady = true; obj5.minDistance = 0f; obj5.maxDistance = 20f; obj5.selectionRequiresTargetLoS = false; obj5.selectionRequiresOnGround = false; obj5.selectionRequiresAimTarget = false; obj5.maxTimesSelected = -1; obj5.moveTargetType = (TargetType)0; obj5.activationRequiresTargetLoS = false; obj5.activationRequiresAimTargetLoS = false; obj5.activationRequiresAimConfirmation = false; obj5.movementType = (MovementType)1; obj5.moveInputScale = 1f; obj5.aimType = (AimType)1; obj5.buttonPressType = (ButtonPressType)0; AISkillDriver obj6 = obj.AddComponent<AISkillDriver>(); obj6.customName = "Chase"; obj6.skillSlot = (SkillSlot)(-1); obj6.requireSkillReady = false; obj6.minDistance = 0f; obj6.maxDistance = float.PositiveInfinity; obj6.moveTargetType = (TargetType)0; obj6.activationRequiresTargetLoS = false; obj6.activationRequiresAimTargetLoS = false; obj6.activationRequiresAimConfirmation = false; obj6.movementType = (MovementType)1; obj6.moveInputScale = 1f; obj6.aimType = (AimType)1; obj6.buttonPressType = (ButtonPressType)0; } } public static class KiraAssets { public static GameObject punchSwingEffect; public static GameObject punchHitImpactEffect; public static GameObject bombExplosionEffect; public static GameObject bitesTheDustExplosionEffect; public static Texture2D bitesTheDustAuraTexture; public static Texture2D bitesTheDustSwirlTexture; public static NetworkSoundEventDef[] standPunchHitSoundEvents; public static NetworkSoundEventDef kiraPunchHitSoundEvent; public static NetworkSoundEventDef touchHitSoundEvent; public static GameObject killerQueenModel; public static GameObject sheerHeartAttackProjectilePrefab; public static ModdedDamageType bombMarkDamageType; public static ModdedDamageType bombDetonateDamageType; private static AssetBundle _assetBundle; public static void Init(AssetBundle assetBundle) { //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_0010: 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) _assetBundle = assetBundle; bombMarkDamageType = DamageAPI.ReserveDamageType(); bombDetonateDamageType = DamageAPI.ReserveDamageType(); standPunchHitSoundEvents = (NetworkSoundEventDef[])(object)new NetworkSoundEventDef[KiraSounds.standPunchHits.Length]; for (int i = 0; i < standPunchHitSoundEvents.Length; i++) { standPunchHitSoundEvents[i] = Content.CreateAndAddNetworkSoundEventDef(KiraSounds.standPunchHits[i]); } kiraPunchHitSoundEvent = Content.CreateAndAddNetworkSoundEventDef("Play_bandit2_m2_impact"); touchHitSoundEvent = Content.CreateAndAddNetworkSoundEventDef("Play_JJBA_TouchHit"); BitesTheDustCinematic.LoadTrack(_assetBundle.LoadAsset<TextAsset>("KiraBitesTheDustCamera")); killerQueenModel = _assetBundle.LoadAsset<GameObject>("mdlKillerQueen"); Asset.ConvertAllRenderersToHopooShader(killerQueenModel); CreateEffects(); CreateProjectiles(); } private static void CreateEffects() { CreateBombExplosionEffect(); CreateBitesTheDustEffects(); punchSwingEffect = SharedEffects.punchSwingEffect; punchHitImpactEffect = SharedEffects.punchHitImpactEffect; } private static void CreateBitesTheDustEffects() { bitesTheDustAuraTexture = _assetBundle.LoadAsset<Texture2D>("texBitesTheDustAura"); bitesTheDustSwirlTexture = _assetBundle.LoadAsset<Texture2D>("texBitesTheDustSwirl"); bitesTheDustExplosionEffect = SharedEffects.bitesTheDustExplosionEffect; } private static void CreateBombExplosionEffect() { //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) bombExplosionEffect = Asset.LoadEffect(_assetBundle, "BombExplosionEffect", "Play_engi_M2_explo", false); if (Object.op_Implicit((Object)(object)bombExplosionEffect)) { ShakeEmitter obj = bombExplosionEffect.AddComponent<ShakeEmitter>(); obj.amplitudeTimeDecay = true; obj.duration = 0.5f; obj.radius = 200f; obj.scaleShakeRadiusWithLocalScale = false; obj.wave = new Wave { amplitude = 1f, frequency = 40f, cycleOffset = 0f }; } } private static void CreateProjectiles() { CreateSheerHeartAttackProjectile(); Content.AddProjectilePrefab(sheerHeartAttackProjectilePrefab); } private static void CreateSheerHeartAttackProjectile() { //IL_0045: Unknown result type (might be due to invalid IL or missing references) sheerHeartAttackProjectilePrefab = Asset.CloneProjectilePrefab("CommandoGrenadeProjectile", "KiraSheerHeartAttackProjectile"); Object.Destroy((Object)(object)sheerHeartAttackProjectilePrefab.GetComponent<ProjectileImpactExplosion>()); ProjectileImpactExplosion obj = sheerHeartAttackProjectilePrefab.AddComponent<ProjectileImpactExplosion>(); ((ProjectileExplosion)obj).blastRadius = 12f; ((ProjectileExplosion)obj).blastDamageCoefficient = 1f; ((ProjectileExplosion)obj).falloffModel = (FalloffModel)0; obj.destroyOnEnemy = true; obj.destroyOnWorld = false; obj.timerAfterImpact = false; obj.lifetime = 10f; obj.impactEffect = bombExplosionEffect; obj.lifetimeExpiredSound = Content.CreateAndAddNetworkSoundEventDef("Play_engi_M2_explo"); Rigidbody component = sheerHeartAttackProjectilePrefab.GetComponent<Rigidbody>(); if (Object.op_Implicit((Object)(object)component)) { component.useGravity = false; } ProjectileSimple val = sheerHeartAttackProjectilePrefab.GetComponent<ProjectileSimple>(); if (!Object.op_Implicit((Object)(object)val)) { val = sheerHeartAttackProjectilePrefab.AddComponent<ProjectileSimple>(); } val.desiredForwardSpeed = 45f; val.updateAfterFiring = true; val.lifetime = 11f; if (!Object.op_Implicit((Object)(object)sheerHeartAttackProjectilePrefab.GetComponent<ProjectileTargetComponent>())) { sheerHeartAttackProjectilePrefab.AddComponent<ProjectileTargetComponent>(); } ProjectileSphereTargetFinder obj2 = sheerHeartAttackProjectilePrefab.AddComponent<ProjectileSphereTargetFinder>(); obj2.lookRange = 50f; obj2.targetSearchInterval = 0.25f; obj2.onlySearchIfNoTarget = true; obj2.allowTargetLoss = true; obj2.testLoS = false; ProjectileSteerTowardTarget obj3 = sheerHeartAttackProjectilePrefab.AddComponent<ProjectileSteerTowardTarget>(); obj3.rotationSpeed = 480f; obj3.yAxisOnly = false; ProjectileController component2 = sheerHeartAttackProjectilePrefab.GetComponent<ProjectileController>(); string text = (_assetBundle.Contains("KiraSheerHeartAttackGhost") ? "KiraSheerHeartAttackGhost" : "HenryBombGhost"); if ((Object)(object)_assetBundle.LoadAsset<GameObject>(text) != (Object)null) { component2.ghostPrefab = Asset.CreateProjectileGhostPrefab(_assetBundle, text); } component2.startSound = ""; } } public static class KiraBuffs { public static BuffDef armorBuff; public static BuffDef bombMarkDebuff; public static BuffDef bitesTheDustSaveBuff; public static BuffDef bitesTheDustMarkDebuff; public static void Init(AssetBundle assetBundle) { //IL_0014: 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_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) armorBuff = Content.CreateAndAddBuff("KiraArmorBuff", LegacyResourcesAPI.Load<BuffDef>("BuffDefs/HiddenInvincibility").iconSprite, Color.white, false, false); BuffDef val = LegacyResourcesAPI.Load<BuffDef>("BuffDefs/DeathMark"); bombMarkDebuff = Content.CreateAndAddBuff("KiraBombMarkDebuff", Object.op_Implicit((Object)(object)val) ? val.iconSprite : null, new Color(0.9f, 0.45f, 0.75f), false, true); Sprite val2 = assetBundle.LoadAsset<Sprite>("texKiraUltimate"); bitesTheDustMarkDebuff = Content.CreateAndAddBuff("KiraBitesTheDustMarkDebuff", Object.op_Implicit((Object)(object)val2) ? val2 : (Object.op_Implicit((Object)(object)val) ? val.iconSprite : null), new Color(1f, 0.55f, 0.9f), false, true); BuffDef val3 = LegacyResourcesAPI.Load<BuffDef>("BuffDefs/Cloak"); bitesTheDustSaveBuff = Content.CreateAndAddBuff("KiraBitesTheDustSaveBuff", Object.op_Implicit((Object)(object)val3) ? val3.iconSprite : null, new Color(0.95f, 0.55f, 0.85f), false, false); } } public static class KiraConfig { public static ConfigEntry<bool> someConfigBool; public static ConfigEntry<float> someConfigFloat; public static ConfigEntry<float> someConfigFloatWithCustomRange; public static void Init() { someConfigBool = Config.BindAndOptions<bool>("Kira", "someConfigBool", true, "this creates a bool config, and a checkbox option in risk of options", false); someConfigFloat = Config.BindAndOptions<float>("Kira", "someConfigfloat", 5f, "", false); someConfigFloatWithCustomRange = Config.BindAndOptions<float>("Kira", "someConfigfloat2", 5f, 0f, 50f, "if a custom range is not passed in, a float will default to a slider with range 0-20. risk of options only has sliders", false); } } public static class KiraSounds { public static readonly string[] soundbanks = new string[5] { "char_loader", "char_Commando", "char_Engi", "char_bandit2", "char_Merc" }; public static readonly string[] standPunchSwings = new string[3] { "Play_JJBA_StandSwing1", "Play_JJBA_StandSwing2", "Play_JJBA_StandSwing3" }; public static readonly string[] standPunchHits = new string[3] { "Play_JJBA_StandHit1", "Play_JJBA_StandHit2", "Play_JJBA_StandHit3" }; public static readonly string[] kiraPunchSwings = new string[3] { "Play_Kira_Swing1", "Play_Kira_Swing2", "Play_Kira_Swing3" }; public const string kiraPunchHit = "Play_bandit2_m2_impact"; private static readonly string[][] punchShouts = new string[3][] { new string[2] { "Play_Kira_Shout1_1", "Play_Kira_Shout1_2" }, new string[2] { "Play_Kira_Shout2_1", "Play_Kira_Shout2_2" }, new string[2] { "Play_Kira_Shout3_1", "Play_Kira_Shout3_2" } }; public const string touchSwing = "Play_JJBA_TouchSwing"; public const string touchHit = "Play_JJBA_TouchHit"; public const string detonateClick = "Play_JJBA_DetonateClick"; private static readonly string[] detonateLines = new string[3] { "Play_Kira_Detonate1", "Play_Kira_Detonate2", "Play_Kira_Detonate3" }; public const string explosion = "Play_engi_M2_explo"; public const string bombDashLaunch = "Play_Kira_BombDash"; public const string bombDashExplosion = "Play_commando_M2_grenade_explo"; public const string sheerHeartAttackLaunch = "Play_JJBA_SheerHeartAttack"; public const string sheerHeartAttackLine = "Play_Kira_SheerHeartAttack"; public const string bitesTheDustSave = "Play_Kira_StandOff"; public const string bitesTheDustCutIn = "Play_JJBA_BitesTheDustCutIn"; public const string bitesTheDustPose = "Play_JJBA_BitesTheDustPose"; public const string bitesTheDustRollBack = "Play_JJBA_BitesTheDustRollBack"; public static string PunchShout(int step) { return Pick(punchShouts[step % punchShouts.Length]); } public static string DetonateLine() { return Pick(detonateLines); } private static string Pick(string[] options) { return options[Random.Range(0, options.Length)]; } } public static class KiraStates { public static void Init() { Content.AddEntityState(typeof(KillerQueenPunch)); Content.AddEntityState(typeof(StrayCat)); Content.AddEntityState(typeof(FirstBomb)); Content.AddEntityState(typeof(FirstBombTouch)); Content.AddEntityState(typeof(FirstBombDetonate)); Content.AddEntityState(typeof(BombDash)); Content.AddEntityState(typeof(SheerHeartAttack)); Content.AddEntityState(typeof(BitesTheDust)); Content.AddEntityState(typeof(BitesTheDustSave)); Content.AddEntityState(typeof(BitesTheDustCutscene)); } } public static class KiraStaticValues { public const float punchDamageCoefficient = 2.4f; public const float punchLockOnRange = 14f; public const float kiraPunchDamageCoefficient = 1.2f; public const float touchDamageCoefficient = 1.5f; public const float detonateDamageCoefficient = 9f; public const float detonateRadius = 9f; public const float bombMarkDuration = 15f; public const float bombDashDamageCoefficient = 3f; public const float bombDashRadius = 7f; public const float sheerHeartAttackDamageCoefficient = 14f; public const float sheerHeartAttackRadius = 12f; public const float sheerHeartAttackSpeed = 45f; public const float bitesTheDustTimer = 10f; public const float bitesTheDustCooldown = 45f; public const float bitesTheDustDamageCoefficient = 25f; public const float bitesTheDustMinMeter = 0.4f; public const float bitesTheDustRadius = 35f; public const float bitesTheDustExplosionRadius = 7f; public const float bitesTheDustExplosionInterval = 0.06f; public const int bitesTheDustMaxTargets = 40; public const float punchStandCost = 4f; public const float touchStandCost = 15f; public const float bombDashStandCost = 20f; public const float sheerHeartAttackStandCost = 30f; } public static class KiraTokens { public static void Init() { AddKiraTokens(); } public static void AddKiraTokens() { string text = "KAVAHN_KIRA_"; string text2 = "Yoshikage Kira wants nothing more than a quiet life, and Killer Queen will turn anything that threatens it into a bomb.<color=#CCD3E0>" + Environment.NewLine + Environment.NewLine + "< ! > Killer Queen fights on the stand meter. Let it rest between fights: a broken stand leaves Kira slow, fragile and swinging his own fists." + Environment.NewLine + Environment.NewLine + "< ! > While Killer Queen is out it takes half the hits meant for Kira, so keep an eye on the meter when you're being swarmed." + Environment.NewLine + Environment.NewLine + "< ! > Plant First Bomb on the biggest threat, then detonate it when its friends gather around." + Environment.NewLine + Environment.NewLine + "< ! > Bomb Dash damages anything Kira leaves behind, so use it to escape and punish at once." + Environment.NewLine + Environment.NewLine + "< ! > Sheer Heart Attack chases enemies on its own. Send it out and keep fighting." + Environment.NewLine + Environment.NewLine; string text3 = "...and so he left, finally able to sleep soundly at night."; string text4 = "...and so he vanished, his quiet life lost forever."; Language.Add(text + "NAME", "Yoshikage Kira"); Language.Add(text + "DESCRIPTION", text2); Language.Add(text + "SUBTITLE", "Killer Queen"); Language.Add(text + "STAND_NAME", "KILLER QUEEN"); Language.Add(text + "LORE", "My name is Yoshikage Kira. I'm 33 years old. All I want is to live a quiet life."); Language.Add(text + "OUTRO_FLAVOR", text3); Language.Add(text + "OUTRO_FAILURE", text4); Language.Add(text + "MASTERY_SKIN_NAME", "Kosaku Kawajiri"); Language.Add(text + "PASSIVE_NAME", "Stand: Killer Queen"); Language.Add(text + "PASSIVE_DESCRIPTION", "Killer Queen's attacks spend its <style=cIsUtility>stand meter</style>. While it's out, it takes <style=cIsHealing>half the damage</style> aimed at Kira. If the meter runs dry, the stand <style=cDeath>breaks</style>."); Language.Add(text + "PRIMARY_PUNCH_NAME", "Killer Queen"); Language.Add(text + "PRIMARY_PUNCH_DESCRIPTION", "<style=cIsUtility>Agile.</style>" + $"<style=cIsUtility>Lock on</style> to an enemy within {14f}m. Killer Queen <style=cIsUtility>dashes</style> to it and punches for <style=cIsDamage>{240.00002f}% damage</style>. Without his stand, Kira punches for <style=cIsDamage>{120.00001f}% damage</style> instead."); Language.Add(text + "SECONDARY_FIRSTBOMB_NAME", "First Bomb"); Language.Add(text + "SECONDARY_FIRSTBOMB_DESCRIPTION", $"Send Killer Queen flying. The first enemy he touches takes <style=cIsDamage>{150f}% damage</style> and becomes a bomb. " + $"Activate again to <style=cIsDamage>detonate</style> it for <style=cIsDamage>{900f}% damage</style> in a {9f}m radius. Only one bomb can be planted at a time."); Language.Add(text + "UTILITY_BOMBDASH_NAME", "Bomb Dash"); Language.Add(text + "UTILITY_BOMBDASH_DESCRIPTION", $"Blow up the ground behind you for <style=cIsDamage>{300f}% damage</style> and <style=cIsUtility>dash</style> forward, gaining <style=cIsUtility>300 armor</style>."); Language.Add(text + "SPECIAL_SHEERHEARTATTACK_NAME", "Sheer Heart Attack"); Language.Add(text + "SPECIAL_SHEERHEARTATTACK_DESCRIPTION", $"Send out a bomb that <style=cIsUtility>homes in</style> on enemies and explodes for <style=cIsDamage>{1400f}% damage</style>."); Language.Add(text + "STANDSPECIAL_NAME", "Stray Cat"); Language.Add(text + "STANDSPECIAL_DESCRIPTION", $"<style=cIsUtility>Stand special.</style> Killer Queen launches <style=cIsDamage>{5}</style> drifting <style=cIsDamage>air bombs</style>, each exploding on contact for <style=cIsDamage>{400f}% damage</style>."); Language.Add(text + "SPECIAL_BITESTHEDUST_NAME", "Bites the Dust"); Language.Add(text + "SPECIAL_BITESTHEDUST_DESCRIPTION", $"<style=cIsUtility>Ultimate.</style> <style=cIsUtility>Save</style> this moment and seal Killer Queen away: for {10f}s you can only fight on your own. " + "Then time is forced to roll back (or activate again to roll it back early): return to where you saved with at least the health you had, " + $"and everyone you hit since, and every enemy within {35f}m, <style=cIsDamage>explodes for up to {2500f}% damage</style>. " + $"Burns the whole stand meter and needs at least {40f}% of it to start; the fuller it is when time rolls back, the bigger the explosions."); Language.Add(text + "BITESTHEDUST_SEAL", "BITES THE DUST"); Language.Add(text + "BITESTHEDUST_TITLE", "KILLER QUEEN · DAISAN NO BAKUDAN · BITES THE DUST"); Language.Add(Tokens.GetAchievementNameToken("KAVAHN_KIRA_masteryAchievement"), "Yoshikage Kira: Mastery"); Language.Add(Tokens.GetAchievementDescriptionToken("KAVAHN_KIRA_masteryAchievement"), "As Yoshikage Kira, beat the game or obliterate on Monsoon."); } } public static class KiraUnlockables { public static UnlockableDef characterUnlockableDef; public static UnlockableDef masterySkinUnlockableDef; public static void Init() { masterySkinUnlockableDef = Content.CreateAndAddUnlockbleDef("KAVAHN_KIRA_masteryUnlockable", Tokens.GetAchievementNameToken("KAVAHN_KIRA_masteryAchievement"), ((CharacterBase<KiraSurvivor>)(object)CharacterBase<KiraSurvivor>.instance).assetBundle.LoadAsset<Sprite>("texMasteryAchievement")); } } [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.kavahn.JJBAKira", "JJBAKira", "1.0.1")] public class KiraPlugin : BaseUnityPlugin { private void Awake() { string? directoryName = Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location); Asset.AddBundleFolder(directoryName); SoundBanks.Add(directoryName, "JJBAKira.bnk"); JJBAPlugin.Safely((Action)delegate { ((CharacterBase<KiraSurvivor>)(object)new KiraSurvivor()).Initialize(); }); } } public class KiraSurvivor : SurvivorBase<KiraSurvivor> { public const string KIRA_PREFIX = "KAVAHN_KIRA_"; public const float modelScale = 1.34f; private static readonly Dictionary<GameObject, CharacterBody> bombMarkedTargets = new Dictionary<GameObject, CharacterBody>(); public override string assetBundleName => "jjbakira"; public override string bodyName => "KavahnKiraBody"; public override string masterName => "KavahnKiraMonsterMaster"; public override string modelPrefabName { get { if (!HasKiraModel) { return "mdlHenry"; } return "mdlKira"; } } public override string displayPrefabName { get { if (!HasKiraModel) { return "HenryDisplay"; } return "KiraDisplay"; } } private bool HasKiraModel { get { if (Object.op_Implicit((Object)(object)((CharacterBase<KiraSurvivor>)(object)this).assetBundle)) { return ((CharacterBase<KiraSurvivor>)(object)this).assetBundle.Contains("mdlKira"); } return false; } } public override string survivorTokenPrefix => "KAVAHN_KIRA_"; public override BodyInfo bodyInfo => new BodyInfo { bodyName = ((CharacterBase<KiraSurvivor>)(object)this).bodyName, bodyNameToken = "KAVAHN_KIRA_NAME", subtitleNameToken = "KAVAHN_KIRA_SUBTITLE", characterPortrait = Icon<Texture>("texKiraIcon", "texHenryIcon"), bodyColor = new Color(0.6f, 0.35f, 0.65f), sortPosition = 100f, crosshair = Asset.LoadCrosshair("Standard"), podPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/NetworkedObjects/SurvivorPod"), maxHealth = 110f, healthRegen = 1.5f, armor = 0f, jumpCount = 1, cameraParamsVerticalOffset = 1.75f, cameraParamsDepth = -12f }; public override CustomRendererInfo[] customRendererInfos { get { //IL_0010: 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_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown //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) //IL_005d: Expected O, but got Unknown //IL_009c: 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_00a3: 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_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Expected O, but got Unknown if (!HasKiraModel) { return (CustomRendererInfo[])(object)new CustomRendererInfo[3] { new CustomRendererInfo { childName = "SwordModel", material = Materials.LoadMaterial(((CharacterBase<KiraSurvivor>)(object)this).assetBundle, "matHenry") }, new CustomRendererInfo { childName = "GunModel" }, new CustomRendererInfo { childName = "Model" } }; } ChildLocator val = (Object.op_Implicit((Object)(object)((CharacterBase<KiraSurvivor>)(object)this).characterModelObject) ? ((CharacterBase<KiraSurvivor>)(object)this).characterModelObject.GetComponent<ChildLocator>() : null); if (!Object.op_Implicit((Object)(object)val)) { return (CustomRendererInfo[])(object)new CustomRendererInfo[0]; } List<CustomRendererInfo> list = new List<CustomRendererInfo>(); NameTransformPair[] transformPairs = val.transformPairs; foreach (NameTransformPair val2 in transformPairs) { if (val2.name.StartsWith("Mesh")) { list.Add(new CustomRendererInfo { childName = val2.name }); } } return list.ToArray(); } } public override UnlockableDef characterUnlockableDef => KiraUnlockables.characterUnlockableDef; public override ItemDisplaysBase itemDisplays => null; public override AssetBundle assetBundle { get; protected set; } public override GameObject bodyPrefab { get; protected set; } public override CharacterBody prefabCharacterBody { get; protected set; } public override GameObject characterModelObject { get; protected set; } public override CharacterModel prefabCharacterModel { get; protected set; } public override GameObject displayPrefab { get; protected set; } private T Icon<T>(string name, string fallback) where T : Object { T val = ((CharacterBase<KiraSurvivor>)(object)this).assetBundle.LoadAsset<T>(name); if (!Object.op_Implicit((Object)(object)val)) { return ((CharacterBase<KiraSurvivor>)(object)this).assetBundle.LoadAsset<T>(fallback); } return val; } public override void Initialize() { ((CharacterBase<KiraSurvivor>)(object)this).Initialize(); } public override void InitializeCharacter() { KiraUnlockables.Init(); base.InitializeCharacter(); KiraConfig.Init(); KiraStates.Init(); KiraTokens.Init(); KiraAssets.Init(((CharacterBase<KiraSurvivor>)(object)this).assetBundle); StrayCat.CreateProjectile(); KiraBuffs.Init(((CharacterBase<KiraSurvivor>)(object)this).assetBundle); ((CharacterBase<KiraSurvivor>)(object)this).InitializeEntityStateMachines(); ((CharacterBase<KiraSurvivor>)(object)this).InitializeSkills(); ((CharacterBase<KiraSurvivor>)(object)this).InitializeSkins(); ((CharacterBase<KiraSurvivor>)(object)this).InitializeCharacterMaster(); AdditionalBodySetup(); AddHooks(); } private void AdditionalBodySetup() { //IL_000c: 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_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) Transform transform = ((CharacterBase<KiraSurvivor>)(object)this).characterModelObject.transform; transform.localScale *= 1.34f; if (Object.op_Implicit((Object)(object)((SurvivorBase<KiraSurvivor>)this).displayPrefab)) { Transform transform2 = ((SurvivorBase<KiraSurvivor>)this).displayPrefab.transform; transform2.localScale *= 1.34f; } AddHitboxes(); ((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab.AddComponent<KiraBombTracker>(); if (!Object.op_Implicit((Object)(object)((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab.GetComponent<AkGameObj>())) { ((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab.AddComponent<AkGameObj>(); } ((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab.AddComponent<KiraBitesTheDust>().skill = ((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab.GetComponent<ExtraSkillSlot>().skill; AddStand(); ((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab.AddComponent<StandTracker>().maxTrackingDistance = 14f; GameObject[] array = (GameObject[])(object)new GameObject[2] { ((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab, ((SurvivorBase<KiraSurvivor>)this).displayPrefab }; foreach (GameObject val in array) { if (Object.op_Implicit((Object)(object)val)) { val.AddComponent<SoundbankLoader>().soundbankStrings = KiraSounds.soundbanks; } } } private void AddStand() { //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_0022: 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) //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_0043: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_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) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: 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_00c2: Expected O, but got Unknown GameObject killerQueenModel = KiraAssets.killerQueenModel; Stands.AddStandUser(((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab, ((CharacterBase<KiraSurvivor>)(object)this).bodyName, new StandDefinition { standNameToken = "KAVAHN_KIRA_STAND_NAME", color = new Color(0.86f, 0.45f, 0.72f), standModelPrefab = killerQueenModel, modelScale = 1.29f, actionModelScale = 1.5f, standOffset = new Vector3(0.7f, 0f, -1f), standoffFromTarget = 1.3f, hitboxCenter = new Vector3(0f, 0f, 1.2f), hitboxSize = new Vector3(3.3f, 3.3f, 3.5f), maxGauge = 130f }); } public void AddHitboxes() { Prefabs.SetupHitBoxGroup(((CharacterBase<KiraSurvivor>)(object)this).characterModelObject, "SwordGroup", new string[1] { "SwordHitbox" }); } public override void InitializeEntityStateMachines() { Prefabs.ClearEntityStateMachines(((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab); Prefabs.AddMainEntityStateMachine(((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab, "Body", typeof(GenericCharacterMain), typeof(SpawnTeleporterState)); Prefabs.AddEntityStateMachine(((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab, "Weapon", (Type)null, (Type)null, true, true); Prefabs.AddEntityStateMachine(((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab, "Weapon2", (Type)null, (Type)null, true, true); } public override void InitializeSkills() { Skills.ClearGenericSkills(((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab); AddPassiveSkill(); AddPrimarySkills(); AddSecondarySkills(); AddUtiitySkills(); AddSpecialSkills(); } private void AddPassiveSkill() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) ((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab.GetComponent<SkillLocator>().passiveSkill = new PassiveSkill { enabled = true, skillNameToken = "KAVAHN_KIRA_PASSIVE_NAME", skillDescriptionToken = "KAVAHN_KIRA_PASSIVE_DESCRIPTION", keywordToken = "KEYWORD_JJBA_STAND", icon = Icon<Sprite>("texKiraPassive", "texPassiveIcon") }; } private void AddPrimarySkills() { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Expected O, but got Unknown Skills.CreateGenericSkillWithSkillFamily(((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab, (SkillSlot)0, false); SteppedSkillDef val = Skills.CreateSkillDef<SteppedSkillDef>(new SkillDefInfo("KiraKillerQueen", "KAVAHN_KIRA_PRIMARY_PUNCH_NAME", "KAVAHN_KIRA_PRIMARY_PUNCH_DESCRIPTION", Icon<Sprite>("texKiraPrimary", "texPrimaryIcon"), new SerializableEntityStateType(typeof(KillerQueenPunch)), "Weapon", true)); val.stepCount = 3; val.stepGraceDuration = 0.5f; Skills.AddPrimarySkills(((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab, (SkillDef[])(object)new SkillDef[1] { (SkillDef)val }); } private void AddSecondarySkills() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) Skills.CreateGenericSkillWithSkillFamily(((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab, (SkillSlot)1, false); SkillDefInfo val = new SkillDefInfo(); val.skillName = "KiraFirstBomb"; val.skillNameToken = "KAVAHN_KIRA_SECONDARY_FIRSTBOMB_NAME"; val.skillDescriptionToken = "KAVAHN_KIRA_SECONDARY_FIRSTBOMB_DESCRIPTION"; val.keywordTokens = new string[1] { "KEYWORD_JJBA_STAND" }; val.skillIcon = Icon<Sprite>("texKiraSecondary", "texSecondaryIcon"); val.activationState = new SerializableEntityStateType(typeof(FirstBomb)); val.activationStateMachineName = "Weapon2"; val.interruptPriority = (InterruptPriority)1; val.baseRechargeInterval = 6f; val.baseMaxStock = 1; val.rechargeStock = 1; val.requiredStock = 1; val.stockToConsume = 1; val.resetCooldownTimerOnUse = false; val.fullRestockOnAssign = true; val.dontAllowPastMaxStocks = false; val.mustKeyPress = true; val.beginSkillCooldownOnSkillEnd = false; val.isCombatSkill = true; val.canceledFromSprinting = false; val.cancelSprintingOnActivation = true; val.forceSprintDuringState = false; FirstBombSkillDef firstBombSkillDef = Skills.CreateSkillDef<FirstBombSkillDef>(val); ((StandSkillDef)firstBombSkillDef).standCost = 15f; Skills.AddSecondarySkills(((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab, (SkillDef[])(object)new SkillDef[1] { (SkillDef)firstBombSkillDef }); } private void AddUtiitySkills() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) Skills.CreateGenericSkillWithSkillFamily(((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab, (SkillSlot)2, false); SkillDefInfo val = new SkillDefInfo(); val.skillName = "KiraBombDash"; val.skillNameToken = "KAVAHN_KIRA_UTILITY_BOMBDASH_NAME"; val.skillDescriptionToken = "KAVAHN_KIRA_UTILITY_BOMBDASH_DESCRIPTION"; val.keywordTokens = new string[1] { "KEYWORD_JJBA_STAND" }; val.skillIcon = Icon<Sprite>("texKiraUtility", "texUtilityIcon"); val.activationState = new SerializableEntityStateType(typeof(BombDash)); val.activationStateMachineName = "Body"; val.interruptPriority = (InterruptPriority)2; val.baseRechargeInterval = 5f; val.baseMaxStock = 1; val.rechargeStock = 1; val.requiredStock = 1; val.stockToConsume = 1; val.resetCooldownTimerOnUse = false; val.fullRestockOnAssign = true; val.dontAllowPastMaxStocks = false; val.mustKeyPress = false; val.beginSkillCooldownOnSkillEnd = false; val.isCombatSkill = true; val.canceledFromSprinting = false; val.cancelSprintingOnActivation = false; val.forceSprintDuringState = true; StandSkillDef val2 = Skills.CreateSkillDef<StandSkillDef>(val); val2.standCost = 20f; Skills.AddUtilitySkills(((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab, (SkillDef[])(object)new SkillDef[1] { (SkillDef)val2 }); } private void AddSpecialSkills() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Expected O, but got Unknown //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Expected O, but got Unknown //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Expected O, but got Unknown //IL_021b: Unknown result type (might be due to invalid IL or missing references) //IL_0220: Unknown result type (might be due to invalid IL or missing references) //IL_0234: Unknown result type (might be due to invalid IL or missing references) Skills.CreateGenericSkillWithSkillFamily(((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab, (SkillSlot)3, false); SkillDefInfo val = new SkillDefInfo(); val.skillName = "KiraSheerHeartAttack"; val.skillNameToken = "KAVAHN_KIRA_SPECIAL_SHEERHEARTATTACK_NAME"; val.skillDescriptionToken = "KAVAHN_KIRA_SPECIAL_SHEERHEARTATTACK_DESCRIPTION"; val.keywordTokens = new string[1] { "KEYWORD_JJBA_STAND" }; val.skillIcon = Icon<Sprite>("texKiraSpecial", "texSpecialIcon"); val.activationState = new SerializableEntityStateType(typeof(SheerHeartAttack)); val.activationStateMachineName = "Weapon2"; val.interruptPriority = (InterruptPriority)1; val.baseMaxStock = 1; val.baseRechargeInterval = 12f; val.isCombatSkill = true; val.mustKeyPress = false; StandSkillDef val2 = Skills.CreateSkillDef<StandSkillDef>(val); val2.standCost = 30f; val = new SkillDefInfo(); val.skillName = "KiraBitesTheDust"; val.skillNameToken = "KAVAHN_KIRA_SPECIAL_BITESTHEDUST_NAME"; val.skillDescriptionToken = "KAVAHN_KIRA_SPECIAL_BITESTHEDUST_DESCRIPTION"; val.keywordTokens = new string[1] { "KEYWORD_JJBA_STAND" }; val.skillIcon = Icon<Sprite>("texKiraUltimate", "texSpecialIcon"); val.activationState = new SerializableEntityStateType(typeof(BitesTheDust)); val.activationStateMachineName = "Weapon2"; val.interruptPriority = (InterruptPriority)1; val.baseRechargeInterval = 45f; val.baseMaxStock = 1; val.rechargeStock = 1; val.requiredStock = 1; val.stockToConsume = 1; val.fullRestockOnAssign = true; val.mustKeyPress = true; val.beginSkillCooldownOnSkillEnd = false; val.isCombatSkill = true; val.cancelSprintingOnActivation = false; BitesTheDustSkillDef bitesTheDustSkillDef = Skills.CreateSkillDef<BitesTheDustSkillDef>(val); Skills.AddSpecialSkills(((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab, (SkillDef[])(object)new SkillDef[1] { (SkillDef)val2 }); val = new SkillDefInfo(); val.skillName = "KiraStrayCat"; val.skillNameToken = "KAVAHN_KIRA_STANDSPECIAL_NAME"; val.skillDescriptionToken = "KAVAHN_KIRA_STANDSPECIAL_DESCRIPTION"; val.keywordTokens = new string[1] { "KEYWORD_JJBA_STAND" }; val.skillIcon = Icon<Sprite>("texKiraStandSpecial", "texKiraSpecial"); val.activationState = new SerializableEntityStateType(typeof(StrayCat)); val.activationStateMachineName = "Weapon2"; val.interruptPriority = (InterruptPriority)1; val.baseRechargeInterval = 10f; val.baseMaxStock = 1; val.fullRestockOnAssign = true; val.mustKeyPress = true; val.isCombatSkill = true; val.cancelSprintingOnActivation = true; StandSkillDef val3 = Skills.CreateSkillDef<StandSkillDef>(val); val3.standCost = 25f; ExtraSkills.AddStandSpecial(((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab, (SkillDef)(object)val3); GenericSkill val4 = Skills.CreateGenericSkillWithSkillFamily(((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab, "BitesTheDust", "Ultimate", false); Skills.AddSkillToFamily(val4.skillFamily, (SkillDef)(object)bitesTheDustSkillDef, (UnlockableDef)null); ExtraSkills.Slots(((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab).skill = val4; } public override void InitializeSkins() { ModelSkinController obj = ((Component)((CharacterBase<KiraSurvivor>)(object)this).prefabCharacterModel).gameObject.AddComponent<ModelSkinController>(); ((Component)((CharacterBase<KiraSurvivor>)(object)this).prefabCharacterModel).GetComponent<ChildLocator>(); RendererInfo[] baseRendererInfos = ((CharacterBase<KiraSurvivor>)(object)this).prefabCharacterModel.baseRendererInfos; List<SkinDef> list = new List<SkinDef>(); SkinDef item = Skins.CreateSkinDef("DEFAULT_SKIN", Icon<Sprite>("texKiraSkin", "texMainSkin"), baseRendererInfos, ((Component)((CharacterBase<KiraSurvivor>)(object)this).prefabCharacterModel).gameObject, (UnlockableDef)null); list.Add(item); obj.skins = list.ToArray(); } public override void InitializeCharacterMaster() { KiraAI.Init(((CharacterBase<KiraSurvivor>)(object)this).bodyPrefab, ((SurvivorBase<KiraSurvivor>)this).masterName); } private void AddHooks() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(RecalculateStatsAPI_GetStatCoefficients); GlobalEventManager.onServerDamageDealt += GlobalEventManager_onServerDamageDealt; } private void RecalculateStatsAPI_GetStatCoefficients(CharacterBody sender, StatHookEventArgs args) { if (sender.HasBuff(KiraBuffs.armorBuff)) { args.armorAdd += 300f; } } private void GlobalEventManager_onServerDamageDealt(DamageReport report) { //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) CharacterBody victimBody = report.victimBody; GameObject attacker = report.attacker; if (!Object.op_Implicit((Object)(object)victimBody) || !Object.op_Implicit((Object)(object)attacker)) { return; } KiraBitesTheDust component = attacker.GetComponent<KiraBitesTheDust>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)report.victim)) { component.ServerRecordHit(report.victim); } if (DamageAPI.HasModdedDamageType(report.damageInfo, KiraAssets.bombMarkDamageType) && report.victim.alive) { if (bombMarkedTargets.TryGetValue(attacker, out var value) && Object.op_Implicit((Object)(object)value) && (Object)(object)value != (Object)(object)victimBody) { value.ClearTimedBuffs(KiraBuffs.bombMarkDebuff); } victimBody.ClearTimedBuffs(KiraBuffs.bombMarkDebuff); victimBody.AddTimedBuff(KiraBuffs.bombMarkDebuff, 15f); bombMarkedTargets[attacker] = victimBody; KiraBombTracker component2 = attacker.GetComponent<KiraBombTracker>(); if (Object.op_Implicit((Object)(object)component2)) { component2.ServerSetTarget(report.victim); } } if (DamageAPI.HasModdedDamageType(report.damageInfo, KiraAssets.bombDetonateDamageType)) { if (bombMarkedTargets.TryGetValue(attacker, out var value2) && Object.op_Implicit((Object)(object)value2)) { value2.ClearTimedBuffs(KiraBuffs.bombMarkDebuff); } bombMarkedTargets.Remove(attacker); KiraBombTracker component3 = attacker.GetComponent<KiraBombTracker>(); if (Object.op_Implicit((Object)(object)component3)) { component3.ServerClearTarget(); } } } } } namespace JJBAMod.Survivors.Kira.SkillStates { public class BitesTheDust : BaseSkillState { public override void OnEnter() { ((BaseState)this).OnEnter(); if (!((EntityState)this).isAuthority) { return; } KiraBitesTheDust component = ((EntityState)this).GetComponent<KiraBitesTheDust>(); if (Object.op_Implicit((Object)(object)component) && component.HasSave) { component.AuthorityRollBack(fromSkill: true); ((EntityState)this).outer.SetNextStateToMain(); return; } if (Object.op_Implicit((Object)(object)((BaseSkillState)this).activatorSkillSlot)) { ((BaseSkillState)this).activatorSkillSlot.AddOneStock(); } ((EntityState)this).outer.SetNextState((EntityState)(object)new BitesTheDustSave()); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)1; } } public class BitesTheDustCutscene : BaseState { private const float clipFps = 30f; public static float cutSpeed = 1f; public static float poseSpeed = 1f; private const float cutFrames = 161f; private const float poseClipFrames = 411f; private const float poseFirstFrame = 291f; private const float poseLastFrame = 375f; private const float poseCameraFirstFrame = 195f; public static float endDuration = 0.7f; private float cutDuration; private float poseDuration; private float rollBackTime; private bool posing; private bool rolledBack; private float meterFraction; private StandUser standUser; private KiraBitesTheDust bitesTheDust; private BitesTheDustCinematic cinematic; private CharacterModel characterModel; private static readonly FieldInfo disableFadeField = typeof(CharacterModel).GetField("disableFade", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); private bool modelFadeWasDisabled; private float TotalDuration => rollBackTime + endDuration; public override void OnEnter() { //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00de: 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_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_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_0131: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_026f: Unknown result type (might be due to invalid IL or missing references) //IL_0267: Unknown result type (might be due to invalid IL or missing references) //IL_0274: Unknown result type (might be due to invalid IL or missing references) //IL_0275: Unknown result type (might be due to invalid IL or missing references) //IL_028a: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); cutDuration = 5.366667f / cutSpeed; poseDuration = 2.8f / poseSpeed; rollBackTime = cutDuration + poseDuration; standUser = ((EntityState)this).GetComponent<StandUser>(); bitesTheDust = ((EntityState)this).GetComponent<KiraBitesTheDust>(); if (Object.op_Implicit((Object)(object)bitesTheDust)) { bitesTheDust.OnRollBackStarted(); } if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor)) { ((EntityState)this).characterMotor.velocity = Vector3.zero; } ((EntityState)this).PlayAnimation("FullBody, Override", "BitesTheDustCut", "ShootGun.playbackRate", cutDuration, 0f); Util.PlaySound("Play_JJBA_BitesTheDustCutIn", ((EntityState)this).gameObject); Vector3 val = (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection) ? ((EntityState)this).characterDirection.forward : ((EntityState)this).transform.forward); val.y = 0f; val = ((((Vector3)(ref val)).sqrMagnitude > 0.0001f) ? ((Vector3)(ref val)).normalized : Vector3.forward); if (Object.op_Implicit((Object)(object)standUser)) { standUser.UseStand(0f); Vector3 val2 = -val + Vector3.Cross(Vector3.up, val) * 0.7f; standUser.BeginAction(val2, 1.2f, TotalDuration); standUser.PlayStandAnimation("BitesTheDustStart", 0.05f); } if (NetworkServer.active) { ((EntityState)this).characterBody.AddTimedBuff(Buffs.HiddenInvincibility, TotalDuration + 0.5f); meterFraction = (Object.op_Implicit((Object)(object)standUser) ? standUser.DrainAll() : 1f); if (Object.op_Implicit((Object)(object)bitesTheDust)) { bitesTheDust.ServerFreeze(((EntityState)this).characterBody.footPosition, TotalDuration + 0.3f); } } Transform modelTransform = ((EntityState)this).GetModelTransform(); characterModel = (Object.op_Implicit((Object)(object)modelTransform) ? ((Component)modelTransform).GetComponent<CharacterModel>() : null); if (Object.op_Implicit((Object)(object)characterModel) && disableFadeField != null) { modelFadeWasDisabled = (bool)disableFadeField.GetValue(characterModel); disableFadeField.SetValue(characterModel, true); } cinematic = BitesTheDustCinematic.Begin(((EntityState)this).characterBody, Object.op_Implicit((Object)(object)modelTransform) ? modelTransform.position : ((EntityState)this).characterBody.footPosition, Quaternion.LookRotation(val), Object.op_Implicit((Object)(object)modelTransform) ? modelTransform.lossyScale.y : 1f, new BitesTheDustCinematic.Shot[2] { new BitesTheDustCinematic.Shot { segment = "cut", duration = cutDuration, firstFrame = 0f, frameCount = 161f }, new BitesTheDustCinematic.Shot { segment = "pose", duration = poseDuration, firstFrame = 96f, frameCount = 84f } }); } public override void FixedUpdate() { //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) ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority && Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && !rolledBack) { ((EntityState)this).characterMotor.velocity = Vector3.zero; } if (!posing && ((EntityState)this).fixedAge >= cutDuration) { posing = true; Animator modelAnimator = ((EntityState)this).GetModelAnimator(); if (Object.op_Implicit((Object)(object)modelAnimator)) { modelAnimator.SetFloat("ShootGun.playbackRate", poseSpeed); modelAnimator.Play("BitesTheDustPose", modelAnimator.GetLayerIndex("FullBody, Override"), 0.7080292f); } Util.PlaySound("Play_JJBA_BitesTheDustPose", ((EntityState)this).gameObject); } if (!rolledBack && ((EntityState)this).fixedAge >= rollBackTime) { RollBack(); } if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= TotalDuration) { ((EntityState)this).outer.SetNextStateToMain(); } } private void RollBack() { //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_0034: 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) rolledBack = true; Vector3 footPosition = ((EntityState)this).characterBody.footPosition; if (((EntityState)this).isAuthority && Object.op_Implicit((Object)(object)bitesTheDust)) { TeleportHelper.TeleportBody(((EntityState)this).characterBody, bitesTheDust.savedFootPosition); } if (NetworkServer.active && Object.op_Implicit((Object)(object)bitesTheDust)) { bitesTheDust.ServerRollBack(); float damageCoefficient = 25f * Mathf.Max(meterFraction, 0.4f); bitesTheDust.ServerDetonate(footPosition, damageCoefficient, ((BaseState)this).RollCrit()); } ((EntityState)this).PlayAnimation("FullBody, Override", "BitesTheDustEnd", "ShootGun.playbackRate", endDuration, 0f); Util.PlaySound("Play_JJBA_BitesTheDustRollBack", ((EntityState)this).gameObject); if (Object.op_Implicit((Object)(object)standUser)) { standUser.PlayStandAnimation("BitesTheDustEnd", 0.05f); } if (Object.op_Implicit((Object)(object)cinematic)) { cinematic.RollBack(); } } public override void OnExit() { if (Object.op_Implicit((Object)(object)cinematic)) { cinematic.End(); } if (Object.op_Implicit((Object)(object)characterModel) && disableFadeField != null) { disableFadeField.SetValue(characterModel, modelFadeWasDisabled); } if (!rolledBack) { ((EntityState)this).PlayAnimation("FullBody, Override", "BufferEmpty"); } ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)9; } } public class BitesTheDustSave : BaseSkillState { public static float baseDuration = 0.6f; private float duration; public override void OnEnter() { //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); duration = baseDuration; KiraBitesTheDust component = ((EntityState)this).GetComponent<KiraBitesTheDust>(); if (Object.op_Implicit((Object)(object)component)) { component.Save(); } ((EntityState)this).PlayAnimation("Gesture, Override", "BitesTheDustSave", "ShootGun.playbackRate", duration, 0f); Util.PlaySound("Play_Kira_StandOff", ((EntityState)this).gameObject); StandUser component2 = ((EntityState)this).GetComponent<StandUser>(); if (Object.op_Implicit((Object)(object)component2)) { component2.UseStand(0f); Ray aimRay = ((BaseState)this).GetAimRay(); component2.BeginAction(((Ray)(ref aimRay)).direction, 1f, duration); component2.PlayStandAnimation("BitesTheDustStart", 0.05f); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)1; } } public class BombDash : BaseSkillState { public static float duration = 0.5f; public static float initialSpeedCoefficient = 6f; public static float finalSpeedCoefficient = 2.5f; public static string dodgeSoundString = "Play_Kira_BombDash"; public static float dodgeFOV = DodgeState.dodgeFOV; private float dashSpeed; private Vector3 forwardDirection; private Vector3 previousPosition; public override void OnEnter() { //IL_00d0: 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_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_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_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_0053: 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_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); if (((EntityState)this).isAuthority && Object.op_Implicit((Object)(object)((EntityState)this).inputBank) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection)) { Vector3 val = ((((EntityState)this).inputBank.moveVector == Vector3.zero) ? ((EntityState)this).characterDirection.forward : ((EntityState)this).inputBank.moveVector); forwardDirection = ((Vector3)(ref val)).normalized; } RecalculateDashSpeed(); if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection)) { ((EntityState)this).characterMotor.velocity.y = 0f; ((EntityState)this).characterMotor.velocity = forwardDirection * dashSpeed; } Vector3 val2 = (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) ? ((EntityState)this).characterMotor.velocity : Vector3.zero); previousPosition = ((EntityState)this).transform.position - val2; ((EntityState)this).PlayAnimation("FullBody, Override", "Roll", "Roll.playbackRate", duration, 0f); Util.PlaySound(dodgeSoundString, ((EntityState)this).gameObject); Util.PlaySound("Play_commando_M2_grenade_explo", ((EntityState)this).gameObject); StandUser component = ((EntityState)this).GetComponent<StandUser>(); if (Object.op_Implicit((Object)(object)component)) { component.EndAction(); component.UseStand(20f); component.PlayStandAnimation("Detonate", 0.05f); } if (((EntityState)this).isAuthority) { Explode(); } if (NetworkServer.active) { ((EntityState)this).characterBody.AddTimedBuff(KiraBuffs.armorBuff, 3f * duration); ((EntityState)this).characterBody.AddTimedBuff(Buffs.HiddenInvincibility, 0.5f * duration); } } private void Explode() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_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_0020: 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_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: 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_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) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Expected O, but got Unknown Vector3 val = ((EntityState)this).characterBody.footPosition - forwardDirection * 1.5f; new BlastAttack { attacker = ((EntityState)this).gameObject, inflictor = ((EntityState)this).gameObject, teamIndex = ((BaseState)this).GetTeam(), position = val, radius = 7f, baseDamage = 3f * ((BaseState)this).damageStat, baseForce = 800f, crit = ((BaseState)this).RollCrit(), procCoefficient = 1f, falloffModel = (FalloffModel)0, damageType = DamageTypeCombo.GenericUtility, attackerFiltering = (AttackerFiltering)2 }.Fire(); if (Object.op_Implicit((Object)(object)KiraAssets.bombExplosionEffect)) { EffectManager.SpawnEffect(KiraAssets.bombExplosionEffect, new EffectData { origin = val, scale = 7f }, true); } } private void RecalculateDashSpeed() { dashSpeed = ((BaseState)this).moveSpeedStat * Mathf.Lerp(initialSpeedCoefficient, finalSpeedCoefficient, ((EntityState)this).fixedAge / duration); } public override void FixedUpdate() { //IL_0020: 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_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) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: 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_00b0: 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_00c8: 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_00d3: 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_00e7: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); RecalculateDashSpeed(); if (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection)) { ((EntityState)this).characterDirection.forward = forwardDirection; } if (Object.op_Implicit((Object)(object)((EntityState)this).cameraTargetParams)) { ((EntityState)this).cameraTargetParams.fovOverride = Mathf.Lerp(dodgeFOV, 60f, ((EntityState)this).fixedAge / duration); } Vector3 val = ((EntityState)this).transform.position - previousPosition; Vector3 normalized = ((Vector3)(ref val)).normalized; if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection) && normalized != Vector3.zero) { Vector3 val2 = normalized * dashSpeed; float num = Mathf.Max(Vector3.Dot(val2, forwardDirection), 0f); val2 = forwardDirection * num; val2.y = 0f; ((EntityState)this).characterMotor.velocity = val2; } previousPosition = ((EntityState)this).transform.position; if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { if (Object.op_Implicit((Object)(object)((EntityState)this).cameraTargetParams)) { ((EntityState)this).cameraTargetParams.fovOverride = -1f; } ((EntityState)this).OnExit(); ((EntityState)this).characterMotor.disableAirControlUntilCollision = false; } public override void OnSerialize(NetworkWriter writer) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) ((BaseSkillState)this).OnSerialize(writer); writer.Write(forwardDirection); } public override void OnDeserialize(NetworkReader reader) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) ((BaseSkillState)this).OnDeserialize(reader); forwardDirection = reader.ReadVector3(); } } public class FirstBomb : BaseSkillState { public override void OnEnter() { ((BaseState)this).OnEnter(); if (!((EntityState)this).isAuthority) { return; } KiraBombTracker component = ((EntityState)this).GetComponent<KiraBombTracker>(); if (Object.op_Implicit((Object)(object)component) && component.HasTarget) { ((EntityState)this).outer.SetNextState((EntityState)(object)new FirstBombDetonate()); return; } if (Object.op_Implicit((Object)(object)((BaseSkillState)this).activatorSkillSlot)) { ((BaseSkillState)this).activatorSkillSlot.AddOneStock(); } ((EntityState)this).outer.SetNextState((EntityState)(object)new FirstBombTouch()); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)1; } } public class FirstBombDetonate : BaseSkillState { public static float baseDuration = 0.35f; private float duration; public override void OnEnter() { //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; ((EntityState)this).PlayAnimation("Gesture, Override", "Detonate", "ShootGun.playbackRate", duration, 0f); Util.PlaySound("Play_JJBA_DetonateClick", ((EntityState)this).gameObject); Util.PlaySound(KiraSounds.DetonateLine(), ((EntityState)this).gameObject); StandUser component = ((EntityState)this).GetComponent<StandUser>(); if (Object.op_Implicit((Object)(object)component)) { component.UseStand(0f); Ray aimRay = ((BaseState)this).GetAimRay(); component.BeginAction(((Ray)(ref aimRay)).direction, 0.8f, duration); component.PlayStandAnimation("Detonate", 0.05f); } if (((EntityState)this).isAuthority) { KiraBombTracker component2 = ((EntityState)this).GetComponent<KiraBombTracker>(); HealthComponent val = (Object.op_Implicit((Object)(object)component2) ? component2.Target : null); if (Object.op_Implicit((Object)(object)component2)) { component2.ClearTarget(); } if (Object.op_Implicit((Object)(object)val)) { Detonate(val); } } } private void Detonate(HealthComponent target) { //IL_0020: 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_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_007f: 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_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_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) //IL_00bc: 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_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Expected O, but got Unknown //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Expected O, but got Unknown Vector3 val = (Object.op_Implicit((Object)(object)target.body) ? target.body.corePosition : ((Component)target).transform.position); BlastAttack val2 = new BlastAttack { attacker = ((EntityState)this).gameObject, inflictor = ((EntityState)this).gameObject, teamIndex = ((BaseState)this).GetTeam(), position = val, radius = 9f, baseDamage = 9f * ((BaseState)this).damageStat, baseForce = 1000f, bonusForce = Vector3.up * 600f, crit = ((BaseState)this).RollCrit(), procCoefficient = 1f, falloffModel = (FalloffModel)0, damageType = DamageTypeCombo.GenericSecondary, damageColorIndex = (DamageColorIndex)0, attackerFiltering = (AttackerFiltering)2 }; DamageAPI.AddModdedDamageType(val2, KiraAssets.bombDetonateDamageType); val2.Fire(); if (Object.op_Implicit((Object)(object)KiraAssets.bombExplosionEffect)) { EffectManager.SpawnEffect(KiraAssets.bombExplosionEffect, new EffectData { origin = val, scale = 9f }, true); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)2; } } public class FirstBombTouch : BaseMeleeAttack { public static float standReach = 4f; private Vector3 touchDirection; private HurtBoxReference lockedTarget; private StandUser standUser; public override void OnEnter() { //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_0088: 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_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_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) //IL_0023: 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_01b7: Unknown result type (might be due to invalid IL or missing references) standUser = ((EntityState)this).GetComponent<StandUser>(); if (((EntityState)this).isAuthority) { Ray aimRay = ((BaseState)this).GetAimRay(); touchDirection = ((Ray)(ref aimRay)).direction; StandTracker val = StandTracker.Of(((EntityState)this).gameObject); lockedTarget = HurtBoxReference.FromHurtBox(Object.op_Implicit((Object)(object)val) ? val.GetTrackingTarget() : null); } base.hitboxGroupName = "SwordGroup"; base.damageType = DamageTypeCombo.GenericSecondary; base.damageCoefficient = 1.5f; base.procCoefficient = 1f; base.pushForce = 0f; base.bonusForce = Vector3.zero; base.baseDuration = 0.5f; base.attackStartPercentTime = 0.3f; base.attackEndPercentTime = 0.55f; base.earlyExitPercentTime = 0.6f; base.hitStopDuration = 0f; base.aimUser = false; base.attackRecoil = 0.3f; base.hitHopVelocity = 0f; base.swingSoundString = "Play_JJBA_TouchSwing"; base.muzzleString = "SwingRight"; base.playbackRateParam = "Slash.playbackRate"; base.swingEffectPrefab = KiraAssets.punchSwingEffect; base.hitEffectPrefab = KiraAssets.punchHitImpactEffect; base.impactSound = KiraAssets.touchHitSoundEvent.index; if (Object.op_Implicit((Object)(object)standUser)) { standUser.UseStand(15f); } if (Object.op_Implicit((Object)(object)standUser)) { base.swingSoundSource = standUser.StandObject; } ((BaseMeleeAttack)this).OnEnter(); if (Object.op_Implicit((Object)(object)standUser)) { HurtBox val2 = ((HurtBoxReference)(ref lockedTarget)).ResolveHurtBox(); if (Object.op_Implicit((Object)(object)val2)) { standUser.BeginTargetedAction(val2, base.duration, base.attackStartPercentTime * base.duration); } else { standUser.BeginAction(touchDirection, standReach, base.duration); } standUser.PlayStandAnimation("Touch", 0.05f); } } protected override void ModifyOverlapAttack(OverlapAttack attack) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) ((BaseMeleeAttack)this).ModifyOverlapAttack(attack); DamageAPI.AddModdedDamageType(attack, KiraAssets.bombMarkDamageType); if (Object.op_Implicit((Object)(object)standUser) && Object.op_Implicit((Object)(object)standUser.hitBoxGroup)) { attack.hitBoxGroup = standUser.hitBoxGroup; } } protected override void PlaySwingEffect() { } protected override void PlayAttackAnimation() { ((EntityState)this).PlayCrossfade("Gesture, Override", "StandTouch", base.playbackRateParam, base.duration, 0.1f * base.duration); } public override void OnSerialize(NetworkWriter writer) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) ((BaseMeleeAttack)this).OnSerialize(writer); writer.Write(touchDirection); NetworkExtensions.Write(writer, lockedTarget); } public override void OnDeserialize(NetworkReader reader) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: 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) ((BaseMeleeAttack)this).OnDeserialize(reader); touchDirection = reader.ReadVector3(); lockedTarget = NetworkExtensions.ReadHurtBoxReference(reader); } } public class KillerQueenPunch : BaseMeleeAttack { private bool useStand; private Vector3 punchDirection; private HurtBoxReference lockedTarget; private StandUser standUser; public override void OnEnter() { //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_0032: 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_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0230: Unknown result type (might be due to invalid IL or missing references) //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01c6: 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_0093: Unknown result type (might be due to invalid IL or missing references) //IL_029e: Unknown result type (might be due to invalid IL or missing references) standUser = ((EntityState)this).GetComponent<StandUser>(); float num = 4f / Mathf.Max(((EntityState)this).characterBody.attackSpeed, 0.1f); if (((EntityState)this).isAuthority) { Ray aimRay = ((BaseState)this).GetAimRay(); punchDirection = ((Ray)(ref aimRay)).direction; StandTracker val = ((Object.op_Implicit((Object)(object)standUser) && standUser.CanUseStand(num)) ? StandTracker.Of(((EntityState)this).gameObject) : null); HurtBox val2 = (Object.op_Implicit((Object)(object)val) ? val.GetTrackingTarget() : null); useStand = Object.op_Implicit((Object)(object)val2); lockedTarget = HurtBoxReference.FromHurtBox(val2); } base.hitboxGroupName = "SwordGroup"; base.damageType = DamageTypeCombo.GenericPrimary; base.procCoefficient = 1f; base.bonusForce = Vector3.zero; base.attackStartPercentTime = 0.2f; base.attackEndPercentTime = 0.4f; base.earlyExitPercentTime = 0.55f; base.attackRecoil = 0.5f; base.hitSoundString = ""; base.muzzleString = ((base.swingIndex % 2 == 0) ? "SwingLeft" : "SwingRight"); base.playbackRateParam = "Slash.playbackRate"; base.swingEffectPrefab = KiraAssets.punchSwingEffect; base.hitEffectPrefab = KiraAssets.punchHitImpactEffect; if (useStand) { base.damageCoefficient = 2.4f; base.hitStopDuration = 0f; base.aimUser = false; base.pushForce = 300f; base.baseDuration = 0.75f; base.hitHopVelocity = 0f; base.swingSoundString = KiraSounds.standPunchSwings[base.swingIndex % KiraSounds.standPunchSwings.Length]; base.swingSoundSource = standUser.StandObject; base.impactSound = KiraAssets.standPunchHitSoundEvents[base.swingIndex % KiraAssets.standPunchHitSoundEvents.Length].index; standUser.UseStand(num); } else { base.damageCoefficient = 1.2f; base.hitStopDuration = 0.012f; base.pushForce = 150f; base.baseDuration = 0.9f; base.hitHopVelocity = 4f; base.swingSoundString = KiraSounds.kiraPunchSwings[base.swingIndex % KiraSounds.kiraPunchSwings.Length]; base.impactSound = KiraAssets.kiraPunchHitSoundEvent.index; } ((BaseMeleeAttack)this).OnEnter(); Util.PlaySound(KiraSounds.PunchShout(base.swingIndex), ((EntityState)this).gameObject); if (useStand) { HurtBox val3 = ((HurtBoxReference)(ref lockedTarget)).ResolveHurtBox(); if (Object.op_Implicit((Object)(object)val3)) { standUser.BeginTargetedAction(val3, base.duration, base.attackStartPercentTime * base.duration); } else { standUser.BeginAction(punchDirection, 1.6f, base.duration); } standUser.PlayStandAnimation("Punch" + (1 + base.swingIndex), 0.05f); } } protected override void ModifyOverlapAttack(OverlapAttack attack) { ((BaseMeleeAttack)this).ModifyOverlapAttack(attack); if (useStand && Object.op_Implicit((Object)(object)standUser) && Object.op_Implicit((Object)(object)standUser.hitBoxGroup)) { attack.hitBoxGroup = standUser.hitBoxGroup; } } protected override void PlaySwingEffect() { if (!useStand) { ((BaseMeleeAttack)this).PlaySwingEffect(); } } protected override void PlayAttackAnimation() { if (useStand) { ((EntityState)this).PlayCrossfade("Gesture, Override", "StandPunch" + (1 + base.swingIndex), base.playbackRateParam, base.duration, 0.1f * base.duration); } else { ((EntityState)this).PlayCrossfade("Gesture, Override", "Slash" + (1 + base.swingIndex), base.playbackRateParam, base.duration, 0.1f * base.duration); } } public override void OnSerialize(NetworkWriter writer) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) ((BaseMeleeAttack)this).OnSerialize(writer); writer.Write(useStand); writer.Write(punchDirection); NetworkExtensions.Write(writer, lockedTarget); } public override void OnDeserialize(NetworkReader reader) { //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_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) ((BaseMeleeAttack)this).OnDeserialize(reader); useStand = reader.ReadBoolean(); punchDirection = reader.ReadVector3(); lockedTarget = NetworkExtensions.ReadHurtBoxReference(reader); } } public class SheerHeartAttack : GenericProjectileBaseState { public static float standReach = 1.2f; private Vector3 launchDirection; private StandUser standUser; public static float BaseDuration = 0.65f; public static float BaseDelayDuration = 0f; public override void OnEnter() { //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) base.projectilePrefab = KiraAssets.sheerHeartAttackProjectilePrefab; base.attackSoundString = "Play_JJBA_SheerHeartAttack"; Util.PlaySound("Play_Kira_SheerHeartAttack", ((EntityState)this).gameObject); standUser = ((EntityState)this).GetComponent<StandUser>(); if (((EntityState)this).isAuthority) { Ray aimRay = ((BaseState)this).GetAimRay(); launchDirection = ((Ray)(ref aimRay)).direction; } if (Object.op_Implicit((Object)(object)standUser)) { standUser.UseStand(30f); } base.baseDuration = BaseDuration; base.baseDelayBeforeFiringProjectile = BaseDelayDuration; base.damageCoefficient = 14f; base.force = 80f; base.recoilAmplitude = 0.1f; base.bloom = 10f; ((GenericProjectileBaseState)this).OnEnter(); if (Object.op_Implicit((Object)(object)standUser)) { standUser.BeginAction(launchDirection, standReach, base.duration); standUser.PlayStandAnimation("SheerHeartAttack", 0.05f); } } public override void ModifyProjectileInfo(ref FireProjectileInfo fireProjectileInfo) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) ((GenericProjectileBaseState)this).ModifyProjectileInfo(ref fireProjectileInfo); fireProjectileInfo.damageTypeOverride = DamageTypeCombo.GenericSpecial; if (Object.op_Implicit((Object)(object)standUser)) { fireProjectileInfo.position = standUser.ActionPoint; } } public override void OnSerialize(NetworkWriter writer) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).OnSerialize(writer); writer.Write(launchDirection); } public override void OnDeserialize(NetworkReader reader) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).OnDeserialize(reader); launchDirection = reader.ReadVector3(); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)1; } public override void PlayAnimation(float duration) { if (Object.op_Implicit((Object)(object)((EntityState)this).GetModelAnimator())) { ((EntityState)this).PlayAnimation("Gesture, Override", "SummonSheerHeartAttack", "ThrowBomb.playbackRate", base.duration, 0f); } } } public class StrayCat : BaseSkillState { public const int bubbles = 5; public const float damageCoefficient = 4f; public const float speed = 16f; public const float blastRadius = 7f; public const float standCost = 25f; public static GameObject bubblePrefab; public static float baseDuration = 0.7f; private float duration; private bool fired; public static void CreateProjectile() { bubblePrefab = Asset.CloneProjectilePrefab("CommandoGrenadeProjectile", "KiraStrayCatBubble"); ApplyTorqueOnStart component = bubblePrefab.GetComponent<ApplyTorqueOnStart>(); if (Object.op_Implicit((Object)(object)component)) { Object.DestroyImmediate((Object)(object)component); } Rigidbody component2 = bubblePrefab.GetComponent<Rigidbody>(); if (Object.op_Implicit((Object)(object)component2)) { component2.useGravity = false; component2.collisionDetectionMode = (CollisionDetectionMode)2; } ProjectileSimple val = bubblePrefab.GetComponent<ProjectileSimple>(); if (!Object.op_Implicit((Object)(object)val)) { val = bubblePrefab.AddComponent<ProjectileSimple>(); } val.desiredForwardSpeed = 16f; val.updateAfterFiring = true; val.lifetime = 6f; ProjectileImpactExplosion component3 = bubblePrefab.GetComponent<ProjectileImpactExplosion>(); if (Object.op_Implicit((Object)(object)component3)) { ((ProjectileExplosion)component3).blastRadius = 7f; ((ProjectileExplosion)component3).blastDamageCoefficient = 1f; component3.destroyOnEnemy = true; component3.destroyOnWorld = true; component3.lifetime = 6f; component3.timerAfterImpact = false; component3.impactEffect = (Object.op_Implicit((Object)(object)KiraAssets.bombExplosionEffect) ? KiraAssets.bombExplosionEffect : component3.impactEffect); } bubblePrefab.AddComponent<KnifeCollisionGuard>(); ProjectileController component4 = bubblePrefab.GetComponent<ProjectileController>(); component4.startSound = ""; component4.procCoefficient = 1f; GameObject val2 = LegacyResourcesAPI.Load<GameObject>("Prefabs/ProjectileGhosts/MageIceBombGhost"); if (Object.op_Implicit((Object)(object)val2)) { component4.ghostPrefab = val2; } Content.AddProjectilePrefab(bubblePrefab); } public override void OnEnter() { //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; ((BaseState)this).StartAimMode(duration + 1f, false); ((EntityState)this).PlayAnimation("Gesture, Override", "ThrowBomb", "ThrowBomb.playbackRate", duration, 0f); StandUser component = ((EntityState)this).GetComponent<StandUser>(); if (Object.op_Implicit((Object)(object)component)) { component.UseStand(25f); Ray aimRay = ((BaseState)this).GetAimRay(); component.BeginAction(((Ray)(ref aimRay)).direction, 1.5f, duration); component.PlayStandAnimation("StrayCat", 0.05f); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (!fired && ((EntityState)this).fixedAge >= duration * 0.45f) { fired = true; Util.PlaySound("Play_Kira_Swing2", ((EntityState)this).gameObject); if (((EntityState)this).isAuthority && Object.op_Implicit((Object)(object)bubblePrefab)) { Fire(); } } if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration) { ((EntityState)this).outer.SetNextStateToMain(); } } private void Fire() { //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_0024: 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_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //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_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_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_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) StandUser component = ((EntityState)this).GetComponent<StandUser>(); Ray aimRay = ((BaseState)this).GetAimRay(); Vector3 val = (Object.op_Implicit((Object)(object)component) ? component.StandPosition : ((EntityState)this).characterBody.corePosition); for (int i = 0; i < 5; i++) { float num = Mathf.Lerp(-22f, 22f, (float)i / 4f); float num2 = Random.Range(-6f, 6f); Vector3 val2 = Quaternion.AngleAxis(num, Vecto