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 UnofficialRiskOfRuina v1.2.3
RiskOfRuinaMod.dll
Decompiled 7 months 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.Collections.ObjectModel; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using AncientScepter; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using EmotesAPI; using EntityStates; using EntityStates.Commando.CommandoWeapon; using EntityStates.Huntress; using EntityStates.Mage; using HG; using HG.BlendableTypes; using IL.RoR2; using JetBrains.Annotations; using Mono.Cecil.Cil; using MonoMod.Cil; using NS_KingKombatArena; using On.RoR2; using On.RoR2.CharacterSpeech; using On.RoR2.Networking; using On.RoR2.UI; using R2API; using R2API.Utils; using RiskOfRuinaMod.Modules; using RiskOfRuinaMod.Modules.Components; using RiskOfRuinaMod.Modules.Items; using RiskOfRuinaMod.Modules.Misc; using RiskOfRuinaMod.Modules.Survivors; using RiskOfRuinaMod.SkillStates; using RiskOfRuinaMod.SkillStates.BaseStates; using RoR2; using RoR2.Achievements; using RoR2.Audio; using RoR2.CharacterAI; using RoR2.CharacterSpeech; using RoR2.ContentManagement; using RoR2.Networking; using RoR2.Projectile; using RoR2.Skills; using RoR2.UI; using RoR2BepInExPack.GameAssetPaths; using TILER2; using ThinkInvisible.ClassicItems; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Events; using UnityEngine.Networking; using UnityEngine.Rendering; using UnityEngine.SceneManagement; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyCompany("RiskOfRuinaMod")] [assembly: AssemblyProduct("RiskOfRuinaMod")] [assembly: AssemblyTitle("RiskOfRuinaMod")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] internal class BodyInfo { internal string bodyName = ""; internal string bodyNameToken = ""; internal string subtitleNameToken = ""; internal string bodyNameToClone = "Commando"; internal Texture characterPortrait; internal GameObject crosshair; internal GameObject podPrefab; internal float maxHealth = 100f; internal float healthGrowth = 2f; internal float healthRegen; internal float shield; internal float shieldGrowth; internal float moveSpeed = 7f; internal float moveSpeedGrowth; internal float acceleration = 80f; internal float jumpPower = 15f; internal float jumpPowerGrowth; internal float damage = 12f; internal float attackSpeed = 1f; internal float attackSpeedGrowth; internal float armor; internal float armorGrowth; internal float crit = 1f; internal float critGrowth; internal float sprintSpeedMult = 1.45f; internal int jumpCount = 1; internal Color bodyColor = Color.grey; internal Vector3 aimOriginPosition = new Vector3(0f, 1.8f, 0f); internal Vector3 modelBasePosition = new Vector3(0f, -0.92f, 0f); internal Vector3 cameraPivotPosition = new Vector3(0f, 1.6f, 0f); } internal class CustomRendererInfo { internal string childName; internal Material material; internal bool ignoreOverlays; } internal class SkillDefInfo { public string skillName; public string skillNameToken; public string skillDescriptionToken; public Sprite skillIcon; public SerializableEntityStateType activationState; public string activationStateMachineName; public int baseMaxStock; public float baseRechargeInterval; public bool beginSkillCooldownOnSkillEnd; public bool canceledFromSprinting; public bool forceSprintDuringState; public bool fullRestockOnAssign; public InterruptPriority interruptPriority; public bool resetCooldownTimerOnUse; public bool isCombatSkill; public bool mustKeyPress; public bool cancelSprintingOnActivation; public int rechargeStock; public int requiredStock; public int stockToConsume; public string[] keywordTokens; } namespace RiskOfRuinaMod { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.Moonlol.UnofficialRiskOfRuina", "UnofficialRiskOfRuina", "1.2.3")] public class RiskOfRuinaPlugin : BaseUnityPlugin { public const string MODUID = "com.Moonlol.UnofficialRiskOfRuina"; public const string MODNAME = "UnofficialRiskOfRuina"; public const string MODVERSION = "1.2.3"; public const string developerPrefix = "COF"; public static bool DEBUG_MODE = false; public static GameObject CentralNetworkObject; public static GameObject _centralNetworkObjectSpawned; internal List<SurvivorBase> Survivors = new List<SurvivorBase>(); public static GameObject characterPrefab; public static RiskOfRuinaPlugin instance; public static bool ancientScepterInstalled = false; public static bool notstandalone = false; public static bool kombatArenaInstalled = false; public static uint argaliaSkinIndex = 1u; public bool IsRedMistSelected; public bool IsArbiterSelected; public bool IsBlackSilenceSelected; public bool IsModCharSelected; public string CurrentCharacterNameSelected = ""; public bool songOverride; public uint currentOverrideSong; private DoTCore dotCore; private ItemManager itemManager; private void Awake() { //IL_01c7: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: 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_01de: Expected O, but got Unknown //IL_01e8: Expected O, but got Unknown instance = this; Config.ReadConfig(); Asset.Initialize(); CameraParams.InitializeParams(); States.RegisterStates(); Buffs.RegisterBuffs(); dotCore = new DoTCore(); Projectiles.RegisterProjectiles(); Tokens.AddTokens(); Music.Initialize(); itemManager = new ItemManager(); itemManager.items.Add(new ArbitersTrophy()); itemManager.items.Add(new BlackTea()); itemManager.items.Add(new Prescript()); itemManager.items.Add(new LiuBadge()); itemManager.items.Add(new WorkshopAmmo()); itemManager.items.Add(new WeddingRing()); itemManager.items.Add(new UdjatMask()); itemManager.items.Add(new Reverberation()); ItemManager.instance.AddItems(); itemManager.equips.Add(new BackwardsClock()); ItemManager.instance.AddEquips(); ItemDisplays.PopulateDisplays(); Unlockables.AddUnlockables(); if (Config.CharacterEnableConfig("RedMist").Value) { new RedMist().Initialize(); } if (Config.CharacterEnableConfig("Arbiter").Value) { new AnArbiter().Initialize(); } if (Chainloader.PluginInfos.ContainsKey("com.DestroyedClone.AncientScepter")) { ancientScepterInstalled = true; Skills.ScepterSkillSetup("COF"); standaloneScepterSetup(); } else if (Chainloader.PluginInfos.ContainsKey("com.ThinkInvisible.ClassicItems")) { ancientScepterInstalled = true; notstandalone = true; Skills.ScepterSkillSetup("COF"); classicScepterSetup(); } if (Chainloader.PluginInfos.ContainsKey("com.Kingpinush.KingKombatArena")) { kombatArenaInstalled = true; } GameObject val = new GameObject("tmpGo"); val.AddComponent<NetworkIdentity>(); CentralNetworkObject = PrefabAPI.InstantiateClone(val, "riskOfRuinaNetworkManager"); Object.Destroy((Object)val); CentralNetworkObject.AddComponent<RiskOfRuinaNetworkManager>(); new ContentPacks().Initialize(); ContentManager.onContentPacksAssigned += LateSetup; Hook(); } private void LateSetup(ReadOnlyArray<ReadOnlyContentPack> obj) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown SurvivorBase.instance?.SetItemDisplays(); CharacterBody.RecalculateStats += new hook_RecalculateStats(CharacterBody_RecalculateStats); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] private void standaloneScepterSetup() { ItemBase<AncientScepterItem>.instance.RegisterScepterSkill(Skills.ScepterBasicAttack, "RedMistBody", (SkillSlot)0, 0); ItemBase<AncientScepterItem>.instance.RegisterScepterSkill(Skills.scepterShockwaveDef, "ArbiterBody", (SkillSlot)3, 0); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] private void classicScepterSetup() { Item<Scepter>.instance.RegisterScepterSkill(Skills.ScepterBasicAttack, "RedMistBody", (SkillSlot)0, RedMist.BasicAttack); Item<Scepter>.instance.RegisterScepterSkill(Skills.scepterShockwaveDef, "ArbiterBody", (SkillSlot)3, AnArbiter.Shockwave); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static bool KombatGamemodeActive() { return KingKombatArenaMainPlugin.s_GAME_MODE_ACTIVE; } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static bool KombatIsDueling(CharacterMaster masterToCheck) { return ((NetworkedGameModeData)(ref NetworkedGameModeManager.instance.m_currentNetworkedGameModeData)).IsCharacterDueling(masterToCheck); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static bool KombatIsCharacter(CharacterMaster masterToCheck) { return KingKombatArenaMainPlugin.AccessCurrentKombatArenaInstance().GetAllCurrentCharacterMasters().Contains(masterToCheck); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static bool KombatIsWaiting(GameObject bodyToCheck) { return KingKombatArenaMainPlugin.IsInWaitingArea(bodyToCheck); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static int KombatDuelsPlayed(CharacterMaster masterToCheck) { return ((ParticipantData)(ref ((NetworkedGameModeData)(ref NetworkedGameModeManager.instance.m_currentNetworkedGameModeData)).AccessParticipantData(masterToCheck))).GetDuelTotal(); } private void Hook() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Expected O, but got Unknown //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Expected O, but got Unknown //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Expected O, but got Unknown //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Expected O, but got Unknown //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Expected O, but got Unknown //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Expected O, but got Unknown //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Expected O, but got Unknown //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Expected O, but got Unknown //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Expected O, but got Unknown if (Config.snapLevel.Value) { CharacterBody.OnLevelUp += new hook_OnLevelUp(CharacterBody_OnLevelUp); } GlobalEventManager.OnHitEnemy += new hook_OnHitEnemy(GlobalEvent_OnHitEnemy); GlobalEventManager.OnCharacterDeath += new hook_OnCharacterDeath(GlobalEvent_OnCharacterDeath); BrotherSpeechDriver.DoInitialSightResponse += new hook_DoInitialSightResponse(BrotherSpeechDriver_DoInitialSightResponse); BrotherSpeechDriver.OnBodyKill += new hook_OnBodyKill(BrotherSpeechDriver_OnBodyKill); NetworkManagerSystem.OnClientSceneChanged += new hook_OnClientSceneChanged(GameNetworkManager_OnClientSceneChanged_Hook); CharacterSelectController.Update += new hook_Update(Update_Hook); CharacterBody.OnSkillActivated += new hook_OnSkillActivated(CharacterBody_OnSkillActivated); DotController.onDotInflictedServerGlobal += new OnDotInflictedServerGlobalDelegate(DotController_InflictDot); if (Chainloader.PluginInfos.ContainsKey("com.weliveinasociety.CustomEmotesAPI")) { SurvivorCatalog.Init += new hook_Init(catalogue_hook); } } private void CharacterBody_OnSkillActivated(orig_OnSkillActivated orig, CharacterBody self, GenericSkill skill) { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_01fd: Expected O, but got Unknown //IL_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_0203: Unknown result type (might be due to invalid IL or missing references) //IL_0208: Unknown result type (might be due to invalid IL or missing references) //IL_020f: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_019d: Expected O, but got Unknown //IL_0091: 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_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, skill); if (!Object.op_Implicit((Object)(object)self) || !NetworkServer.active) { return; } DotController val = DotController.FindDotController(((Component)self).gameObject); if (!Object.op_Implicit((Object)(object)val) || !val.HasDotActive(DoTCore.FairyIndex)) { return; } _ = self.GetBuffCount(Buffs.fairyDebuff) / 3; for (int i = 0; i < val.dotStackList.Count; i++) { DotStack val2 = val.dotStackList[i]; if (val2.dotIndex == DoTCore.FairyIndex) { DamageInfo val3 = ((!Object.op_Implicit((Object)(object)val2.attackerObject) || !Object.op_Implicit((Object)(object)val2.attackerObject.GetComponent<CharacterBody>())) ? new DamageInfo { attacker = val2.attackerObject, inflictor = val2.attackerObject, crit = false, damage = 1f, position = self.corePosition, force = Vector3.zero, damageType = DamageTypeCombo.op_Implicit((DamageType)0), damageColorIndex = (DamageColorIndex)2, dotIndex = DoTCore.FairyIndex, procCoefficient = Config.FairyProc.Value } : new DamageInfo { attacker = val2.attackerObject, inflictor = val2.attackerObject, crit = val2.attackerObject.GetComponent<CharacterBody>().RollCrit(), damage = val2.attackerObject.GetComponent<CharacterBody>().damage * 1f, position = self.corePosition, force = Vector3.zero, damageType = DamageTypeCombo.op_Implicit((DamageType)0), damageColorIndex = (DamageColorIndex)2, dotIndex = DoTCore.FairyIndex, procCoefficient = Config.FairyProc.Value }); self.healthComponent.TakeDamage(val3); GlobalEventManager.instance.OnHitEnemy(val3, ((Component)self.healthComponent.body).gameObject); GlobalEventManager.instance.OnHitAll(val3, ((Component)self.healthComponent.body).gameObject); } } EffectData val4 = new EffectData(); val4.rotation = Util.QuaternionSafeLookRotation(Vector3.zero); val4.origin = self.corePosition; EffectManager.SpawnEffect(Asset.fairyProcEffect, val4, false); } private void Update_Hook(orig_Update orig, CharacterSelectController self) { orig.Invoke(self); if ((Object)(object)self.currentSurvivorDef != (Object)null) { IsRedMistSelected = self.currentSurvivorDef.cachedName == "RedMist"; IsArbiterSelected = self.currentSurvivorDef.cachedName == "Arbiter"; IsBlackSilenceSelected = self.currentSurvivorDef.cachedName == "BlackSilence"; IsModCharSelected = IsArbiterSelected || IsRedMistSelected || IsBlackSilenceSelected; } SurvivorDef currentSurvivorDef = self.currentSurvivorDef; CurrentCharacterNameSelected = ((currentSurvivorDef != null) ? currentSurvivorDef.cachedName : null); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] private void catalogue_hook(orig_Init orig) { orig.Invoke(); foreach (SurvivorDef allSurvivorDef in SurvivorCatalog.allSurvivorDefs) { if (((Object)allSurvivorDef.bodyPrefab).name == "ArbiterBody") { CustomEmotesAPI.ImportArmature(allSurvivorDef.bodyPrefab, Asset.rigbundle.LoadAsset<GameObject>("mdlArbiter"), 0, true); } } } private void GameNetworkManager_OnClientSceneChanged_Hook(orig_OnClientSceneChanged orig, NetworkManagerSystem self, NetworkConnection conn) { //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) orig.Invoke(self, conn); Scene activeScene = SceneManager.GetActiveScene(); if (((Scene)(ref activeScene)).name.Contains("outro") && IsModCharSelected) { songOverride = true; currentOverrideSong = Util.PlaySound("Play_Dark_Fantasy_Studio___Sun_and_Moon", ((Component)this).gameObject); Music.musicSources++; } else if (songOverride) { songOverride = false; AkSoundEngine.StopPlayingID(currentOverrideSong); Music.musicSources--; } } private void BrotherSpeechDriver_DoInitialSightResponse(orig_DoInitialSightResponse orig, BrotherSpeechDriver self) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0043: 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_0083: Unknown result type (might be due to invalid IL or missing references) bool flag = false; ReadOnlyCollection<CharacterBody> readOnlyInstancesList = CharacterBody.readOnlyInstancesList; for (int i = 0; i < readOnlyInstancesList.Count; i++) { BodyIndex bodyIndex = readOnlyInstancesList[i].bodyIndex; flag |= bodyIndex == BodyCatalog.FindBodyIndex(RedMist.redMistPrefab); } if (flag) { SpeechInfo[] array = (SpeechInfo[])(object)new SpeechInfo[1] { new SpeechInfo { duration = 1f, maxWait = 4f, mustPlay = true, priority = 0f, token = "BROTHER_SEE_REDMIST_1" } }; self.SendReponseFromPool(array); } orig.Invoke(self); } private void BrotherSpeechDriver_OnBodyKill(orig_OnBodyKill orig, BrotherSpeechDriver self, DamageReport damageReport) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0029: 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_0068: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)damageReport.victimBody) && damageReport.victimBodyIndex == BodyCatalog.FindBodyIndex(RedMist.redMistPrefab)) { SpeechInfo[] array = (SpeechInfo[])(object)new SpeechInfo[1] { new SpeechInfo { duration = 1f, maxWait = 4f, mustPlay = true, priority = 0f, token = "BROTHER_KILL_REDMIST_1" } }; self.SendReponseFromPool(array); } orig.Invoke(self, damageReport); } private void CharacterBody_OnLevelUp(orig_OnLevelUp orig, CharacterBody self) { orig.Invoke(self); if (Object.op_Implicit((Object)(object)self) && IsModCharSelected && self.isPlayerControlled) { Util.PlaySound("Ruina_Snap", ((Component)self).gameObject); } } private void CharacterBody_RecalculateStats(orig_RecalculateStats orig, CharacterBody self) { orig.Invoke(self); if (!Object.op_Implicit((Object)(object)self)) { return; } if (self.HasBuff(Buffs.feebleDebuff)) { self.armor *= 0.5f; self.damage *= 0.5f; } if (self.HasBuff(Buffs.warpBuff)) { self.moveSpeed *= 2f; self.attackSpeed *= 2f; } if (self.HasBuff(Buffs.strengthBuff)) { if (self.isPlayerControlled) { self.moveSpeed *= 1.5f; self.attackSpeed *= 1.5f; self.regen *= 2f; self.armor += 50f; self.damage *= 1.5f; } else { self.moveSpeed *= 1.5f; self.attackSpeed *= 5f; self.regen *= 5f; self.armor += 100f; self.damage *= 5f; } if (Object.op_Implicit((Object)(object)self.skillLocator)) { if (Object.op_Implicit((Object)(object)self.skillLocator.primary)) { GenericSkill primary = self.skillLocator.primary; primary.cooldownScale -= 0.25f; } if (Object.op_Implicit((Object)(object)self.skillLocator.secondary)) { GenericSkill secondary = self.skillLocator.secondary; secondary.cooldownScale -= 0.25f; } if (Object.op_Implicit((Object)(object)self.skillLocator.utility)) { GenericSkill utility = self.skillLocator.utility; utility.cooldownScale -= 0.25f; } if (Object.op_Implicit((Object)(object)self.skillLocator.special)) { GenericSkill special = self.skillLocator.special; special.cooldownScale -= 0.25f; } } } RedMistStatTracker component = ((Component)self).GetComponent<RedMistStatTracker>(); RedMistEmotionComponent component2 = ((Component)self).GetComponent<RedMistEmotionComponent>(); if (!Object.op_Implicit((Object)(object)component) || !Object.op_Implicit((Object)(object)component2)) { return; } float moveSpeed = self.moveSpeed; float attackSpeed = self.attackSpeed; self.moveSpeed = self.baseMoveSpeed; self.attackSpeed = self.baseAttackSpeed; float num = (moveSpeed - self.baseMoveSpeed) / self.baseMoveSpeed; if (self.isSprinting) { num = (moveSpeed - self.baseMoveSpeed * self.sprintingSpeedMultiplier) / (self.baseMoveSpeed * self.sprintingSpeedMultiplier); } float num2 = (attackSpeed - self.baseAttackSpeed) / self.baseAttackSpeed; num *= Config.moveSpeedMult.Value; num2 *= Config.attackSpeedMult.Value; float num3 = self.baseDamage + self.levelDamage * (self.level - 1f); float num4 = Config.redMistBuffDamage.Value * (float)self.GetBuffCount(Buffs.RedMistBuff) * num3; self.damage += num4; float num5 = num * num3 + num2 * num3; self.damage += num5; float num6 = 0f; float num7 = 0f; if (Object.op_Implicit((Object)(object)self.inventory) && self.inventory.GetItemCount(Items.SprintBonus) > 0) { num6 += Config.sprintSpeedMult.Value * (float)self.inventory.GetItemCount(Items.SprintBonus); } if (Object.op_Implicit((Object)(object)self.inventory) && self.inventory.GetItemCount(Items.SprintOutOfCombat) > 0) { num7 += Config.sprintSpeedMult.Value * 2f * (float)self.inventory.GetItemCount(Items.SprintOutOfCombat); } if (self.HasBuff(Buffs.EGOBuff)) { if (!component2.inEGO && NetworkServer.active) { self.RemoveBuff(Buffs.EGOBuff); } self.armor += 50f; self.sprintingSpeedMultiplier = 2.2f; } else { self.sprintingSpeedMultiplier = 1.5f; } self.sprintingSpeedMultiplier += num6; if (self.outOfCombat) { self.sprintingSpeedMultiplier += num7; } if (self.isSprinting) { self.moveSpeed *= self.sprintingSpeedMultiplier; } } private void GlobalEvent_OnHitEnemy(orig_OnHitEnemy orig, GlobalEventManager self, DamageInfo damageInfo, GameObject victim) { //IL_0058: 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_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: 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_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_0213: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) if (NetworkServer.active) { RiskOfRuinaNetworkManager.OnHit(self, damageInfo, victim); } GameObject attacker = damageInfo.attacker; if (Object.op_Implicit((Object)(object)self) && Object.op_Implicit((Object)(object)attacker)) { CharacterBody component = attacker.GetComponent<CharacterBody>(); CharacterBody component2 = victim.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component2) && component.teamComponent.teamIndex != component2.teamComponent.teamIndex) { if (component.baseNameToken == "COF_REDMIST_BODY_NAME") { RedMistStatTracker component3 = ((Component)component).GetComponent<RedMistStatTracker>(); RedMistEmotionComponent component4 = ((Component)component).GetComponent<RedMistEmotionComponent>(); if (Object.op_Implicit((Object)(object)component3) && Object.op_Implicit((Object)(object)component4)) { float damage = component.damage; float num = Mathf.Clamp(damageInfo.damage / damage, 0f, 4f); float num2 = (float)Run.instance.stageClearCount / ((float)Run.instance.stageClearCount + 1f); if (kombatArenaInstalled && KombatGamemodeActive() && Object.op_Implicit((Object)(object)component.master)) { num2 = (float)KombatDuelsPlayed(component.master) / ((float)KombatDuelsPlayed(component.master) + 1f); } float num3 = num * Config.emotionRatio.Value; float num4 = 1f; if (component2.isElite) { num4 = 1.2f; } if (component2.isBoss) { num4 = 1.4f; } if (kombatArenaInstalled && KombatGamemodeActive()) { num4 = ((!Object.op_Implicit((Object)(object)component2.master) || !KombatIsCharacter(component2.master)) ? 0.75f : 7.5f); } component4.AddEmotion((num3 + num3 * num2) * num4); } } if (component.baseNameToken == "COF_ARBITER_BODY_NAME" && damageInfo.dotIndex != DoTCore.FairyIndex && Util.CheckRoll(100f * damageInfo.procCoefficient, component.master)) { InflictDotInfo val = default(InflictDotInfo); val.attackerObject = damageInfo.attacker; val.victimObject = victim; val.dotIndex = DoTCore.FairyIndex; val.duration = 10f; val.damageMultiplier = 0f; InflictDotInfo val2 = val; DotController.InflictDot(ref val2); } } } orig.Invoke(self, damageInfo, victim); } private void GlobalEvent_OnCharacterDeath(orig_OnCharacterDeath orig, GlobalEventManager self, DamageReport damageReport) { //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Expected O, but got Unknown //IL_0148: 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_0089: Expected O, but got Unknown //IL_0090: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)damageReport?.attackerBody) && damageReport.attackerBody.baseNameToken == "COF_REDMIST_BODY_NAME") { RedMistEmotionComponent component = ((Component)damageReport.attackerBody).GetComponent<RedMistEmotionComponent>(); if (Object.op_Implicit((Object)(object)component) && component.inEGO && NetworkServer.active) { damageReport.attackerBody.AddBuff(Buffs.RedMistBuff); } if (damageReport.combinedHealthBeforeDamage - damageReport.damageDealt <= 0f - damageReport.victim.fullHealth) { EffectData val = new EffectData(); val.origin = damageReport.victimBody.corePosition; val.scale = 1f; EffectManager.SpawnEffect(Asset.mistEffect, val, true); if (Object.op_Implicit((Object)(object)damageReport.victimBody.modelLocator) && Object.op_Implicit((Object)(object)((Component)damageReport.victimBody.modelLocator.modelTransform).GetComponent<CharacterModel>()) && NetworkServer.active) { RiskOfRuinaNetworkManager.SetInvisible(((Component)damageReport.victimBody).gameObject); } } } if (damageReport.victimBody.baseNameToken == "COF_REDMIST_BODY_NAME" || damageReport.victimBody.baseNameToken == "COF_ARBITER_BODY_NAME" || damageReport.victimBody.baseNameToken == "COF_BLACKSILENCE_BODY_NAME") { EffectData val2 = new EffectData(); val2.origin = damageReport.victimBody.corePosition; val2.scale = 1f; EffectManager.SpawnEffect(Asset.pagePoof, val2, true); if (NetworkServer.active) { RiskOfRuinaNetworkManager.SetInvisible(((Component)damageReport.victimBody).gameObject); } } orig.Invoke(self, damageReport); } private void DotController_InflictDot(DotController self, ref InflictDotInfo dotInfo) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) if (dotInfo.dotIndex != DoTCore.FairyIndex) { return; } int i = 0; for (int count = self.dotStackList.Count; i < count; i++) { if (self.dotStackList[i].dotIndex == DoTCore.FairyIndex) { self.dotStackList[i].timer = Mathf.Max(self.dotStackList[i].timer, dotInfo.duration); } } } } } namespace RiskOfRuinaMod.SkillStates { internal class AirBackAttack : BaseDirectionalSkill { public override void OnEnter() { //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0086: 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_0095: Unknown result type (might be due to invalid IL or missing references) attackIndex = 1; hitboxName = "AirBasic"; damageCoefficient = 2f; baseDuration = 0.25f; attackStartTime = 0.5f; attackEndTime = 0.8f; baseEarlyExitTime = 0f; hitStopDuration = 0.05f; swingSoundString = "Ruina_Swipe"; impactSound = Asset.swordHitSoundVert.index; muzzleString = "SwingLeft"; hitEffectPrefab = Asset.swordHitEffect; bonusForce = Vector3.down * 900f; base.OnEnter(); swingEffectPrefab = statTracker.slashPrefab; } public override void FixedUpdate() { base.FixedUpdate(); ((EntityState)this).characterMotor.velocity.y = 0f; if (stopwatch > duration * attackEndTime) { ((EntityState)this).outer.SetNextState((EntityState)(object)new AirBackFallingAttack()); } } protected override void PlayAttackAnimation() { ((EntityState)this).PlayCrossfade("FullBody, Override", "AirBackSlash", "BaseAttack.playbackRate", duration, 0.1f); } protected override void PlaySwingEffect() { base.PlaySwingEffect(); } protected override void OnHitEnemyAuthority() { base.OnHitEnemyAuthority(); } protected override void FireAttack() { base.FireAttack(); } public override void OnExit() { base.OnExit(); } } internal class AirBackFallingAttack : BaseSkillState { private float duration = 10f; private float cooldown = 0.4f; private float landTime; private bool landed; public ShakeEmitter shakeEmitter; private float startY; protected float trueDamage => ((BaseState)this).damageStat; public override void OnEnter() { //IL_000d: 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_0014: 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) ((BaseState)this).OnEnter(); CharacterBody characterBody = ((EntityState)this).characterBody; characterBody.bodyFlags = (BodyFlags)(characterBody.bodyFlags | 1); if (((EntityState)this).isAuthority) { ((EntityState)this).characterMotor.velocity.y = -60f; CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.rootMotion.y = characterMotor.rootMotion.y - 0.5f; ((EntityState)this).characterMotor.velocity.x = 0f; ((EntityState)this).characterMotor.velocity.z = 0f; } startY = ((EntityState)this).characterBody.corePosition.y; ((EntityState)this).PlayCrossfade("FullBody, Override", "AirBackSlashContinue", "BaseAttack.playbackRate", duration, 0.1f); } public override void FixedUpdate() { //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01b6: Expected O, but got Unknown //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_0219: Unknown result type (might be due to invalid IL or missing references) //IL_021e: 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_0225: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) //IL_023d: Unknown result type (might be due to invalid IL or missing references) //IL_023e: Unknown result type (might be due to invalid IL or missing references) //IL_0240: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) //IL_0251: Unknown result type (might be due to invalid IL or missing references) //IL_0258: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Unknown result type (might be due to invalid IL or missing references) //IL_0262: Unknown result type (might be due to invalid IL or missing references) //IL_026e: Unknown result type (might be due to invalid IL or missing references) //IL_0282: Unknown result type (might be due to invalid IL or missing references) //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_0289: Unknown result type (might be due to invalid IL or missing references) //IL_028b: Unknown result type (might be due to invalid IL or missing references) //IL_0290: Unknown result type (might be due to invalid IL or missing references) //IL_0292: Unknown result type (might be due to invalid IL or missing references) //IL_0297: Unknown result type (might be due to invalid IL or missing references) //IL_0299: 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) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (landed) { if (((EntityState)this).fixedAge >= landTime + cooldown && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } return; } if (((EntityState)this).isAuthority && ((EntityState)this).characterMotor.velocity.y > -100f) { ((EntityState)this).characterMotor.velocity.y = -100f; } if (((EntityState)this).fixedAge >= duration || ((EntityState)this).characterMotor.isGrounded) { Util.PlaySound("Play_Kali_Special_Vert_Fin", ((EntityState)this).gameObject); ((EntityState)this).PlayCrossfade("FullBody, Override", "AirBackSlashFinish", "BaseAttack.playbackRate", cooldown, 0.1f); landed = true; landTime = ((EntityState)this).fixedAge; if (((EntityState)this).isAuthority) { shakeEmitter = ((EntityState)this).gameObject.AddComponent<ShakeEmitter>(); shakeEmitter.amplitudeTimeDecay = true; shakeEmitter.duration = 0.2f; shakeEmitter.radius = 80f; shakeEmitter.scaleShakeRadiusWithLocalScale = false; shakeEmitter.wave = new Wave { amplitude = 0.8f, frequency = 30f, cycleOffset = 0f }; float num = 8f; ((BaseState)this).AddRecoil(-0.4f * num, -0.8f * num, -0.3f * num, 0.3f * num); CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.velocity *= 0.1f; CharacterBody characterBody = ((EntityState)this).characterBody; characterBody.bodyFlags = (BodyFlags)(characterBody.bodyFlags - 1); EffectData val = new EffectData(); val.origin = ((EntityState)this).characterBody.footPosition; val.scale = 1f; EffectManager.SpawnEffect(((EntityState)this).GetComponent<RedMistStatTracker>().groundPoundEffect, val, true); float y = ((EntityState)this).characterBody.corePosition.y; float num2 = Mathf.Clamp((startY - y) / 10f, 1f, 10f); Vector3 footPosition = ((EntityState)this).characterBody.footPosition; new BlastAttack { radius = 10f + num2, procCoefficient = 0.8f, position = footPosition, attacker = ((EntityState)this).gameObject, teamIndex = ((EntityState)this).teamComponent.teamIndex, crit = ((BaseState)this).RollCrit(), baseDamage = trueDamage * 2f * num2, damageColorIndex = (DamageColorIndex)0, falloffModel = (FalloffModel)0, attackerFiltering = (AttackerFiltering)2, damageType = DamageTypeCombo.op_Implicit((DamageType)0) }.Fire(); ((EntityState)this).characterMotor.velocity.y = 0f; } } } public override void OnExit() { ((EntityState)this).OnExit(); Object.Destroy((Object)(object)shakeEmitter); } } internal class AirBasicAttack : BaseDirectionalSkill { public override void OnEnter() { //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) if (attackIndex > 2) { attackIndex = 1; } hitboxName = "AirBasic"; damageCoefficient = 2f; baseDuration = 1f; attackStartTime = 0.2f; attackEndTime = 0.4f; baseEarlyExitTime = 0.4f; hitStopDuration = 0.05f; swingHopVelocity = 8f; pushForce = 0f; bonusForce = Vector3.zero; swingSoundString = "Ruina_Swipe"; impactSound = Asset.swordHitSoundHori.index; switch (attackIndex) { case 1: muzzleString = "Air1"; break; case 2: muzzleString = "Air2"; break; } hitEffectPrefab = Asset.swordHitEffect; base.OnEnter(); swingEffectPrefab = statTracker.slashPrefab; } protected override void PlayAttackAnimation() { ((EntityState)this).PlayCrossfade("FullBody, Override", "AirBasicSlash" + attackIndex, "BaseAttack.playbackRate", duration, 0.1f); } protected override void PlaySwingEffect() { base.PlaySwingEffect(); } protected override void OnHitEnemyAuthority() { base.OnHitEnemyAuthority(); } public override void FixedUpdate() { base.FixedUpdate(); } protected override void FireAttack() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) base.FireAttack(); if (inputVector != Vector2.zero && !inHitPause) { float num = Mathf.Clamp(0f, 2f, 0.5f * base.trueMoveSpeed); CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.rootMotion += ((EntityState)this).inputBank.moveVector * (num * FlyUpState.speedCoefficientCurve.Evaluate(((EntityState)this).fixedAge / duration) * Time.fixedDeltaTime); } } public override void OnExit() { base.OnExit(); } } internal class BackAttack : BaseDirectionalSkill { public override void OnEnter() { //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) attackIndex = 1; hitboxName = "Back"; damageCoefficient = 1.75f; baseDuration = 1f; attackStartTime = 0.4f; attackEndTime = 0.6f; baseEarlyExitTime = 0.2f; hitStopDuration = 0.05f; swingSoundString = "Ruina_Swipe"; impactSound = Asset.swordHitSoundHori.index; muzzleString = "BasicSwing3"; hitEffectPrefab = Asset.swordHitEffect; if (attackIndex == 1) { if (NetworkServer.active) { ((EntityState)this).characterBody.AddBuff(Buffs.HiddenInvincibility); } AddOverlay(baseDuration * attackStartTime); } base.OnEnter(); swingEffectPrefab = statTracker.slashPrefab; } protected override void PlayAttackAnimation() { ((EntityState)this).PlayCrossfade("FullBody, Override", "BackSlash", "BaseAttack.playbackRate", duration, 0.1f); } protected override void PlaySwingEffect() { base.PlaySwingEffect(); } protected override void OnHitEnemyAuthority() { base.OnHitEnemyAuthority(); } protected override void FireAttack() { base.FireAttack(); } 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) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) base.FixedUpdate(); if (stopwatch <= duration * attackEndTime && !inHitPause) { Vector3 aimDirection = ((EntityState)this).inputBank.aimDirection; aimDirection.y = 0f; ((Vector3)(ref aimDirection)).Normalize(); float num = 5f; CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.rootMotion -= aimDirection * (num * FlyUpState.speedCoefficientCurve.Evaluate(((EntityState)this).fixedAge / (duration * attackEndTime)) * Time.fixedDeltaTime); } if (stopwatch > duration * attackStartTime) { if (NetworkServer.active && ((EntityState)this).characterBody.HasBuff(Buffs.HiddenInvincibility)) { ((EntityState)this).characterBody.RemoveBuff(Buffs.HiddenInvincibility); } RemoveOverlay(); } } public override void OnExit() { if (NetworkServer.active && ((EntityState)this).characterBody.HasBuff(Buffs.HiddenInvincibility)) { ((EntityState)this).characterBody.RemoveBuff(Buffs.HiddenInvincibility); } RemoveOverlay(); base.OnExit(); } } internal class BasicAttack : BaseDirectionalSkill { public override void OnEnter() { //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_00d7: 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) if (attackIndex > 3) { attackIndex = 1; } hitboxName = "Basic"; if (attackIndex == 3) { hitboxName = "BasicThird"; } damageCoefficient = 2f; if (attackIndex == 3) { damageCoefficient = 3f; } baseDuration = 1.3f; attackStartTime = 0.2f; attackEndTime = 0.4f; baseEarlyExitTime = 0.8f; if (attackIndex == 3) { baseEarlyExitTime = 0.6f; } hitStopDuration = 0.05f; if (attackIndex == 3) { pushForce = 600f; } swingSoundString = "Ruina_Swipe"; impactSound = Asset.swordHitSoundVert.index; if (attackIndex == 3) { impactSound = Asset.swordHitSoundHori.index; } switch (attackIndex) { case 1: muzzleString = "BasicSwing1"; break; case 2: muzzleString = "BasicSwing2"; break; case 3: muzzleString = "BasicSwing3"; break; } hitEffectPrefab = Asset.swordHitEffect; base.OnEnter(); swingEffectPrefab = statTracker.slashPrefab; } protected override void PlayAttackAnimation() { ((EntityState)this).PlayCrossfade("FullBody, Override", "BasicSlash" + attackIndex, "BaseAttack.playbackRate", duration, 0.1f); } protected override void PlaySwingEffect() { base.PlaySwingEffect(); } protected override void OnHitEnemyAuthority() { base.OnHitEnemyAuthority(); } protected override void FireAttack() { //IL_0029: 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_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) base.FireAttack(); float num = Mathf.Clamp(0f, 0.5f, 0.5f * base.trueMoveSpeed); CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.rootMotion += ((EntityState)this).characterDirection.forward * (num * FlyUpState.speedCoefficientCurve.Evaluate(((EntityState)this).fixedAge / duration) * Time.fixedDeltaTime); } public override void OnExit() { base.OnExit(); } } public class BasicStringStart : BaseDirectionalSkill { public override void OnEnter() { base.OnEnter(); attackIndex = 0; } public override void OnExit() { base.OnExit(); } protected override void FireAttack() { } public override void FixedUpdate() { if (((EntityState)this).isAuthority) { EvaluateInput(); SetNextState(); } } protected override void SetNextState() { base.SetNextState(); } } internal class Block : BaseSkillState { public float duration = 0.7f; public float invulEnd = 0.35f; public float hitBonus = 0.6f; public bool invul; public bool blockOut; public float damageCounter; public float bonusMult = 1f; public float stockBonus = 0.4f; public int hits; protected TemporaryOverlayInstance iframeOverlay; protected RedMistEmotionComponent emotionComponent; protected RedMistStatTracker statTracker; private float originalHeight; private float originalRadius; public override void OnEnter() { //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Expected O, but got Unknown emotionComponent = ((EntityState)this).gameObject.GetComponent<RedMistEmotionComponent>(); statTracker = ((EntityState)this).gameObject.GetComponent<RedMistStatTracker>(); if (((EntityState)this).skillLocator.utility.stock > 1) { bonusMult += (float)(((EntityState)this).skillLocator.utility.stock - 1) * stockBonus; } AddOverlay(invulEnd); if (NetworkServer.active) { ((EntityState)this).characterBody.AddBuff(Buffs.HiddenInvincibility); } invul = true; ((BaseState)this).OnEnter(); Util.PlaySound("Ruina_Swipe", ((EntityState)this).gameObject); ((EntityState)this).PlayAnimation("FullBody, Override", "BlockIn"); RiskOfRuinaNetworkManager.ServerOnHit += OnHit; CapsuleCollider val = (CapsuleCollider)((EntityState)this).characterBody.mainHurtBox.collider; originalHeight = val.height; originalRadius = val.radius; val.height = originalHeight * 1.5f; val.radius = originalRadius * 10f; } public void OnHit(float damage, GameObject attacker, GameObject victim) { //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: 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_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: 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_00ae: 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_00b5: 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_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_00c4: 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_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_01f8: Expected O, but got Unknown //IL_01fa: Unknown result type (might be due to invalid IL or missing references) //IL_01ff: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_0211: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)victim == (Object)(object)((EntityState)this).gameObject) || !invul) { return; } Util.PlaySound("Play_Defense_Guard", ((EntityState)this).gameObject); if (!Object.op_Implicit((Object)(object)attacker) || !Object.op_Implicit((Object)(object)attacker.GetComponent<CharacterBody>()) || !((Object)(object)attacker.GetComponent<CharacterBody>() != (Object)(object)((EntityState)this).characterBody)) { return; } Vector3 val = attacker.GetComponent<CharacterBody>().footPosition - ((EntityState)this).characterBody.footPosition; val.y = 0f; ((Vector3)(ref val)).Normalize(); Vector3 forward = ((EntityState)this).characterDirection.forward; Vector3 val2 = Vector3.Cross(((EntityState)this).transform.up, forward); Vector3 normalized = ((Vector3)(ref val2)).normalized; Vector2 val3 = new Vector2(Vector3.Dot(val, forward), Vector3.Dot(val, normalized)); Vector2 normalized2 = ((Vector2)(ref val3)).normalized; if (normalized2.x >= 0.5f) { ((EntityState)this).PlayAnimation("FullBody, Override", "BlockHit"); } else if (normalized2.x <= -0.5f) { ((EntityState)this).PlayAnimation("FullBody, Override", "BlockHitBack"); } else if (normalized2.y >= 0.5f) { ((EntityState)this).PlayAnimation("FullBody, Override", "BlockHitRight"); } else if (normalized2.y <= -0.5f) { ((EntityState)this).PlayAnimation("FullBody, Override", "BlockHitLeft"); } else { ((EntityState)this).PlayAnimation("FullBody, Override", "BlockHit"); } invulEnd = ((EntityState)this).fixedAge + hitBonus; duration = invulEnd + hitBonus; float num = damage; if (Object.op_Implicit((Object)(object)attacker) && Object.op_Implicit((Object)(object)attacker.GetComponent<CharacterBody>())) { num = damage; if (RiskOfRuinaPlugin.kombatArenaInstalled && RiskOfRuinaPlugin.KombatGamemodeActive() && Object.op_Implicit((Object)(object)((EntityState)this).characterBody.master) && RiskOfRuinaPlugin.KombatIsDueling(((EntityState)this).characterBody.master)) { num = damage * 5f; } damageCounter += num; hits++; } if (((EntityState)this).isAuthority) { EffectData val4 = new EffectData(); val4.rotation = Util.QuaternionSafeLookRotation(Vector3.zero); val4.origin = ((EntityState)this).characterBody.corePosition; EffectManager.SpawnEffect(Asset.blockEffect, val4, true); } } public override void FixedUpdate() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); ((EntityState)this).characterMotor.velocity = Vector3.zero; if (((EntityState)this).fixedAge >= invulEnd && invul) { if (NetworkServer.active && ((EntityState)this).characterBody.HasBuff(Buffs.HiddenInvincibility)) { ((EntityState)this).characterBody.RemoveBuff(Buffs.HiddenInvincibility); } RemoveOverlay(); invul = false; CapsuleCollider val = (CapsuleCollider)((EntityState)this).characterBody.mainHurtBox.collider; val.height = 1.5f; val.radius = 0.2f; if (damageCounter > 0f && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextState((EntityState)(object)new BlockCounter { damageCounter = damageCounter, hits = hits, bonusMult = bonusMult }); } } if (damageCounter > 0f && !((EntityState)this).inputBank.skill3.down && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextState((EntityState)(object)new BlockCounter { damageCounter = damageCounter, hits = hits, bonusMult = bonusMult }); } if (((EntityState)this).fixedAge >= invulEnd && !blockOut) { blockOut = true; ((EntityState)this).PlayAnimation("FullBody, Override", "BlockOut"); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) if (NetworkServer.active && ((EntityState)this).characterBody.HasBuff(Buffs.HiddenInvincibility)) { ((EntityState)this).characterBody.RemoveBuff(Buffs.HiddenInvincibility); } RemoveOverlay(); CapsuleCollider val = (CapsuleCollider)((EntityState)this).characterBody.mainHurtBox.collider; val.height = 1.5f; val.radius = 0.2f; RiskOfRuinaNetworkManager.ServerOnHit -= OnHit; if (!blockOut) { ((EntityState)this).PlayAnimation("FullBody, Override", "BlockOut"); } ((EntityState)this).OnExit(); } protected void AddOverlay(float duration) { if (Config.iframeOverlay.Value) { TemporaryOverlayInstance obj = TemporaryOverlayManager.AddOverlay(((Component)((EntityState)this).characterBody).gameObject); obj.duration = duration; obj.alphaCurve = AnimationCurve.Constant(0f, duration, 0.1f); obj.animateShaderAlpha = true; obj.destroyComponentOnEnd = true; obj.originalMaterial = LegacyResourcesAPI.Load<Material>("Materials/matHuntressFlashBright"); obj.AddToCharacterModel(((Component)((EntityState)this).modelLocator.modelTransform).GetComponent<CharacterModel>()); } } protected void RemoveOverlay() { if (iframeOverlay != null) { iframeOverlay.Destroy(); } } public override void OnSerialize(NetworkWriter writer) { ((BaseSkillState)this).OnSerialize(writer); writer.Write(damageCounter); writer.Write(hits); writer.Write(invulEnd); writer.Write(duration); } public override void OnDeserialize(NetworkReader reader) { ((BaseSkillState)this).OnDeserialize(reader); damageCounter = reader.ReadSingle(); hits = reader.ReadInt32(); invulEnd = reader.ReadSingle(); duration = reader.ReadSingle(); } } internal class BlockCounter : BaseSkillState { public float damageCounter; public int hits; public float duration = 0.5f; public float bonusMult = 1f; protected RedMistEmotionComponent emotionComponent; protected RedMistStatTracker statTracker; protected BlastAttack attack; public override void OnEnter() { //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Expected O, but got Unknown //IL_019a: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: 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_004f: Expected O, but got Unknown //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0085: 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_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_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_0156: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_01e7: Expected O, but got Unknown //IL_01e8: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) emotionComponent = ((EntityState)this).gameObject.GetComponent<RedMistEmotionComponent>(); statTracker = ((EntityState)this).gameObject.GetComponent<RedMistStatTracker>(); if (NetworkServer.active) { ((EntityState)this).characterBody.AddBuff(Buffs.HiddenInvincibility); } if (((EntityState)this).isAuthority) { attack = new BlastAttack(); attack.damageType = DamageTypeCombo.GenericUtility; attack.procCoefficient = 1f; attack.baseForce = 300f; attack.bonusForce = Vector3.zero; attack.baseDamage = damageCounter * 1.5f * bonusMult; attack.crit = ((BaseState)this).RollCrit(); attack.attacker = ((Component)((EntityState)this).characterBody).gameObject; attack.damageColorIndex = (DamageColorIndex)0; attack.falloffModel = (FalloffModel)0; attack.radius = 15 + Mathf.Clamp(hits, 0, 15); attack.inflictor = ((Component)((EntityState)this).characterBody).gameObject; attack.position = ((EntityState)this).characterBody.footPosition; attack.procCoefficient = 1f; attack.teamIndex = TeamComponent.GetObjectTeam(((Component)((EntityState)this).characterBody).gameObject); attack.Fire(); } ((BaseState)this).OnEnter(); Util.PlaySound("Play_Kali_Normal_Hori", ((EntityState)this).gameObject); ((EntityState)this).PlayAnimation("FullBody, Override", "BlockCounter"); EffectData val = new EffectData(); val.rotation = Quaternion.identity; val.origin = ((EntityState)this).characterBody.footPosition; EffectManager.SpawnEffect(statTracker.spinPrefab, val, true); if (hits > 5) { Util.PlaySound("Play_Kali_Special_Vert_Fin", ((EntityState)this).gameObject); val = new EffectData(); val.rotation = Quaternion.identity; val.origin = ((EntityState)this).characterBody.footPosition; EffectManager.SpawnEffect(statTracker.spinPrefabTwo, val, true); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { if (NetworkServer.active && ((EntityState)this).characterBody.HasBuff(Buffs.HiddenInvincibility)) { ((EntityState)this).characterBody.RemoveBuff(Buffs.HiddenInvincibility); } ((EntityState)this).OnExit(); } } public class CastPillar : BaseCastChanneledSpellState { public override void OnEnter() { baseDuration = 0.5f; baseInterval = 0f; muzzleString = "HandR"; muzzleflashEffectPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/ImpactEffects/CrocoDiseaseImpactEffect"); projectilePrefabs.Enqueue(Projectiles.pillarPrefab); castSoundString = "Play_Binah_Stone_Ready"; base.OnEnter(); } protected override void Fire() { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //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_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_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_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: 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_0094: 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_009b: 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_00b5: 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_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_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) if (projectilePrefabs.Count > 0) { if (((EntityState)this).isAuthority) { BlastAttack val = new BlastAttack { attacker = ((EntityState)this).gameObject, inflictor = ((EntityState)this).gameObject }; val.teamIndex = TeamComponent.GetObjectTeam(val.attacker); val.position = spellPosition; val.procCoefficient = 1f; val.radius = 12.5f; val.baseForce = 2000f; val.bonusForce = Vector3.zero; val.baseDamage = 5f * ((BaseState)this).damageStat; val.falloffModel = (FalloffModel)2; val.damageColorIndex = (DamageColorIndex)0; val.attackerFiltering = (AttackerFiltering)2; val.crit = ((BaseState)this).RollCrit(); val.damageType = DamageTypeCombo.op_Implicit((DamageType)131072); val.damageType.damageSource = (DamageSource)4; val.Fire(); } base.Fire(); } } protected override void PlayCastAnimation() { ((EntityState)this).PlayAnimation("Gesture, Override", "Pillar", "Pillar.playbackRate", baseDuration, 0f); } } public class CastShockwave : BaseCastChanneledSpellState { private Vector3 storedPosition; private int shockwaveNum; private ShakeEmitter shakeEmitter; public override void OnEnter() { //IL_007a: 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) baseDuration = 3.5f; baseInterval = 1.5f; centered = true; muzzleString = "HandR"; muzzleflashEffectPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/ImpactEffects/CrocoDiseaseImpactEffect"); projectilePrefabs.Enqueue(Projectiles.shockwaveSmallPrefab); projectilePrefabs.Enqueue(Projectiles.shockwaveMediumPrefab); projectilePrefabs.Enqueue(Projectiles.shockwaveLargePrefab); castSoundString = "Play_Binah_Shockwave"; storedPosition = ((EntityState)this).transform.position; base.OnEnter(); } protected override void PlayCastAnimation() { ((EntityState)this).PlayAnimation("Gesture, Override", "CastShockwave", "Shockwave.playbackRate", 0.25f, 0f); } protected override void Fire() { //IL_0062: 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_008d: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: 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_0103: 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_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0141: 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_0147: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) if (projectilePrefabs.Count > 0) { shakeEmitter = ((EntityState)this).gameObject.AddComponent<ShakeEmitter>(); shakeEmitter.amplitudeTimeDecay = true; shakeEmitter.duration = 1.5f; shakeEmitter.radius = 100f; shakeEmitter.scaleShakeRadiusWithLocalScale = false; shakeEmitter.wave = new Wave { amplitude = 0.1f, frequency = 10f, cycleOffset = 0f }; float radius = 40f; if (shockwaveNum == 1) { radius = 40f; } if (shockwaveNum == 2) { radius = 40f; } float num = 5f; if (shockwaveNum == 1) { num = 10f; } if (shockwaveNum == 2) { num = 15f; } if (((EntityState)this).isAuthority) { BlastAttack val = new BlastAttack { attacker = ((EntityState)this).gameObject, inflictor = ((EntityState)this).gameObject }; val.teamIndex = TeamComponent.GetObjectTeam(val.attacker); val.position = ((EntityState)this).transform.position; val.procCoefficient = 1f; val.radius = radius; val.baseForce = 2000f; val.bonusForce = Vector3.zero; val.baseDamage = num * ((BaseState)this).damageStat; val.falloffModel = (FalloffModel)0; val.damageColorIndex = (DamageColorIndex)0; val.attackerFiltering = (AttackerFiltering)2; val.crit = ((BaseState)this).RollCrit(); val.damageType = DamageTypeCombo.op_Implicit((DamageType)32); val.damageType.damageSource = (DamageSource)8; val.Fire(); } shockwaveNum++; base.Fire(); } } public override void OnExit() { base.OnExit(); ((EntityState)this).PlayAnimation("Gesture, Override", "CastShockwaveEnd", "Shockwave.playbackRate", 0.8f, 0f); } public override void FixedUpdate() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) base.FixedUpdate(); ((EntityState)this).transform.position = storedPosition; if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor)) { ((EntityState)this).characterMotor.velocity = Vector3.zero; } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)7; } } internal class ChannelPillar : BaseChannelSpellState { public override void OnEnter() { chargeEffectPrefab = null; maxSpellRadius = 25f; baseDuration = 0.25f; zooming = false; line = true; base.OnEnter(); } protected override void PlayChannelAnimation() { ((EntityState)this).PlayAnimation("Gesture, Override", "Channel", "Channel.playbackRate", baseDuration, 0f); } public override void FixedUpdate() { base.FixedUpdate(); } public override void OnExit() { base.OnExit(); } protected override BaseCastChanneledSpellState GetNextState() { return new CastPillar(); } } internal class ChannelShockwave : BaseChannelSpellState { private GameObject chargeEffect; public override void OnEnter() { chargeEffectPrefab = null; maxSpellRadius = 40f; baseDuration = 0.4f; zooming = true; centered = true; base.OnEnter(); } protected override void PlayChannelAnimation() { ((EntityState)this).PlayAnimation("Gesture, Override", "Channel", "Channel.playbackRate", baseDuration, 0f); } public override void FixedUpdate() { base.FixedUpdate(); } public override void OnExit() { base.OnExit(); } protected override BaseCastChanneledSpellState GetNextState() { return new CastShockwave(); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)7; } } public class ChargePillarSpear : BaseChargeSpellState { private GameObject chargeEffect; private Vector3 originalScale; public override void OnEnter() { //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) baseDuration = 2f; chargeEffectPrefab = null; chargeSoundString = "Play_Binah_Stone_Ready"; crosshairOverridePrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/Crosshair/ToolbotGrenadeLauncherCrosshair"); maxBloomRadius = 0.1f; minBloomRadius = 1f; base.OnEnter(); ChildLocator modelChildLocator = ((EntityState)this).GetModelChildLocator(); if (Object.op_Implicit((Object)(object)modelChildLocator)) { chargeEffect = ((Component)modelChildLocator.FindChild("SpearSummon")).gameObject; chargeEffect.SetActive(true); originalScale = chargeEffect.transform.localScale; } } public override void FixedUpdate() { //IL_0012: 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) base.FixedUpdate(); chargeEffect.transform.localScale = originalScale * (1f + CalcCharge()); } public override void OnExit() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) base.OnExit(); if (Object.op_Implicit((Object)(object)chargeEffect)) { chargeEffect.transform.localScale = originalScale; chargeEffect.SetActive(false); } } protected override BaseThrowSpellState GetNextState() { return new ThrowPillarSpear(); } } internal class Dodge : BaseSkillState { public Vector3 dodgeVector; public float duration = 0.65f; public float moveEnd = 0.65f; public float invulStart; public float invulEnd = 0.4f; public float stockBonus = 0.05f; public bool invul; public bool aerial; protected TemporaryOverlayInstance iframeOverlay; public override void OnEnter() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) dodgeVector = ((EntityState)this).inputBank.moveVector; if (!((EntityState)this).characterMotor.isGrounded) { aerial = true; ((BaseState)this).SmallHop(((EntityState)this).characterMotor, 10f); } if (((EntityState)this).skillLocator.utility.stock > 1) { invulEnd += (float)(((EntityState)this).skillLocator.utility.stock - 1) * stockBonus; } AddOverlay(invulEnd); ((BaseState)this).OnEnter(); Util.PlaySound("Ruina_Swipe", ((EntityState)this).gameObject); ((EntityState)this).PlayCrossfade("FullBody, Override", "Dodge", "Dodge.playbackRate", duration, 0.1f); } public override void FixedUpdate() { //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: 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_00fd: 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_0029: 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_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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) ((EntityState)this).FixedUpdate(); if (!aerial) { if (((EntityState)this).fixedAge <= moveEnd) { CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.rootMotion += dodgeVector * (3.5f * FlyUpState.speedCoefficientCurve.Evaluate(((EntityState)this).fixedAge / (moveEnd * 1.3f)) * Time.fixedDeltaTime); ((EntityState)this).characterMotor.velocity.y = 0f; CharacterMotor characterMotor2 = ((EntityState)this).characterMotor; characterMotor2.moveDirection *= 2f; } } else if (((EntityState)this).fixedAge <= moveEnd) { CharacterMotor characterMotor3 = ((EntityState)this).characterMotor; characterMotor3.rootMotion += dodgeVector * (2f * FlyUpState.speedCoefficientCurve.Evaluate(((EntityState)this).fixedAge / (moveEnd * 1.3f)) * Time.fixedDeltaTime); CharacterMotor characterMotor4 = ((EntityState)this).characterMotor; characterMotor4.moveDirection *= 2f; } if (NetworkServer.active && ((EntityState)this).fixedAge >= invulStart && !invul) { ((EntityState)this).characterBody.AddBuff(Buffs.HiddenInvincibility); invul = true; } if (NetworkServer.active && ((EntityState)this).fixedAge >= invulEnd && invul) { if (((EntityState)this).characterBody.HasBuff(Buffs.HiddenInvincibility)) { ((EntityState)this).characterBody.RemoveBuff(Buffs.HiddenInvincibility); } RemoveOverlay(); invul = false; } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { if (NetworkServer.active && ((EntityState)this).characterBody.HasBuff(Buffs.HiddenInvincibility)) { ((EntityState)this).characterBody.RemoveBuff(Buffs.HiddenInvincibility); } RemoveOverlay(); ((EntityState)this).OnExit(); } protected void AddOverlay(float duration) { if (Config.iframeOverlay.Value) { TemporaryOverlayInstance obj = TemporaryOverlayManager.AddOverlay(((Component)((EntityState)this).characterBody).gameObject); obj.duration = duration; obj.alphaCurve = AnimationCurve.Constant(0f, duration, 0.1f); obj.animateShaderAlpha = true; obj.destroyComponentOnEnd = true; obj.originalMaterial = LegacyResourcesAPI.Load<Material>("Materials/matHuntressFlashBright"); obj.AddToCharacterModel(((Component)((EntityState)this).modelLocator.modelTransform).GetComponent<CharacterModel>()); } } protected void RemoveOverlay() { if (iframeOverlay != null) { iframeOverlay.Destroy(); } } } internal class EGOActivate : BaseSkillState { public static float baseDuration = 1f; private float duration; private Vector3 storedPosition; private Animator modelAnimator; private AimRequest aimRequest; public override void OnEnter() { //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) ((BaseState)this).OnEnter(); duration = baseDuration; modelAnimator = ((EntityState)this).GetModelAnimator(); ((EntityState)this).characterBody.hideCrosshair = true; if (Object.op_Implicit((Object)(object)modelAnimator)) { modelAnimator.SetBool("isMoving", false); modelAnimator.SetBool("isSprinting", false); } if (NetworkServer.active) { ((EntityState)this).characterBody.AddBuff(Buffs.HiddenInvincibility); } EntityStateMachine[] components = ((EntityState)this).gameObject.GetComponents<EntityStateMachine>(); foreach (EntityStateMachine val in components) { if (Object.op_Implicit((Object)(object)val)) { if (val.customName == "Weapon") { val.SetNextStateToMain(); } if (val.customName == "Slide") { val.SetNextStateToMain(); } } } ((EntityState)this).gameObject.GetComponent<RedMistEmotionComponent>(); ((EntityState)this).PlayAnimation("Gesture, Override", "BufferEmpty"); ((EntityState)this).PlayAnimation("FullBody, Override", "EGOActivate", "EGOActivate.playbackRate", duration, 0f); Util.PlaySound("Play_Kali_Change", ((EntityState)this).gameObject); ((EntityState)this).cameraTargetParams.cameraParams = CameraParams.EGOActivateCameraParamsRedMist; storedPosition = ((EntityState)this).transform.position; } public override void FixedUpdate() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); ((EntityState)this).transform.position = storedPosition; ((EntityState)this).characterBody.isSprinting = false; if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor)) { ((EntityState)this).characterMotor.velocity = Vector3.zero; } if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration) { ((EntityState)this).outer.SetNextState((EntityState)(object)new EGOActivateOut()); } } public override void OnExit() { ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)7; } } internal class EGOActivateOut : BaseSkillState { public static float baseDuration = 1f; public static float shockwaveRadius = 15f; public static float shockwaveForce = 8000f; public static float shockwaveBonusForce = 1500f; private float duration; private AimRequest aimRequest; private RedMistEmotionComponent EGOController; private RedMistStatTracker statTracker; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = baseDuration; EGOController = ((EntityState)this).gameObject.GetComponent<RedMistEmotionComponent>(); statTracker = ((EntityState)this).gameObject.GetComponent<RedMistStatTracker>(); ((EntityState)this).PlayAnimation("FullBody, Override", "BufferEmpty"); ((EntityState)this).PlayAnimation("FullBody, Override", "EGOActivateOut", "EGOActivate.playbackRate", duration, 0f); if (NetworkServer.active) { ((EntityState)this).characterBody.AddBuff(Buffs.EGOBuff); } ((EntityState)this).cameraTargetParams.cameraParams = CameraParams.EGOActivateOutCameraParamsRedMist; aimRequest = ((EntityState)this).cameraTargetParams.RequestAimType((AimType)2); FireShockwave(); if ((Object)(object)((EntityState)this).skillLocator.utility.baseSkill == (Object)(object)RedMist.NormalBlock) { ((EntityState)this).skillLocator.utility.SetSkillOverride((object)((EntityState)this).skillLocator.utility, RedMist.EGOBlock, (SkillOverridePriority)4); } else if ((Object)(object)((EntityState)this).skillLocator.utility.baseSkill == (Object)(object)RedMist.NormalDodge) { ((EntityState)this).skillLocator.utility.SetSkillOverride((object)((EntityState)this).skillLocator.utility, RedMist.EGODodge, (SkillOverridePriority)4); } ((EntityState)this).skillLocator.special.SetSkillOverride((object)((EntityState)this).skillLocator.special, RedMist.HorizontalSlash, (SkillOverridePriority)4); } private void FireShockwave() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown //IL_001e: 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_0055: 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_006d: 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_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007e: 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_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: 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_00bb: 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_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) Util.PlaySound("Play_Effect_Index_Unlock", ((EntityState)this).gameObject); EffectData val = new EffectData(); val.origin = ((EntityState)this).characterBody.corePosition; val.scale = 1f; EffectManager.SpawnEffect(statTracker.EGOActivatePrefab, val, false); if (((EntityState)this).isAuthority) { BlastAttack val2 = new BlastAttack { attacker = ((EntityState)this).gameObject, inflictor = ((EntityState)this).gameObject }; val2.teamIndex = TeamComponent.GetObjectTeam(val2.attacker); val2.position = ((EntityState)this).characterBody.corePosition; val2.procCoefficient = 0f; val2.radius = shockwaveRadius; val2.baseForce = shockwaveForce; val2.bonusForce = Vector3.up * shockwaveBonusForce; val2.baseDamage = 0f; val2.falloffModel = (FalloffModel)0; val2.damageColorIndex = (DamageColorIndex)3; val2.attackerFiltering = (AttackerFiltering)2; val2.Fire(); } if (Object.op_Implicit((Object)(object)EGOController)) { EGOController.EnterEGO(); } } public override void FixedUpdate() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); ((EntityState)this).characterMotor.velocity = Vector3.zero; if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { ((EntityState)this).OnExit(); ((EntityState)this).cameraTargetParams.cameraParams = CameraParams.defaultCameraParamsRedMist; AimRequest obj = aimRequest; if (obj != null) { obj.Dispose(); } if (NetworkServer.active) { ((EntityState)this).characterBody.RemoveBuff(Buffs.HiddenInvincibility); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)5; } } internal class EGOAirBackAttack : BaseDirectionalSkill { public override void OnEnter() { //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0086: 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_0095: Unknown result type (might be due to invalid IL or missing references) attackIndex = 1; hitboxName = "EGOAirBasic"; damageCoefficient = 2f; baseDuration = 0.25f; attackStartTime = 0.5f; attackEndTime = 0.8f; baseEarlyExitTime = 0f; hitStopDuration = 0.05f; swingSoundString = "Ruina_Swipe"; impactSound = Asset.swordHitEGOSoundVert.index; muzzleString = "SwingLeft"; hitEffectPrefab = Asset.swordHitEffect; bonusForce = Vector3.down * 900f; base.OnEnter(); swingEffectPrefab = statTracker.EGOSlashPrefab; } public override void FixedUpdate() { base.FixedUpdate(); ((EntityState)this).characterMotor.velocity.y = 0f; if (stopwatch > duration * attackEndTime && !inHitPause) { ((EntityState)this).outer.SetNextState((EntityState)(object)new AirBackFallingAttack()); } } protected override void PlayAttackAnimation() { ((EntityState)this).PlayCrossfade("FullBody, Override", "EGOAirBackSlash", "BaseAttack.playbackRate", duration, 0.1f); } protected override void PlaySwingEffect() { base.PlaySwingEffect(); } protected override void OnHitEnemyAuthority() { base.OnHitEnemyAuthority(); } protected override void FireAttack() { base.FireAttack(); } public override void OnExit() { base.OnExit(); } } internal class EGOAirBackFallingAttack : BaseSkillState { private float duration = 10f; private float cooldown = 0.3f; private float landTime; private bool landed; public ShakeEmitter shakeEmitter; private float startY; protected float trueDamage => ((BaseState)this).damageStat; public override void OnEnter() { //IL_000d: 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_0014: 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) ((BaseState)this).OnEnter(); CharacterBody characterBody = ((EntityState)this).characterBody; characterBody.bodyFlags = (BodyFlags)(characterBody.bodyFlags | 1); if (((EntityState)this).isAuthority) { ((EntityState)this).characterMotor.velocity.y = -60f; CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.rootMotion.y = characterMotor.rootMotion.y - 0.5f; ((EntityState)this).characterMotor.velocity.x = 0f; ((EntityState)this).characterMotor.velocity.z = 0f; } startY = ((EntityState)this).characterBody.corePosition.y; ((EntityState)this).PlayCrossfade("FullBody, Override", "EGOAirBackSlashContinue", "BaseAttack.playbackRate", duration, 0.1f); } public override void FixedUpdate() { //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01b6: Expected O, but got Unknown //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_0219: Unknown result type (might be due to invalid IL or missing references) //IL_021e: 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_0225: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) //IL_023d: Unknown result type (might be due to invalid IL or missing references) //IL_023e: Unknown result type (might be due to invalid IL or missing references) //IL_0240: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) //IL_0251: Unknown result type (might be due to invalid IL or missing references) //IL_0258: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Unknown result type (might be due to invalid IL or missing references) //IL_0262: Unknown result type (might be due to invalid IL or missing references) //IL_026e: Unknown result type (might be due to invalid IL or missing references) //IL_0282: Unknown result type (might be due to invalid IL or missing references) //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_0289: Unknown result type (might be due to invalid IL or missing references) //IL_028b: Unknown result type (might be due to invalid IL or missing references) //IL_0290: Unknown result type (might be due to invalid IL or missing references) //IL_0292: Unknown result type (might be due to invalid IL or missing references) //IL_0297: Unknown result type (might be due to invalid IL or missing references) //IL_0299: 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) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (landed) { if (((EntityState)this).fixedAge >= landTime + cooldown && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } return; } if (((EntityState)this).isAuthority && ((EntityState)this).characterMotor.velocity.y > -100f) { ((EntityState)this).characterMotor.velocity.y = -100f; } if (((EntityState)this).fixedAge >= duration || ((EntityState)this).characterMotor.isGrounded) { Util.PlaySound("Play_Kali_Special_Vert_Fin", ((EntityState)this).gameObject); ((EntityState)this).PlayCrossfade("FullBody, Override", "EGOAirBackSlashFinish", "BaseAttack.playbackRate", cooldown, 0.1f); landed = true; landTime = ((EntityState)this).fixedAge; if (((EntityState)this).isAuthority) { shakeEmitter = ((EntityState)this).gameObject.AddComponent<ShakeEmitter>(); shakeEmitter.amplitudeTimeDecay = true; shakeEmitter.duration = 0.2f; shakeEmitter.radius = 80f; shakeEmitter.scaleShakeRadiusWithLocalScale = false; shakeEmitter.wave = new Wave { amplitude = 0.8f, frequency = 30f, cycleOffset = 0f }; float num =