Decompiled source of Mortician v0.1.5
plugins/Morris.dll
Decompiled 3 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.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.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using EmotesAPI; using EntityStates; using EntityStates.SurvivorPod; using HG; using HG.BlendableTypes; using JetBrains.Annotations; using KinematicCharacterController; using Mono.Cecil.Cil; using MonoMod.Cil; using Morris; using Morris.Components; using Morris.Content; using Morris.Modules; using Morris.Modules.Characters; using Morris.Modules.NPC; using Morris.Modules.Survivors; using On.RoR2; using R2API; using R2API.Utils; using RoR2; using RoR2.Achievements; using RoR2.CharacterAI; using RoR2.ContentManagement; using RoR2.Navigation; using RoR2.Orbs; using RoR2.Projectile; using RoR2.Skills; using RoR2.UI; using ShaderSwapper; using SkillStates.CoffinPod; using SkillStates.Ghoul; using SkillStates.Morris; using SkillStates.SharedStates; using SkillStates.Tombstone; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Events; using UnityEngine.Networking; using UnityEngine.Rendering; [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 = ".NET Standard 2.1")] [assembly: AssemblyCompany("Morris")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+c346115485ec0a14284147d6289de929408937ea")] [assembly: AssemblyProduct("Morris")] [assembly: AssemblyTitle("Morris")] [assembly: CompilationRelaxations(8)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: UnverifiableCode] public class SoulOrbLocator : MonoBehaviour { [SerializeField] private GameObject[] soulOrbs; public void ActivateSphere(int i) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Expected O, but got Unknown soulOrbs[i].SetActive(true); EffectData val = new EffectData { origin = soulOrbs[i].transform.position }; EffectManager.SpawnEffect(MorrisAssets.SoulOrbActivatedEffect, val, true); } public void DeactivateSphere(int i) { soulOrbs[i].SetActive(false); } public Vector3 GetPosition(int i) { //IL_000e: 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_0016: Unknown result type (might be due to invalid IL or missing references) return soulOrbs[i].transform.position; } } namespace SkillStates.Tombstone { internal class TombstoneDeath : GenericCharacterDeath { public override void OnEnter() { ((GenericCharacterDeath)this).OnEnter(); } public override void FixedUpdate() { ((GenericCharacterDeath)this).FixedUpdate(); } public override void Update() { ((EntityState)this).Update(); } public override void OnExit() { ((GenericCharacterDeath)this).OnExit(); } } internal class TombstoneLaunched : BaseLaunchedState { public override void OnEnter() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) launchPower = 60f; damageType = (DamageType)32; impactVFX = MorrisAssets.OmniImpactVFXTombstone; base.OnEnter(); ((EntityState)this).gameObject.layer = LayerIndex.fakeActor.intVal; ((BaseCharacterController)((EntityState)this).characterMotor).Motor.RebuildCollidableLayers(); ((EntityState)this).characterMotor.muteWalkMotion = false; } public override void PlayLaunchEntry() { ((EntityState)this).PlayAnimation("FullBody, Override", "ForwardSpin"); } public override void PlayLaunchExit() { ((EntityState)this).PlayAnimation("FullBody, Override", "BufferEmpty"); } public override void OnExit() { ((EntityState)this).gameObject.layer = LayerIndex.defaultLayer.intVal; ((BaseCharacterController)((EntityState)this).characterMotor).Motor.RebuildCollidableLayers(); ((EntityState)this).characterMotor.muteWalkMotion = true; base.OnExit(); } } internal class TombstoneMain : GenericCharacterMain { private MorrisMinionController minionController; public override void OnEnter() { ((GenericCharacterMain)this).OnEnter(); minionController = ((EntityState)this).GetComponent<MorrisMinionController>(); } public override void FixedUpdate() { ((GenericCharacterMain)this).FixedUpdate(); } public override void Update() { ((GenericCharacterMain)this).Update(); } public override void OnExit() { ((GenericCharacterMain)this).OnExit(); } } internal class TombstoneSpawn : BaseState { public static float duration = 1f; public string spawnSoundString = "Morris_TombstoneSpawn"; public override void OnEnter() { ((BaseState)this).OnEnter(); Util.PlaySound(spawnSoundString, ((EntityState)this).gameObject); Transform modelTransform = ((EntityState)this).GetModelTransform(); TemporaryOverlayInstance val = TemporaryOverlayManager.AddOverlay(((EntityState)this).gameObject); val.duration = duration * 1.2f; val.animateShaderAlpha = true; val.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0.1f); val.destroyComponentOnEnd = true; val.originalMaterial = MorrisAssets.TombstoneSpawnMat; val.AddToCharacterModel(((Component)modelTransform).GetComponent<CharacterModel>()); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void Update() { ((EntityState)this).Update(); } public override void OnExit() { ((EntityState)this).OnExit(); } } } namespace SkillStates.SharedStates { internal class BaseLaunchedState : BaseState { public static float minDuration = 0.3f; public static float maxDuration = 5f; public static float damageCoefficient = 3.5f; public static float yOffset = 0.1f; public static float minMassToExitState = 200f; public static Vector3 downwardForce = Vector3.zero; public float launchPower; public DamageType damageType; private MorrisMinionController minionController; private OverlapAttack attack; public Vector3 launchVector; private List<HurtBox> victims = new List<HurtBox>(); private float cachedAirControl; protected GameObject impactVFX; public override void OnEnter() { //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Expected O, but got Unknown //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Expected O, but got Unknown //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01fd: Unknown result type (might be due to invalid IL or missing references) //IL_0202: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); PlayLaunchEntry(); minionController = ((EntityState)this).GetComponent<MorrisMinionController>(); launchVector.y += yOffset; cachedAirControl = ((EntityState)this).characterMotor.airControl; ((EntityState)this).characterMotor.airControl = 0.15f; if (NetworkServer.active) { ((EntityState)this).characterBody.AddBuff(Buffs.HiddenInvincibility); } if (((EntityState)this).isAuthority) { ((EntityState)this).characterDirection.forward = launchVector; ((EntityState)this).characterBody.isSprinting = true; ((BaseCharacterController)((EntityState)this).characterMotor).Motor.ForceUnground(0.1f); ((EntityState)this).characterMotor.velocity = Vector3.zero; CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.velocity += launchVector * launchPower; } Transform modelTransform = ((EntityState)this).GetModelTransform(); HitBoxGroup hitBoxGroup = new HitBoxGroup(); if (Object.op_Implicit((Object)(object)modelTransform)) { hitBoxGroup = Array.Find(((Component)modelTransform).GetComponents<HitBoxGroup>(), (HitBoxGroup element) => element.groupName == "LaunchHitbox"); } attack = new OverlapAttack(); attack.attacker = (Object.op_Implicit((Object)(object)minionController.owner) ? minionController.owner : ((EntityState)this).gameObject); attack.inflictor = ((EntityState)this).gameObject; attack.damageType = DamageTypeCombo.op_Implicit(damageType); attack.procCoefficient = 1f; attack.teamIndex = ((BaseState)this).GetTeam(); attack.isCrit = (Object.op_Implicit((Object)(object)minionController.owner) ? Util.CheckRoll(minionController.ownerBody.crit, minionController.ownerBody.master) : ((BaseState)this).RollCrit()); attack.forceVector = downwardForce; attack.pushAwayForce = 1f; attack.damage = damageCoefficient * base.damageStat; attack.hitBoxGroup = hitBoxGroup; attack.hitEffectPrefab = impactVFX; } public override void FixedUpdate() { //IL_0027: 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: Invalid comparison between Unknown and I4 //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Invalid comparison between Unknown and I4 ((EntityState)this).FixedUpdate(); if (!((EntityState)this).isAuthority) { return; } ((EntityState)this).characterDirection.forward = ((Vector3)(ref ((EntityState)this).characterMotor.velocity)).normalized; if (attack.Fire(victims)) { foreach (HurtBox victim in victims) { if (!Object.op_Implicit((Object)(object)victim.healthComponent) || !victim.healthComponent.alive) { continue; } Rigidbody component = ((Component)victim.healthComponent).GetComponent<Rigidbody>(); if (Object.op_Implicit((Object)(object)component)) { float mass = component.mass; if (mass >= minMassToExitState) { OnHitLargeEnemy(victim); } } else { CharacterBody body = victim.healthComponent.body; if ((int)body.hullClassification == 1 || (int)body.hullClassification == 2) { OnHitLargeEnemy(victim); } } } } if ((((EntityState)this).fixedAge >= minDuration && ((BaseCharacterController)((EntityState)this).characterMotor).Motor.GroundingStatus.IsStableOnGround) || ((EntityState)this).fixedAge >= maxDuration) { ((EntityState)this).outer.SetNextStateToMain(); } } public virtual void PlayLaunchEntry() { } public virtual void PlayLaunchExit() { } public virtual void OnHitLargeEnemy(HurtBox target) { } public override void OnExit() { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) PlayLaunchExit(); if (NetworkServer.active) { ((EntityState)this).characterBody.RemoveBuff(Buffs.HiddenInvincibility); } CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.velocity *= 0.05f; ((EntityState)this).characterMotor.airControl = cachedAirControl; ((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)5; } } } namespace SkillStates.Morris { internal class PlaceTombstone : BaseState { private struct PlacementInfo { public bool ok; public Vector3 position; public Quaternion rotation; } public static GameObject tombstoneMasterPrefab; private const float tombstoneHeight = 7f; private const float tombstoneRadius = 1f; private float entryDelay = 0.1f; private float exitDelay = 0.25f; private bool exitPending; private BlueprintController blueprintController; private PlacementInfo currentPlacementInfo; public override void OnEnter() { //IL_002b: 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) ((BaseState)this).OnEnter(); if (((EntityState)this).isAuthority) { currentPlacementInfo = GetPlacementInfo(); blueprintController = Object.Instantiate<GameObject>(MorrisAssets.TombstoneBlueprintsPrefab, currentPlacementInfo.position, currentPlacementInfo.rotation).GetComponent<BlueprintController>(); } } public override void FixedUpdate() { //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (!((EntityState)this).isAuthority) { return; } entryDelay -= Time.fixedDeltaTime; if (entryDelay <= 0f && !exitPending) { if ((((EntityState)this).inputBank.skill1.down || ((ButtonState)(ref ((EntityState)this).inputBank.skill4)).justPressed) && currentPlacementInfo.ok) { ((EntityState)this).PlayCrossfade("Gesture, Override", "LanternRaise", 0.05f); ((EntityState)this).characterBody.SendConstructTurret(((EntityState)this).characterBody, currentPlacementInfo.position, currentPlacementInfo.rotation, MasterCatalog.FindMasterIndex(tombstoneMasterPrefab)); ((BaseState)this).StartAimMode(2f, false); ((EntityState)this).skillLocator.special.DeductStock(1); DestroyBlueprints(); exitPending = true; } if (((ButtonState)(ref ((EntityState)this).inputBank.skill2)).justPressed) { DestroyBlueprints(); exitPending = true; } } else if (exitPending) { exitDelay -= Time.fixedDeltaTime; if (exitDelay <= 0f) { ((EntityState)this).outer.SetNextStateToMain(); } } } public override void Update() { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).Update(); currentPlacementInfo = GetPlacementInfo(); if (Object.op_Implicit((Object)(object)blueprintController)) { blueprintController.PushState(currentPlacementInfo.position, currentPlacementInfo.rotation, currentPlacementInfo.ok); } } private void DestroyBlueprints() { EntityState.Destroy((Object)(object)((Component)blueprintController).gameObject); } public override void OnExit() { ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } private PlacementInfo GetPlacementInfo() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_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_0117: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_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_013a: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) Ray aimRay = ((BaseState)this).GetAimRay(); Vector3 direction = ((Ray)(ref aimRay)).direction; direction.y = 0f; ((Vector3)(ref direction)).Normalize(); ((Ray)(ref aimRay)).direction = direction; PlacementInfo result = default(PlacementInfo); result.ok = false; result.rotation = Util.QuaternionSafeLookRotation(-direction); Ray val = default(Ray); ((Ray)(ref val))..ctor(((Ray)(ref aimRay)).GetPoint(4f) + Vector3.up * 2f, Vector3.down); float num = 8f; float num2 = num; RaycastHit val2 = default(RaycastHit); if (Physics.SphereCast(val, 1f, ref val2, num, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask)) && ((RaycastHit)(ref val2)).normal.y > 0.5f) { num2 = ((RaycastHit)(ref val2)).distance; result.ok = true; } Vector3 point = ((Ray)(ref val)).GetPoint(num2 + 1f); result.position = point; if (result.ok && Physics.CheckCapsule(result.position + Vector3.up * 1f, result.position + Vector3.up * 7f, 0.9f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.defaultLayer)).mask))) { result.ok = false; } return result; } } internal class Sacrifice : BaseState { public static float baseDuration = 1.333f; public static float sacrificePercentHealAmount = 0.15f; private LanternTracker lanternTracker; private float duration; private float effectTime; private float earlyExitTime; private bool hasSnapped; private HurtBox target; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = baseDuration / base.attackSpeedStat; effectTime = duration * 0.35f; earlyExitTime = duration * 0.625f; lanternTracker = ((EntityState)this).GetComponent<LanternTracker>(); if (!Object.op_Implicit((Object)(object)target)) { target = lanternTracker.GetTrackingTarget(); } ((EntityState)this).PlayCrossfade("Right Arm, Override", "FingerSnap", "Swing.playbackRate", duration, 0.05f); SacrificeGhoul(target); ((BaseState)this).StartAimMode(2f, false); } public override void OnSerialize(NetworkWriter writer) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) NetworkExtensions.Write(writer, HurtBoxReference.FromHurtBox(target)); } public override void OnDeserialize(NetworkReader reader) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) HurtBoxReference val = NetworkExtensions.ReadHurtBoxReference(reader); target = ((HurtBoxReference)(ref val)).ResolveHurtBox(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= effectTime && !hasSnapped) { hasSnapped = true; EffectManager.SimpleMuzzleFlash(MorrisAssets.MorrisFingerSnap, ((EntityState)this).gameObject, "IndexFingerR", false); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public void SacrificeGhoul(HurtBox sacrificeTarget) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) MorrisMinionController component = ((Component)sacrificeTarget.healthComponent).GetComponent<MorrisMinionController>(); HealOrb val = new HealOrb(); ((Orb)val).origin = ((Component)component).transform.position; ((Orb)val).target = ((EntityState)this).characterBody.mainHurtBox; val.healValue = ((EntityState)this).characterBody.maxHealth * sacrificePercentHealAmount; val.overrideDuration = 0.5f; if (NetworkServer.active) { OrbManager.instance.AddOrb((Orb)(object)val); } component.Sacrifice(((EntityState)this).gameObject); } public override void OnExit() { ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)((!(((EntityState)this).fixedAge >= earlyExitTime)) ? 2 : 0); } } internal class SpawnGhoul : BaseState { public static float baseDuration = 1f; private float duration; private float earlyExitTime; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = baseDuration / base.attackSpeedStat; earlyExitTime = duration * 0.3f; ((EntityState)this).PlayCrossfade("Gesture, Override", "LanternRaise", "Swing.playbackRate", duration, 0.05f); ((BaseState)this).StartAimMode(2f, false); AttemptSpawnGhoul(); } private void AttemptSpawnGhoul() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //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) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) MasterSummon val = new MasterSummon(); val.masterPrefab = GhoulMinion.ghoulMasterPrefab; val.ignoreTeamMemberLimit = true; val.teamIndexOverride = (TeamIndex)1; val.summonerBodyObject = ((EntityState)this).gameObject; val.position = GetBestSpawnPosition(((BaseState)this).GetAimRay()); val.rotation = Util.QuaternionSafeLookRotation(((EntityState)this).characterDirection.forward); if (NetworkServer.active) { CharacterMaster val2 = val.Perform(); if (Object.op_Implicit((Object)(object)val2)) { val2.inventory.CopyEquipmentFrom(((EntityState)this).characterBody.inventory); } } } private Vector3 GetBestSpawnPosition(Ray aimRay) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008a: 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_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) Vector3 direction = ((Ray)(ref aimRay)).direction; direction.y = 0f; ((Vector3)(ref direction)).Normalize(); ((Ray)(ref aimRay)).origin = ((Ray)(ref aimRay)).origin + Vector3.up * 2f; ((Ray)(ref aimRay)).direction = direction; RaycastHit val = default(RaycastHit); Ray val2 = default(Ray); if (Physics.Raycast(aimRay, ref val, 3f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask))) { ((Ray)(ref val2))..ctor(((RaycastHit)(ref val)).point + Vector3.up * 2f, Vector3.down); } else { ((Ray)(ref val2))..ctor(((Ray)(ref aimRay)).GetPoint(3f) + Vector3.up * 2f, Vector3.down); } Physics.Raycast(val2, ref val, (float)LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask)); return ((RaycastHit)(ref val)).point; } private bool ValidateRaycastHit(Ray ray, RaycastHit hit) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) if (((RaycastHit)(ref hit)).normal.y > 0.5f && Vector3.Distance(((RaycastHit)(ref hit)).point, ((Ray)(ref ray)).origin) <= 10f) { return true; } return false; } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)((!(((EntityState)this).fixedAge >= earlyExitTime)) ? 2 : 0); } } internal class SwingShovel : BaseState, IStepSetter { public static float baseDuration = 1.833f; public static float damageCoefficient = 8f; public static float smallHopVelocity = 6f; public static float hitPauseDuration = 0.12f; private Animator animator; private OverlapAttack attack; private HitBoxGroup hitBoxGroup; private float duration; private float step; private float fireTime; private float fireEndTime; private float earlyExitTime; private bool hasFired; private bool hasHopped; public string swingSoundString = "Morris_SwingShovel"; public string hitGhoulSoundString = "Morris_HitGhoulWithShovel"; public string hitTombstoneSoundString = ""; private HitStopCachedState hitStopCachedState; private float stopWatch; private float hitPauseTimer; private bool inHitPause; public override void OnEnter() { //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Expected O, but got Unknown //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); animator = ((EntityState)this).GetModelAnimator(); duration = baseDuration / base.attackSpeedStat; fireTime = duration * 0.18f; fireEndTime = duration * 0.22f; earlyExitTime = duration * 0.54f; ((BaseState)this).StartAimMode(2f, false); string text = "Swing" + step; if (!animator.GetBool("isMoving") && ((EntityState)this).characterMotor.isGrounded) { ((EntityState)this).PlayCrossfade("FullBody, Override", text, "Swing.playbackRate", duration, 0.1f); } ((EntityState)this).PlayCrossfade("Gesture, Override", text, "Swing.playbackRate", duration, 0.1f); Transform modelTransform = ((EntityState)this).GetModelTransform(); if (Object.op_Implicit((Object)(object)modelTransform)) { hitBoxGroup = Array.Find(((Component)modelTransform).GetComponents<HitBoxGroup>(), (HitBoxGroup element) => element.groupName == "Swing"); } attack = new OverlapAttack(); attack.attacker = ((EntityState)this).gameObject; attack.inflictor = ((EntityState)this).gameObject; attack.damageType = DamageTypeCombo.op_Implicit((DamageType)0); attack.procCoefficient = 1f; attack.teamIndex = ((BaseState)this).GetTeam(); attack.isCrit = ((BaseState)this).RollCrit(); attack.forceVector = Vector3.zero; attack.pushAwayForce = 1f; attack.damage = damageCoefficient * base.damageStat; attack.hitBoxGroup = hitBoxGroup; attack.hitEffectPrefab = MorrisAssets.MorrisShovelHit; DamageAPI.AddModdedDamageType(attack, MorrisPlugin.LaunchGhoul); } public override void FixedUpdate() { //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); hitPauseTimer -= Time.fixedDeltaTime; if (((EntityState)this).fixedAge >= fireTime && !hasFired) { HitGhoul(); FireAttack(); } if (hitPauseTimer <= 0f && inHitPause) { ((BaseState)this).ConsumeHitStopCachedState(hitStopCachedState, ((EntityState)this).characterMotor, animator); inHitPause = false; } if (!inHitPause) { stopWatch += Time.fixedDeltaTime; } else { ((EntityState)this).characterMotor.velocity = Vector3.zero; animator.SetFloat("Swing.playbackRate", 0f); } if (stopWatch >= duration && hasFired && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public void FireAttack() { //IL_000e: 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_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_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) Transform val = ((BaseState)this).FindModelChild("SwingPivot"); Ray aimRay = ((BaseState)this).GetAimRay(); val.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction); if (!hasFired) { PlaySwingEffect(); hasFired = true; } if (((EntityState)this).isAuthority && attack.Fire((List<HurtBox>)null)) { if (!((EntityState)this).characterMotor.isGrounded && !hasHopped) { hasHopped = true; ((BaseState)this).SmallHop(((EntityState)this).characterMotor, smallHopVelocity); } if (!inHitPause) { hitStopCachedState = ((BaseState)this).CreateHitStopCachedState(((EntityState)this).characterMotor, animator, "Swing.playbackRate"); hitPauseTimer = hitPauseDuration / base.attackSpeedStat; inHitPause = true; } } } public void HitGhoul() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_001d: 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_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) Ray aimRay = ((BaseState)this).GetAimRay(); Vector3 direction = ((Ray)(ref aimRay)).direction; Transform val = ((BaseState)this).FindModelChild("LaunchHitbox"); Vector3 position = val.position; Vector3 val2 = val.lossyScale * 0.5f; Quaternion rotation = val.rotation; Collider[] array = Physics.OverlapBox(position, val2, rotation, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.defaultLayer)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.playerFakeActor)).mask)); Collider[] array2 = array; foreach (Collider val3 in array2) { MorrisMinionController component = ((Component)val3).GetComponent<MorrisMinionController>(); if (Object.op_Implicit((Object)(object)component) && component.teamIndex == ((EntityState)this).teamComponent.teamIndex) { switch (component.minionType) { case MorrisMinionController.MorrisMinionType.Ghoul: Util.PlaySound(hitGhoulSoundString, ((Component)component).gameObject); break; case MorrisMinionController.MorrisMinionType.Tombstone: Util.PlaySound(hitTombstoneSoundString, ((Component)component).gameObject); break; } component.Launch(direction); } } } public void HitGhoul(HitBoxGroup hitBoxGroup) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: 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) Ray aimRay = ((BaseState)this).GetAimRay(); Vector3 direction = ((Ray)(ref aimRay)).direction; HitBox[] hitBoxes = hitBoxGroup.hitBoxes; foreach (HitBox val in hitBoxes) { Transform transform = ((Component)val).transform; Vector3 position = transform.position; Vector3 val2 = transform.lossyScale * 0.5f; Quaternion rotation = transform.rotation; Collider[] array = Physics.OverlapBox(position, val2, rotation, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.defaultLayer)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.fakeActor)).mask)); Collider[] array2 = array; foreach (Collider val3 in array2) { MorrisMinionController component = ((Component)val3).GetComponent<MorrisMinionController>(); if (Object.op_Implicit((Object)(object)component) && component.teamIndex == ((EntityState)this).teamComponent.teamIndex) { switch (component.minionType) { case MorrisMinionController.MorrisMinionType.Ghoul: Util.PlaySound(hitGhoulSoundString, ((Component)component).gameObject); break; case MorrisMinionController.MorrisMinionType.Tombstone: Util.PlaySound(hitTombstoneSoundString, ((Component)component).gameObject); break; } component.Launch(direction); } } } } public void PlaySwingEffect() { string text = ((step == 0f) ? "SwingLeft" : "SwingRight"); string text2 = ((step == 0f) ? "1" : "2"); text2 = swingSoundString + text2; Util.PlaySound(text2, ((EntityState)this).gameObject); EffectManager.SimpleMuzzleFlash(MorrisAssets.ShovelSwingVFX, ((EntityState)this).gameObject, text, false); } public override void OnExit() { ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)((!(((EntityState)this).fixedAge >= earlyExitTime) || !hasFired) ? 1 : 0); } public void SetStep(int i) { step = i; } } internal class SkillTemplate : BaseState { public override void OnEnter() { ((BaseState)this).OnEnter(); ((BaseState)this).StartAimMode(2f, false); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); ((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)2; } } } namespace SkillStates.Ghoul { internal class BileSpit : BaseState { public static GameObject spitPrefab = Projectiles.ghoulBilePrefab; public static GameObject muzzleEffect = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Croco/MuzzleflashCroco.prefab").WaitForCompletion(); public static float baseDuration = 1f; public static float damageCoefficient = 1f; private MorrisMinionController minionController; private float duration; private float fireTime; private bool hasFired; public override void OnEnter() { ((BaseState)this).OnEnter(); minionController = ((EntityState)this).GetComponent<MorrisMinionController>(); duration = baseDuration / base.attackSpeedStat; fireTime = duration * 0.2f; ((EntityState)this).PlayCrossfade("Gesture, Override", "BileSpit", "Attack.playbackRate", duration, 0.1f); ((BaseState)this).StartAimMode(duration, false); } public override void FixedUpdate() { //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_005f: 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_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= fireTime && !hasFired) { hasFired = true; EffectManager.SimpleMuzzleFlash(muzzleEffect, ((EntityState)this).gameObject, "UpperJaw", true); if (((EntityState)this).isAuthority) { Ray aimRay = ((BaseState)this).GetAimRay(); FireProjectileInfo val = default(FireProjectileInfo); val.crit = (Object.op_Implicit((Object)(object)minionController.owner) ? Util.CheckRoll(minionController.ownerBody.crit, minionController.ownerBody.master) : ((BaseState)this).RollCrit()); val.damage = damageCoefficient * base.damageStat; val.force = 100f; val.owner = ((EntityState)this).gameObject; val.position = ((Ray)(ref aimRay)).origin; val.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction); val.projectilePrefab = spitPrefab; ProjectileManager.instance.FireProjectile(val); } } 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)2; } } internal class ClingState : BaseState { public static float damageCoefficient = GhoulMelee.damageCoefficient; public static float biteInterval = 0.7f; public static Vector3 downwardForce = Vector3.down * 800f; public HurtBox initialTarget; public HurtBoxGroup targetGroup; private Transform modelTransform; private HurtBox clingHurtbox; private Collider targetCollider; private bool negativeOffset; private MorrisMinionController minionController; private float stopwatch; public override void OnEnter() { //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); ((EntityState)this).PlayAnimation("FullBody, Override", "ClingLoop"); ((EntityState)this).PlayCrossfade("FullBody, Additive", "ClingBite", "Attack.playbackRate", biteInterval, 0.1f); ((Behaviour)((EntityState)this).modelLocator).enabled = false; ((Behaviour)((EntityState)this).characterDirection).enabled = false; modelTransform = ((EntityState)this).GetModelTransform(); negativeOffset = Random.value > 0.5f; if (Object.op_Implicit((Object)(object)initialTarget)) { targetGroup = initialTarget.hurtBoxGroup; int num = Random.Range(0, targetGroup.hurtBoxes.Length); clingHurtbox = targetGroup.hurtBoxes[num]; targetCollider = ((Component)clingHurtbox).GetComponent<Collider>(); } if (((EntityState)this).isAuthority) { ((EntityState)this).characterMotor.velocity = Vector3.zero; } minionController = ((EntityState)this).GetComponent<MorrisMinionController>(); minionController.isInClingState = true; } public override void OnSerialize(NetworkWriter writer) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) NetworkExtensions.Write(writer, HurtBoxReference.FromHurtBox(initialTarget)); } public override void OnDeserialize(NetworkReader reader) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) HurtBoxReference val = NetworkExtensions.ReadHurtBoxReference(reader); initialTarget = ((HurtBoxReference)(ref val)).ResolveHurtBox(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); UpdateClingPoint(); stopwatch += Time.fixedDeltaTime; if (stopwatch >= biteInterval && initialTarget.healthComponent.alive) { stopwatch = 0f; Bite(); } if (!initialTarget.healthComponent.alive && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public void UpdateClingPoint() { //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_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).characterMotor.velocity = Vector3.zero; ((EntityState)this).characterMotor.rootMotion = Vector3.zero; Bounds bounds = targetCollider.bounds; Vector3 center = ((Bounds)(ref bounds)).center; bounds = targetCollider.bounds; float num = ((Bounds)(ref bounds)).extents.z; Quaternion val = ((Component)targetCollider).transform.rotation; if (negativeOffset) { num *= -1f; val = Quaternion.Inverse(val); } center.z -= num; ((BaseCharacterController)((EntityState)this).characterMotor).Motor.SetPosition(center, true); modelTransform.position = center; modelTransform.rotation = val; } public void Bite() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: 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_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Expected O, but got Unknown ((EntityState)this).PlayCrossfade("FullBody, Additive", "ClingBite", "Attack.playbackRate", biteInterval, 0.1f); EffectData val = new EffectData { origin = ((Component)clingHurtbox).transform.position, rotation = modelTransform.rotation, scale = 1.5f }; EffectManager.SpawnEffect(MorrisAssets.GhoulBiteEffect, val, true); EffectManager.SpawnEffect(MorrisAssets.OmniImpactVFXGhoul, val, true); Util.PlaySound("Play_acrid_m2_bite_hit", ((EntityState)this).gameObject, "Volume_SFX", 0.2f); try { DamageInfo val2 = new DamageInfo { position = ((Component)initialTarget).transform.position, attacker = (Object.op_Implicit((Object)(object)minionController.owner) ? minionController.owner : ((EntityState)this).gameObject), inflictor = ((EntityState)this).gameObject, damage = damageCoefficient * base.damageStat, damageColorIndex = (DamageColorIndex)0, damageType = DamageTypeCombo.op_Implicit((DamageType)0), crit = (Object.op_Implicit((Object)(object)minionController.owner) ? Util.CheckRoll(minionController.ownerBody.crit, minionController.ownerBody.master) : ((BaseState)this).RollCrit()), force = downwardForce, procChainMask = default(ProcChainMask), procCoefficient = 0.8f }; if (NetworkServer.active) { initialTarget.healthComponent.TakeDamage(val2); GlobalEventManager.instance.OnHitEnemy(val2, ((Component)initialTarget.healthComponent).gameObject); GlobalEventManager.instance.OnHitAll(val2, ((Component)initialTarget.healthComponent).gameObject); } } catch (Exception) { Log.Warning("NRE in Bite()"); } } public override void OnExit() { ((Behaviour)((EntityState)this).modelLocator).enabled = true; ((Behaviour)((EntityState)this).characterDirection).enabled = true; minionController.isInClingState = false; ((EntityState)this).gameObject.layer = LayerIndex.playerFakeActor.intVal; ((BaseCharacterController)((EntityState)this).characterMotor).Motor.RebuildCollidableLayers(); ((EntityState)this).PlayAnimation("FullBody, Override", "BufferEmpty"); ((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)5; } } internal class GhoulDeath : GenericCharacterDeath { public static float duration = 0.375f; public static float sacrificedDamageCoefficient = 7f; public static float sacrificedRadius = 18f; public static float smallHopVelocity = 7f; private MorrisMinionController minionController; private bool sacrificed; private BlastAttack attack; private float radius; private bool hasExploded; public override void OnEnter() { //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) ((GenericCharacterDeath)this).OnEnter(); minionController = ((EntityState)this).gameObject.GetComponent<MorrisMinionController>(); sacrificed = minionController.sacrificed; if (sacrificed) { ((EntityState)this).PlayCrossfade("FullBody, Override", "Sacrificed", 0.1f); Transform modelTransform = ((EntityState)this).GetModelTransform(); TemporaryOverlayInstance val = TemporaryOverlayManager.AddOverlay(((EntityState)this).gameObject); val.duration = duration * 1.5f; val.animateShaderAlpha = true; val.alphaCurve = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f); val.destroyComponentOnEnd = true; val.originalMaterial = MorrisAssets.GhoulSacrificedMat; val.AddToCharacterModel(((Component)modelTransform).GetComponent<CharacterModel>()); } else { RagdollController component = ((Component)((GenericCharacterDeath)this).cachedModelTransform).GetComponent<RagdollController>(); if (Object.op_Implicit((Object)(object)component)) { Vector3 val2 = ((EntityState)this).characterMotor.velocity + Vector3.up * 3f; component.BeginRagdoll(val2); } } if (sacrificed && ((EntityState)this).isAuthority) { ((EntityState)this).characterMotor.velocity = Vector3.zero; ((BaseState)this).SmallHop(((EntityState)this).characterMotor, smallHopVelocity); } } public override void FixedUpdate() { ((GenericCharacterDeath)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && !hasExploded) { hasExploded = true; if (sacrificed) { ((GenericCharacterDeath)this).DestroyModel(); Explode(); } if (NetworkServer.active) { ((GenericCharacterDeath)this).DestroyBodyAsapServer(); } } } public void Explode() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Expected O, but got Unknown //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) EffectData val = new EffectData { origin = ((EntityState)this).characterBody.footPosition, scale = radius }; EffectManager.SpawnEffect(MorrisAssets.GhoulSacrificeExplosion, val, true); if (((EntityState)this).isAuthority) { attack = new BlastAttack(); attack.attacker = (Object.op_Implicit((Object)(object)minionController.sacrificeOwner) ? minionController.sacrificeOwner : minionController.owner); attack.inflictor = ((EntityState)this).gameObject; attack.teamIndex = ((BaseState)this).GetTeam(); attack.baseDamage = sacrificedDamageCoefficient * ((BaseState)this).damageStat; attack.crit = (Object.op_Implicit((Object)(object)minionController.owner) ? Util.CheckRoll(minionController.ownerBody.crit, minionController.ownerBody.master) : ((BaseState)this).RollCrit()); attack.procCoefficient = 1f; attack.damageType = DamageTypeCombo.op_Implicit((DamageType)0); attack.baseForce = 0f; attack.position = ((EntityState)this).transform.position; attack.radius = sacrificedRadius; attack.attackerFiltering = (AttackerFiltering)2; attack.falloffModel = (FalloffModel)0; attack.impactEffect = EffectCatalog.FindEffectIndexFromPrefab(MorrisAssets.OmniImpactVFXGhoul); attack.Fire(); } } public override void OnExit() { ((GenericCharacterDeath)this).OnExit(); } } internal class GhoulLaunched : BaseLaunchedState { private Transform launchTrail; private Transform launchRings; private bool willCling; public override void OnEnter() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) launchPower = 85f; damageType = (DamageType)0; impactVFX = MorrisAssets.OmniImpactVFXGhoul; base.OnEnter(); ((EntityState)this).gameObject.layer = LayerIndex.debris.intVal; ((BaseCharacterController)((EntityState)this).characterMotor).Motor.RebuildCollidableLayers(); launchTrail = ((BaseState)this).FindModelChild("LaunchTrail"); ((Component)launchTrail).gameObject.SetActive(true); launchRings = ((BaseState)this).FindModelChild("LaunchRings"); ((Component)launchRings).gameObject.SetActive(true); } public override void OnHitLargeEnemy(HurtBox target) { if (((EntityState)this).isAuthority) { willCling = true; ClingState nextState = new ClingState { initialTarget = target }; ((EntityState)this).outer.SetNextState((EntityState)(object)nextState); } } public override void PlayLaunchEntry() { ((EntityState)this).PlayAnimation("FullBody, Override", "LaunchedLoop"); } public override void PlayLaunchExit() { ((EntityState)this).PlayAnimation("FullBody, Override", "BufferEmpty"); } public override void OnExit() { if (!willCling) { ((EntityState)this).gameObject.layer = LayerIndex.playerFakeActor.intVal; ((BaseCharacterController)((EntityState)this).characterMotor).Motor.RebuildCollidableLayers(); } ((Component)launchTrail).gameObject.SetActive(false); ((Component)launchRings).gameObject.SetActive(false); if (((EntityState)this).isAuthority && ((EntityState)this).healthComponent.alive) { GameObject masterObject = ((EntityState)this).characterBody.masterObject; BaseAI component = masterObject.GetComponent<BaseAI>(); if (Object.op_Implicit((Object)(object)component)) { component.currentEnemy.Reset(); component.ForceAcquireNearestEnemyIfNoCurrentEnemy(); } } base.OnExit(); } } internal class GhoulMelee : BaseState { public static float baseDuration = 1f; public static float damageCoefficient = 1.5f; private MorrisMinionController minionController; private OverlapAttack attack; private string animString = "Melee"; private string muzzleName = "MuzzleMelee"; private int meleeIndex; private float duration; private float fireTime; private bool hasFired; public override void OnEnter() { //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Expected O, but got Unknown //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Expected O, but got Unknown //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); duration = baseDuration / base.attackSpeedStat; fireTime = duration * 0.2f; ((BaseState)this).StartAimMode(2f, false); minionController = ((EntityState)this).GetComponent<MorrisMinionController>(); if (meleeIndex == 0) { meleeIndex = Random.RandomRangeInt(1, 5); } animString += meleeIndex; muzzleName += meleeIndex; ((EntityState)this).PlayCrossfade("Gesture, Override", animString, "Attack.playbackRate", duration, 0.1f); Transform modelTransform = ((EntityState)this).GetModelTransform(); HitBoxGroup hitBoxGroup = new HitBoxGroup(); if (Object.op_Implicit((Object)(object)modelTransform)) { hitBoxGroup = Array.Find(((Component)modelTransform).GetComponents<HitBoxGroup>(), (HitBoxGroup element) => element.groupName == "GhoulMelee"); } attack = new OverlapAttack(); attack.attacker = (Object.op_Implicit((Object)(object)minionController.owner) ? minionController.owner : ((EntityState)this).gameObject); attack.inflictor = ((EntityState)this).gameObject; attack.damageType = DamageTypeCombo.op_Implicit((DamageType)0); attack.procCoefficient = 1f; attack.teamIndex = ((BaseState)this).GetTeam(); attack.isCrit = (Object.op_Implicit((Object)(object)minionController.owner) ? Util.CheckRoll(minionController.ownerBody.crit, minionController.ownerBody.master) : ((BaseState)this).RollCrit()); attack.forceVector = Vector3.zero; attack.pushAwayForce = 1f; attack.damage = damageCoefficient * base.damageStat; attack.hitBoxGroup = hitBoxGroup; attack.hitEffectPrefab = MorrisAssets.OmniImpactVFXGhoul; } public override void OnSerialize(NetworkWriter writer) { ((EntityState)this).OnSerialize(writer); writer.Write((byte)meleeIndex); } public override void OnDeserialize(NetworkReader reader) { ((EntityState)this).OnDeserialize(reader); meleeIndex = reader.ReadByte(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= fireTime && !hasFired) { hasFired = true; EffectManager.SimpleMuzzleFlash(MorrisAssets.GhoulMeleeEffects[meleeIndex], ((EntityState)this).gameObject, muzzleName, true); 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 GhoulSpawn : BaseState { public static GameObject spawnEffect = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Lemurian/SpawnLemurian.prefab").WaitForCompletion(); public static float baseDuration = 0.5f; public override void OnEnter() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Expected O, but got Unknown ((BaseState)this).OnEnter(); if (NetworkServer.active) { ((EntityState)this).characterBody.AddBuff(Buffs.HiddenInvincibility); } EffectData val = new EffectData { origin = ((EntityState)this).characterBody.footPosition }; EffectManager.SpawnEffect(spawnEffect, val, true); Util.PlaySound("Play_treeBot_sprint_end", ((EntityState)this).gameObject); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= baseDuration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { if (NetworkServer.active) { ((EntityState)this).characterBody.RemoveBuff(Buffs.HiddenInvincibility); } ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } } } namespace SkillStates.CoffinPod { internal class Descent : SurvivorPodBaseState { private const float duration = 4f; private ShakeEmitter shakeEmitter; public override void OnEnter() { //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) ((SurvivorPodBaseState)this).OnEnter(); Transform modelTransform = ((EntityState)this).GetModelTransform(); if (!Object.op_Implicit((Object)(object)modelTransform)) { return; } ChildLocator component = ((Component)modelTransform).GetComponent<ChildLocator>(); if (Object.op_Implicit((Object)(object)component)) { Transform val = component.FindChild("Pivot"); if (Object.op_Implicit((Object)(object)val)) { shakeEmitter = ((Component)val).gameObject.AddComponent<ShakeEmitter>(); shakeEmitter.wave = new Wave { amplitude = 1f, frequency = 180f, cycleOffset = 0f }; shakeEmitter.duration = 10000f; shakeEmitter.radius = 400f; shakeEmitter.amplitudeTimeDecay = false; } } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge > 4f) { ((EntityState)this).outer.SetNextState((EntityState)(object)new Landed()); } } public override void OnExit() { EntityState.Destroy((Object)(object)shakeEmitter); ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } } internal class Landed : SurvivorPodBaseState { public override void OnEnter() { ((SurvivorPodBaseState)this).OnEnter(); ((SurvivorPodBaseState)this).vehicleSeat.handleVehicleExitRequestServer.AddCallback((CallbackDelegate<bool, GameObject>)HandleVehicleExitRequest); } private void HandleVehicleExitRequest(GameObject arg, ref bool? resultOverride) { ((SurvivorPodBaseState)this).survivorPodController.exitAllowed = false; ((EntityState)this).outer.SetNextState((EntityState)(object)new Release()); resultOverride = true; } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge > 0f) { ((SurvivorPodBaseState)this).survivorPodController.exitAllowed = true; } } public override void OnExit() { ((SurvivorPodBaseState)this).vehicleSeat.handleVehicleExitRequestServer.RemoveCallback((CallbackDelegate<bool, GameObject>)HandleVehicleExitRequest); ((SurvivorPodBaseState)this).survivorPodController.exitAllowed = false; ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } } internal class Release : SurvivorPodBaseState { public override void OnEnter() { ((SurvivorPodBaseState)this).OnEnter(); ((EntityState)this).PlayAnimation("Base", "OpenDoor"); if (NetworkServer.active && Object.op_Implicit((Object)(object)((SurvivorPodBaseState)this).vehicleSeat) && Object.op_Implicit((Object)(object)((SurvivorPodBaseState)this).vehicleSeat.currentPassengerBody)) { ((SurvivorPodBaseState)this).vehicleSeat.EjectPassenger(((Component)((SurvivorPodBaseState)this).vehicleSeat.currentPassengerBody).gameObject); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (NetworkServer.active && !Object.op_Implicit((Object)(object)((SurvivorPodBaseState)this).vehicleSeat.currentPassengerBody)) { ((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)2; } } } namespace Morris { internal static class Log { internal static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object data) { _logSource.LogDebug(data); } internal static void Error(object data) { _logSource.LogError(data); } internal static void Fatal(object data) { _logSource.LogFatal(data); } internal static void Info(object data) { _logSource.LogInfo(data); } internal static void Message(object data) { _logSource.LogMessage(data); } internal static void Warning(object data) { _logSource.LogWarning(data); } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.Bog.Morris", "Mortician", "0.1.5")] public class MorrisPlugin : BaseUnityPlugin { public const string MODUID = "com.Bog.Morris"; public const string MODNAME = "Mortician"; public const string MODVERSION = "0.1.5"; public const string DEVELOPER_PREFIX = "BOG"; public static MorrisPlugin instance; public static PluginInfo PInfo; public static GameObject MorrisBodyPrefab; public static BodyIndex MorrisBodyIndex; public static GameObject GhoulBodyPrefab; public static BodyIndex GhoulBodyIndex; internal static GameObject TombstoneBodyPrefab; internal static BodyIndex TombstoneBodyIndex; public static ModdedDamageType LaunchGhoul; public static bool containsCustomEmoteAPI; private void Awake() { //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) instance = this; Log.Init(((BaseUnityPlugin)this).Logger); PInfo = ((BaseUnityPlugin)this).Info; Config.ReadConfig(this); containsCustomEmoteAPI = Chainloader.PluginInfos.ContainsKey("com.weliveinasociety.CustomEmotesAPI"); MorrisAssets.Initialize(); ((MonoBehaviour)this).StartCoroutine(ShaderSwapper.UpgradeStubbedShadersAsync(MorrisAssets.mainAssetBundle)); States.RegisterStates(); Buffs.RegisterBuffs(); Projectiles.RegisterProjectiles(); Tokens.AddTokens(); ItemDisplays.PopulateDisplays(); LaunchGhoul = DamageAPI.ReserveDamageType(); new Morris.Modules.Survivors.Morris().Initialize(); new GhoulMinion().Initialize(); new TombstoneDeployable().Initialize(); new ContentPacks().Initialize(); Subscriptions(); Hook(); if (!containsCustomEmoteAPI) { } } public IEnumerator CoroutineMaterialStuff() { yield return ShaderSwapper.UpgradeStubbedShadersAsync(MorrisAssets.mainAssetBundle); yield return Materials.FixRenderQueues(); } private void Start() { } private void Subscriptions() { } private void ShowHealthBarToOwner(DamageDealtMessage obj) { //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)obj.attacker) || !Object.op_Implicit((Object)(object)obj.victim) || obj.isSilent) { return; } MorrisMinionController component = obj.attacker.GetComponent<MorrisMinionController>(); if (!Object.op_Implicit((Object)(object)component) || !Object.op_Implicit((Object)(object)component.owner)) { return; } HealthComponent component2 = obj.victim.GetComponent<HealthComponent>(); if (!Object.op_Implicit((Object)(object)component2) || component2.dontShowHealthbar) { return; } TeamIndex teamIndex = component2.body.teamComponent.teamIndex; foreach (CombatHealthBarViewer instances in CombatHealthBarViewer.instancesList) { if ((Object)(object)component.owner == (Object)(object)instances.viewerBodyObject && Object.op_Implicit((Object)(object)instances.viewerBodyObject)) { instances.HandleDamage(component2, teamIndex); } } } private void Hook() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown BodyCatalog.SetBodyPrefabs += new hook_SetBodyPrefabs(BodyCatalog_SetBodyPrefabs); } private EntityState EntityStateCatalog_InstantiateState_Type(orig_InstantiateState_Type orig, Type stateType) { Log.Warning(Environment.StackTrace); return orig.Invoke(stateType); } private void GlobalEventManager_OnCharacterDeath(ILContext il) { } private void MinionGroup_AddMinion(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); val.TryGotoNext(new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 1), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)typeof(Component).GetMethod("GetComponent", new Type[0])), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, 1), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 1) }); val.Index += 4; Log.Warning(val); } private void BodyCatalog_SetBodyPrefabs(orig_SetBodyPrefabs orig, GameObject[] newBodyPrefabs) { //IL_000e: 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_001d: 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_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) orig.Invoke(newBodyPrefabs); MorrisBodyIndex = BodyCatalog.FindBodyIndex(MorrisBodyPrefab); GhoulBodyIndex = BodyCatalog.FindBodyIndex(GhoulBodyPrefab); TombstoneBodyIndex = BodyCatalog.FindBodyIndex(TombstoneBodyPrefab); } private void CustomEmoteAPICompat() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown BodyCatalog.SetBodyPrefabs += new hook_SetBodyPrefabs(CreateEmoteSkeletons); CustomEmotesAPI.boneMapperCreated += new BoneMapperCreated(CustomEmotesAPI_boneMapperCreated); CustomEmotesAPI.animChanged += new AnimationChanged(CustomEmotesAPI_animChanged); } private void CreateEmoteSkeletons(orig_SetBodyPrefabs orig, GameObject[] newBodyPrefabs) { orig.Invoke(newBodyPrefabs); Log.Warning("Creating Morris emote skeleton"); GameObject val = MorrisAssets.mainAssetBundle.LoadAsset<GameObject>("MorrisHumanoidSkeleton"); CustomEmotesAPI.ImportArmature(MorrisBodyPrefab, val, 0, true); val.GetComponentInChildren<BoneMapper>().scale = 1f; Log.Warning("Creating Ghoul emote skeleton"); GameObject val2 = MorrisAssets.mainAssetBundle.LoadAsset<GameObject>("GhoulHumanoidSkeleton"); CustomEmotesAPI.ImportArmature(GhoulBodyPrefab, val2, 0, true); val2.GetComponentInChildren<BoneMapper>().scale = 1f; } private void CustomEmotesAPI_boneMapperCreated(BoneMapper mapper) { //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) if (mapper.mapperBody.bodyIndex != GhoulBodyIndex) { return; } MorrisMinionController component = ((Component)mapper.mapperBody).GetComponent<MorrisMinionController>(); if (Object.op_Implicit((Object)(object)component.owner)) { BoneMapper componentInChildren = ((Component)component.owner.GetComponent<ModelLocator>().modelTransform).GetComponentInChildren<BoneMapper>(); if (Object.op_Implicit((Object)(object)componentInChildren) && componentInChildren.currentClipName != "none") { CustomEmotesAPI.PlayAnimation(componentInChildren.currentClipName, mapper, -2); } } } private void CustomEmotesAPI_animChanged(string newAnimation, BoneMapper mapper) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_005e: 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) if (mapper.mapperBody.bodyIndex != MorrisBodyIndex) { return; } IEnumerable<CharacterMaster> enumerable = CharacterMaster.readOnlyInstancesList.Where((CharacterMaster el) => (Object)(object)el.minionOwnership.ownerMaster == (Object)(object)mapper.mapperBody.master); foreach (CharacterMaster item in enumerable) { if (item.GetBody().bodyIndex == GhoulBodyIndex && item.GetBody().healthComponent.alive) { ModelLocator component = item.GetBodyObject().GetComponent<ModelLocator>(); if (Object.op_Implicit((Object)(object)component)) { BoneMapper componentInChildren = ((Component)component.modelTransform).GetComponentInChildren<BoneMapper>(); CustomEmotesAPI.PlayAnimation(newAnimation, componentInChildren, -2); } } } } } } namespace Morris.Content { internal class TombstoneSoulOrb : GenericDamageOrb { public static string explodeSoundString = "Play_engi_M2_explo"; public static float orbSpeed = 100f; public static float blastRadius = 15f; public override void Begin() { base.speed = orbSpeed; ((GenericDamageOrb)this).Begin(); } public override GameObject GetOrbEffect() { return MorrisAssets.SoulOrbTrailEffect; } public override void OnArrival() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Expected O, but got Unknown //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: 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_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)((Orb)this).target)) { GameObject soulOrbExplosion = MorrisAssets.SoulOrbExplosion; EffectData val = new EffectData { origin = ((Component)((Orb)this).target).transform.position, scale = blastRadius }; EffectManager.SpawnEffect(soulOrbExplosion, val, true); Util.PlaySound(explodeSoundString, ((Component)((Orb)this).target).gameObject); if (Object.op_Implicit((Object)(object)base.attacker)) { new BlastAttack { attacker = base.attacker, baseDamage = base.damageValue, baseForce = 0f, bonusForce = Vector3.down * 1000f, crit = base.isCrit, damageColorIndex = (DamageColorIndex)3, damageType = DamageTypeCombo.op_Implicit((DamageType)0), falloffModel = (FalloffModel)0, inflictor = null, position = ((Component)((Orb)this).target).transform.position, procChainMask = base.procChainMask, procCoefficient = base.procCoefficient, radius = blastRadius, teamIndex = TeamComponent.GetObjectTeam(base.attacker) }.Fire(); } } } } } namespace Morris.Modules { public static class Buffs { internal static BuffDef exhaustionDebuff; public static float exhaustStatReduction = 0.7f; public static float exhaustCooldownScale = 1.2f; internal static void RegisterBuffs() { //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_002e: Unknown result type (might be due to invalid IL or missing references) BuffDef val = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/Base/Treebot/bdWeak.asset").WaitForCompletion(); exhaustionDebuff = AddNewBuff("Exhaustion", val.iconSprite, new Color(79f, 255f, 244f), canStack: false, isDebuff: true); } internal static BuffDef AddNewBuff(string buffName, Sprite buffIcon, Color buffColor, bool canStack, bool isDebuff) { //IL_0010: 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) BuffDef val = ScriptableObject.CreateInstance<BuffDef>(); ((Object)val).name = buffName; val.buffColor = buffColor; val.canStack = canStack; val.isDebuff = isDebuff; val.eliteDef = null; val.iconSprite = buffIcon; Content.AddBuffDef(val); return val; } } public class Compat { public static void DoCustomEmoteCompat() { } private void Subscriptions() { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown if (Chainloader.PluginInfos.ContainsKey("com.weliveinasociety.CustomEmotesAPI")) { CustomEmotesAPI.animChanged += new AnimationChanged(CustomEmotesAPI_animChanged); } } private void CustomEmotesAPI_animChanged(string newAnimation, BoneMapper mapper) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_005e: 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) if (mapper.mapperBody.bodyIndex != MorrisPlugin.MorrisBodyIndex) { return; } IEnumerable<CharacterMaster> enumerable = CharacterMaster.readOnlyInstancesList.Where((CharacterMaster el) => (Object)(object)el.minionOwnership.ownerMaster == (Object)(object)mapper.mapperBody.master); foreach (CharacterMaster item in enumerable) { if (item.GetBody().bodyIndex == MorrisPlugin.GhoulBodyIndex) { Chat.AddMessage("Getting bone mapper for ghoul"); ModelLocator component = item.GetBodyObject().GetComponent<ModelLocator>(); if (Object.op_Implicit((Object)(object)component)) { BoneMapper componentInChildren = ((Component)component.modelTransform).GetComponentInChildren<BoneMapper>(); CustomEmotesAPI.PlayAnimation(newAnimation, componentInChildren, -2); } } } } } public static class Config { private static ConfigEntry<string> modVersion; public static ConfigEntry<float> sortPosition; public static ConfigEntry<int> ghoulLimit; public static string passiveTitle = "Passive"; public static string primaryTitle = "Primary"; public static string secondaryTitle = "Secondary"; public static string utilityTitle = "Utility"; public static string specialTitle = "Special"; public static void ReadConfig(MorrisPlugin plugin) { sortPosition = ((BaseUnityPlugin)plugin).Config.Bind<float>("General", "Lobby Sort Position", 16f, "Sort position of Mortician in the character select lobby"); ghoulLimit = ((BaseUnityPlugin)plugin).Config.Bind<int>("General", "Ghoul limit", 0, "The maximum amount of ghouls that you can have out in the field. Set this to 0 or a negative number to have no limit. The intended experience is to have no limit at all, so I highly suggest only touching this if you are experiencing lag."); } public static ConfigEntry<bool> CharacterEnableConfig(string characterName, string description = "Set to false to disable this character", bool enabledDefault = true) { return ((BaseUnityPlugin)MorrisPlugin.instance).Config.Bind<bool>("General", "Enable " + characterName, enabledDefault, description); } } internal class ContentPacks : IContentPackProvider { internal ContentPack contentPack = new ContentPack(); public static List<GameObject> bodyPrefabs = new List<GameObject>(); public static List<GameObject> masterPrefabs = new List<GameObject>(); public static List<GameObject> projectilePrefabs = new List<GameObject>(); public static List<SurvivorDef> survivorDefs = new List<SurvivorDef>(); public static List<UnlockableDef> unlockableDefs = new List<UnlockableDef>(); public static List<SkillFamily> skillFamilies = new List<SkillFamily>(); public static List<SkillDef> skillDefs = new List<SkillDef>(); public static List<Type> entityStates = new List<Type>(); public static List<BuffDef> buffDefs = new List<BuffDef>(); public static List<EffectDef> effectDefs = new List<EffectDef>(); public static List<GameObject> networkedObjects = new List<GameObject>(); public static List<NetworkSoundEventDef> networkSoundEventDefs = new List<NetworkSoundEventDef>(); public string identifier => "com.Bog.Morris"; public void Initialize() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown ContentManager.collectContentPackProviders += new CollectContentPackProvidersDelegate(ContentManager_collectContentPackProviders); } private void ContentManager_collectContentPackProviders(AddContentPackProviderDelegate addContentPackProvider) { addContentPackProvider.Invoke((IContentPackProvider)(object)this); } public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args) { contentPack.identifier = identifier; contentPack.bodyPrefabs.Add(bodyPrefabs.ToArray()); contentPack.masterPrefabs.Add(masterPrefabs.ToArray()); contentPack.projectilePrefabs.Add(projectilePrefabs.ToArray()); contentPack.survivorDefs.Add(survivorDefs.ToArray()); contentPack.unlockableDefs.Add(unlockableDefs.ToArray()); contentPack.skillDefs.Add(skillDefs.ToArray()); contentPack.skillFamilies.Add(skillFamilies.ToArray()); contentPack.entityStateTypes.Add(entityStates.ToArray()); contentPack.buffDefs.Add(buffDefs.ToArray()); contentPack.effectDefs.Add(effectDefs.ToArray()); contentPack.networkedObjectPrefabs.Add(networkedObjects.ToArray()); contentPack.networkSoundEventDefs.Add(networkSoundEventDefs.ToArray()); args.ReportProgress(1f); yield break; } public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args) { ContentPack.Copy(contentPack, args.output); args.ReportProgress(1f); yield break; } public IEnumerator FinalizeAsync(FinalizeAsyncArgs args) { args.ReportProgress(1f); yield break; } } internal class Content { public static void AddCharacterBodyPrefab(GameObject bprefab) { ContentPacks.bodyPrefabs.Add(bprefab); } public static void AddMasterPrefab(GameObject prefab) { ContentPacks.masterPrefabs.Add(prefab); } public static void AddProjectilePrefab(GameObject prefab) { ContentPacks.projectilePrefabs.Add(prefab); } public static void AddSurvivorDef(SurvivorDef survivorDef) { ContentPacks.survivorDefs.Add(survivorDef); } public static void AddUnlockableDef(UnlockableDef unlockableDef) { ContentPacks.unlockableDefs.Add(unlockableDef); } public static void AddSkillDef(SkillDef skillDef) { ContentPacks.skillDefs.Add(skillDef); } public static void AddSkillFamily(SkillFamily skillFamily) { ContentPacks.skillFamilies.Add(skillFamily); } public static void AddEntityState(Type entityState) { ContentPacks.entityStates.Add(entityState); } public static void AddBuffDef(BuffDef buffDef) { ContentPacks.buffDefs.Add(buffDef); } public static void AddEffectDef(EffectDef effectDef) { ContentPacks.effectDefs.Add(effectDef); } public static void AddNetworkedObject(GameObject networkedObject) { ContentPacks.networkedObjects.Add(networkedObject); } public static void AddNetworkSoundEventDef(NetworkSoundEventDef networkSoundEventDef) { ContentPacks.networkSoundEventDefs.Add(networkSoundEventDef); } } internal static class Helpers { internal const string agilePrefix = "<style=cIsUtility>Agile.</style> "; internal static string ScepterDescription(string desc) { return "\n<color=#d299ff>SCEPTER: " + desc + "</color>"; } public static T[] Append<T>(ref T[] array, List<T> list) { int num = array.Length; int count = list.Count; Array.Resize(ref array, num + count); list.CopyTo(array, num); return array; } public static Func<T[], T[]> AppendDel<T>(List<T> list) { return (T[] r) => Append(ref r, list); } } internal static class ItemDisplays { private static Dictionary<string, GameObject> itemDisplayPrefabs = new Dictionary<string, GameObject>(); internal static void PopulateDisplays() { PopulateFromBody("MageBody"); PopulateFromBody("LunarExploderBody"); PopulateCustomLightningArm(); } private static void PopulateFromBody(string bodyName) { ItemDisplayRuleSet itemDisplayRuleSet = ((Component)LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/" + bodyName).GetComponent<ModelLocator>().modelTransform).GetComponent<CharacterModel>().itemDisplayRuleSet; KeyAssetRuleGroup[] keyAssetRuleGroups = itemDisplayRuleSet.keyAssetRuleGroups; for (int i = 0; i < keyAssetRuleGroups.Length; i++) { ItemDisplayRule[] rules = keyAssetRuleGroups[i].displayRuleGroup.rules; for (int j = 0; j < rules.Length; j++) { GameObject followerPrefab = rules[j].followerPrefab; if (Object.op_Implicit((Object)(object)followerPrefab)) { string key = ((Object)followerPrefab).name?.ToLowerInvariant(); if (!itemDisplayPrefabs.ContainsKey(key)) { itemDisplayPrefabs[key] = followerPrefab; } } } } } private static void PopulateCustomLightningArm() { GameObject val = PrefabAPI.InstantiateClone(itemDisplayPrefabs["displaylightningarmright"], "DisplayLightningCustom", false); LimbMatcher component = val.GetComponent<LimbMatcher>(); component.limbPairs[0].targetChildLimb = "LightningArm1"; component.limbPairs[1].targetChildLimb = "LightningArm2"; component.limbPairs[2].targetChildLimb = "LightningArmEnd"; itemDisplayPrefabs["displaylightningarmcustom"] = val; } public static GameObject LoadDisplay(string name) { if (itemDisplayPrefabs.ContainsKey(name.ToLowerInvariant()) && Object.op_Implicit((Object)(object)itemDisplayPrefabs[name.ToLowerInvariant()])) { return itemDisplayPrefabs[name.ToLowerInvariant()]; } Log.Error("item display " + name + " returned null"); return null; } } internal static class Materials { private static List<Material> cachedMaterials = new List<Material>(); public static Material CreateHopooMaterial(string materialName) { //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Expected O, but got Unknown Material val = cachedMaterials.Find(delegate(Material mat) { materialName.Replace(" (Instance)", ""); return ((Object)mat).name.Contains(materialName); }); if (Object.op_Implicit((Object)(object)val)) { return val; } val = MorrisAssets.mainAssetBundle.LoadAsset<Material>(materialName); if (!Object.op_Implicit((Object)(object)val)) { Log.Error("Failed to load material: " + materialName + " - Check to see that the material in your Unity project matches this name"); return new Material(MorrisAssets.hotpoo); } return val.SetHopooMaterial(); } public static IEnumerator FixRenderQueues() { Material blueFire = MorrisAssets.mainAssetBundle.LoadAsset<Material>("matMorrisFireBlue"); Material greenFire = MorrisAssets.mainAssetBundle.LoadAsset<Material>("matMorrisFireGreen"); blueFire.renderQueue = 2950; greenFire.renderQueue = 2900; yield return null; } public static Material SetHopooMaterial(this Material tempMat) { //IL_006f: 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_014c: Unknown result type (might be due to invalid IL or missing references) if (cachedMaterials.Contains(tempMat)) { return tempMat; } float? num = null; float? num2 = null; Color? val = null; if (tempMat.IsKeywordEnabled("_NORMALMAP")) { num = tempMat.GetFloat("_BumpScale"); } if (tempMat.IsKeywordEnabled("_EMISSION")) { val = tempMat.GetColor("_EmissionColor"); } if (tempMat.IsKeywordEnabled("CUTOUT")) { num2 = tempMat.GetFloat("_Cutoff"); } tempMat.shader = MorrisAssets.hotpoo; tempMat.SetColor("_Color", tempMat.GetColor("_Color")); tempMat.SetTexture("_MainTex", tempMat.GetTexture("_MainTex")); tempMat.SetTexture("_EmTex", tempMat.GetTexture("_EmissionMap")); tempMat.SetTexture("_NormalTex", tempMat.GetTexture("_BumpMap")); tempMat.EnableKeyword("DITHER"); if (num.HasValue) { tempMat.SetFloat("_NormalStrength", num.Value); } if (val.HasValue) { tempMat.SetColor("_EmColor", val.Value); tempMat.SetFloat("_EmPower", 1f); } if (num2.HasValue) { tempMat.EnableKeyword("CUTOUT"); tempMat.SetFloat("_Cutoff", num2.Value); } if (tempMat.IsKeywordEnabled("NOCULL")) { tempMat.SetInt("_Cull", 0); } if (tempMat.IsKeywordEnabled("LIMBREMOVAL")) { tempMat.SetInt("_LimbRemovalOn", 1); } cachedMaterials.Add(tempMat); return tempMat; } public static Material MakeUnique(this Material material) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown if (cachedMaterials.Contains(material)) { return new Material(material); } return material; } public static Material SetColor(this Material material, Color color) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) material.SetColor("_Color", color); return material; } public static Material SetNormal(this Material material, float normalStrength = 1f) { material.SetFloat("_NormalStrength", normalStrength); return material; } public static Material SetEmission(t