Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of LeviathanSkills v1.0.2
LevSkills.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using AncientScepter; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using EntityStates; using EntityStates.Bandit2; using EntityStates.Croco; using EntityStates.Merc; using JetBrains.Annotations; using On.EntityStates.Croco; using On.EntityStates.Merc; using On.RoR2; using R2API; using R2API.Utils; using Rewired.ComponentControls.Effects; using RoR2; using RoR2.Orbs; using RoR2.Projectile; using RoR2.Skills; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = "")] [assembly: AssemblyCompany("LevSkills")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("LevSkills")] [assembly: AssemblyTitle("LevSkills")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace LevSkills; internal class Assets { public static AssetBundle MainAssetBundle; public static void PopulateAssets() { if ((Object)(object)MainAssetBundle == (Object)null) { using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("LevSkills.levassets")) { MainAssetBundle = AssetBundle.LoadFromStream(stream); } } } } internal class MercMdlBehaviour : MonoBehaviour { private ChildLocator childLocator; private CharacterBody body; public GameObject sword; public GameObject backSword; public GameObject kunai; public GameObject dagger; public GameObject shuriken; private void Start() { //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: 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_0229: Unknown result type (might be due to invalid IL or missing references) //IL_024e: Unknown result type (might be due to invalid IL or missing references) //IL_02f0: Unknown result type (might be due to invalid IL or missing references) //IL_0315: Unknown result type (might be due to invalid IL or missing references) //IL_032b: Unknown result type (might be due to invalid IL or missing references) //IL_0335: Unknown result type (might be due to invalid IL or missing references) //IL_0367: Unknown result type (might be due to invalid IL or missing references) //IL_0387: Unknown result type (might be due to invalid IL or missing references) //IL_043c: Unknown result type (might be due to invalid IL or missing references) //IL_0461: Unknown result type (might be due to invalid IL or missing references) //IL_0486: Unknown result type (might be due to invalid IL or missing references) body = ((Component)this).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)body.skillLocator) && Object.op_Implicit((Object)(object)body.skillLocator.primary) && Object.op_Implicit((Object)(object)body.skillLocator.secondary) && Object.op_Implicit((Object)(object)body.skillLocator.special) && Object.op_Implicit((Object)(object)body.modelLocator) && Object.op_Implicit((Object)(object)body.modelLocator.modelTransform)) { if (Object.op_Implicit((Object)(object)body.skillLocator.primary.skillDef) && body.skillLocator.primary.skillDef.skillNameToken == "MERC_DRG_ALT_M1") { childLocator = ((Component)body.modelLocator.modelTransform).GetComponent<ChildLocator>(); sword = ((Component)body.modelLocator.modelTransform.Find("MercSwordMesh")).gameObject; sword.SetActive(false); backSword = Object.Instantiate<GameObject>(Prefabs.sword); backSword.transform.SetParent(childLocator.FindChild("Chest")); backSword.transform.localPosition = new Vector3(0.15f, 0.5f, -0.21f); backSword.transform.localRotation = Quaternion.Euler(95f, 250f, 180f); kunai = Object.Instantiate<GameObject>(Prefabs.kunai); kunai.transform.SetParent(childLocator.FindChild("HandL")); kunai.transform.localPosition = new Vector3(0.03f, 0.12f, 0f); kunai.transform.localRotation = Quaternion.Euler(5f, 85f, 90f); kunai.transform.localScale = new Vector3(0.5f, 0.5f, -0.5f); } if (Object.op_Implicit((Object)(object)body.skillLocator.secondary.skillDef) && body.skillLocator.secondary.skillDef.skillNameToken == "MERC_DRG_ALT_M2") { shuriken = Object.Instantiate<GameObject>(Prefabs.shuriken); shuriken.transform.SetParent(childLocator.FindChild("Chest")); shuriken.transform.localPosition = new Vector3(-0.2f, 0.12f, -0.2f); shuriken.transform.localRotation = Quaternion.Euler(95f, 35f, 0f); shuriken.transform.localScale = Vector3.one * 0.45f; Transform child = shuriken.transform.GetChild(0); ((Component)child).transform.localPosition = new Vector3(-0.1f, 0f, -0.1f); ((Component)child).transform.localRotation = Quaternion.Euler(5f, 325f, 355f); } if (Object.op_Implicit((Object)(object)body.skillLocator.special.skillDef) && body.skillLocator.special.skillDef.skillNameToken == "MERC_DRG_ALT_SPEC") { dagger = Object.Instantiate<GameObject>(Prefabs.dagger); Object.Destroy((Object)(object)dagger.GetComponentInChildren<TrailRenderer>()); dagger.transform.SetParent(childLocator.FindChild("Pelvis")); dagger.transform.localPosition = new Vector3(0.1f, 0.04f, 0.12f); dagger.transform.localRotation = Quaternion.Euler(0f, 75f, 65f); dagger.transform.localScale = new Vector3(0.45f, 0.45f, -0.45f); } } else { Object.Destroy((Object)(object)this); } } public void Swap() { if (Object.op_Implicit((Object)(object)kunai)) { if (kunai.activeInHierarchy) { kunai.SetActive(false); } else { kunai.SetActive(true); } } if (Object.op_Implicit((Object)(object)sword)) { if (sword.activeInHierarchy) { sword.SetActive(false); } else { sword.SetActive(true); } } if (Object.op_Implicit((Object)(object)backSword)) { if (backSword.activeInHierarchy) { backSword.SetActive(false); } else { backSword.SetActive(true); } } } } internal class MercSkillAimDef : SkillDef { private class InstanceData : BaseSkillInstanceData { public MercTracker behaviour; } public override BaseSkillInstanceData OnAssigned([NotNull] GenericSkill skillSlot) { return (BaseSkillInstanceData)(object)new InstanceData { behaviour = ((Component)skillSlot).GetComponent<MercTracker>() }; } internal static bool IsExecutable([NotNull] GenericSkill skillSlot) { MercTracker behaviour = ((InstanceData)(object)skillSlot.skillInstanceData).behaviour; return Object.op_Implicit((Object)(object)((HuntressTracker)behaviour).GetTrackingTarget()); } public override bool CanExecute([NotNull] GenericSkill skillSlot) { return IsExecutable(skillSlot) && ((SkillDef)this).CanExecute(skillSlot); } public override bool IsReady([NotNull] GenericSkill skillSlot) { return ((SkillDef)this).IsReady(skillSlot) && IsExecutable(skillSlot); } } internal class MercTracker : HuntressTracker { public SkillLocator skillLocator; public bool target => Object.op_Implicit((Object)(object)base.trackingTarget) ? true : false; private void Awake() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown base.indicator = new Indicator(((Component)this).gameObject, Prefabs.mercIndicator); } private void OnEnable() { ((HuntressTracker)this).OnEnable(); base.maxTrackingDistance = 35f; } private void FixedUpdate() { ((HuntressTracker)this).FixedUpdate(); if (!Object.op_Implicit((Object)(object)skillLocator)) { skillLocator = ((Component)this).GetComponent<SkillLocator>(); } if (Object.op_Implicit((Object)(object)skillLocator) && Object.op_Implicit((Object)(object)skillLocator.secondary) && Object.op_Implicit((Object)(object)skillLocator.secondary.skillDef)) { base.indicator.active = skillLocator.secondary.skillDef.skillNameToken == "MERC_DRG_ALT_M2"; } } } internal class Hook { internal static void Hooks() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown CharacterBody.Start += new hook_Start(CharacterBody_Start); WhirlwindBase.OnEnter += new hook_OnEnter(WhirlwindBase_OnEnter); WhirlwindBase.OnExit += new hook_OnExit(WhirlwindBase_OnExit); Uppercut.OnEnter += new hook_OnEnter(Uppercut_OnEnter); Uppercut.OnExit += new hook_OnExit(Uppercut_OnExit); Slash.AuthorityModifyOverlapAttack += new hook_AuthorityModifyOverlapAttack(Slash_AuthorityModifyOverlapAttack); Language.Init += new hook_Init(Language_Init); } private static void Language_Init(orig_Init orig) { orig.Invoke(); string text = "MERC_DESCRIPTION"; string @string = Language.GetString(text); string text2 = @string + "<style=cSub>\r\n\r\n< ! > If you get enough hardlight afterburners, Mercenary can fight god."; LanguageAPI.AddOverlay(text, text2); } private static void Slash_AuthorityModifyOverlapAttack(orig_AuthorityModifyOverlapAttack orig, Slash self, OverlapAttack overlapAttack) { //IL_0093: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)((EntityState)self).characterBody) && Object.op_Implicit((Object)(object)((EntityState)self).characterBody.skillLocator) && Object.op_Implicit((Object)(object)((EntityState)self).characterBody.skillLocator.primary) && Object.op_Implicit((Object)(object)((EntityState)self).characterBody.skillLocator.primary.skillDef) && ((EntityState)self).characterBody.skillLocator.primary.skillDef.skillNameToken == "CROCO_DRG_ALT_M1_2" && self.isComboFinisher && overlapAttack != null) { overlapAttack.damageType = (DamageType)4096; } orig.Invoke(self, overlapAttack); } private static void Uppercut_OnEnter(orig_OnEnter orig, Uppercut self) { MercMdlBehaviour component = ((EntityState)self).gameObject.GetComponent<MercMdlBehaviour>(); if (Object.op_Implicit((Object)(object)component)) { component.Swap(); } orig.Invoke(self); } private static void Uppercut_OnExit(orig_OnExit orig, Uppercut self) { MercMdlBehaviour component = ((EntityState)self).gameObject.GetComponent<MercMdlBehaviour>(); if (Object.op_Implicit((Object)(object)component)) { component.Swap(); } orig.Invoke(self); } private static void WhirlwindBase_OnEnter(orig_OnEnter orig, WhirlwindBase self) { MercMdlBehaviour component = ((EntityState)self).gameObject.GetComponent<MercMdlBehaviour>(); if (Object.op_Implicit((Object)(object)component)) { component.Swap(); } orig.Invoke(self); } private static void WhirlwindBase_OnExit(orig_OnExit orig, WhirlwindBase self) { MercMdlBehaviour component = ((EntityState)self).gameObject.GetComponent<MercMdlBehaviour>(); if (Object.op_Implicit((Object)(object)component)) { component.Swap(); } orig.Invoke(self); } private static void CharacterBody_Start(orig_Start orig, CharacterBody self) { orig.Invoke(self); } } [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.*/)] [BepInPlugin("com.Dragonyck.LeviathanSkills", "LeviathanSkills", "1.0.0")] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] public class MainPlugin : BaseUnityPlugin { public const string MODUID = "com.Dragonyck.LeviathanSkills"; public const string MODNAME = "LeviathanSkills"; public const string VERSION = "1.0.0"; public static SkillDef scepterOverrideDef0; public static SkillDef scepterOverrideDef1; private ConfigEntry<bool> croco; private void Awake() { //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) //IL_002d: Expected O, but got Unknown //IL_002d: Expected O, but got Unknown croco = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("Enable WIP Acrid Skills", "Enable"), false, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); Assets.PopulateAssets(); Prefabs.CreatePrefabs(); AcridSetup(); MercSetup(); Hook.Hooks(); if (ModCompat.AncientScepterEnabled) { ModCompat.AddScepterSupport(); } } private void AcridSetup() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_008b: 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_0123: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Expected O, but got Unknown //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Unknown result type (might be due to invalid IL or missing references) //IL_0277: Unknown result type (might be due to invalid IL or missing references) //IL_0291: Unknown result type (might be due to invalid IL or missing references) //IL_029b: Expected O, but got Unknown //IL_029c: 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_02a8: Unknown result type (might be due to invalid IL or missing references) //IL_02b0: Unknown result type (might be due to invalid IL or missing references) //IL_02b8: Unknown result type (might be due to invalid IL or missing references) GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Croco/CrocoBody.prefab").WaitForCompletion(); if (Object.op_Implicit((Object)(object)val) && croco.Value) { SkillLocator component = val.GetComponent<SkillLocator>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component.primary) && Object.op_Implicit((Object)(object)component.secondary)) { LanguageAPI.Add("CROCO_DRG_ALT_M1_2", "Envenomed Claws"); LanguageAPI.Add("CROCO_DRG_ALT_M1_DESCRIPTION_2", "Perform a slower three hit combo for <style=cIsDamage>800% damage</style> that applies <style=cIsHealing>poison</style> on the last hit."); SkillDef val2 = Object.Instantiate<SkillDef>(Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Croco/CrocoSlash.asset").WaitForCompletion()); val2.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("crocoBite"); val2.skillDescriptionToken = "CROCO_DRG_ALT_M1_DESCRIPTION_2"; val2.skillName = "CROCO_DRG_ALT_M1_2"; val2.skillNameToken = "CROCO_DRG_ALT_M1_2"; val2.cancelSprintingOnActivation = true; ContentAddition.AddSkillDef(val2); SkillFamily skillFamily = component.primary.skillFamily; Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1); Variant[] variants = skillFamily.variants; int num = skillFamily.variants.Length - 1; Variant val3 = new Variant { skillDef = val2 }; ((Variant)(ref val3)).viewableNode = new Node(val2.skillNameToken, false, (Node)null); variants[num] = val3; SkillFamily skillFamily2 = component.secondary.skillFamily; LanguageAPI.Add("CROCO_DRG_ALT_M1", "Toxic Slam"); LanguageAPI.Add("CROCO_DRG_ALT_M1_DESCRIPTION", "<style=cIsDamage>Charge</style> up a radial slam for <style=cIsDamage>200-650% damage</style> that <style=cIsHealing>poisons</style> everything it hits, and at full charge leaves a poisonous puddle."); val2 = ScriptableObject.CreateInstance<SkillDef>(); val2.activationStateMachineName = "Weapon"; val2.activationState = new SerializableEntityStateType(typeof(BaseCrocoCharge)); val2.baseMaxStock = 0; val2.baseRechargeInterval = 0f; val2.beginSkillCooldownOnSkillEnd = true; val2.canceledFromSprinting = false; val2.fullRestockOnAssign = true; val2.interruptPriority = (InterruptPriority)0; val2.isCombatSkill = true; val2.mustKeyPress = false; val2.cancelSprintingOnActivation = true; val2.rechargeStock = 0; val2.requiredStock = 0; val2.stockToConsume = 0; val2.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("crocoSwipe"); val2.skillDescriptionToken = "CROCO_DRG_ALT_M1_DESCRIPTION"; val2.skillName = "CROCO_DRG_ALT_M1"; val2.skillNameToken = "CROCO_DRG_ALT_M1"; ContentAddition.AddSkillDef(val2); Array.Resize(ref skillFamily2.variants, skillFamily2.variants.Length + 1); Variant[] variants2 = skillFamily2.variants; int num2 = skillFamily2.variants.Length - 1; val3 = new Variant { skillDef = val2 }; ((Variant)(ref val3)).viewableNode = new Node(val2.skillNameToken, false, (Node)null); variants2[num2] = val3; bool flag = false; ContentAddition.AddEntityState<BaseCrocoCharge>(ref flag); ContentAddition.AddEntityState<SlashCrocoCharge>(ref flag); ContentAddition.AddEntityState<EndSlashCrocoCharge>(ref flag); } } } private void MercSetup() { //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_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_00da: 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_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Expected O, but got Unknown //IL_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_01c6: Unknown result type (might be due to invalid IL or missing references) //IL_01d0: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Unknown result type (might be due to invalid IL or missing references) //IL_0230: Unknown result type (might be due to invalid IL or missing references) //IL_0264: Unknown result type (might be due to invalid IL or missing references) //IL_0329: Unknown result type (might be due to invalid IL or missing references) //IL_0343: Unknown result type (might be due to invalid IL or missing references) //IL_034d: Expected O, but got Unknown //IL_034e: Unknown result type (might be due to invalid IL or missing references) //IL_0350: Unknown result type (might be due to invalid IL or missing references) //IL_035a: Unknown result type (might be due to invalid IL or missing references) //IL_03b5: Unknown result type (might be due to invalid IL or missing references) //IL_03ba: Unknown result type (might be due to invalid IL or missing references) //IL_03ee: Unknown result type (might be due to invalid IL or missing references) //IL_04b3: Unknown result type (might be due to invalid IL or missing references) //IL_04cd: Unknown result type (might be due to invalid IL or missing references) //IL_04d7: Expected O, but got Unknown //IL_04d8: Unknown result type (might be due to invalid IL or missing references) //IL_04da: Unknown result type (might be due to invalid IL or missing references) //IL_04e4: Unknown result type (might be due to invalid IL or missing references) //IL_0568: Unknown result type (might be due to invalid IL or missing references) //IL_056d: Unknown result type (might be due to invalid IL or missing references) //IL_05b3: Unknown result type (might be due to invalid IL or missing references) //IL_069c: Unknown result type (might be due to invalid IL or missing references) //IL_06bc: Unknown result type (might be due to invalid IL or missing references) //IL_06c6: Expected O, but got Unknown //IL_06c7: Unknown result type (might be due to invalid IL or missing references) //IL_06c9: Unknown result type (might be due to invalid IL or missing references) //IL_06f6: Unknown result type (might be due to invalid IL or missing references) //IL_06fb: Unknown result type (might be due to invalid IL or missing references) //IL_0741: Unknown result type (might be due to invalid IL or missing references) //IL_07f6: Unknown result type (might be due to invalid IL or missing references) //IL_07fe: Unknown result type (might be due to invalid IL or missing references) //IL_0806: Unknown result type (might be due to invalid IL or missing references) //IL_080e: Unknown result type (might be due to invalid IL or missing references) OrbAPI.AddOrb<MercOrb>(); GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Merc/MercBody.prefab").WaitForCompletion(); if (!Object.op_Implicit((Object)(object)val)) { return; } val.AddComponent<MercMdlBehaviour>(); val.AddComponent<MercTracker>(); SkillLocator component = val.GetComponent<SkillLocator>(); if (Object.op_Implicit((Object)(object)component)) { Variant val3; if (Object.op_Implicit((Object)(object)component.primary)) { LanguageAPI.Add("MERC_DRG_ALT_M1", "T125 Hardlight Blades"); LanguageAPI.Add("MERC_DRG_ALT_M1_DESCRIPTION", "Hurl three fighting knives for <style=cIsDamage>100% damage</style> each. On critical strikes, throw double."); SkillDef val2 = ScriptableObject.CreateInstance<SkillDef>(); val2.activationStateMachineName = "Weapon"; val2.activationState = new SerializableEntityStateType(typeof(KunaiThrow)); val2.baseMaxStock = 0; val2.baseRechargeInterval = 0f; val2.beginSkillCooldownOnSkillEnd = true; val2.canceledFromSprinting = false; val2.fullRestockOnAssign = true; val2.interruptPriority = (InterruptPriority)0; val2.isCombatSkill = true; val2.mustKeyPress = false; val2.cancelSprintingOnActivation = false; val2.rechargeStock = 0; val2.requiredStock = 0; val2.stockToConsume = 0; val2.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("mercPrimary"); val2.skillDescriptionToken = "MERC_DRG_ALT_M1_DESCRIPTION"; val2.skillName = "MERC_DRG_ALT_M1"; val2.skillNameToken = "MERC_DRG_ALT_M1"; val2.keywordTokens = new string[1] { "KEYWORD_AGILE" }; ContentAddition.AddSkillDef(val2); SkillFamily skillFamily = component.primary.skillFamily; Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1); Variant[] variants = skillFamily.variants; int num = skillFamily.variants.Length - 1; val3 = new Variant { skillDef = val2 }; ((Variant)(ref val3)).viewableNode = new Node(val2.skillNameToken, false, (Node)null); variants[num] = val3; bool flag = false; ContentAddition.AddEntityState<KunaiThrow>(ref flag); } if (Object.op_Implicit((Object)(object)component.secondary)) { LanguageAPI.Add("MERC_DRG_ALT_M2", "Hunter-Killer Fuma"); LanguageAPI.Add("MERC_DRG_ALT_M2_DESCRIPTION", "Throw a bouncing bladed shuriken that strikes multiple targets for <style=cIsDamage>280% damage</style>."); MercSkillAimDef mercSkillAimDef = ScriptableObject.CreateInstance<MercSkillAimDef>(); ((SkillDef)mercSkillAimDef).activationStateMachineName = "Weapon"; ((SkillDef)mercSkillAimDef).activationState = new SerializableEntityStateType(typeof(SecondaryMerc)); ((SkillDef)mercSkillAimDef).baseMaxStock = 1; ((SkillDef)mercSkillAimDef).baseRechargeInterval = 5f; ((SkillDef)mercSkillAimDef).beginSkillCooldownOnSkillEnd = true; ((SkillDef)mercSkillAimDef).canceledFromSprinting = false; ((SkillDef)mercSkillAimDef).fullRestockOnAssign = true; ((SkillDef)mercSkillAimDef).interruptPriority = (InterruptPriority)0; ((SkillDef)mercSkillAimDef).isCombatSkill = true; ((SkillDef)mercSkillAimDef).mustKeyPress = false; ((SkillDef)mercSkillAimDef).cancelSprintingOnActivation = false; ((SkillDef)mercSkillAimDef).rechargeStock = 1; ((SkillDef)mercSkillAimDef).requiredStock = 1; ((SkillDef)mercSkillAimDef).stockToConsume = 1; ((SkillDef)mercSkillAimDef).icon = Assets.MainAssetBundle.LoadAsset<Sprite>("mercSecondary"); ((SkillDef)mercSkillAimDef).skillDescriptionToken = "MERC_DRG_ALT_M2_DESCRIPTION"; ((SkillDef)mercSkillAimDef).skillName = "MERC_DRG_ALT_M2"; ((SkillDef)mercSkillAimDef).skillNameToken = "MERC_DRG_ALT_M2"; ((SkillDef)mercSkillAimDef).keywordTokens = new string[1] { "KEYWORD_AGILE" }; ContentAddition.AddSkillDef((SkillDef)(object)mercSkillAimDef); SkillFamily skillFamily2 = component.secondary.skillFamily; Array.Resize(ref skillFamily2.variants, skillFamily2.variants.Length + 1); Variant[] variants2 = skillFamily2.variants; int num2 = skillFamily2.variants.Length - 1; val3 = new Variant { skillDef = (SkillDef)(object)mercSkillAimDef }; ((Variant)(ref val3)).viewableNode = new Node(((SkillDef)mercSkillAimDef).skillNameToken, false, (Node)null); variants2[num2] = val3; bool flag2 = false; ContentAddition.AddEntityState<SecondaryMerc>(ref flag2); } if (Object.op_Implicit((Object)(object)component.utility)) { LanguageAPI.Add("MERC_DRG_ALT_UTIL", "Nanoshield Bomb"); LanguageAPI.Add("MERC_DRG_ALT_UTIL_DESCRIPTION", "Hurl a package of high-durability nanites at the ground, which use their brief battery power to render you and nearby allies <style=cIsUtility>invulnerable</style> for a short period."); SkillDef val4 = ScriptableObject.CreateInstance<SkillDef>(); val4.activationStateMachineName = "Weapon"; val4.activationState = new SerializableEntityStateType(typeof(UtilityMerc)); val4.baseMaxStock = 1; val4.baseRechargeInterval = 3f; val4.beginSkillCooldownOnSkillEnd = true; val4.canceledFromSprinting = false; val4.fullRestockOnAssign = true; val4.interruptPriority = (InterruptPriority)0; val4.isCombatSkill = true; val4.mustKeyPress = false; val4.cancelSprintingOnActivation = false; val4.rechargeStock = 1; val4.requiredStock = 1; val4.stockToConsume = 1; val4.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("mercUtil"); val4.skillDescriptionToken = "MERC_DRG_ALT_UTIL_DESCRIPTION"; val4.skillName = "MERC_DRG_ALT_UTIL"; val4.skillNameToken = "MERC_DRG_ALT_UTIL"; val4.keywordTokens = new string[1] { "KEYWORD_AGILE" }; ContentAddition.AddSkillDef(val4); SkillFamily skillFamily3 = component.utility.skillFamily; Array.Resize(ref skillFamily3.variants, skillFamily3.variants.Length + 1); Variant[] variants3 = skillFamily3.variants; int num3 = skillFamily3.variants.Length - 1; val3 = new Variant { skillDef = val4 }; ((Variant)(ref val3)).viewableNode = new Node(val4.skillNameToken, false, (Node)null); variants3[num3] = val3; bool flag3 = false; ContentAddition.AddEntityState<UtilityMerc>(ref flag3); } if (Object.op_Implicit((Object)(object)component.special)) { LanguageAPI.Add("MERC_DRG_ALT_SPEC", "Detonator Spikes"); LanguageAPI.Add("MERC_DRG_ALT_SPEC_DESCRIPTION", "Hurl a Barrage of impact activated explosive knives for <style=cIsDamage>600% damage</style>."); LanguageAPI.Add("MERC_DRG_ALT_SPEC_ITEM", "C40 Detonator Spikes"); LanguageAPI.Add("MERC_DRG_ALT_SPEC_DESCRIPTION_ITEM", "Hurl a smaller Barrage of impact activated explosive knives for <style=cIsDamage>450% damage</style>. Hold up to three <style=cIsDamage>charges</style>."); scepterOverrideDef0 = ScriptableObject.CreateInstance<SkillDef>(); scepterOverrideDef0.activationStateMachineName = "Body"; scepterOverrideDef0.activationState = new SerializableEntityStateType(typeof(SpecialMerc)); scepterOverrideDef0.baseMaxStock = 1; scepterOverrideDef0.baseRechargeInterval = 5f; scepterOverrideDef0.beginSkillCooldownOnSkillEnd = true; scepterOverrideDef0.canceledFromSprinting = false; scepterOverrideDef0.fullRestockOnAssign = true; scepterOverrideDef0.interruptPriority = (InterruptPriority)0; scepterOverrideDef0.isCombatSkill = true; scepterOverrideDef0.mustKeyPress = false; scepterOverrideDef0.cancelSprintingOnActivation = false; scepterOverrideDef0.rechargeStock = 1; scepterOverrideDef0.requiredStock = 1; scepterOverrideDef0.stockToConsume = 1; scepterOverrideDef0.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("mercSpecial"); scepterOverrideDef0.skillDescriptionToken = "MERC_DRG_ALT_SPEC_DESCRIPTION"; scepterOverrideDef0.skillName = "MERC_DRG_ALT_SPEC"; scepterOverrideDef0.skillNameToken = "MERC_DRG_ALT_SPEC"; scepterOverrideDef0.keywordTokens = new string[1] { "KEYWORD_AGILE" }; ContentAddition.AddSkillDef(scepterOverrideDef0); SkillFamily skillFamily4 = component.special.skillFamily; Array.Resize(ref skillFamily4.variants, skillFamily4.variants.Length + 1); Variant[] variants4 = skillFamily4.variants; int num4 = skillFamily4.variants.Length - 1; val3 = new Variant { skillDef = scepterOverrideDef0 }; ((Variant)(ref val3)).viewableNode = new Node(scepterOverrideDef0.skillNameToken, false, (Node)null); variants4[num4] = val3; scepterOverrideDef1 = ScriptableObject.CreateInstance<SkillDef>(); scepterOverrideDef1.activationStateMachineName = "Body"; scepterOverrideDef1.activationState = new SerializableEntityStateType(typeof(ItemSpecialMerc)); scepterOverrideDef1.baseMaxStock = 3; scepterOverrideDef1.baseRechargeInterval = 5f; scepterOverrideDef1.beginSkillCooldownOnSkillEnd = true; scepterOverrideDef1.canceledFromSprinting = false; scepterOverrideDef1.fullRestockOnAssign = true; scepterOverrideDef1.interruptPriority = (InterruptPriority)0; scepterOverrideDef1.isCombatSkill = true; scepterOverrideDef1.mustKeyPress = false; scepterOverrideDef1.cancelSprintingOnActivation = false; scepterOverrideDef1.rechargeStock = 1; scepterOverrideDef1.requiredStock = 1; scepterOverrideDef1.stockToConsume = 1; scepterOverrideDef0.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("mercSpecial"); scepterOverrideDef1.skillDescriptionToken = "MERC_DRG_ALT_SPEC_DESCRIPTION_ITEM"; scepterOverrideDef1.skillName = "MERC_DRG_ALT_SPEC_ITEM"; scepterOverrideDef1.skillNameToken = "MERC_DRG_ALT_SPEC_ITEM"; scepterOverrideDef1.keywordTokens = new string[1] { "KEYWORD_AGILE" }; ContentAddition.AddSkillDef(scepterOverrideDef1); bool flag4 = false; ContentAddition.AddEntityState<SpecialMerc>(ref flag4); ContentAddition.AddEntityState<SpecialMercFire>(ref flag4); ContentAddition.AddEntityState<ItemSpecialMerc>(ref flag4); ContentAddition.AddEntityState<ItemSpecialMercFire>(ref flag4); } } } } public static class ModCompat { private static bool? ancientEnabled; public static bool AncientScepterEnabled { get { if (!ancientEnabled.HasValue) { ancientEnabled = Chainloader.PluginInfos.ContainsKey("com.DestroyedClone.AncientScepter"); } return ancientEnabled.Value; } } public static void AddScepterSupport() { ItemBase<AncientScepterItem>.instance.RegisterScepterSkill(MainPlugin.scepterOverrideDef0, "RahkshiBody", (SkillSlot)3, 0); ItemBase<AncientScepterItem>.instance.RegisterScepterSkill(MainPlugin.scepterOverrideDef1, "RahkshiBody", (SkillSlot)3, 1); } } internal class Prefabs { internal static GameObject kunai; internal static GameObject dagger; internal static GameObject shuriken; internal static GameObject sword; internal static GameObject daggerProjectile; internal static GameObject shurikenOrbEffect; internal static GameObject kunaiProjectile; internal static GameObject kunaiSlashEffect; internal static GameObject shurikenImpactEffect; internal static GameObject dashEffect; internal static GameObject mercIndicator; internal static void CreatePrefabs() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Expected O, but got Unknown //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: 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_017e: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_020c: 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_0281: Unknown result type (might be due to invalid IL or missing references) //IL_0286: Unknown result type (might be due to invalid IL or missing references) //IL_036a: Unknown result type (might be due to invalid IL or missing references) //IL_036f: Unknown result type (might be due to invalid IL or missing references) //IL_03a4: Unknown result type (might be due to invalid IL or missing references) //IL_03e9: Unknown result type (might be due to invalid IL or missing references) //IL_03ee: Unknown result type (might be due to invalid IL or missing references) //IL_0469: Unknown result type (might be due to invalid IL or missing references) //IL_046e: Unknown result type (might be due to invalid IL or missing references) //IL_04b6: Unknown result type (might be due to invalid IL or missing references) //IL_04bb: Unknown result type (might be due to invalid IL or missing references) //IL_04d0: Unknown result type (might be due to invalid IL or missing references) //IL_04d5: Unknown result type (might be due to invalid IL or missing references) //IL_04f3: Unknown result type (might be due to invalid IL or missing references) //IL_04f8: Unknown result type (might be due to invalid IL or missing references) //IL_052d: Unknown result type (might be due to invalid IL or missing references) //IL_0532: Unknown result type (might be due to invalid IL or missing references) //IL_05df: Unknown result type (might be due to invalid IL or missing references) //IL_05e4: Unknown result type (might be due to invalid IL or missing references) //IL_05ed: Unknown result type (might be due to invalid IL or missing references) //IL_05f2: Unknown result type (might be due to invalid IL or missing references) //IL_05fb: Unknown result type (might be due to invalid IL or missing references) //IL_0600: Unknown result type (might be due to invalid IL or missing references) //IL_0609: Unknown result type (might be due to invalid IL or missing references) //IL_060e: Unknown result type (might be due to invalid IL or missing references) //IL_0694: Unknown result type (might be due to invalid IL or missing references) //IL_0699: Unknown result type (might be due to invalid IL or missing references) //IL_070b: Unknown result type (might be due to invalid IL or missing references) //IL_0710: Unknown result type (might be due to invalid IL or missing references) //IL_0726: Unknown result type (might be due to invalid IL or missing references) //IL_0742: Unknown result type (might be due to invalid IL or missing references) //IL_077d: Unknown result type (might be due to invalid IL or missing references) //IL_0799: Unknown result type (might be due to invalid IL or missing references) //IL_07b4: Unknown result type (might be due to invalid IL or missing references) //IL_07b9: Unknown result type (might be due to invalid IL or missing references) //IL_07de: Unknown result type (might be due to invalid IL or missing references) GameObject val = Assets.MainAssetBundle.LoadAsset<GameObject>("shuriken"); Material val2 = Object.Instantiate<Material>(Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/LunarWisp/matLunarWispBombChargeTrail.mat").WaitForCompletion()); val2.mainTexture = (Texture)(object)Addressables.LoadAssetAsync<Texture2D>((object)"Calm Water/DistTex.jpg").WaitForCompletion(); TrailRenderer[] componentsInChildren = val.GetComponentsInChildren<TrailRenderer>(); foreach (TrailRenderer val3 in componentsInChildren) { ((Renderer)val3).material = val2; } dashEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Brother/BrotherDashEffect.prefab").WaitForCompletion(), "SpearmanUtilityDashEffect", true); dashEffect.AddComponent<NetworkIdentity>(); foreach (Transform item in dashEffect.transform) { Transform val4 = item; val4.localRotation = new Quaternion(90f, 0f, 0f, 0f); val4.localScale = new Vector3(0.4f, 0.4f, 0.4f); if (!(((Object)((Component)val4).gameObject).name == "Dash")) { } } ContentAddition.AddEffect(dashEffect); sword = PrefabAPI.InstantiateClone(Assets.MainAssetBundle.LoadAsset<GameObject>("MercSwordMesh"), "backSword", false); ((Renderer)sword.GetComponentInChildren<MeshRenderer>()).material = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Merc/matMercSword.mat").WaitForCompletion(); kunai = PrefabAPI.InstantiateClone(Assets.MainAssetBundle.LoadAsset<GameObject>("Kunaimdl"), "Kunai", false); Assets.MainAssetBundle.LoadAsset<Material>("kunaiMat").shader = Addressables.LoadAssetAsync<Shader>((object)"RoR2/Base/Shaders/HGStandard.shader").WaitForCompletion(); dagger = PrefabAPI.InstantiateClone(Assets.MainAssetBundle.LoadAsset<GameObject>("dagger"), "Dagger", false); Assets.MainAssetBundle.LoadAsset<Material>("daggerMat").shader = Addressables.LoadAssetAsync<Shader>((object)"RoR2/Base/Shaders/HGStandard.shader").WaitForCompletion(); shuriken = PrefabAPI.InstantiateClone(val, "Shuriken", false); Assets.MainAssetBundle.LoadAsset<Material>("shurikenMat").shader = Addressables.LoadAssetAsync<Shader>((object)"RoR2/Base/Shaders/HGStandard.shader").WaitForCompletion(); GameObject val5 = PrefabAPI.InstantiateClone(Assets.MainAssetBundle.LoadAsset<GameObject>("dagger"), "DaggerGhost", false); val5.AddComponent<ProjectileGhostController>(); ((Renderer)val5.GetComponentInChildren<TrailRenderer>()).material = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/Railgunner/matRailgunBeamFlashCryo.mat").WaitForCompletion(); RotateAroundAxis val6 = ((Component)val5.transform.GetChild(0)).gameObject.AddComponent<RotateAroundAxis>(); val6.speed = (Speed)2; val6.fastRotationSpeed = 2880f; val6.rotateAroundAxis = (RotationAxis)2; ObjectScaleCurve val7 = val5.AddComponent<ObjectScaleCurve>(); val7.useOverallCurveOnly = true; val7.overallCurve = AnimationCurve.Linear(0f, 0.5f, 1f, 1.4f); val7.timeMax = 0.1f; GameObject val8 = PrefabAPI.InstantiateClone(Assets.MainAssetBundle.LoadAsset<GameObject>("Kunaimdl"), "KunaiGhost", false); val8.AddComponent<ProjectileGhostController>(); ObjectScaleCurve val9 = val8.AddComponent<ObjectScaleCurve>(); val9.useOverallCurveOnly = true; val9.overallCurve = AnimationCurve.Linear(0f, 0.5f, 1f, 1.4f); val9.timeMax = 0.1f; kunaiProjectile = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Bandit2/Bandit2ShivProjectile.prefab").WaitForCompletion(), "MercKunaiProjectile", true); kunaiProjectile.GetComponent<Rigidbody>().useGravity = false; kunaiProjectile.GetComponent<ProjectileDamage>().damageType = (DamageType)0; Object.Destroy((Object)(object)((Component)kunaiProjectile.transform.Find("InFlight")).gameObject); kunaiProjectile.GetComponent<ProjectileController>().ghostPrefab = val8; ContentAddition.AddProjectile(kunaiProjectile); kunaiSlashEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Merc/MercSwordFinisherSlash.prefab").WaitForCompletion(), "MercKunaiSlashEffect", false); ParticleSystem[] componentsInChildren2 = kunaiSlashEffect.GetComponentsInChildren<ParticleSystem>(); foreach (ParticleSystem val10 in componentsInChildren2) { val10.scalingMode = (ParticleSystemScalingMode)0; } kunaiSlashEffect.GetComponent<ScaleParticleSystemDuration>().initialDuration = 0.6f; Utils.RegisterEffect(kunaiSlashEffect, 1f); daggerProjectile = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mage/MageFireboltBasic.prefab").WaitForCompletion(), "MercDaggerProjectile", true); daggerProjectile.GetComponent<ProjectileController>().ghostPrefab = val5; ProjectileImpactExplosion component = daggerProjectile.GetComponent<ProjectileImpactExplosion>(); ((ProjectileExplosion)component).blastRadius = 6f; ((ProjectileExplosion)component).explosionEffect = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarWisp/LunarWispTrackingBombExplosion.prefab").WaitForCompletion(); component.impactEffect = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarWisp/LunarWispTrackingBombExplosion.prefab").WaitForCompletion(); ContentAddition.AddProjectile(daggerProjectile); shurikenImpactEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Brother/OmniImpactVFXBrotherLunarShardExplosion.prefab").WaitForCompletion(), "MercShurikenImpactEffect", false); Utils.RegisterEffect(shurikenImpactEffect, 1f, "Play_bandit2_m2_impact"); OrbEffect component2 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Huntress/HuntressGlaiveOrbEffect.prefab").WaitForCompletion().GetComponent<OrbEffect>(); shurikenOrbEffect = PrefabAPI.InstantiateClone(val, "MercShurikenOrb", true); GameObject gameObject = ((Component)shurikenOrbEffect.transform.GetChild(0)).gameObject; RotateAroundAxis val11 = gameObject.AddComponent<RotateAroundAxis>(); val11.speed = (Speed)2; val11.fastRotationSpeed = 720f; val11.rotateAroundAxis = (RotationAxis)1; ObjectScaleCurve val12 = gameObject.AddComponent<ObjectScaleCurve>(); val12.useOverallCurveOnly = true; val12.overallCurve = AnimationCurve.Linear(0f, 0.25f, 1f, 1.2f); val12.timeMax = 0.1f; OrbEffect val13 = shurikenOrbEffect.AddComponent<OrbEffect>(); val13.startVelocity1 = component2.startVelocity1; val13.startVelocity2 = component2.startVelocity2; val13.endVelocity1 = component2.endVelocity1; val13.endVelocity2 = component2.endVelocity2; val13.movementCurve = component2.movementCurve; val13.faceMovement = true; val13.callArrivalIfTargetIsGone = false; val13.startEffect = null; val13.startEffectScale = 2f; val13.startEffectCopiesRotation = false; val13.endEffectScale = 1f; val13.endEffectCopiesRotation = false; val13.endEffect = shurikenImpactEffect; shurikenOrbEffect.AddComponent<Rigidbody>(); Utils.RegisterEffect(shurikenOrbEffect, 99f, "", parentToReferencedTransform: false, positionAtReferencedTransform: false); mercIndicator = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Engi/EngiMissileTrackingIndicator.prefab").WaitForCompletion(), "MercIndicator", false); Transform[] componentsInChildren3 = mercIndicator.GetComponentsInChildren<Transform>(true); foreach (Transform val14 in componentsInChildren3) { string name = ((Object)val14).name; if (name == "Arrow") { ((Component)val14.parent).gameObject.SetActive(true); ((Component)val14).GetComponent<SpriteRenderer>().sprite = Utils.CreateSprite(Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/Common/MiscIcons/texOptionsArrowLeft.png").WaitForCompletion()); val14.localPosition = Vector3.zero; val14.localRotation = Quaternion.Euler(0f, 0f, 90f); } if (name == "Base Core") { Object.Destroy((Object)(object)((Component)val14.parent).GetComponent<RotateAroundAxis>()); val14.parent.localRotation = Quaternion.identity; val14.localRotation = Quaternion.Euler(0f, 0f, 45f); SpriteRenderer component3 = ((Component)val14).GetComponent<SpriteRenderer>(); component3.sprite = Utils.CreateSprite(Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/UI/texUICornerTier2.png").WaitForCompletion()); component3.color = new Color(0.13725f, 1f, 0.99216f); } } } } internal class MercOrb : Orb { public float speed = 66f; public float damageValue; public GameObject attacker; public GameObject inflictor; public int bouncesRemaining; public List<HealthComponent> bouncedObjects; public TeamIndex teamIndex; public bool isCrit; public ProcChainMask procChainMask; public float procCoefficient = 1f; public DamageColorIndex damageColorIndex; public float range = 35f; public float damageCoefficientPerBounce = 1f; public int targetsToFindPerBounce = 1; public DamageType damageType; private bool failedToKill; private BullseyeSearch search; public override void Begin() { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown ((Orb)this).Begin(); ((Orb)this).duration = 0.25f; EffectData val = new EffectData { origin = base.origin, genericFloat = ((Orb)this).duration }; val.SetHurtBoxReference(base.target); EffectManager.SpawnEffect(Prefabs.shurikenOrbEffect, val, true); } public override void OnArrival() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected O, but got Unknown //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) //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_00b4: 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_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) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_0229: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Unknown result type (might be due to invalid IL or missing references) //IL_0243: Unknown result type (might be due to invalid IL or missing references) //IL_0248: Unknown result type (might be due to invalid IL or missing references) //IL_0277: Unknown result type (might be due to invalid IL or missing references) //IL_027c: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)base.target)) { return; } EffectManager.SimpleEffect(Prefabs.shurikenImpactEffect, ((Component)base.target).transform.position, Quaternion.identity, true); HealthComponent healthComponent = base.target.healthComponent; if (Object.op_Implicit((Object)(object)healthComponent)) { DamageInfo val = new DamageInfo(); val.damage = damageValue; val.attacker = attacker; val.inflictor = inflictor; val.force = Vector3.zero; val.crit = isCrit; val.procChainMask = procChainMask; val.procCoefficient = procCoefficient; val.position = ((Component)base.target).transform.position; val.damageColorIndex = damageColorIndex; val.damageType = damageType; healthComponent.TakeDamage(val); GlobalEventManager.instance.OnHitEnemy(val, ((Component)healthComponent).gameObject); GlobalEventManager.instance.OnHitAll(val, ((Component)healthComponent).gameObject); } failedToKill |= !Object.op_Implicit((Object)(object)healthComponent) || healthComponent.alive; if (bouncesRemaining <= 0) { return; } for (int i = 0; i < targetsToFindPerBounce; i++) { if (bouncedObjects != null) { bouncedObjects.Add(base.target.healthComponent); } HurtBox val2 = PickNextTarget(((Component)base.target).transform.position); if (Object.op_Implicit((Object)(object)val2)) { MercOrb mercOrb = new MercOrb(); mercOrb.search = search; ((Orb)mercOrb).origin = ((Component)base.target).transform.position; ((Orb)mercOrb).target = val2; mercOrb.attacker = attacker; mercOrb.inflictor = inflictor; mercOrb.teamIndex = teamIndex; mercOrb.damageValue = damageValue * damageCoefficientPerBounce; mercOrb.bouncesRemaining = bouncesRemaining - 1; mercOrb.isCrit = isCrit; mercOrb.bouncedObjects = bouncedObjects; mercOrb.procChainMask = procChainMask; mercOrb.procCoefficient = procCoefficient; mercOrb.damageColorIndex = damageColorIndex; mercOrb.damageCoefficientPerBounce = damageCoefficientPerBounce; mercOrb.speed = speed; mercOrb.range = range; mercOrb.damageType = damageType; mercOrb.failedToKill = failedToKill; OrbManager.instance.AddOrb((Orb)(object)mercOrb); } } } public HurtBox PickNextTarget(Vector3 position) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Expected O, but got Unknown if (search == null) { search = new BullseyeSearch(); } search.searchOrigin = position; search.searchDirection = Vector3.zero; search.teamMaskFilter = TeamMask.allButNeutral; ((TeamMask)(ref search.teamMaskFilter)).RemoveTeam(teamIndex); search.filterByLoS = false; search.sortMode = (SortMode)1; search.maxDistanceFilter = range; search.RefreshCandidates(); HurtBox val = (from v in search.GetResults() where !bouncedObjects.Contains(v.healthComponent) select v).FirstOrDefault(); if (Object.op_Implicit((Object)(object)val)) { bouncedObjects.Add(val.healthComponent); } return val; } } internal class BaseCrocoCharge : BaseSkillState { private float duration = 1.5f; private SlashCrocoCharge state; public override void OnEnter() { ((EntityState)this).characterBody.isSprinting = false; ((EntityState)this).GetModelAnimator().SetBool("isSprinting", false); ((EntityState)this).PlayAnimation("Body", "Run"); ((BaseState)this).OnEnter(); ((BaseState)this).StartAimMode(2f, false); state = new SlashCrocoCharge(); ((EntityState)this).PlayAnimation("Gesture, Additive", "Slash3", "Slash.playbackRate", 10f); ((EntityState)this).PlayAnimation("Gesture, Override", "Slash3", "Slash.playbackRate", 10f); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); ((EntityState)this).characterBody.isSprinting = false; if (state != null) { state.charge = Mathf.Clamp(Mathf.Clamp01(((EntityState)this).fixedAge / 1.5f), 0f, 1f); } if ((((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) || !((EntityState)this).inputBank.skill2.down) { ((EntityState)this).outer.SetNextState((EntityState)(object)state); } } public override void OnExit() { ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } } internal class SlashCrocoCharge : Slash { public float charge = 0f; private float blastDamageCoefficient; public override void OnEnter() { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) blastDamageCoefficient = Util.Remap(charge, 0f, 1f, 2f, 6.5f); Slash.comboFinisherSwingEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Croco/CrocoComboFinisherSlash.prefab").WaitForCompletion(); ((BasicMeleeAttack)this).baseDuration = 0.25f; base.hasGrantedBuff = true; base.step = 2; ((BasicMeleeAttack)this).hitBoxGroupName = "Slash"; ((BasicMeleeAttack)this).mecanimHitboxActiveParameter = "Slash.hitBoxActive"; ((BasicMeleeAttack)this).hitPauseDuration = 0.07f; ((Slash)this).OnEnter(); ((BaseState)this).StartAimMode(2f, false); base.durationBeforeInterruptable = 9f; Slash.comboFinisherDamageCoefficient = 0f; } public override void PlayAnimation() { //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_0028: 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_0035: 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_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Expected O, but got Unknown //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_0073: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: 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_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0104: 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_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_011c: 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_0126: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: 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_01b3: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Unknown result type (might be due to invalid IL or missing references) //IL_01c2: Unknown result type (might be due to invalid IL or missing references) Vector3 footPosition = ((EntityState)this).characterBody.footPosition; ((EntityState)this).GetModelAnimator().SetFloat("Slash.playbackRate", 1f); EffectManager.SpawnEffect(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Croco/CrocoLeapExplosion.prefab").WaitForCompletion(), new EffectData { origin = footPosition, scale = BaseLeap.blastRadius }, false); if (((EntityState)this).isAuthority) { new BlastAttack { attacker = ((EntityState)this).gameObject, teamIndex = ((EntityState)this).teamComponent.teamIndex, baseDamage = ((BaseState)this).damageStat * blastDamageCoefficient, crit = ((BaseState)this).RollCrit(), radius = Util.Remap(charge, 0f, 1f, 4.8f, 7.5f), damageType = (DamageType)4096, damageColorIndex = (DamageColorIndex)0, falloffModel = (FalloffModel)0, procChainMask = default(ProcChainMask), procCoefficient = 1f, position = ((EntityState)this).characterBody.footPosition, impactEffect = EffectCatalog.FindEffectIndexFromPrefab(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Croco/CrocoDiseaseImpactEffect.prefab").WaitForCompletion()), attackerFiltering = (AttackerFiltering)0 }.Fire(); if (Util.Remap(charge, 0f, 1f, 0f, 1f) == 1f) { FireProjectileInfo val = default(FireProjectileInfo); val.projectilePrefab = BaseLeap.projectilePrefab; val.crit = ((BasicMeleeAttack)this).isCritAuthority; val.force = 0f; val.damage = ((BaseState)this).damageStat; val.owner = ((EntityState)this).gameObject; val.rotation = Quaternion.identity; val.position = footPosition; FireProjectileInfo val2 = val; ProjectileManager.instance.FireProjectile(val2); } } } public override void AuthorityOnFinish() { ((EntityState)this).outer.SetNextState((EntityState)(object)new EndSlashCrocoCharge()); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } } internal class EndSlashCrocoCharge : BaseSkillState { private float duration = 0.3f; public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } } internal class KunaiThrow : BaseSkillState { private float duration; private float baseDuration = 0.55f; private float delay; private float baseDelay = 0.1f; private float damageCoefficient = 1f; private bool crit; private bool hasFired; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; delay = baseDelay / ((BaseState)this).attackSpeedStat; PlayAnimation(duration); crit = ((BaseState)this).RollCrit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= delay && !hasFired) { hasFired = true; Util.PlaySound("Play_merc_R_slicingBlades_throw", ((EntityState)this).gameObject); FireProjectiles(); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } private void PlayAnimation(float duration) { Animator modelAnimator = ((EntityState)this).GetModelAnimator(); if (Object.op_Implicit((Object)(object)modelAnimator)) { bool @bool = modelAnimator.GetBool("isMoving"); bool bool2 = modelAnimator.GetBool("isGrounded"); if (@bool || !bool2) { ((EntityState)this).PlayAnimation("Gesture, Additive", "GroundLight3", "GroundLight.playbackRate", duration); ((EntityState)this).PlayAnimation("Gesture, Override", "GroundLight3", "GroundLight.playbackRate", duration); } else { ((EntityState)this).PlayAnimation("FullBody, Override", "GroundLight3", "GroundLight.playbackRate", duration); } } } private void FireProjectiles() { //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_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Expected O, but got Unknown //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0077: 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_0083: 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_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: 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_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: 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) //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) //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_00fa: 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) EffectData val = new EffectData { scale = 0.3f, rotation = Quaternion.Euler(90f, 115f, 0f), origin = ((BaseState)this).FindModelChild("GroundLight3").position }; EffectManager.SpawnEffect(Prefabs.kunaiSlashEffect, val, false); if (((EntityState)this).isAuthority) { int num = 3; if (crit) { num = 6; } Ray aimRay = ((BaseState)this).GetAimRay(); Vector3 val2 = Vector3.Cross(Vector3.up, ((Ray)(ref aimRay)).direction); Vector3 val3 = Vector3.Cross(((Ray)(ref aimRay)).direction, val2); float num2 = 4f; float num3 = num2 / (float)(num - 1); Vector3 val4 = Quaternion.AngleAxis((0f - num2) * 0.5f, val3) * ((Ray)(ref aimRay)).direction; Quaternion val5 = Quaternion.AngleAxis(num3, val3); Ray val6 = default(Ray); ((Ray)(ref val6))..ctor(((Ray)(ref aimRay)).origin, val4); for (int i = 0; i < num; i++) { NewProjectile(((Ray)(ref val6)).direction, aimRay); ((Ray)(ref val6)).direction = val5 * ((Ray)(ref val6)).direction; } } } private void NewProjectile(Vector3 direction, Ray aimRay) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) ProjectileManager.instance.FireProjectile(Prefabs.kunaiProjectile, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(direction), ((EntityState)this).gameObject, ((EntityState)this).characterBody.damage * damageCoefficient, 120f, crit, (DamageColorIndex)0, (GameObject)null, -1f); } public override void OnExit() { ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } } internal class SecondaryMerc : BaseSkillState { private float duration; private float baseDuration = 0.55f; private float delay; private float baseDelay = 0.1f; private float damageCoefficient = 2.8f; private bool crit; private bool hasFired; private HurtBox target; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; delay = baseDelay / ((BaseState)this).attackSpeedStat; PlayAnimation(duration); crit = ((BaseState)this).RollCrit(); MercTracker component = ((EntityState)this).GetComponent<MercTracker>(); if (Object.op_Implicit((Object)(object)component)) { target = ((HuntressTracker)component).GetTrackingTarget(); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= delay && !hasFired) { hasFired = true; Util.PlaySound("Play_bandit2_m2_alt_throw", ((EntityState)this).gameObject); FireProjectiles(); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } private void PlayAnimation(float duration) { Animator modelAnimator = ((EntityState)this).GetModelAnimator(); if (Object.op_Implicit((Object)(object)modelAnimator)) { bool @bool = modelAnimator.GetBool("isMoving"); bool bool2 = modelAnimator.GetBool("isGrounded"); if (@bool || !bool2) { ((EntityState)this).PlayAnimation("Gesture, Additive", "GroundLight3", "GroundLight.playbackRate", duration); ((EntityState)this).PlayAnimation("Gesture, Override", "GroundLight3", "GroundLight.playbackRate", duration); } else { ((EntityState)this).PlayAnimation("FullBody, Override", "GroundLight3", "GroundLight.playbackRate", duration); } } } private void FireProjectiles() { //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_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Expected O, but got Unknown //IL_00a3: 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_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_0104: 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) EffectData val = new EffectData { scale = 0.3f, rotation = Quaternion.Euler(90f, -15f, 0f), origin = ((BaseState)this).FindModelChild("GroundLight3").position }; EffectManager.SpawnEffect(Prefabs.kunaiSlashEffect, val, false); if (NetworkServer.active) { MercOrb mercOrb = new MercOrb(); mercOrb.damageValue = ((EntityState)this).characterBody.damage * damageCoefficient; mercOrb.isCrit = Util.CheckRoll(((EntityState)this).characterBody.crit, ((EntityState)this).characterBody.master); mercOrb.teamIndex = TeamComponent.GetObjectTeam(((EntityState)this).gameObject); mercOrb.attacker = ((EntityState)this).gameObject; mercOrb.procCoefficient = 0.5f; mercOrb.bouncesRemaining = 3; mercOrb.bouncedObjects = new List<HealthComponent>(); mercOrb.damageCoefficientPerBounce = 1f; mercOrb.procChainMask = default(ProcChainMask); if (Object.op_Implicit((Object)(object)target)) { ((Orb)mercOrb).origin = ((EntityState)this).transform.position; ((Orb)mercOrb).target = target; OrbManager.instance.AddOrb((Orb)(object)mercOrb); } } } public override void OnExit() { ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } } internal class SpecialMerc : BaseSkillState { private float duration = 0.25f; private Vector3 direction; public override void OnEnter() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); EffectData val = new EffectData(); val.rotation = Util.QuaternionSafeLookRotation(Vector3.up); val.origin = ((EntityState)this).characterBody.corePosition; val.SetHurtBoxReference(((EntityState)this).characterBody.mainHurtBox); EffectManager.SpawnEffect(Prefabs.dashEffect, val, false); direction = -((EntityState)this).characterDirection.forward; ((EntityState)this).PlayAnimation("FullBody, Override", "EvisPrep", "EvisPrep.playbackRate", duration); Util.PlaySound("Play_moonBrother_phaseJump_jumpAway", ((EntityState)this).gameObject); } protected virtual void SetState() { ((EntityState)this).outer.SetNextState((EntityState)(object)new SpecialMercFire()); } public override void FixedUpdate() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002e: 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_0050: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor)) { ((EntityState)this).characterMotor.velocity = Vector3.zero; ((EntityState)this).characterMotor.rootMotion = Vector3.up * (((EntityState)this).characterBody.jumpPower * 5f * Time.fixedDeltaTime) + direction * (((EntityState)this).characterBody.jumpPower * 10f * Time.fixedDeltaTime); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { SetState(); } } public override void OnExit() { ((EntityState)this).OnExit(); ((EntityState)this).PlayAnimation("FullBody, Override", "BufferEmpty"); } } internal class SpecialMercFire : BaseSkillState { private float duration; private float baseDuration = 0.3f; private float delay; private float baseDelay = 0.08f; public float damageCoefficient = 1f; private bool crit; private bool hasFired; public int maxProjectilesFired = 6; public int firedProjectiles = 0; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; delay = baseDelay / ((BaseState)this).attackSpeedStat; PlayAnimation(duration); crit = ((BaseState)this).RollCrit(); ((BaseState)this).SmallHop(((EntityState)this).characterMotor, 4f); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (firedProjectiles < maxProjectilesFired) { if (((EntityState)this).fixedAge >= delay && !hasFired) { hasFired = true; Util.PlaySound("Play_bandit2_m2_alt_throw", ((EntityState)this).gameObject); FireProjectiles(); } } else if (((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } if (((EntityState)this).fixedAge >= duration) { SpecialMercFire specialMercFire = new SpecialMercFire(); specialMercFire.firedProjectiles = firedProjectiles + 1; if (((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextState((EntityState)(object)specialMercFire); } } } private void PlayAnimation(float duration) { Animator modelAnimator = ((EntityState)this).GetModelAnimator(); if (Object.op_Implicit((Object)(object)modelAnimator)) { bool @bool = modelAnimator.GetBool("isMoving"); bool bool2 = modelAnimator.GetBool("isGrounded"); string text = ""; switch (RoR2Application.rng.RangeInt(1, 4)) { case 1: text = "GroundLight1"; break; case 2: text = "GroundLight2"; break; case 3: text = "GroundLight3"; break; } if (@bool || !bool2) { ((EntityState)this).PlayCrossfade("Gesture, Additive", text, "GroundLight.playbackRate", duration, 0.05f); ((EntityState)this).PlayCrossfade("Gesture, Override", text, "GroundLight.playbackRate", duration, 0.05f); } else { ((EntityState)this).PlayCrossfade("FullBody, Override", text, "GroundLight.playbackRate", duration, 0.05f); } } } private void FireProjectiles() { //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_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Expected O, but got Unknown //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_008a: 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_00ac: 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_00b1: Unknown result type (might be due to invalid IL or missing references) EffectData val = new EffectData { scale = 0.3f, rotation = Quaternion.Euler(90f, -15f, 0f), origin = ((BaseState)this).FindModelChild("GroundLight3").position }; EffectManager.SpawnEffect(GroundLight.comboSwingEffectPrefab, val, false); if (((EntityState)this).isAuthority) { Ray aimRay = ((BaseState)this).GetAimRay(); float num = 5f; float num2 = Random.Range(0f - num, num) / 2f; float num3 = Random.Range(0f - num, num) / 2f; Vector3 direction = Util.ApplySpread(((Ray)(ref aimRay)).direction, 0f, 0f, 1f, 1f, num3, num2); NewProjectile(direction, aimRay); } } private void NewProjectile(Vector3 direction, Ray aimRay) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) ProjectileManager.instance.FireProjectile(Prefabs.daggerProjectile, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(direction), ((EntityState)this).gameObject, ((EntityState)this).characterBody.damage * damageCoefficient, 440f, crit, (DamageColorIndex)0, (GameObject)null, 220f); } public override void OnExit() { ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } } internal class ItemSpecialMerc : SpecialMerc { protected override void SetState() { ((EntityState)this).outer.SetNextState((EntityState)(object)new ItemSpecialMercFire()); } } internal class ItemSpecialMercFire : SpecialMercFire { public override void OnEnter() { maxProjectilesFired = 3; damageCoefficient = 1.5f; base.OnEnter(); } } internal class UtilityMerc : BaseSkillState { private SphereSearch sphereSearch = new SphereSearch(); public override void OnEnter() { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: 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_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Invalid comparison between Unknown and I4 ((BaseState)this).OnEnter(); ((BaseState)this).SmallHop(((EntityState)this).characterMotor, 18f); EffectManager.SimpleEffect(StealthMode.smokeBombEffectPrefab, ((EntityState)this).characterBody.footPosition, Quaternion.identity, false); sphereSearch.origin = ((EntityState)this).characterBody.corePosition; sphereSearch.radius = 12f; sphereSearch.mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask; HurtBox[] hurtBoxes = sphereSearch.RefreshCandidates().OrderCandidatesByDistance().FilterCandidatesByDistinctHurtBoxEntities() .GetHurtBoxes(); foreach (HurtBox val in hurtBoxes) { if (Object.op_Implicit((Object)(object)val.healthComponent) && Object.op_Implicit((Object)(object)val.healthComponent.body) && Object.op_Implicit((Object)(object)val.healthComponent.body.teamComponent) && NetworkServer.active && (int)val.healthComponent.body.teamComponent.teamIndex == 1 && val.healthComponent.body.isPlayerControlled) { val.healthComponent.body.AddTimedBuff(Buffs.Cloak, 1f); val.healthComponent.body.AddTimedBuff(Buffs.HiddenInvincibility, 1f); } } Util.PlaySound(StealthMode.enterStealthSound, ((EntityState)this).gameObject); if (((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { ((EntityState)this).OnExit(); Util.PlaySound(StealthMode.exitStealthSound, ((EntityState)this).gameObject); } } internal class Utils { internal static RendererInfo NewRendererInfo(Renderer renderer) { //IL_0003: 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_002e: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) RendererInfo result = default(RendererInfo); result.renderer = renderer; result.defaultMaterial = renderer.material; result.defaultShadowCastingMode = (ShadowCastingMode)1; result.ignoreOverlays = false; return result; } internal static NameTransformPair NewTransformPair(string name, Transform transform) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) NameTransformPair result = default(NameTransformPair); result.name = name; result.transform = transform; return result; } internal static Sprite CreateSprite(Texture2D tex) { //IL_001a: 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) return Sprite.Create(tex, new Rect(0f, 0f, (float)((Texture)tex).width, (float)((Texture)tex).height), new Vector2(0.5f, 0.5f), 128f); } internal static SkinDefInfo CreateNewSkinDefInfo(List<GameObject> childList, GameObject rootObject, string skinName, string objectToEnable, RendererInfo[] rendererInfos) { //IL_0003: 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_006b: 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_0070: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: 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) SkinDefInfo result = default(SkinDefInfo); result.BaseSkins = Array.Empty<SkinDef>(); result.MinionSkinReplacements = (MinionSkinReplacement[])(object)new MinionSkinReplacement[0]; result.ProjectileGhostReplacements = (ProjectileGhostReplacement[])(object)new ProjectileGhostReplacement[0]; List<GameObjectActivation> list = new List<GameObjectActivation>(); foreach (GameObject child in childList) { GameObjectActivation val = default(GameObjectActivation); val.gameObject = child; val.shouldActivate = ((Object)child).name == objectToEnable; GameObjectActivation item = val; list.Add(item); } result.GameObjectActivations = list.ToArray(); result.Icon = Assets.MainAssetBundle.LoadAsset<Sprite>(objectToEnable); result.MeshReplacements = (MeshReplacement[])(object)new MeshReplacement[0]; result.Name = skinName; result.NameToken = skinName; result.RendererInfos = rendererInfos; result.RootObject = rootObject; result.UnlockableDef = null; return result; } internal static T CopyComponent<T>(T original, GameObject destination) where T : Component { Type type = ((object)original).GetType(); Component val = destination.AddComponent(type); FieldInfo[] fields = type.GetFields(); FieldInfo[] array = fields; foreach (FieldInfo fieldInfo in array) { fieldInfo.SetValue(val, fieldInfo.GetValue(original)); } return (T)(object)((val is T) ? val : null); } public static Sprite CreateSpriteFromTexture(Texture2D texture) { //IL_0025: 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) if (Object.op_Implicit((Object)(object)texture)) { return Sprite.Create(texture, new Rect(0f, 0f, (float)((Texture)texture).width, (float)((Texture)texture).height), new Vector2(0.5f, 0.5f)); } return null; } public static GameObject FindInActiveObjectByName(string name) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 Transform[] array = Resources.FindObjectsOfTypeAll<Transform>(); for (int i = 0; i < array.Length; i++) { if ((int)((Object)array[i]).hideFlags == 0 && ((Object)array[i]).name == name) { return ((Component)array[i]).gameObject; } } return null; } public static GameObject CreateHitbox(string name, Transform parent, Vector3 scale) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject(name); val.transform.SetParent(parent); val.transform.localPosition = Vector3.zero; val.transform.localRotation = Quaternion.identity; val.transform.localScale = scale; HitBoxGroup val2 = ((Component)parent).gameObject.AddComponent<HitBoxGroup>(); HitBox val3 = val.AddComponent<HitBox>(); val.layer = LayerIndex.projectile.intVal; val2.hitBoxes = (HitBox[])(object)new HitBox[1] { val3 }; val2.groupName = name; return val; } internal static void RegisterEffect(GameObject effect, float duration, string soundName = "", bool parentToReferencedTransform = true, bool positionAtReferencedTransform = true) { //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) EffectComponent val = effect.GetComponent<EffectComponent>(); if (!Object.op_Implicit((Object)(object)val)) { val = effect.AddComponent<EffectComponent>(); } if (!Object.op_Implicit((Object)(object)effect.GetComponent<DestroyOnTimer>())) { effect.AddComponent<DestroyOnTimer>().duration = duration; } if (!Object.op_Implicit((Object)(object)effect.GetComponent<NetworkIdentity>())) { effect.AddComponent<NetworkIdentity>(); } if (!Object.op_Implicit((Object)(object)effect.GetComponent<VFXAttributes>())) { effect.AddComponent<VFXAttributes>().vfxPriority = (VFXPriority)2; } val.applyScale = true; val.effectIndex = (EffectIndex)(-1); val.parentToReferencedTransform = parentToReferencedTransform; val.positionAtReferencedTransform = positionAtReferencedTransform; val.soundName = soundName; ContentAddition.AddEffect(effect); } public static Material InstantiateMaterial(Texture tex) { //IL_0037: 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) Material val = Object.Instantiate<Material>(LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/CommandoBody").GetComponentInChildren<CharacterModel>().baseRendererInfos[0].defaultMaterial); if (Object.op_Implicit((Object)(object)val)) { val.SetColor("_Color", Color.white); val.SetTexture("_MainTex", tex); val.SetColor("_EmColor", Color.black); val.SetFloat("_EmPower", 0f); val.SetTexture("_EmTex", (Texture)null); val.SetFloat("_NormalStrength", 1f); val.SetTexture("_NormalTex", (Texture)null); return val; } return val; } public static Material InstantiateMaterial(Color color, Texture tex, Color emColor, float emPower, Texture emTex, float normStr, Texture normTex) { //IL_0037: 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) Material val = Object.Instantiate<Material>(LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/CommandoBody").GetComponentInChildren<CharacterModel>().baseRendererInfos[0].defaultMaterial); if (Object.op_Implicit((Object)(object)val)) { val.SetColor("_Color", color); val.SetTexture("_MainTex", tex); val.SetColor("_EmColor", emColor); val.SetFloat("_EmPower", emPower); val.SetTexture("_EmTex", emTex); val.SetFloat("_NormalStrength", 1f); val.SetTexture("_NormalTex", normTex); return val; } return val; } public static Material FindMaterial(string name) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 Material[] array = Resources.FindObjectsOfTypeAll<Material>(); for (int i = 0; i < array.Length; i++) { if ((int)((Object)array[i]).hideFlags == 0 && ((Object)array[i]).name == name) { return array[i]; } } return null; } }