Decompiled source of Fiddlesticks v1.0.0
Fiddlesticks.dll
Decompiled 2 days ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using EntityStates; using EntityStates.AI; using EntityStates.AI.Walker; using EntityStates.Huntress; using EntityStates.Merc; using JetBrains.Annotations; using KinematicCharacterController; using R2API; using R2API.Utils; using Rewired.ComponentControls.Effects; using RoR2; using RoR2.Achievements; using RoR2.CharacterAI; using RoR2.Navigation; using RoR2.Orbs; using RoR2.Skills; using RoR2.UI; using TMPro; 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.1", FrameworkDisplayName = "")] [assembly: AssemblyCompany("Fiddlesticks")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("Fiddlesticks")] [assembly: AssemblyTitle("Fiddlesticks")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace Fiddlesticks; public static class Achievements { [RegisterAchievement("FIDDLE_MASTERY", "ACHIEVEMENT_FIDDLE_MASTERY_UNLOCKABLE_ID", null, 10u, null)] public class MasteryUnlockable : BasePerSurvivorClearGameMonsoonAchievement { public override BodyIndex LookUpRequiredBodyIndex() { //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_000e: Unknown result type (might be due to invalid IL or missing references) return BodyCatalog.FindBodyIndex("FiddlesticksBody"); } } internal static UnlockableDef masteryUnlock; public static void RegisterUnlockables() { masteryUnlock = NewUnlockable<MasteryUnlockable>("MASTERY", Assets.Load<Sprite>("skin"), "FIDDLE: Mastery", "As Fiddlesticks, beat the game or obliterate on Monsoon."); } private static UnlockableDef NewUnlockable<T>(string AchievementIdentifier, Sprite Icon, string Title, string Description) where T : BaseAchievement { string text = "ACHIEVEMENT_FIDDLE_"; UnlockableDef val = ScriptableObject.CreateInstance<UnlockableDef>(); string langName = text + AchievementIdentifier + "_NAME"; string langDesc = text + AchievementIdentifier + "_DESCRIPTION"; LanguageAPI.Add(langName, Title); LanguageAPI.Add(langDesc, Description); Func<string> func = () => Language.GetStringFormatted("UNLOCKED_FORMAT", new object[2] { Language.GetString(langName), Language.GetString(langDesc) }); Type typeFromHandle = typeof(T); val.cachedName = text + AchievementIdentifier + "_UNLOCKABLE_ID"; val.getHowToUnlockString = func; val.getUnlockedString = func; val.achievementIcon = Icon; val.sortScore = 200; val.hidden = false; ContentAddition.AddUnlockableDef(val); return val; } } internal class Assets { public static AssetBundle MainAssetBundle; public static T Load<T>(string name) where T : Object { return MainAssetBundle.LoadAsset<T>(name); } public static void PopulateAssets() { Assembly executingAssembly = Assembly.GetExecutingAssembly(); if ((Object)(object)MainAssetBundle == (Object)null) { using Stream stream = executingAssembly.GetManifestResourceStream("Fiddlesticks.AssetBundle." + "Fiddlesticks".ToLower() + "assets"); MainAssetBundle = AssetBundle.LoadFromStream(stream); } using Stream stream2 = executingAssembly.GetManifestResourceStream("Fiddlesticks.Fiddlesticks.bnk"); byte[] array = new byte[stream2.Length]; stream2.Read(array, 0, array.Length); SoundBanks.Add(array); } } internal class DecoyBehaviour : MonoBehaviour { private Animator animator; private Rigidbody rigid; private ModelSkinController skinController; public CharacterBody ownerBody; private TeamMask mask; private SphereSearch search = new SphereSearch(); private Dictionary<HurtBox, AIFollowDecoy> aiDict = new Dictionary<HurtBox, AIFollowDecoy>(); private float stopwatch; public bool forceFlee; private bool fleeing; private float fleeStopwatch; public float speed = 450f; public float maxFleeDuration = 3f; public float deathDuration = 1.5f; private bool dead; private uint skinIndex; private void Awake() { animator = ((Component)this).GetComponent<Animator>(); rigid = ((Component)this).GetComponent<Rigidbody>(); skinController = ((Component)this).GetComponent<ModelSkinController>(); } private void Start() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) EntityState.PlayAnimationOnAnimator(animator, "Body", "DummySpawn"); search.radius = 12f; search.mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask; mask = TeamMask.GetEnemyTeams(ownerBody.teamComponent.teamIndex); skinIndex = ownerBody.skinIndex; if (skinIndex == 1) { skinController.ApplySkin(1); } AkSoundEngine.PostEvent((skinIndex == 0) ? 2995597660u : 787025785u, ((Component)this).gameObject); } private void Update() { } private void FixedUpdate() { //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_0090: 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_0294: 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_02c2: Unknown result type (might be due to invalid IL or missing references) //IL_01be: Unknown result type (might be due to invalid IL or missing references) //IL_01dc: 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_01e6: 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_01ef: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)rigid)) { return; } rigid.isKinematic = !fleeing; stopwatch += Time.fixedDeltaTime; if (!dead && stopwatch >= 0.1f) { stopwatch = 0f; search.origin = ((Component)this).transform.position; HurtBox[] hurtBoxes = search.RefreshCandidates().FilterCandidatesByHurtBoxTeam(mask).FilterCandidatesByDistinctHurtBoxEntities() .GetHurtBoxes(); HurtBox[] array = hurtBoxes; foreach (HurtBox val in array) { if (!aiDict.TryGetValue(val, out var value) && Object.op_Implicit((Object)(object)val.healthComponent) && Object.op_Implicit((Object)(object)val.healthComponent.body) && Object.op_Implicit((Object)(object)val.healthComponent.body.master)) { value = ((Component)val.healthComponent.body.master).gameObject.AddComponent<AIFollowDecoy>(); value.target = ((Component)this).gameObject; aiDict.Add(val, value); } } if ((!fleeing && aiDict.Count > 0) || forceFlee) { fleeing = true; animator.SetBool("isMoving", true); animator.SetFloat("moveSpeed", 7f); Transform transform = ((Component)this).transform; Vector3 val2 = ((Component)this).transform.position - ((Component)aiDict.FirstOrDefault().Key).transform.position; transform.forward = Utils.GetForwardDirection(((Vector3)(ref val2)).normalized); } } else if (stopwatch >= deathDuration) { AkSoundEngine.PostEvent((skinIndex == 0) ? 763556074u : 1264228149u, ((Component)this).gameObject); Object.Destroy((Object)(object)((Component)this).gameObject); } if (fleeing) { fleeStopwatch += Time.fixedDeltaTime; if (fleeStopwatch <= maxFleeDuration) { rigid.velocity = ((Component)this).transform.forward * speed * Time.fixedDeltaTime; } else if (!dead) { rigid.velocity = Vector3.zero; stopwatch = 0f; dead = true; animator.Play("DecoyDeath", 0); } } } } internal class AIFollowDecoy : MonoBehaviour { private BaseAI ai; private AISkillDriver driver; private EntityStateMachine machine; public GameObject target; private void Start() { //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: 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_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) machine = ((Component)this).GetComponent<EntityStateMachine>(); if (Object.op_Implicit((Object)(object)machine)) { machine.SetNextState((EntityState)(object)new AIFolowDecoyState()); } ai = ((Component)this).GetComponent<BaseAI>(); if (Object.op_Implicit((Object)(object)ai)) { ai.currentEnemy.Reset(); driver = ((Component)this).gameObject.AddComponent<AISkillDriver>(); driver.customName = "FollowDecoy"; driver.moveTargetType = (TargetType)3; driver.movementType = (MovementType)1; driver.aimType = (AimType)4; driver.ignoreNodeGraph = true; driver.buttonPressType = (ButtonPressType)0; driver.skillSlot = (SkillSlot)(-1); ai.currentEnemy.gameObject = target; ai.customTarget.gameObject = target; ai.selectedSkilldriverName = "FollowDecoy"; ai.skillDriverEvaluation = new SkillDriverEvaluation { aimTarget = ai.customTarget, target = ai.customTarget, dominantSkillDriver = driver }; } } private void FixedUpdate() { if (!Object.op_Implicit((Object)(object)target)) { Object.Destroy((Object)(object)this); } if (Object.op_Implicit((Object)(object)ai)) { ai.skillDriverUpdateTimer = 0.1f; } } private void OnDisable() { if (Object.op_Implicit((Object)(object)ai)) { ai.customTarget.gameObject = null; ai.currentEnemy.Reset(); } if (Object.op_Implicit((Object)(object)driver)) { Object.Destroy((Object)(object)driver); } } } internal class AIFolowDecoyState : Wander { public override void OnEnter() { ((Wander)this).OnEnter(); } public override void OnExit() { ((Wander)this).OnExit(); } public override void FixedUpdate() { //IL_0053: 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) ((Wander)this).FixedUpdate(); base.lookTimer = 1f; if (Object.op_Implicit((Object)(object)((BaseAIState)this).ai) && Object.op_Implicit((Object)(object)((BaseAIState)this).ai.customTarget.gameObject)) { base.targetPosition = ((BaseAIState)this).ai.customTarget.gameObject.transform.position; ((BaseAIState)this).ai.SetGoalPosition(base.targetPosition); ((BaseAIState)this).ai.localNavigator.targetPosition = base.targetPosition.Value; } else { ((EntityState)this).outer.SetNextStateToMain(); } } } internal class FiddleBehaviour : NetworkBehaviour { public GenericSkill passive; public CharacterBody body; public bool spawnDecoy = true; private float decoyStopwatch; private float decoyCD = 30f; private SphereSearch sphereSearch = new SphereSearch(); private float searchStopwatch; public int nearbyTargets; public VObehaviour voBehaviour; public bool inUlt; private void Awake() { body = ((Component)this).GetComponent<CharacterBody>(); voBehaviour = ((Component)this).GetComponent<VObehaviour>(); } private void Update() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) if (Input.GetKeyDown(MainPlugin.passiveKey.Value) && Util.HasEffectiveAuthority(((Component)this).gameObject) && Object.op_Implicit((Object)(object)passive) && passive.CanExecute()) { passive.ExecuteIfReady(); } } private void FixedUpdate() { //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) searchStopwatch += Time.fixedDeltaTime; if (searchStopwatch >= 0.1f) { searchStopwatch = 0f; sphereSearch.mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask; sphereSearch.origin = ((Component)this).transform.position; sphereSearch.radius = 13f + body.radius; sphereSearch.queryTriggerInteraction = (QueryTriggerInteraction)0; sphereSearch.RefreshCandidates(); sphereSearch.FilterCandidatesByHurtBoxTeam(TeamMask.GetEnemyTeams(body.teamComponent.teamIndex)); sphereSearch.OrderCandidatesByDistance(); sphereSearch.FilterCandidatesByDistinctHurtBoxEntities(); sphereSearch.FilterByLiveEntities(); nearbyTargets = sphereSearch.GetHurtBoxes().Length; sphereSearch.ClearCandidates(); } if (spawnDecoy) { decoyStopwatch += Time.fixedDeltaTime; if (decoyStopwatch >= decoyCD) { decoyStopwatch = 0f; spawnDecoy = true; } } } [ClientRpc] public void RpcSpawnDecoy() { //IL_001c: 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_0031: 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) if (spawnDecoy) { GameObject val = Object.Instantiate<GameObject>(Prefabs.model, ((Component)this).transform.position, Quaternion.LookRotation(-body.characterDirection.forward)); val.GetComponent<Animator>().SetBool("dummy", true); DecoyBehaviour component = val.GetComponent<DecoyBehaviour>(); component.ownerBody = body; component.forceFlee = true; spawnDecoy = false; } } } internal class HUDTracker : MonoBehaviour { public GameObject skillRoot; public GameObject sprintCluster; public GameObject inventoryCluster; public SkillIcon icon; public MPEventSystemLocator mpLocator; public HUD hud; public FiddleBehaviour behaviour; private bool hadBehaviour; public HGTextMeshProUGUI text; public string passiveKeybind; private void Awake() { hud = ((Component)this).GetComponent<HUD>(); } private void FixedUpdate() { //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)behaviour)) { if (hadBehaviour && skillRoot.activeInHierarchy) { sprintCluster.SetActive(true); skillRoot.gameObject.SetActive(false); } if (!Object.op_Implicit((Object)(object)hud) || !Object.op_Implicit((Object)(object)hud.targetBodyObject)) { return; } behaviour = hud.targetBodyObject.GetComponent<FiddleBehaviour>(); if (Object.op_Implicit((Object)(object)behaviour) && Object.op_Implicit((Object)(object)skillRoot) && Object.op_Implicit((Object)(object)sprintCluster) && Object.op_Implicit((Object)(object)mpLocator) && Object.op_Implicit((Object)(object)icon)) { hadBehaviour = true; if (Object.op_Implicit((Object)(object)sprintCluster)) { sprintCluster.transform.localPosition = Vector2.op_Implicit(new Vector2(-474.0534f, -10.17963f)); } if (Object.op_Implicit((Object)(object)inventoryCluster)) { inventoryCluster.transform.localPosition = Vector2.op_Implicit(new Vector2(-555.6793f, -10.17968f)); } icon.targetSkill = hud.targetBodyObject.GetComponents<GenericSkill>()[0]; mpLocator.eventSystemProvider = ((Component)hud).GetComponent<MPEventSystemProvider>(); skillRoot.gameObject.SetActive(true); } } else if (Object.op_Implicit((Object)(object)text) && ((TMP_Text)text).text != passiveKeybind) { ((TMP_Text)text).text = passiveKeybind; } } public HUDTracker() { //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) KeyCode value = MainPlugin.passiveKey.Value; passiveKeybind = ((object)(KeyCode)(ref value)).ToString(); ((MonoBehaviour)this)..ctor(); } } internal class ModelBehaviour : MonoBehaviour { private CharacterModel model; private Animator animator; private GameObject trail; private void Awake() { model = ((Component)this).GetComponent<CharacterModel>(); animator = ((Component)this).GetComponent<Animator>(); } private void FixedUpdate() { if (Object.op_Implicit((Object)(object)model) && Object.op_Implicit((Object)(object)model.body) && !Object.op_Implicit((Object)(object)animator)) { } } } internal class SuccTether : MonoBehaviour { public GameObject activeVfx; private bool setvfx; private TetherVfxOrigin tetherVfxOrigin; private NetworkedBodyAttachment attachment; private SphereSearch sphereSearch = new SphereSearch(); private float stopwatch = 1f; private List<HurtBox> hurtboxes = new List<HurtBox>(); private List<Transform> transforms = new List<Transform>(); private float damageCoefficient = 2f; private float finalTickDamageCoefficient = 3.5f; private bool skin; private void Awake() { attachment = ((Component)this).GetComponent<NetworkedBodyAttachment>(); SiphonNearbyController component = ((Component)this).GetComponent<SiphonNearbyController>(); tetherVfxOrigin = component.tetherVfxOrigin; Object.Destroy((Object)(object)component); } private void FixedUpdate() { if (!Object.op_Implicit((Object)(object)attachment.attachedBody)) { return; } if (!setvfx) { setvfx = true; skin = attachment.attachedBody.skinIndex == 1; ChildLocator component = activeVfx.GetComponent<ChildLocator>(); if (!skin) { ((Component)component.FindChild("base")).gameObject.SetActive(true); } else { ((Component)component.FindChild("skin")).gameObject.SetActive(true); } tetherVfxOrigin.tetherPrefab = ((!skin) ? Prefabs.tetherVFXPrefab : Prefabs.tetherVFXPrefabSkin); } stopwatch += Time.fixedDeltaTime; if (stopwatch >= 0.25f / attachment.attachedBody.attackSpeed) { stopwatch = 0f; Tick(); } } private void Tick() { hurtboxes.Clear(); transforms.Clear(); SearchForTargets(hurtboxes); if (hurtboxes.Count > 0) { DamageTargets(damageCoefficient); } tetherVfxOrigin.SetTetheredTransforms(transforms); activeVfx.SetActive(hurtboxes.Count > 0); } protected void SearchForTargets(List<HurtBox> dest) { //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_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_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) sphereSearch.mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask; sphereSearch.origin = ((Component)this).transform.position; sphereSearch.radius = 13f + attachment.attachedBody.radius; sphereSearch.queryTriggerInteraction = (QueryTriggerInteraction)0; sphereSearch.RefreshCandidates(); sphereSearch.FilterCandidatesByHurtBoxTeam(TeamMask.GetEnemyTeams(attachment.attachedBody.teamComponent.teamIndex)); sphereSearch.OrderCandidatesByDistance(); sphereSearch.FilterCandidatesByDistinctHurtBoxEntities(); sphereSearch.FilterByLiveEntities(); sphereSearch.GetHurtBoxes(dest); sphereSearch.ClearCandidates(); } private void DamageTargets(float damage, bool finalTick = false) { //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Expected O, but got Unknown //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_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_014f: 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_018c: 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) foreach (HurtBox hurtbox in hurtboxes) { if (finalTick) { Transform coreTransform = hurtbox.healthComponent.body.coreTransform; EffectManager.SimpleEffect(skin ? Prefabs.skinHitEffectSimple : Prefabs.succHitVFX, Object.op_Implicit((Object)(object)coreTransform) ? coreTransform.position : ((Component)hurtbox).transform.position, Quaternion.identity, true); } CharacterBody body = hurtbox.healthComponent.body; Transform val = (((Object)(object)body != (Object)null) ? body.coreTransform : null) ?? ((Component)hurtbox).transform; transforms.Add(val); if (NetworkServer.active) { DamageInfo val2 = new DamageInfo(); val2.attacker = attachment.attachedBodyObject; val2.inflictor = ((Component)this).gameObject; val2.position = val.position; val2.crit = attachment.attachedBody.RollCrit(); val2.damage = attachment.attachedBody.damage * damage; val2.damageColorIndex = (DamageColorIndex)0; val2.force = Vector3.zero; val2.procCoefficient = 0f; val2.damageType = DamageTypeCombo.GenericSecondary; val2.procChainMask = default(ProcChainMask); hurtbox.healthComponent.TakeDamage(val2); HealthComponent healthComponent = attachment.attachedBody.healthComponent; healthComponent.Heal(healthComponent.fullCombinedHealth * 0.01f, default(ProcChainMask), true); } } } private void OnDisable() { AkSoundEngine.PostEvent(skin ? "Play_sfx_FiddlesticksSkin06_FiddlesticksW_finaltick" : "Play_sfx_Fiddlesticks_FiddlesticksW_finaltick", ((Component)this).gameObject); if (hurtboxes.Count > 0) { DamageTargets(finalTickDamageCoefficient, finalTick: true); } } } internal class VObehaviour : NetworkBehaviour { public enum VOType { Attack, Death, M2, Util, Spec, Kill, Dummy, Idle } private struct VOStopwatch { public float stopwatch; public bool canPlay; public float cooldown; public string ID; public VOStopwatch(float baseCooldown, string id) { cooldown = baseCooldown; stopwatch = 0f; canPlay = true; ID = id; } } private float globalCD; private float globalMinCD = 3f; private uint currentID; private CharacterBody body; private VOStopwatch[] stopwatches; private VOStopwatch Attack; private VOStopwatch Death; private VOStopwatch M2; private VOStopwatch Util; private VOStopwatch Spec; private VOStopwatch Kill; private VOStopwatch Dummy; private VOStopwatch Idle; [ClientRpc] public void RpcPlayVO(int voIndex) { PlayVO(voIndex); } [Command] public void CmdPlayVO(int voIndex) { RpcPlayVO(voIndex); } public void PlayVO(int voIndex) { if ((!(globalCD < globalMinCD) || voIndex == 1) && MainPlugin.enableVO.Value && body.skinIndex == 1 && stopwatches[voIndex].canPlay) { AkSoundEngine.StopPlayingID(currentID); stopwatches[voIndex].stopwatch = 0f; stopwatches[voIndex].canPlay = false; currentID = AkSoundEngine.PostEvent(stopwatches[voIndex].ID, ((Component)this).gameObject); globalCD = 0f; } } private void Awake() { body = ((Component)this).GetComponent<CharacterBody>(); } private void Start() { Attack = new VOStopwatch(6f, "Play_vo_FiddlesticksSkin06_Attack2DGeneral"); Death = new VOStopwatch(0f, "Play_vo_FiddlesticksSkin06_Death3D"); M2 = new VOStopwatch(5f, "Play_vo_FiddlesticksSkin06_FiddlesticksW_cast3D"); Util = new VOStopwatch(3f, "Play_vo_FiddlesticksSkin06_FiddlesticksQ_cast3D"); Spec = new VOStopwatch(4f, "Play_vo_FiddlesticksSkin06_FiddlesticksR_cast3D"); Kill = new VOStopwatch(8f, "Play_vo_FiddlesticksSkin06_Kill3DGeneral"); Dummy = new VOStopwatch(5f, "Play_vo_FiddlesticksSkin06_Move"); Idle = new VOStopwatch(14f, "Play_vo_FiddlesticksSkin06_PassiveCast"); stopwatches = new VOStopwatch[8] { Attack, Death, M2, Util, Spec, Kill, Dummy, Idle }; } private void FixedUpdate() { globalCD += Time.fixedDeltaTime; for (int i = 0; i < stopwatches.Length; i++) { if (!stopwatches[i].canPlay) { stopwatches[i].stopwatch += Time.fixedDeltaTime; if (stopwatches[i].stopwatch >= stopwatches[i].cooldown) { stopwatches[i].canPlay = true; stopwatches[i].stopwatch = 0f; } } } } } internal class FiddleOrb : Orb { public List<HealthComponent> bouncedObjects; public float speed = 100f; public GameObject attacker; public TeamIndex teamIndex; public ProcChainMask procChainMask; public float procCoefficient = 1f; public float damage; public DamageColorIndex damageColorIndex; public float range = 20f; public DamageType damageType; public bool isCrit; public GameObject inflictor; private BullseyeSearch search; public int bouncesRemaining; public override void Begin() { //IL_002c: 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_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Expected O, but got Unknown ((Orb)this).duration = ((Orb)this).distanceToTarget / speed; CharacterBody component = attacker.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { EffectData val = new EffectData { origin = base.origin, genericFloat = ((Orb)this).duration }; val.SetHurtBoxReference(base.target); EffectManager.SpawnEffect((component.skinIndex == 1) ? Prefabs.orbEffectSkin : Prefabs.orbEffect, val, true); } } public override void OnArrival() { //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Expected O, but got Unknown //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: 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_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: 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_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_010f: 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_0197: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_0205: Unknown result type (might be due to invalid IL or missing references) //IL_020a: 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_024d: 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_0267: 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_028e: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)base.target)) { return; } if (Object.op_Implicit((Object)(object)attacker)) { EffectManager.SimpleEffect((attacker.GetComponent<CharacterBody>().skinIndex == 0) ? Prefabs.orbHitEffect : Prefabs.orbHitEffectSkin, ((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 = damage; 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 = DamageTypeCombo.op_Implicit(damageType); healthComponent.TakeDamage(val); GlobalEventManager.instance.OnHitEnemy(val, ((Component)healthComponent).gameObject); GlobalEventManager.instance.OnHitAll(val, ((Component)healthComponent).gameObject); } if (bouncesRemaining > 0) { if (bouncedObjects != null) { bouncedObjects.Clear(); bouncedObjects.Add(base.target.healthComponent); } HurtBox val2 = PickNextTarget(((Component)base.target).transform.position); if (Object.op_Implicit((Object)(object)val2)) { FiddleOrb fiddleOrb = new FiddleOrb(); fiddleOrb.search = search; ((Orb)fiddleOrb).origin = ((Component)base.target).transform.position; ((Orb)fiddleOrb).target = val2; fiddleOrb.attacker = attacker; fiddleOrb.inflictor = inflictor; fiddleOrb.teamIndex = teamIndex; fiddleOrb.damage = damage; fiddleOrb.bouncesRemaining = bouncesRemaining - 1; fiddleOrb.isCrit = isCrit; fiddleOrb.bouncedObjects = bouncedObjects; fiddleOrb.procChainMask = procChainMask; fiddleOrb.procCoefficient = procCoefficient; fiddleOrb.damageColorIndex = damageColorIndex; fiddleOrb.speed = speed; fiddleOrb.range = range; fiddleOrb.damageType = damageType; OrbManager.instance.AddOrb((Orb)(object)fiddleOrb); } } } 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(); if (Object.op_Implicit((Object)(object)base.target)) { search.FilterOutGameObject(((Component)base.target).gameObject); } 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 Hook { internal static void Hooks() { GlobalEventManager.onServerDamageDealt += GlobalEventManager_onServerDamageDealt; GlobalEventManager.onCharacterDeathGlobal += GlobalEventManager_onCharacterDeathGlobal; } private static void GlobalEventManager_onCharacterDeathGlobal(DamageReport damageReport) { if (Object.op_Implicit((Object)(object)damageReport.attacker)) { VObehaviour component = damageReport.attacker.GetComponent<VObehaviour>(); if (Object.op_Implicit((Object)(object)component)) { component.CmdPlayVO(5); } } } private static void GlobalEventManager_onServerDamageDealt(DamageReport damageReport) { HealthComponent victim = damageReport.victim; FiddleBehaviour fiddleBehaviour = (Object.op_Implicit((Object)(object)victim) ? ((Component)victim).GetComponent<FiddleBehaviour>() : null); if (Object.op_Implicit((Object)(object)victim) && Object.op_Implicit((Object)(object)fiddleBehaviour) && fiddleBehaviour.spawnDecoy && victim.combinedHealth <= victim.fullCombinedHealth * 0.35f) { fiddleBehaviour.RpcSpawnDecoy(); } } } [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.*/)] [BepInPlugin("com.Dragonyck.Fiddlesticks", "Fiddlesticks", "1.0.0")] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] public class MainPlugin : BaseUnityPlugin { public const string MODUID = "com.Dragonyck.Fiddlesticks"; public const string MODNAME = "Fiddlesticks"; public const string VERSION = "1.0.0"; public const string SURVIVORNAME = "Fiddlesticks"; public const string SURVIVORNAMEKEY = "FIDDLE"; public static GameObject characterPrefab; public static readonly Color characterColor = Color32.op_Implicit(new Color32((byte)123, (byte)20, (byte)24, byte.MaxValue)); public static ConfigEntry<KeyCode> passiveKey; public static ConfigEntry<bool> enableVO; private void Awake() { passiveKey = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("Keybinds", "Passive Activation Key", (KeyCode)116, (ConfigDescription)null); enableVO = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Enable Skin VO", true, (ConfigDescription)null); Assets.PopulateAssets(); Achievements.RegisterUnlockables(); Prefabs.CreatePrefabs(); CreatePrefab(); RegisterStates(); RegisterCharacter(); Hook.Hooks(); } internal static void CreatePrefab() { //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_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Expected O, but got Unknown //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_011d: 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_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Expected O, but got Unknown //IL_017a: 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_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: 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_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Unknown result type (might be due to invalid IL or missing references) //IL_037c: Unknown result type (might be due to invalid IL or missing references) //IL_03b6: Unknown result type (might be due to invalid IL or missing references) //IL_03bb: Unknown result type (might be due to invalid IL or missing references) //IL_0451: Unknown result type (might be due to invalid IL or missing references) //IL_0456: Unknown result type (might be due to invalid IL or missing references) //IL_0483: Unknown result type (might be due to invalid IL or missing references) //IL_0488: Unknown result type (might be due to invalid IL or missing references) //IL_066d: Unknown result type (might be due to invalid IL or missing references) //IL_068a: Unknown result type (might be due to invalid IL or missing references) //IL_0592: Unknown result type (might be due to invalid IL or missing references) //IL_05b2: Unknown result type (might be due to invalid IL or missing references) //IL_05bf: Unknown result type (might be due to invalid IL or missing references) //IL_0759: Unknown result type (might be due to invalid IL or missing references) //IL_0763: Unknown result type (might be due to invalid IL or missing references) //IL_084a: Unknown result type (might be due to invalid IL or missing references) //IL_08b5: Unknown result type (might be due to invalid IL or missing references) //IL_08c9: Unknown result type (might be due to invalid IL or missing references) //IL_08ee: Unknown result type (might be due to invalid IL or missing references) //IL_0902: Unknown result type (might be due to invalid IL or missing references) //IL_09f4: Unknown result type (might be due to invalid IL or missing references) //IL_09f9: Unknown result type (might be due to invalid IL or missing references) //IL_0a1c: Unknown result type (might be due to invalid IL or missing references) //IL_0a21: Unknown result type (might be due to invalid IL or missing references) //IL_0a4f: Unknown result type (might be due to invalid IL or missing references) //IL_0a54: Unknown result type (might be due to invalid IL or missing references) GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Commando/CommandoBody.prefab").WaitForCompletion(); characterPrefab = PrefabAPI.InstantiateClone(val, "FiddlesticksBody", true); characterPrefab.GetComponent<NetworkIdentity>().localPlayerAuthority = true; Object.Destroy((Object)(object)((Component)characterPrefab.transform.Find("ModelBase")).gameObject); Object.Destroy((Object)(object)((Component)characterPrefab.transform.Find("CameraPivot")).gameObject); Object.Destroy((Object)(object)((Component)characterPrefab.transform.Find("AimOrigin")).gameObject); characterPrefab.AddComponent<HuntressTracker>().maxTrackingDistance = 35f; characterPrefab.AddComponent<VObehaviour>(); GameObject val2 = Assets.MainAssetBundle.LoadAsset<GameObject>("fiddleMdl"); val2.AddComponent<ModelBehaviour>(); val2.AddComponent<AnimationEvents>().soundCenter = val2; GameObject val3 = new GameObject("ModelBase"); val3.transform.parent = characterPrefab.transform; val3.transform.localPosition = new Vector3(0f, -0.94f, 0f); val3.transform.localRotation = Quaternion.identity; val3.transform.localScale = new Vector3(1f, 1f, 1f); GameObject val4 = new GameObject("AimOrigin"); val4.transform.parent = val3.transform; val4.transform.localPosition = new Vector3(0f, 1.4f, 0f); val4.transform.localRotation = Quaternion.identity; val4.transform.localScale = Vector3.one; Transform transform = val2.transform; transform.parent = val3.transform; transform.localPosition = Vector3.zero; transform.localScale = Vector3.one; transform.localRotation = Quaternion.identity; CharacterDirection component = characterPrefab.GetComponent<CharacterDirection>(); component.targetTransform = val3.transform; component.modelAnimator = val2.GetComponentInChildren<Animator>(); component.turnSpeed = 720f; CharacterBody component2 = characterPrefab.GetComponent<CharacterBody>(); ((Object)component2).name = "FiddlesticksBody"; component2.baseNameToken = "FIDDLE_NAME"; component2.subtitleNameToken = "FIDDLE_SUBTITLE"; component2.bodyFlags = (BodyFlags)16; component2.rootMotionInMainState = false; component2.mainRootSpeed = 0f; component2.baseMaxHealth = 110f; component2.levelMaxHealth = 35f; component2.baseRegen = 1.5f; component2.levelRegen = 0.2f; component2.baseMaxShield = 0f; component2.levelMaxShield = 0f; component2.baseMoveSpeed = 7f; component2.levelMoveSpeed = 0f; component2.baseAcceleration = 110f; component2.baseJumpPower = 15f; component2.levelJumpPower = 0f; component2.baseDamage = 12f; component2.levelDamage = 2.4f; component2.baseAttackSpeed = 1f; component2.levelAttackSpeed = 0f; component2.baseCrit = 1f; component2.levelCrit = 0f; component2.baseArmor = 0f; component2.levelArmor = 0f; component2.baseJumpCount = 1; component2.sprintingSpeedMultiplier = 1.45f; component2.wasLucky = false; component2.hideCrosshair = false; component2.aimOriginTransform = val4.transform; component2.hullClassification = (HullClassification)0; component2.portraitIcon = (Texture)(object)Assets.MainAssetBundle.LoadAsset<Sprite>("portrait").texture; component2.isChampion = false; component2.currentVehicle = null; component2.skinIndex = 0u; component2.bodyColor = characterColor; HealthComponent component3 = characterPrefab.GetComponent<HealthComponent>(); component3.health = component2.baseMaxHealth; component3.shield = 0f; component3.barrier = 0f; CharacterMotor component4 = characterPrefab.GetComponent<CharacterMotor>(); component4.walkSpeedPenaltyCoefficient = 1f; component4.characterDirection = component; component4.muteWalkMotion = false; component4.mass = 160f; component4.airControl = 0.25f; component4.disableAirControlUntilCollision = false; component4.generateParametersOnAwake = true; InputBankTest component5 = characterPrefab.GetComponent<InputBankTest>(); component5.moveVector = Vector3.zero; CameraTargetParams component6 = characterPrefab.GetComponent<CameraTargetParams>(); component6.cameraParams = val.GetComponent<CameraTargetParams>().cameraParams; component6.cameraPivotTransform = null; component6.recoil = Vector2.zero; component6.dontRaycastToPivot = false; ModelLocator component7 = characterPrefab.GetComponent<ModelLocator>(); component7.modelTransform = transform; component7.modelBaseTransform = val3.transform; component7.dontReleaseModelOnDeath = false; component7.autoUpdateModelTransform = true; component7.dontDetatchFromParent = false; component7.noCorpse = false; component7.normalizeToFloor = false; component7.preserveModel = false; Renderer[] componentsInChildren = val2.GetComponentsInChildren<Renderer>(true); List<RendererInfo> list = new List<RendererInfo>(); foreach (Renderer val5 in componentsInChildren) { string name = ((Object)val5).name; if (name != "baseLanternGlow") { Texture texture = val5.material.GetTexture("_EmissionMap"); if (Object.op_Implicit((Object)(object)texture)) { val5.material = Utils.InstantiateMaterial(val5.material.mainTexture, val5.material.GetTexture("_EmissionMap")); } else { val5.material = Utils.InstantiateMaterial(val5.material.mainTexture); } } list.Add(new RendererInfo { renderer = val5, defaultMaterial = val5.material, defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false }); } CharacterModel val6 = val2.AddComponent<CharacterModel>(); RendererInfo[] array = list.ToArray(); val6.body = component2; val6.baseRendererInfos = array; val6.autoPopulateLightInfos = true; val6.invisibilityCount = 0; val6.temporaryOverlays = new List<TemporaryOverlayInstance>(); val6.mainSkinnedMeshRenderer = val2.GetComponentInChildren<SkinnedMeshRenderer>(); LanguageAPI.Add("FIDDLEBODY_DEFAULT_SKIN_NAME", "Default"); LanguageAPI.Add("FIDDLEBODY_MASTERY_SKIN_NAME", "Surprise Party"); ModelSkinController val7 = val2.AddComponent<ModelSkinController>(); val7.skins = (SkinDef[])(object)new SkinDef[2] { Skins.CreateNewSkinDef(Utils.CreateNewSkinDefInfo(componentsInChildren, val2, "FIDDLEBODY_DEFAULT_SKIN_NAME", "base", array)), Skins.CreateNewSkinDef(Utils.CreateNewSkinDefInfo(componentsInChildren, val2, "FIDDLEBODY_MASTERY_SKIN_NAME", "skin", array)) }; Renderer[] array2 = componentsInChildren; foreach (Renderer val8 in array2) { if (!((Object)val8).name.Contains("base")) { ((Component)val8).gameObject.SetActive(false); } } Prefabs.model = Prefabs.Instantiate(val2, "FiddleMdl"); Collider[] componentsInChildren2 = Prefabs.model.GetComponentsInChildren<Collider>(); foreach (Collider val9 in componentsInChildren2) { ((Component)val9).gameObject.layer = LayerIndex.fakeActor.intVal; } Prefabs.dummy = Prefabs.Instantiate(Prefabs.model, "FiddleDummy"); CapsuleCollider val10 = Prefabs.dummy.AddComponent<CapsuleCollider>(); val10.center = Vector3.up * 1.31f; val10.radius = 0.29f; val10.height = 2.59f; Rigidbody val11 = Prefabs.dummy.AddComponent<Rigidbody>(); val11.freezeRotation = true; Prefabs.dummy.AddComponent<DecoyBehaviour>(); Collider[] componentsInChildren3 = Prefabs.dummy.GetComponentsInChildren<Collider>(); foreach (Collider val12 in componentsInChildren3) { ((Component)val12).gameObject.layer = LayerIndex.fakeActor.intVal; } Collider[] componentsInChildren4 = val2.GetComponentsInChildren<Collider>(); HurtBoxGroup val13 = val2.AddComponent<HurtBoxGroup>(); List<HurtBox> list2 = new List<HurtBox>(); Collider[] array3 = componentsInChildren4; foreach (Collider val14 in array3) { HurtBox val15 = ((Component)val14).gameObject.AddComponent<HurtBox>(); ((Component)val15).gameObject.layer = LayerIndex.entityPrecise.intVal; val15.healthComponent = component3; val15.isBullseye = true; val15.damageModifier = (DamageModifier)0; val15.hurtBoxGroup = val13; val15.indexInGroup = 0; val13.mainHurtBox = val15; val13.bullseyeCount = 1; list2.Add(val15); } val13.hurtBoxes = list2.ToArray(); Utils.CreateHitbox("Slash", val2.transform, new Vector3(6f, 6f, 7.5f), new Vector3(0f, 1f, 2.7f)); Utils.CreateHitbox("SlashBig", val2.transform, new Vector3(9f, 9f, 12f), new Vector3(0f, 1f, 3.5f)); KinematicCharacterMotor component8 = characterPrefab.GetComponent<KinematicCharacterMotor>(); component8.CharacterController = (ICharacterController)(object)component4; component8.playerCharacter = true; characterPrefab.GetComponent<Interactor>().maxInteractionDistance = 3f; characterPrefab.GetComponent<InteractionDriver>().highlightInteractor = true; SfxLocator component9 = characterPrefab.GetComponent<SfxLocator>(); component9.deathSound = "Play_ui_player_death"; component9.barkSound = ""; component9.openSound = ""; component9.landingSound = "Play_char_land"; component9.fallDamageSound = "Play_char_land_fall_damage"; component9.aliveLoopStart = ""; component9.aliveLoopStop = ""; characterPrefab.GetComponent<Rigidbody>().mass = component4.mass; FootstepHandler val16 = val2.AddComponent<FootstepHandler>(); val16.baseFootstepString = "Play_player_footstep"; val16.sprintFootstepOverrideString = ""; val16.enableFootstepDust = true; val16.footstepDustPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/GenericFootstepDust.prefab").WaitForCompletion(); EntityStateMachine component10 = ((Component)component2).GetComponent<EntityStateMachine>(); component10.mainStateType = new SerializableEntityStateType(typeof(CharacterMain)); CharacterDeathBehavior component11 = characterPrefab.GetComponent<CharacterDeathBehavior>(); component11.deathStateMachine = characterPrefab.GetComponent<EntityStateMachine>(); component11.deathState = new SerializableEntityStateType(typeof(DeathState)); Utils.NewStateMachine<Idle>(characterPrefab, "Passive"); NetworkStateMachine component12 = ((Component)component2).GetComponent<NetworkStateMachine>(); component12.stateMachines = ((Component)component2).GetComponents<EntityStateMachine>(); ContentAddition.AddBody(characterPrefab); } private void RegisterCharacter() { //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) string text = " <style=cSub>\r\n\r\n< ! > \r\n\r\n< ! > \r\n\r\n< ! > \r\n\r\n< ! > \r\n\r\n"; string text2 = "..and so he left."; string text3 = "..and so he vanished."; string text4 = ""; LanguageAPI.Add("FIDDLE_NAME", "Fiddlesticks"); LanguageAPI.Add("FIDDLE_DESCRIPTION", text); LanguageAPI.Add("FIDDLE_SUBTITLE", "Ancient Fear"); LanguageAPI.Add("FIDDLE_OUTRO", text2); LanguageAPI.Add("FIDDLE_FAIL", text3); SurvivorDef val = ScriptableObject.CreateInstance<SurvivorDef>(); val.cachedName = "FIDDLE_NAME"; val.unlockableDef = null; val.descriptionToken = "FIDDLE_DESCRIPTION"; val.primaryColor = characterColor; val.bodyPrefab = characterPrefab; val.displayPrefab = Utils.NewDisplayModel(((Component)characterPrefab.GetComponent<ModelLocator>().modelBaseTransform).gameObject, "FiddlesticksDisplay"); val.outroFlavorToken = "FIDDLE_OUTRO"; val.desiredSortPosition = 22f; val.mainEndingEscapeFailureFlavorToken = "FIDDLE_FAIL"; ContentAddition.AddSurvivorDef(val); SkillSetup(); GameObject val2 = PrefabAPI.InstantiateClone(Prefabs.Load<GameObject>("RoR2/Base/Commando/CommandoMonsterMaster.prefab"), "FiddlesticksMaster", true); ContentAddition.AddMaster(val2); CharacterMaster component = val2.GetComponent<CharacterMaster>(); component.bodyPrefab = characterPrefab; } private void RegisterStates() { //IL_0003: 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_0013: 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_0023: 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_0033: 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_0043: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0053: 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_0063: Unknown result type (might be due to invalid IL or missing references) bool flag = default(bool); ContentAddition.AddEntityState<DeathState>(ref flag); ContentAddition.AddEntityState<Passive>(ref flag); ContentAddition.AddEntityState<Primary>(ref flag); ContentAddition.AddEntityState<Secondary>(ref flag); ContentAddition.AddEntityState<SecondaryEnd>(ref flag); ContentAddition.AddEntityState<Utility>(ref flag); ContentAddition.AddEntityState<Special>(ref flag); ContentAddition.AddEntityState<SpecialTransition>(ref flag); ContentAddition.AddEntityState<SpecialAOE>(ref flag); ContentAddition.AddEntityState<CharacterMain>(ref flag); ContentAddition.AddEntityState<MeleeSkillState>(ref flag); ContentAddition.AddEntityState<BasicMeleeSkillState>(ref flag); ContentAddition.AddEntityState<AIFolowDecoyState>(ref flag); OrbAPI.AddOrb<FiddleOrb>(); } private void SkillSetup() { GenericSkill[] componentsInChildren = characterPrefab.GetComponentsInChildren<GenericSkill>(); foreach (GenericSkill val in componentsInChildren) { Object.DestroyImmediate((Object)(object)val); } PassiveSetup(); PrimarySetup(); SecondarySetup(); UtilitySetup(); SpecialSetup(); } private void PassiveSetup() { LanguageAPI.Add("FIDDLE_PASSIVE_NAME", "A Harmless Scarecrow"); LanguageAPI.Add("FIDDLE_PASSIVE_DESCRIPTION", "Place an effigy that distracts nearby enemies. Upon reaching <style=cIsHealth>low health</style>, an effigy is automatically placed and runs in the opposite direction."); SkillDef skill = Utils.NewSkillDef<SkillDef>(typeof(Passive), "Passive", 1, 30f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)0, isCombatSkill: false, mustKeyPress: false, cancelSprintingOnActivation: false, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("passive0"), "FIDDLE_PASSIVE_DESCRIPTION", "FIDDLE_PASSIVE_NAME", Array.Empty<string>()); GenericSkill passive = Utils.NewGenericSkill(characterPrefab, skill); characterPrefab.AddComponent<FiddleBehaviour>().passive = passive; } private void PrimarySetup() { SkillLocator component = characterPrefab.GetComponent<SkillLocator>(); LanguageAPI.Add("FIDDLE_M1", "Reap"); LanguageAPI.Add("FIDDLE_M1_DESCRIPTION", "Fiddlesticks slashes forward for <style=cIsDamage>260% damage</style>, finishing with a scythe slash for <style=cIsDamage>375% damage</style>."); SkillDef skill = Utils.NewSkillDef<SkillDef>(typeof(Primary), "Weapon", 0, 0f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: true, (InterruptPriority)0, isCombatSkill: true, mustKeyPress: false, cancelSprintingOnActivation: true, 0, 0, 0, Assets.MainAssetBundle.LoadAsset<Sprite>("primary0"), "FIDDLE_M1_DESCRIPTION", "FIDDLE_M1", Array.Empty<string>()); component.primary = Utils.NewGenericSkill(characterPrefab, skill); } private void SecondarySetup() { SkillLocator component = characterPrefab.GetComponent<SkillLocator>(); LanguageAPI.Add("FIDDLE_M2", "Bountiful Harvest"); LanguageAPI.Add("FIDDLE_M2_DESCRIPTION", "Fiddlesticks forms a tether between itself and each nearby enemy over the cast time, then channels for up to <style=cIsUtility>2s</style> to harvest their souls for <style=cIsDamage>800% damage</style> per second, with the final tick at the end of the channel dealing an additional <style=cIsDamage>350% damage</style>. Fiddlesticks <style=cIsHealing>heals</style> <style=cIsHealth>1% max health</style> per hit."); SkillDef skill = Utils.NewSkillDef<SuccSkillDef>(typeof(Secondary), "Body", 1, 4f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: false, (InterruptPriority)0, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: false, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("secondary0"), "FIDDLE_M2_DESCRIPTION", "FIDDLE_M2", Array.Empty<string>()); component.secondary = Utils.NewGenericSkill(characterPrefab, skill); } private void UtilitySetup() { SkillLocator component = characterPrefab.GetComponent<SkillLocator>(); LanguageAPI.Add("FIDDLE_UTIL", "Terrify"); LanguageAPI.Add("FIDDLE_UTIL_DESCRIPTION", "Fiddlesticks launches a crow at the target enemy that bounces up to 5 times, dealing <style=cIsDamage>240% damage</style> and <style=cIsDamage>stunning</style> enemies hit."); SkillDef skill = Utils.NewSkillDef<HuntressTrackingSkillDef>(typeof(Utility), "Weapon", 1, 5f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: false, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: false, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("utility0"), "FIDDLE_UTIL_DESCRIPTION", "FIDDLE_UTIL", Array.Empty<string>()); component.utility = Utils.NewGenericSkill(characterPrefab, skill); } private void SpecialSetup() { SkillLocator component = characterPrefab.GetComponent<SkillLocator>(); LanguageAPI.Add("FIDDLE_SPEC", "Crowstorm"); LanguageAPI.Add("FIDDLE_SPEC_DESCRIPTION", "Fiddlesticks channels for a short time, then <style=cIsUtility>blinks</style> to the target location upon completion with a murder of crows flying wildly around it for <style=cIsUtility>5s</style>, dealing <style=cIsDamage>1000% damage</style> per second."); SkillDef skill = Utils.NewSkillDef<SkillDef>(typeof(Special), "Weapon", 1, 14f, beginSkillCooldownOnSkillEnd: true, canceledFromSprinting: false, fullRestockOnAssign: false, (InterruptPriority)1, isCombatSkill: true, mustKeyPress: true, cancelSprintingOnActivation: false, 1, 1, 1, Assets.MainAssetBundle.LoadAsset<Sprite>("special0"), "FIDDLE_SPEC_DESCRIPTION", "FIDDLE_SPEC", Array.Empty<string>()); component.special = Utils.NewGenericSkill(characterPrefab, skill); } } internal class Prefabs { internal static GameObject model; internal static GameObject dummy; internal static GameObject tetherVFXPrefab; internal static GameObject tetherVFXPrefabSkin; internal static GameObject siphonAttachmentPrefab; internal static GameObject clawSwingVFX; internal static GameObject clawSwingVFXSkin; internal static GameObject clawHitVFX; internal static GameObject scytheSwingVFX; internal static GameObject scytheSwingVFXSkin; internal static GameObject scytheHitVFX; internal static GameObject succHitVFX; internal static GameObject succHitVFXSkin; internal static GameObject clawHitVFXSkin; internal static GameObject scytheHitVFXSkin; internal static GameObject areaIndicator; internal static GameObject orbEffect; internal static GameObject orbEffectSkin; internal static GameObject orbHitEffect; internal static GameObject orbHitEffectSkin; internal static GameObject crowStormEffect; internal static GameObject skinHitEffectSimple; internal static GameObject ultHitEffect; internal static GameObject skinUltHitEffect; internal static T Load<T>(string path) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) return Addressables.LoadAssetAsync<T>((object)path).WaitForCompletion(); } internal static GameObject Instantiate(string path, string name, bool registerNetwork = false) { return PrefabAPI.InstantiateClone(Load<GameObject>(path), name, registerNetwork); } internal static GameObject Instantiate(GameObject obj, string name, bool registerNetwork = false) { return PrefabAPI.InstantiateClone(obj, name, registerNetwork); } internal static void CreatePrefabs() { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0063: 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) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Expected O, but got Unknown //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_03d8: Unknown result type (might be due to invalid IL or missing references) //IL_03dd: 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_0502: Expected O, but got Unknown //IL_050f: Unknown result type (might be due to invalid IL or missing references) //IL_07b1: Unknown result type (might be due to invalid IL or missing references) //IL_07bb: Expected O, but got Unknown //IL_07e4: Unknown result type (might be due to invalid IL or missing references) //IL_0805: Unknown result type (might be due to invalid IL or missing references) //IL_081c: Unknown result type (might be due to invalid IL or missing references) //IL_08bd: Unknown result type (might be due to invalid IL or missing references) //IL_08c7: Expected O, but got Unknown //IL_08e5: Unknown result type (might be due to invalid IL or missing references) //IL_08ea: Unknown result type (might be due to invalid IL or missing references) //IL_0928: Unknown result type (might be due to invalid IL or missing references) //IL_0932: Unknown result type (might be due to invalid IL or missing references) //IL_0946: Unknown result type (might be due to invalid IL or missing references) //IL_0950: Expected O, but got Unknown //IL_0967: Unknown result type (might be due to invalid IL or missing references) //IL_097e: Unknown result type (might be due to invalid IL or missing references) //IL_09d8: Unknown result type (might be due to invalid IL or missing references) //IL_09df: Expected O, but got Unknown //IL_09f3: Unknown result type (might be due to invalid IL or missing references) //IL_09f8: Unknown result type (might be due to invalid IL or missing references) //IL_0a0d: Unknown result type (might be due to invalid IL or missing references) //IL_0a14: Expected O, but got Unknown //IL_0a29: Unknown result type (might be due to invalid IL or missing references) //IL_0a2e: Unknown result type (might be due to invalid IL or missing references) //IL_0a5a: Unknown result type (might be due to invalid IL or missing references) //IL_0a61: Expected O, but got Unknown //IL_0b18: Unknown result type (might be due to invalid IL or missing references) //IL_0b22: Expected O, but got Unknown //IL_0b9d: Unknown result type (might be due to invalid IL or missing references) //IL_0ba7: Expected O, but got Unknown //IL_0683: Unknown result type (might be due to invalid IL or missing references) //IL_06b0: 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_06e2: Unknown result type (might be due to invalid IL or missing references) //IL_0c56: Unknown result type (might be due to invalid IL or missing references) //IL_0c60: Expected O, but got Unknown //IL_075b: Unknown result type (might be due to invalid IL or missing references) //IL_0760: Unknown result type (might be due to invalid IL or missing references) //IL_0d2e: Unknown result type (might be due to invalid IL or missing references) //IL_0d38: Expected O, but got Unknown //IL_0d68: Unknown result type (might be due to invalid IL or missing references) //IL_0d6d: Unknown result type (might be due to invalid IL or missing references) //IL_0dca: Unknown result type (might be due to invalid IL or missing references) //IL_0dd1: Expected O, but got Unknown //IL_0dd8: Unknown result type (might be due to invalid IL or missing references) //IL_0e04: Unknown result type (might be due to invalid IL or missing references) //IL_0e0b: Expected O, but got Unknown //IL_0e12: Unknown result type (might be due to invalid IL or missing references) //IL_0e4f: Unknown result type (might be due to invalid IL or missing references) //IL_0eae: Unknown result type (might be due to invalid IL or missing references) //IL_0eb3: Unknown result type (might be due to invalid IL or missing references) //IL_0ecd: Unknown result type (might be due to invalid IL or missing references) //IL_0ed2: Unknown result type (might be due to invalid IL or missing references) //IL_0f2e: Unknown result type (might be due to invalid IL or missing references) //IL_0f33: Unknown result type (might be due to invalid IL or missing references) //IL_0f8d: Unknown result type (might be due to invalid IL or missing references) //IL_0f97: Unknown result type (might be due to invalid IL or missing references) //IL_0fba: Unknown result type (might be due to invalid IL or missing references) //IL_0fc4: Expected O, but got Unknown //IL_0fd1: Unknown result type (might be due to invalid IL or missing references) ultHitEffect = Instantiate(Load<GameObject>("RoR2/Base/LunarSkillReplacements/LunarNeedleExplosionEffect.prefab"), "UltHitEffect"); ParticleSystemRenderer[] componentsInChildren = ultHitEffect.GetComponentsInChildren<ParticleSystemRenderer>(); foreach (ParticleSystemRenderer val in componentsInChildren) { ((Renderer)val).material = new Material(((Renderer)val).material); ((Renderer)val).material.SetColor("_TintColor", Color32.op_Implicit(new Color32((byte)161, (byte)23, (byte)22, byte.MaxValue))); } Utils.RegisterEffect(ultHitEffect, -1f, "Play_sfx_Fiddlesticks_FiddlesticksBasicAttack_OnHit"); skinUltHitEffect = Instantiate(Load<GameObject>("RoR2/DLC1/VoidSurvivor/VoidSurvivorBeamImpactCorrupt.prefab"), "SkinUltHitEffect"); ParticleSystemRenderer[] componentsInChildren2 = skinUltHitEffect.GetComponentsInChildren<ParticleSystemRenderer>(); foreach (ParticleSystemRenderer val2 in componentsInChildren2) { ((Renderer)val2).material = new Material(((Renderer)val2).material); ((Renderer)val2).material.DisableKeyword("VERTEXCOLOR"); ((Renderer)val2).material.SetColor("_TintColor", Color32.op_Implicit(new Color32(byte.MaxValue, (byte)36, (byte)206, byte.MaxValue))); ((Renderer)val2).material.SetTexture("_RemapTex", (Texture)(object)Load<Texture2D>("RoR2/Base/Common/ColorRamps/texRampArchWisp.png")); } Utils.RegisterEffect(skinUltHitEffect, -1f, "Play_sfx_FiddleSticksSkin06_FiddleSticksBasicAttack_OnHit"); skinHitEffectSimple = Instantiate(Assets.Load<GameObject>("SkinImpactEffectSimple"), "SkinHitEffectSimple"); Utils.RegisterEffect(skinHitEffectSimple, 0.6f); crowStormEffect = Instantiate(Assets.Load<GameObject>("Crowstorm"), "CrowStormEffect"); Utils.AddScaleComponent(((Component)crowStormEffect.transform.GetChild(0)).gameObject, 0.35f, AnimationCurve.EaseInOut(0f, 0.1f, 1f, 1f)); ChildLocator component = crowStormEffect.GetComponent<ChildLocator>(); Renderer[] componentsInChildren3 = ((Component)component.FindChild("ravens")).GetComponentsInChildren<Renderer>(true); foreach (Renderer val3 in componentsInChildren3) { AnimateShaderAlpha val4 = ((Component)val3).gameObject.AddComponent<AnimateShaderAlpha>(); val4.targetRenderer = val3; val4.timeMax = 5.5f; val4.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f); val4.alphaCurve.AddKey(0.85f, 1f); } GameObject gameObject = ((Component)component.FindChild("skinclockwise")).gameObject; Utils.AddRotationComponent(gameObject, 325f, (RotationAxis)1); Utils.AddRotationComponent(((Component)component.FindChild("clockwise")).gameObject, 325f, (RotationAxis)1); Utils.AddRotationComponent(((Component)component.FindChild("anticlockwise")).gameObject, -225f, (RotationAxis)1); Renderer[] componentsInChildren4 = gameObject.GetComponentsInChildren<Renderer>(true); foreach (Renderer val5 in componentsInChildren4) { AnimateShaderAlpha val6 = ((Component)val5).gameObject.AddComponent<AnimateShaderAlpha>(); val6.targetRenderer = val5; val6.timeMax = 5.5f; val6.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f); val6.alphaCurve.AddKey(0.85f, 1f); } Utils.RegisterEffect(crowStormEffect, 5.5f); orbEffect = Instantiate("RoR2/Base/Huntress/HuntressGlaiveOrbEffect.prefab", "OrbEffect"); orbEffect.GetComponent<OrbEffect>().endEffect = null; orbEffect.GetComponentInChildren<EffectComponent>().soundName = ""; ((Component)orbEffect.transform.GetChild(0)).gameObject.SetActive(false); GameObject val7 = Object.Instantiate<GameObject>(Assets.Load<GameObject>("RavenProjectile"), orbEffect.transform.position, Quaternion.identity, orbEffect.transform); ((Component)val7.GetComponent<ChildLocator>().FindChild("base")).gameObject.SetActive(true); ContentAddition.AddEffect(orbEffect); orbEffectSkin = Instantiate(orbEffect, "OrbEffectSkin"); ChildLocator componentInChildren = orbEffectSkin.GetComponentInChildren<ChildLocator>(); ((Component)componentInChildren.FindChild("base")).gameObject.SetActive(false); ((Component)componentInChildren.FindChild("skin")).gameObject.SetActive(true); Utils.AddScaleComponent(((Component)componentInChildren.FindChild("skin")).gameObject, 0.08f); ContentAddition.AddEffect(orbEffectSkin); orbHitEffect = Instantiate("RoR2/DLC1/VoidSurvivor/VoidSurvivorBeamImpactCorrupt.prefab", "OrbHitEffect"); orbHitEffect.GetComponent<EffectComponent>().soundName = "Play_sfx_Fiddlesticks_FiddlesticksQ_OnHit"; Object.Destroy((Object)(object)orbHitEffect.GetComponent<OmniEffect>()); ParticleSystemRenderer[] componentsInChildren5 = orbHitEffect.GetComponentsInChildren<ParticleSystemRenderer>(true); foreach (ParticleSystemRenderer val8 in componentsInChildren5) { ((Component)val8).gameObject.SetActive(true); ((Renderer)val8).material = new Material(((Renderer)val8).material); ((Renderer)val8).material.SetColor("_TintColor", Color.red); } ContentAddition.AddEffect(orbHitEffect); orbHitEffectSkin = Instantiate(Assets.Load<GameObject>("SkinImpactEffect"), "OrbHitEffectSkin"); Utils.RegisterEffect(orbHitEffectSkin, 0.65f, "Play_sfx_FiddlesticksSkin06_FiddlesticksQmissilefear_OnHit"); GameObject val9 = Load<GameObject>("RoR2/Base/UI/HUDSimple.prefab"); Object.DontDestroyOnLoad((Object)(object)val9); HUDTracker hUDTracker = val9.AddComponent<HUDTracker>(); Transform val10 = val9.GetComponent<HUD>().mainUIPanel.transform.Find("SpringCanvas"); if (Object.op_Implicit((Object)(object)val10)) { Transform val11 = val10.Find("BottomRightCluster"); if (Object.op_Implicit((Object)(object)val11)) { Transform val12 = val11.Find("Scaler"); if (Object.op_Implicit((Object)(object)val12)) { Transform val13 = val12.Find("SprintCluster"); if (Object.op_Implicit((Object)(object)val13)) { hUDTracker.sprintCluster = ((Component)val13).gameObject; } Transform val14 = val12.Find("InventoryCluster"); if (Object.op_Implicit((Object)(object)val14)) { hUDTracker.inventoryCluster = ((Component)val14).gameObject; } Transform val15 = val12.Find("Skill1Root"); if (Object.op_Implicit((Object)(object)val15)) { hUDTracker.skillRoot = Object.Instantiate<GameObject>(((Component)val15).gameObject); ((Transform)(RectTransform)hUDTracker.skillRoot.transform).SetParent(val15.parent); hUDTracker.skillRoot.transform.localPosition = new Vector3(-340.0792f, -51.6797f, 0f); hUDTracker.skillRoot.transform.rotation = val15.rotation; hUDTracker.skillRoot.transform.localScale = val15.localScale; hUDTracker.icon = hUDTracker.skillRoot.GetComponent<SkillIcon>(); hUDTracker.mpLocator = hUDTracker.skillRoot.GetComponentInChildren<MPEventSystemLocator>(); ((Behaviour)hUDTracker.skillRoot.GetComponentInChildren<InputBindingDisplayController>()).enabled = false; HGTextMeshProUGUI? obj = Array.Find(hUDTracker.skillRoot.GetComponentsInChildren<HGTextMeshProUGUI>(), (HGTextMeshProUGUI x) => ((Object)x).name == "SkillKeyText"); KeyCode value = MainPlugin.passiveKey.Value; ((TMP_Text)obj).text = ((object)(KeyCode)(ref value)).ToString(); } } } } clawSwingVFX = Instantiate("RoR2/Base/Croco/CrocoSlash.prefab", "ClawSwingVFX"); ParticleSystemRenderer component2 = ((Component)clawSwingVFX.transform.GetChild(0)).GetComponent<ParticleSystemRenderer>(); ((Renderer)component2).material = new Material(Load<Material>("RoR2/Base/Croco/matCrocoSlashDiseased.mat")); ((Renderer)component2).material.SetTexture("_MainTex", (Texture)(object)Load<Texture2D>("RoR2/Base/Lemurian/texLemurianSlash.png")); ((Renderer)component2).material.SetTextureScale("_MainTex", Vector2.one); ((Renderer)component2).material.SetTextureOffset("_MainTex", new Vector2(0.1f, 0f)); ((Renderer)component2).material.SetColor("_TintColor", Color.red); ((Renderer)component2).material.SetTexture("_RemapTex", (Texture)(object)Load<Texture2D>("RoR2/DLC1/Common/ColorRamps/texRampVoidFlatCoral.png")); ((Renderer)component2).material.SetFloat("_Boost", 5f); ((Renderer)component2).material.SetFloat("_AlphaBias", 0f); ((Renderer)component2).material.SetFloat("_InvFade", 1f); clawSwingVFXSkin = Instantiate(clawSwingVFX, "clawSwingVFXSkin"); component2 = ((Component)clawSwingVFXSkin.transform.GetChild(0)).GetComponent<ParticleSystemRenderer>(); ((Renderer)component2).material = new Material(((Renderer)component2).material); ((Renderer)component2).material.SetColor("_TintColor", Color32.op_Implicit(new Color32(byte.MaxValue, (byte)71, (byte)240, byte.MaxValue))); scytheSwingVFX = Instantiate("RoR2/Base/Merc/MercSwordSlash.prefab", "ScytheSwingVFX"); ParticleSystemRenderer component3 = ((Component)scytheSwingVFX.transform.GetChild(0)).GetComponent<ParticleSystemRenderer>(); ((Component)component3).transform.localScale = Vector3.one * 2f; ((Renderer)component3).material = new Material(((Renderer)component3).material); ((Renderer)component3).material.SetTextureScale("_MainTex", new Vector2(1f, 0.7f)); ((Renderer)component3).material.SetColor("_TintColor", Color.red); ((Renderer)component3).material.SetFloat("_Boost", 20f); ((Renderer)component3).material.SetTexture("_RemapTex", (Texture)(object)Load<Texture2D>("RoR2/Base/Common/ColorRamps/texHippoRezRamp.png")); scytheSwingVFXSkin = Instantiate(scytheSwingVFX, "ScytheSwingVFXSkin"); Material val16 = new Material(((Renderer)component3).material); val16.SetColor("_TintColor", Color32.op_Implicit(new Color32(byte.MaxValue, (byte)0, (byte)118, byte.MaxValue))); Material val17 = new Material(Load<Material>("RoR2/Base/Merc/matMercSwipe2.mat")); val17.SetColor("_TintColor", Color32.op_Implicit(new Color32(byte.MaxValue, (byte)90, (byte)90, byte.MaxValue))); val17.SetTexture("_RemapTex", (Texture)(object)Load<Texture2D>("RoR2/DLC1/Common/ColorRamps/texRampRailgun.png")); Material val18 = new Material(Load<Material>("RoR2/DLC1/VoidSurvivor/matVoidSurvivorMeleeSlash.mat")); val18.SetTexture("_RemapTex", (Texture)(object)Load<Texture2D>("RoR2/Base/Common/ColorRamps/texRampLunarWardDecal.png")); ParticleSystemRenderer componentInChildren2 = scytheSwingVFXSkin.GetComponentInChildren<ParticleSystemRenderer>(); ((Renderer)componentInChildren2).materials = (Material[])(object)new Material[4] { val16, default(Material), val17, val18 }; Texture2D val19 = Load<Texture2D>("RoR2/Base/Common/ColorRamps/texRampGolem.png"); clawHitVFX = Instantiate("RoR2/Base/Common/VFX/OmniImpactVFXSlash.prefab", "ClawHitVFX"); clawHitVFX.GetComponent<EffectComponent>().soundName = "Play_sfx_Fiddlesticks_FiddlesticksBasicAttackMelee_OnHit"; Object.Destroy((Object)(object)clawHitVFX.GetComponent<OmniEffect>()); ParticleSystemRenderer[] componentsInChildren6 = clawHitVFX.GetComponentsInChildren<ParticleSystemRenderer>(true); foreach (ParticleSystemRenderer val20 in componentsInChildren6) { ((Component)val20).gameObject.SetActive(true); ((Renderer)val20).material = new Material(((Renderer)val20).material); ((Renderer)val20).material.SetTexture("_RemapTex", (Texture)(object)val19); } ContentAddition.AddEffect(clawHitVFX); succHitVFX = Instantiate("RoR2/Junk/LunarSkillReplacements/WoundSlashImpact.prefab", "SuccHitVFX"); succHitVFX.GetComponent<EffectComponent>().soundName = ""; ParticleSystemRenderer[] componentsInChildren7 = succHitVFX.GetComponentsInChildren<ParticleSystemRenderer>(); foreach (ParticleSystemRenderer val21 in componentsInChildren7) { ((Renderer)val21).material = new Material(((Renderer)val21).material); ((Renderer)val21).material.SetTexture("_RemapTex", (Texture)(object)val19); } ContentAddition.AddEffect(succHitVFX); succHitVFXSkin = Instantiate("RoR2/Junk/LunarSkillReplacements/WoundSlashImpact.prefab", "SuccHitVFXSkin"); succHitVFXSkin.GetComponent<EffectComponent>().soundName = ""; ContentAddition.AddEffect(succHitVFXSkin); scytheHitVFX = Instantiate("RoR2/Junk/LunarSkillReplacements/WoundSlashImpact.prefab", "SuccHitVFX"); scytheHitVFX.GetComponent<EffectComponent>().soundName = "Play_sfx_Fiddlesticks_FiddlesticksE_hit_slowed"; ParticleSystemRenderer[] componentsInChildren8 = scytheHitVFX.GetComponentsInChildren<ParticleSystemRenderer>(); foreach (ParticleSystemRenderer val22 in componentsInChildren8) { ((Renderer)val22).material = new Material(((Renderer)val22).material); ((Renderer)val22).material.SetTexture("_RemapTex", (Texture)(object)val19); } ContentAddition.AddEffect(scytheHitVFX); scytheHitVFXSkin = Instantiate(scytheHitVFX, "ScytheHitVFXSkin"); scytheHitVFXSkin.GetComponent<EffectComponent>().soundName = "Play_sfx_FiddlesticksSkin06_FiddlesticksE_hit_slowed"; ContentAddition.AddEffect(scytheHitVFXSkin); clawHitVFXSkin = Instantiate(clawHitVFX, "ClawHitVFXSkin"); clawHitVFXSkin.GetComponent<EffectComponent>().soundName = "Play_sfx_FiddlesticksSkin06_FiddlesticksBasicAttackMelee_OnHit"; Object.Destroy((Object)(object)clawHitVFXSkin.GetComponent<OmniEffect>()); ParticleSystemRenderer[] componentsInChildren9 = clawHitVFXSkin.GetComponentsInChildren<ParticleSystemRenderer>(true); foreach (ParticleSystemRenderer val23 in componentsInChildren9) { ((Component)val23).gameObject.SetActive(true); ((Renderer)val23).material = new Material(((Renderer)val23).material); ((Renderer)val23).material.DisableKeyword("VERTEXCOLOR"); ((Renderer)val23).material.SetColor("_TintColor", Color32.op_Implicit(new Color32(byte.MaxValue, (byte)71, (byte)240, byte.MaxValue))); } ContentAddition.AddEffect(clawHitVFXSkin); tetherVFXPrefab = Instantiate("RoR2/Base/SiphonOnLowHealth/SiphonTetherVFX.prefab", "TetherVFXPrefab"); LineRenderer component4 = tetherVFXPrefab.GetComponent<LineRenderer>(); component4.widthMultiplier = 0.5f; Material val24 = new Material(Load<Material>("RoR2/DLC1/VoidSurvivor/matVoidBlinkTrailCorrupted.mat")); val24.SetColor("_TintColor", Color.red); val24.SetTexture("_Cloud2Tex", (Texture)(object)Load<Texture2D>("RoR2/DLC1/VoidJailer/texVoidJailerTentacleMask2.png")); Material val25 = new Material(Load<Material>("RoR2/DLC1/RandomEquipmentTrigger/matBottledChaosTrail.mat")); val25.SetColor("_TintColor", Color.red); val25.SetTexture("_Cloud2Tex", (Texture)(object)Load<Texture2D>("RoR2/Base/Common/texCloudLightning1.png")); val25.SetVector("_CutoffScroll", new Vector4(64f, 0f, 64f, 0f)); ((Renderer)component4).materials = (Material[])(object)new Material[2] { val24, val25 }; tetherVFXPrefabSkin = Instantiate(tetherVFXPrefab, "TetherVFXPrefabSkin"); LineRenderer component5 = tetherVFXPrefabSkin.GetComponent<LineRenderer>(); component5.textureMode = (LineTextureMode)0; component5.startColor = Color32.op_Implicit(new Color32(byte.MaxValue, byte.MaxValue, (byte)0, byte.MaxValue)); component5.endColor = Color32.op_Implicit(new Color32((byte)122, (byte)0, byte.MaxValue, byte.MaxValue)); ((Renderer)component5).materials = (Material[])(object)new Material[2] { Assets.Load<Material>("ribbonMat1"), Assets.Load<Material>("ribbonMat2") }; siphonAttachmentPrefab = Instantiate("RoR2/Base/SiphonOnLowHealth/SiphonNearbyBodyAttachment.prefab", "SiphonAttachmentPrefab", registerNetwork: true); GameObject activeVfx = Object.Instantiate<GameObject>(Assets.Load<GameObject>("HealEffect"), siphonAttachmentPrefab.transform.position, Quaternion.identity, siphonAttachmentPrefab.transform); siphonAttachmentPrefab.GetComponent<TetherVfxOrigin>().tetherPrefab = tetherVFXPrefab; siphonAttachmentPrefab.AddComponent<SuccTether>().activeVfx = activeVfx; areaIndicator = Instantiate("RoR2/Base/Huntress/HuntressArrowRainIndicator.prefab", "PassiveAreaIndicator"); areaIndicator.transform.localScale = Vector3.one * 12f; MeshRenderer componentInChildren3 = areaIndicator.GetComponentInChildren<MeshRenderer>(); ((Renderer)componentInChildren3).material = new Material(Load<Material>("RoR2/DLC1/VoidMegaCrab/matVoidCrabAntiMatterAreaIndicator.mat")); ((Renderer)componentInChildren3).material.SetColor("_TintColor", Color.red); ((Renderer)componentInChildren3).material.SetTexture("_RemapTex", (Texture)(object)Load<Texture2D>("RoR2/Base/Common/ColorRamps/texRampGalaxy.png")); ((Renderer)componentInChildren3).material.SetTexture("_Cloud2Tex", (Texture)(object)Load<Texture2D>("RoR2/Base/Common/texCloudCaustic3.jpg")); } } internal class BasicMeleeSkillState : BaseSkillState { private float duration = 0.2f; private Vector3 dir; private OverlapAttack attack; private float damageCoefficient = 4.2f; private GameObject hitEffectPrefab = null; private bool parried; public Animator animator; private uint ID; private string hitboxGroupName = ""; public override void OnEnter() { ((BaseState)this).OnEnter(); animator = ((EntityState)this).GetModelAnimator(); if (!animator.GetBool("slide")) { ((BaseState)this).StartAimMode(1f, true); } ((EntityState)this).PlayAnimation("LeftArm, Override", "MeleeAttack"); AkSoundEngine.PostEvent(ID, ((EntityState)this).gameObject); attack = ((BaseState)this).InitMeleeOverlap(damageCoefficient, hitEffectPrefab, ((EntityState)this).GetModelTransform(), hitboxGroupName); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority) { attack.Fire((List<HurtBox>)null); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } 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)1; } } internal class CharacterMain : GenericCharacterMain { private FiddleBehaviour behaviour; private VObehaviour voBehaviour; private float stopwatch; public override void OnEnter() { ((GenericCharacterMain)this).OnEnter(); voBehaviour = ((EntityState)this).GetComponent<VObehaviour>(); behaviour = ((EntityState)this).GetComponent<FiddleBehaviour>(); } public override void FixedUpdate() { ((GenericCharacterMain)this).FixedUpdate(); stopwatch += Time.fixedDeltaTime; if (stopwatch >= 3f && ((BaseCharacterMain)this).modelAnimator.GetBool("isMoving")) { stopwatch = 0f; voBehaviour.PlayVO(7); } } public override void ProcessJump() { ((GenericCharacterMain)this).ProcessJump(); if (behaviour.inUlt && base.jumpInputReceived) { ((EntityState)this).PlayAnimation("Body", "Ult_Run"); } } } internal class DeathState : GenericCharacterDeath { public override void OnEnter() { ((GenericCharacterDeath)this).OnEnter(); ((EntityState)this).GetComponent<VObehaviour>().PlayVO(1); } public override void FixedUpdate() { ((GenericCharacterDeath)this).FixedUpdate(); if (NetworkServer.active) { base.fallingStopwatch = 0f; base.restStopwatch = 0f; if (((EntityState)this).fixedAge >= 2f) { ((GenericCharacterDeath)this).DestroyBodyAsapServer(); } } } } internal class MeleeSkillState : BaseSkillState { public float attackDuration; private bool hopped; private bool hasSwung; public bool isInHitPause; public float hitPauseDuration; public float hopVelocity; public float hitPauseTimer; public float stopwatch; public HitStopCachedState hitStopCachedState; public OverlapAttack overlapAttack; public bool hasHit; private bool hasAnimParameter; private float attackSpeedScaling; public Animator animator; private GameObject swingEffectInstance; public virtual float baseAttackDuration => 0f; public virtual float earlyExitDurationPercentage => 0f; public virtual float damageCoefficient => 0f; public virtual float forceMagnitude => 440f; public virtual float rootMotionSpeed => 12f; public virtual float baseHopVelocity => 4f; public virtual string layerName => "Gesture, Override"; public virtual string animationStateName => ""; public virtual string animParameter => "M1"; public virtual string hitBoxGroupName => ""; public virtual string hitBoxActiveParameter => "Curve"; public virtual string swingMuzzle => ""; public virtual GameObject swingEffectPrefab => null; public virtual bool hopOnHit => true; public virtual bool rootMotion => false; public virtual bool rootMotionWhileHitting => false; public virtual uint swingSound => 0u; public virtual DamageType damageType => DamageTypeCombo.op_Implicit(DamageTypeCombo.GenericPrimary); public virtual DamageColorIndex damageColor => (DamageColorIndex)0; public virtual Vector3 bonusForce => Vector3.zero; public virtual GameObject hitEffectPrefab => null; public override void OnEnter() { //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_00be: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); attackSpeedScaling = Math.Min(((BaseState)this).attackSpeedStat, 6f); attackDuration = baseAttackDuration / attackSpeedScaling; hitPauseDuration = GroundLight.hitPauseDuration / attackSpeedScaling; hopVelocity = baseHopVelocity / attackSpeedScaling; animator = ((EntityState)this).GetModelAnimator(); animator.SetFloat(hitBoxActiveParameter, 0f); overlapAttack = ((BaseState)this).InitMeleeOverlap(damageCoefficient, hitEffectPrefab, ((EntityState)this).GetModelTransform(), hitBoxGroupName); overlapAttack.pushAwayForce = 1f; overlapAttack.damageType = DamageTypeCombo.op_Implicit(damageType); hasAnimParameter = !Utility.IsNullOrWhiteSpace(animParameter); if (hasAnimParameter && !Utility.IsNullOrWhiteSpace(animationStateName)) { ((EntityState)this).PlayAnimation(layerName, animationStateName, animParameter, attackDuration, 0f); } } public virtual Vector3 rootMotionDirection() { //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_000f: Unknown result type (might be due to invalid IL or missing references) return ((EntityState)this).characterDirection.forward; } public override void FixedUpdate() { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0139: 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_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0150: 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_0318: Unknown result type (might be due to invalid IL or missing references) //IL_031f: 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_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority) { bool flag = FireMeleeAttack(overlapAttack, animator, hitBoxActiveParameter, forceMagnitude, bonusForce); hasHit = flag; if (hasHit) { if (hopOnHit && !((EntityState)this).characterMotor.isGrounded && !hopped) { ((BaseState)this).SmallHop(((EntityState)this).characterMotor, hopVelocity); hopped = true; } if (!rootMotionWhileHitting && !isInHitPause && hasAnimParameter) { hitStopCachedState = ((BaseState)this).CreateHitStopCachedState(((EntityState)this).characterMotor, animator, animParameter); isInHitPause = true; } } if (animator.GetFloat(hitBoxActiveParameter) > 0.1f && rootMotion && !hasHit) { Vector3 val = rootMotionDirection(); Vector3 val2 = default(Vector3); ((Vector3)(ref val2))..ctor(val.x, 0f, val.z); CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.rootMotion += val2 * rootMotionSpeed * Time.fixedDeltaTime; } if (hitPauseTimer >= hitPauseDuration && isInHitPause) { ((BaseState)this).ConsumeHitStopCachedState(hitStopCachedState, ((EntityState)this).characterMotor, animator); isInHitPause = false; animator.speed = 1f; } if (!isInHitPause) { stopwatch += Time.fixedDeltaTime; } else { hitPauseTimer += Time.fixedDeltaTime; ((EntityState)this).characterMotor.velocity = Vector3.zero; animator.speed = 0f; } if (stopwatch >= attackDuration * earlyExitDurationPercentage) { if (((EntityState)this).inputBank.skill1.down) { SetState(); } if (stopwatch >= attackDuration) { BaseSkillState val3 = StateOverride(); if (val3 != null) { ((EntityState)this).outer.SetNextState((EntityState)(object)val3); } else { ((EntityState)this).outer.SetNextStateToMain(); } return; } } } if (!(animator.GetFloat(hitBoxActiveParameter) >= 0.11f) || hasSwung) { return; } hasSwung = true; AkSoundEngine.PostEvent(swingSound, ((EntityState)this).gameObject); if (Object.op_Implicit((Object)(object)swingEffectPrefab) && !Utility.IsNullOrWhiteSpace(swingMuzzle)) { Transform val4 = ((BaseState)this).FindModelChild(swingMuzzle); swingEffectInstance = Object.Instantiate<GameObject>(swingEffectPrefab, val4.position, val4.rotation, val4); ScaleParticleSystemDuration component = swingEffectInstance.GetComponent<ScaleParticleSystemDuration>(); if (Object.op_Implicit((Object)(object)component)) { component._newDuration = attackDuration; } } } public override void OnExit() { if (Object.op_Implicit((Object)(object)swingEffectInstance)) { EntityState.Destroy((Object)(object)swingEffectInstance); } ((EntityState)this).OnExit(); } public bool FireMeleeAttack(OverlapAttack attack, Animator animator, string mecanimHitboxActiveParameter, float forceMagnitude, Vector3 bonusForce) { //IL_0050: 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_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0043: 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) bool result = false; if (Object.op_Implicit((Object)(object)animator) && animator.GetFloat(mecanimHitboxActiveParameter) > 0.1f) { attack.forceVector = (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection) ? ((EntityState)this).characterDirection.forward : (((EntityState)this).transform.forward * forceMagnitude + bonusForce)); result = attack.Fire((List<HurtBox>)null); } return result; } public virtual void SetState() { } public virtual BaseSkillState StateOverride() { return null; } 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)1; } } internal class Passive : BaseSkillState { private GameObject areaIndicator; private Vector3 pos; public override void OnEnter() { //IL_0032: 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_006f: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); areaIndicator = Object.Instantiate<GameObject>(ArrowRain.areaIndicatorPrefab); areaIndicator.transform.localScale = new Vector3(1.2f, 5f, 1.2f); if (!((EntityState)this).isAuthority) { areaIndicator.SetActive(false); return; } GameObject val = Object.Instantiate<GameObject>(Prefabs.areaIndicator, areaIndicator.transform.position, Quaternion.identity); val.transform.parent = areaIndicator.transform; } public override void Update() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).Update(); RaycastHit val = default(RaycastHit); if (Object.op_Implicit((Object)(object)areaIndicator) && Physics.Raycast(((BaseState)this).GetAimRay(), ref val, 9999f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask))) { areaIndicator.transform.position = ((RaycastHit)(ref val)).point; pos = ((RaycastHit)(ref val)).point; } } public override void FixedUpdate() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority && !Input.GetKey(MainPlugin.passiveKey.Value)) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { //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_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_0039: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).GetComponent<VObehaviour>().PlayVO(6); if (pos != Vector3.zero) { GameObject val = Object.Instantiate<GameObject>(Prefabs.dummy, pos, Quaternion.LookRotation(((EntityState)this).characterDirection.forward)); val.GetComponent<Animator>().SetBool("dummy", true); val.GetComponent<DecoyBehaviour>().ownerBody = ((EntityState)this).characterBody; } if (Object.op_Implicit((Object)(object)areaIndicator)) { EntityState.Destroy((Object)(object)areaIndicator); } ((EntityState)this).OnExit(); } } internal class Primary : MeleeSkillState { public int attackIndex = 1; public override float baseAttackDuration => (attackIndex == 3) ? 0.85f : 0.55f; public override float earlyExitDurationPercentage => 0.85f; public override string layerName => "FullBody, Override"; public override string animationStateName => "Attack" + attackIndex; public override string hitBoxGroupName => (attackIndex == 3) ? "SlashBig" : "Slash"; public override float forceMagnitude => 250f; public override string swingMuzzle => animationStateName + "Muzzle"; public override float damageCoefficient => (attackIndex == 3) ? 3.75f : 2.6f; public override uint swingSound { get { if (((EntityState)this).characterBody.skinIndex == 0) { return (attackIndex == 3) ? 2939542187u : 1336317742u; } return (attackIndex == 3) ? 1710545294u : 1162920259u; } } public override float baseHopVelocity => 6f; public override bool rootMotion => true; public override GameObject hitEffectPrefab { get { if (((EntityState)this).characterBody.skinIndex == 0) { return (attackIndex == 3) ? Prefabs.scytheHitVFX : Prefabs.clawHitVFX; } return (attackIndex == 3) ? Prefabs.scytheHitVFXSkin : Prefabs.clawHitVFXSkin; } } public override GameObject swingEffectPrefab { get { if (((EntityState)this).characterBody.skinIndex == 0) { return (attackIndex == 3) ? Prefabs.scytheSwingVFX : Prefabs.clawSwingVFX; } return (attackIndex == 3) ? Prefabs.scytheSwingVFXSkin : Prefabs.clawSwingVFXSkin; } } public override DamageType damageType => (DamageType)0; public override void OnSerialize(NetworkWriter writer) { ((BaseSkillState)this).OnSerialize(writer); writer.Write(attackIndex); } public override void OnDeserialize(NetworkReader reader) { ((BaseSkillState)this).OnDeserialize(reader); attackIndex = reader.ReadInt32(); } public override void OnEnter() { base.OnEnter(); ((EntityState)this).GetComponent<VObehaviour>().PlayVO(0); } public override void SetState() { if (attackIndex != 3) { Primary primary = new Primary(); primary.attackIndex = attackIndex + 1; ((EntityState)this).outer.SetNextState((EntityState)(object)primary); } } public override void OnExit() { base.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)1; } } internal class Secondary : BaseSkillState { private float duration = 2f; private NetworkedBodyAttachment attachment; private Animator animator; private uint ID; private bool skin; public override void OnEnter() { ((BaseState)this).OnEnter(); animator = ((EntityState)this).GetModelAnimator(); animator.SetBool("skillOver", false); animator.SetBool("inCombat", true); ((EntityState)this).PlayAnimation("FullBody, Override", "Succ"); if (NetworkServer.active) { attachment = Object.Instantiate<GameObject>(Prefabs.siphonAttachmentPrefab).GetComponent<NetworkedBodyAttachment>(); attachment.AttachToGameObjectAndSpawn(((EntityState)this).gameObject, (string)null); } skin = ((EntityState)this).characterBody.skinIndex == 1; AkSoundEngine.PostEvent(skin ? 2231533992u : 1864580443u, ((EntityState)this).gameObject); ID = AkSoundEngine.PostEvent(skin ? 75752765u : 3692113436u, ((EntityState)this).gameObject); ((EntityState)this).GetComponent<VObehaviour>().PlayVO(2); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); ((EntityState)this).characterBody.outOfCombat = false; if ((((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration) || (!((BaseSkillState)this).IsKeyDownAuthority() && ((EntityState)this).fixedAge >= 0.5f)) { ((EntityState)this).outer.SetNextState((EntityState)(object)new SecondaryEnd()); } } public override void OnExit() { AkSoundEngine.PostEvent(skin ? 364148197u : 2530302772u, ((EntityState)this).gameObject); AkSoundEngine.StopPlayingID(ID); animator.SetBool("skillOver", true); animator.SetBool("inCombat", false); if (Object.op_Implicit((Object)(object)attachment)) { EntityState.Destroy((Object)(object)((Component)attachment).gameObject); } ((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)7; } } public class SecondaryEnd : BaseSkillState { public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= 0.35f) { ((EntityState)this).outer.SetNextStateToMain(); } } public overri