Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Direseeker v2.1.0
plugins/EnforcerGang-Direseeker/Direseeker.dll
Decompiled 3 months ago
The result has been truncated due to the large size, download it to view full contents!
using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using AccurateEnemies; using BepInEx; using BepInEx.Bootstrap; using Direseeker; using DireseekerMod.Components; using DireseekerMod.Modules; using DireseekerMod.States; using DireseekerMod.States.Missions.DireseekerEncounter; using DireseekerMod.States.Sun; using EntityStates; using EntityStates.LemurianBruiserMonster; using EntityStates.TitanMonster; using KinematicCharacterController; using On.RoR2; using R2API; using R2API.Utils; using RoR2; using RoR2.Audio; using RoR2.CharacterAI; using RoR2.Navigation; using RoR2.Projectile; using RoR2.Skills; using RoR2BepInExPack.GameAssetPaths; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; using UnityEngine.Rendering; using UnityEngine.Rendering.PostProcessing; using UnityEngine.SceneManagement; using Zio.FileSystems; [assembly: AssemblyInformationalVersion("1.0.0+8a0bb531cf64c84109ee1cc41351e138c4a8daf5")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: CompilationRelaxations(8)] [assembly: AssemblyProduct("Direseeker")] [assembly: AssemblyConfiguration("Debug")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: AssemblyCompany("Direseeker")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyTitle("Direseeker")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] public class DireseekerSunNetworkController : NetworkBehaviour { private static int kRpcRpcPosition; [ClientRpc] public void RpcPosition(GameObject networkedGameObject) { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_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) Transform parent = ((Component)networkedGameObject.GetComponent<ModelLocator>().modelTransform).GetComponent<ChildLocator>().FindChild("Chest"); ((Component)this).transform.SetParent(parent); ((Component)this).transform.position = ((Component)this).transform.parent.position + Vector3.up * DireseekerSunController.sunHeight; } private void UNetVersion() { } protected static void InvokeRpcRpcPosition(NetworkBehaviour obj, NetworkReader reader) { if (!NetworkClient.active) { Debug.LogError((object)"RPC RpcPosition called on server."); } else { ((DireseekerSunNetworkController)(object)obj).RpcPosition(reader.ReadGameObject()); } } public void CallRpcPosition(GameObject networkedGameObject) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0041: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active) { Debug.LogError((object)"RPC Function RpcPosition called on client."); return; } NetworkWriter val = new NetworkWriter(); val.Write((short)0); val.Write((short)2); val.WritePackedUInt32((uint)kRpcRpcPosition); val.Write(((Component)this).GetComponent<NetworkIdentity>().netId); val.Write(networkedGameObject); ((NetworkBehaviour)this).SendRPCInternal(val, 0, "RpcPosition"); } static DireseekerSunNetworkController() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown kRpcRpcPosition = 34549306; NetworkBehaviour.RegisterRpcDelegate(typeof(DireseekerSunNetworkController), kRpcRpcPosition, new CmdDelegate(InvokeRpcRpcPosition)); NetworkCRC.RegisterBehaviour("DireseekerSunNetworkController", 0); } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { bool result = default(bool); return result; } public override void OnDeserialize(NetworkReader reader, bool initialState) { } } [RequireComponent(typeof(TeamFilter))] public class DireseekerSunController : MonoBehaviour { private TeamFilter teamFilter; private GameObject ownerObj; private CharacterBody ownerBody; public BuffDef buffDef; public GameObject buffApplyEffect; public static float sunHeight = 5f; [SerializeField] public LoopSoundDef activeLoopDef; [SerializeField] public LoopSoundDef damageLoopDef; [SerializeField] public string stopSoundName; private float cycleInterval; private FixedTimeStamp previousCycle = FixedTimeStamp.negativeInfinity; private int cycleIndex; private List<HurtBox> cycleTargets = new List<HurtBox>(); private BullseyeSearch bullseyeSearch = new BullseyeSearch(); private bool isLocalPlayerDamaged; private bool crit; private void Awake() { teamFilter = ((Component)this).GetComponent<TeamFilter>(); } private void Start() { ownerObj = (Object.op_Implicit((Object)(object)((Component)this).GetComponent<GenericOwnership>()) ? ((Component)this).GetComponent<GenericOwnership>().ownerObject : ((Component)this).GetComponent<ProjectileController>().owner); ownerBody = ownerObj.GetComponent<CharacterBody>(); cycleInterval = 0.5f / ownerBody.attackSpeed; crit = ownerBody.RollCrit(); if (Object.op_Implicit((Object)(object)activeLoopDef)) { Util.PlaySound(activeLoopDef.startSoundName, ((Component)this).gameObject); } } private void OnDisable() { OnDestroy(); } private void OnDestroy() { if (Object.op_Implicit((Object)(object)activeLoopDef)) { Util.PlaySound(activeLoopDef.stopSoundName, ((Component)this).gameObject); } if (Object.op_Implicit((Object)(object)damageLoopDef)) { Util.PlaySound(damageLoopDef.stopSoundName, ((Component)this).gameObject); } if (stopSoundName != null) { Util.PlaySound(stopSoundName, ((Component)this).gameObject); } AkSoundEngine.StopPlayingID(3203163036u); } private void LateUpdate() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)((Component)this).transform.parent != (Object)null) { ((Component)this).transform.position = ((Component)this).transform.parent.position + Vector3.up * sunHeight; } } private void FixedUpdate() { //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) if (NetworkServer.active) { ServerFixedUpdate(); } if (!Object.op_Implicit((Object)(object)damageLoopDef)) { return; } bool flag = isLocalPlayerDamaged; isLocalPlayerDamaged = false; RaycastHit val2 = default(RaycastHit); foreach (HurtBox cycleTarget in cycleTargets) { CharacterBody val = null; if (Object.op_Implicit((Object)(object)cycleTarget) && Object.op_Implicit((Object)(object)cycleTarget.healthComponent)) { val = cycleTarget.healthComponent.body; } if (Object.op_Implicit((Object)(object)val) && (val.bodyFlags & 0x200) != 0 && val.hasEffectiveAuthority) { Vector3 position = ((Component)this).transform.position; Vector3 corePosition = val.corePosition; if (!Physics.Linecast(position, corePosition, ref val2, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask), (QueryTriggerInteraction)1)) { isLocalPlayerDamaged = true; } } } if (isLocalPlayerDamaged && !flag) { Util.PlaySound(damageLoopDef.startSoundName, ((Component)this).gameObject); } else if (!isLocalPlayerDamaged && flag) { Util.PlaySound(damageLoopDef.stopSoundName, ((Component)this).gameObject); } } private void ServerFixedUpdate() { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0390: Unknown result type (might be due to invalid IL or missing references) //IL_0395: 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_00cf: 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_00df: Invalid comparison between Unknown and I4 //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_0106: 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_0109: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0184: 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_018c: Unknown result type (might be due to invalid IL or missing references) //IL_0191: 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_01aa: Expected O, but got Unknown //IL_01e6: Unknown result type (might be due to invalid IL or missing references) //IL_01ef: Unknown result type (might be due to invalid IL or missing references) //IL_031b: Unknown result type (might be due to invalid IL or missing references) //IL_0244: Unknown result type (might be due to invalid IL or missing references) //IL_029a: Unknown result type (might be due to invalid IL or missing references) //IL_02aa: Unknown result type (might be due to invalid IL or missing references) float num = Mathf.Clamp01(((FixedTimeStamp)(ref previousCycle)).timeSince / cycleInterval); int num2 = ((num == 1f) ? cycleTargets.Count : Mathf.FloorToInt((float)cycleTargets.Count * num)); Vector3 position = ((Component)this).transform.position; Ray val2 = default(Ray); RaycastHit val3 = default(RaycastHit); while (cycleIndex < num2) { HurtBox val = cycleTargets[cycleIndex]; if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)val.healthComponent)) { CharacterBody body = val.healthComponent.body; if (Object.op_Implicit((Object)(object)ownerBody)) { bool flag = false; bool flag2 = !flag && body.GetBuffCount(Buffs.Overheat) < 5; bool flag3 = (body.bodyFlags & 0x200) == 0 || (int)body.teamComponent.teamIndex != 1; if ((flag || flag2) && flag3) { Vector3 corePosition = body.corePosition; ((Ray)(ref val2))..ctor(position, corePosition - position); if (!Physics.Linecast(position, corePosition, ref val3, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask), (QueryTriggerInteraction)1)) { float num3 = Mathf.Max(1f, ((RaycastHit)(ref val3)).distance); body.AddTimedBuff(buffDef, 1f / num3); if (Object.op_Implicit((Object)(object)buffApplyEffect)) { EffectData val4 = new EffectData { origin = corePosition, rotation = Util.QuaternionSafeLookRotation(-((Ray)(ref val2)).direction), scale = body.bestFitRadius }; val4.SetHurtBoxReference(val); EffectManager.SpawnEffect(buffApplyEffect, val4, true); } int buffCount = body.GetBuffCount(buffDef); if (buffCount >= 2) { InflictDotInfo val5 = default(InflictDotInfo); val5.dotIndex = (DotIndex)1; val5.attackerObject = ownerObj; val5.victimObject = ((Component)body).gameObject; if (Object.op_Implicit((Object)(object)ownerBody) && Object.op_Implicit((Object)(object)ownerBody.inventory)) { TeamDef teamDef = TeamCatalog.GetTeamDef(ownerBody.teamComponent.teamIndex); float num4 = 1f; if (teamDef != null && teamDef.friendlyFireScaling > 0f) { num4 *= teamDef.friendlyFireScaling; } float num5 = ((!flag || !crit) ? 1 : 2); if ((body.teamComponent.teamIndex == ownerBody.teamComponent.teamIndex) & ((Object)(object)body != (Object)(object)ownerBody)) { num4 *= 8f; } val5.totalDamage = 0.01f * ownerBody.damage * (float)buffCount * num4 * num5; val5.damageMultiplier = 1f * num4; StrengthenBurnUtils.CheckDotForUpgrade(ownerBody.inventory, ref val5); } if (val5.totalDamage > 0f) { DotController.InflictDot(ref val5); } } } } } } cycleIndex++; } if (((FixedTimeStamp)(ref previousCycle)).timeSince >= cycleInterval) { previousCycle = FixedTimeStamp.now; cycleIndex = 0; cycleTargets.Clear(); SearchForTargets(cycleTargets); } } private void SearchForTargets(List<HurtBox> dest) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) bullseyeSearch.searchOrigin = ((Component)this).transform.position; bullseyeSearch.minAngleFilter = 0f; bullseyeSearch.maxAngleFilter = 180f; bullseyeSearch.maxDistanceFilter = 180f; bullseyeSearch.filterByDistinctEntity = true; bullseyeSearch.sortMode = (SortMode)1; bullseyeSearch.viewer = null; bullseyeSearch.RefreshCandidates(); dest.AddRange(bullseyeSearch.GetResults()); } } namespace Direseeker { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.rob.Direseeker", "Direseeker", "2.0.609")] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class DireseekerPlugin : BaseUnityPlugin { public static bool AccurateEnemiesLoaded = false; public static bool AccurateEnemiesCompat = true; public static PluginInfo pluginInfo; public void Awake() { AccurateEnemiesLoaded = Chainloader.PluginInfos.ContainsKey("com.Moffein.AccurateEnemies"); pluginInfo = ((BaseUnityPlugin)this).Info; Assets.PopulateAssets(); Tokens.RegisterLanguageTokens(); Prefabs.CreatePrefab(); States.RegisterStates(); Skills.RegisterSkills(); Projectiles.CreateProjectiles(); SpawnCards.CreateSpawnCards(); Assets.UpdateAssets(); new Hooks().ApplyHooks(); } } } namespace DireseekerMod.States { public class ChargeUltraFireball : BaseState { public static float baseDuration = 2f; private float duration; private GameObject chargeInstance; public override void OnEnter() { //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); duration = baseDuration / base.attackSpeedStat; Animator modelAnimator = ((EntityState)this).GetModelAnimator(); Transform modelTransform = ((EntityState)this).GetModelTransform(); Util.PlayAttackSpeedSound("sfx_direseeker_charge", ((EntityState)this).gameObject, base.attackSpeedStat); if (Object.op_Implicit((Object)(object)modelTransform)) { ChildLocator component = ((Component)modelTransform).GetComponent<ChildLocator>(); if (Object.op_Implicit((Object)(object)component)) { Transform val = component.FindChild("MuzzleMouth"); if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)ChargeMegaFireball.chargeEffectPrefab)) { chargeInstance = Object.Instantiate<GameObject>(ChargeMegaFireball.chargeEffectPrefab, val.position, val.rotation); chargeInstance.transform.parent = val; ScaleParticleSystemDuration component2 = chargeInstance.GetComponent<ScaleParticleSystemDuration>(); if (Object.op_Implicit((Object)(object)component2)) { component2.newDuration = duration; } } } } if (Object.op_Implicit((Object)(object)modelAnimator)) { ((EntityState)this).PlayCrossfade("Gesture, Additive", "ChargeMegaFireball", "ChargeMegaFireball.playbackRate", duration, 0.1f); } } public override void OnExit() { ((EntityState)this).OnExit(); if (Object.op_Implicit((Object)(object)chargeInstance)) { EntityState.Destroy((Object)(object)chargeInstance); } } public override void Update() { ((EntityState)this).Update(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { FireUltraFireball nextState = new FireUltraFireball(); ((EntityState)this).outer.SetNextState((EntityState)(object)nextState); } } 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; } } public class Enrage : BaseState { private static Material onFireMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Common/matOnFire.mat").WaitForCompletion(); public static float baseEntryDuration = 1.5f; public static float baseExitDuration = 6f; private float stopwatch; private float entryDuration; private float exitDuration; private bool hasEnraged; private bool heck; private bool stoppedSound = false; private ChildLocator childLocator; private DireseekerController direController; public override void OnEnter() { ((BaseState)this).OnEnter(); stopwatch = 0f; entryDuration = baseEntryDuration / base.attackSpeedStat; exitDuration = baseExitDuration / base.attackSpeedStat; childLocator = ((EntityState)this).GetModelChildLocator(); direController = ((EntityState)this).GetComponent<DireseekerController>(); if (Object.op_Implicit((Object)(object)direController)) { direController.StartRageMode(); } if (NetworkServer.active) { ((EntityState)this).characterBody.AddBuff(Buffs.ArmorBoost); } ((EntityState)this).PlayAnimation("Gesture, Override", "PrepFlamebreath", "PrepFlamebreath.playbackRate", entryDuration, 0f); Util.PlaySound("sfx_direseeker_woosh", ((EntityState)this).gameObject); } private void GrantItems() { if (NetworkServer.active && Object.op_Implicit((Object)(object)((EntityState)this).characterBody.master) && Object.op_Implicit((Object)(object)((EntityState)this).characterBody.master.inventory)) { ((EntityState)this).characterBody.master.inventory.GiveItem(Items.AdaptiveArmor, 1); ((EntityState)this).characterBody.master.inventory.GiveItem(Items.AlienHead, 10); ((EntityState)this).characterBody.master.inventory.GiveItem(Items.Hoof, 3); ((EntityState)this).characterBody.master.inventory.GiveItem(Items.Syringe, 3); } } public override void OnExit() { ((EntityState)this).PlayCrossfade("Gesture, Override", "BufferEmpty", 0.1f); ((EntityState)this).OnExit(); } private void SpawnSun() { if (NetworkServer.active) { GameObject val = Object.Instantiate<GameObject>(Assets.sunPrefab); val.GetComponent<GenericOwnership>().ownerObject = ((EntityState)this).gameObject; NetworkServer.Spawn(val); val.GetComponent<DireseekerSunNetworkController>().CallRpcPosition(((EntityState)this).gameObject); } } public override void FixedUpdate() { //IL_0093: 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_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Expected O, but got Unknown //IL_00ef: 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_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0145: 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_0156: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); stopwatch += ((EntityState)this).GetDeltaTime(); if (stopwatch >= entryDuration && !hasEnraged) { hasEnraged = true; ((EntityState)this).characterBody.baseRegen = -20f; GrantItems(); SpawnSun(); Util.PlaySound("sfx_direseeker_roar", ((EntityState)this).gameObject); GameObject val = Object.Instantiate<GameObject>(Assets.roarEffect); Transform val2 = ((BaseState)this).FindModelChild("MuzzleMouth"); val.transform.position = val2.position; val.transform.rotation = val2.rotation; val.transform.parent = val2; Object.Destroy((Object)(object)val, 30f); BlastAttack val3 = new BlastAttack(); val3.attacker = ((EntityState)this).gameObject; val3.inflictor = ((EntityState)this).gameObject; val3.teamIndex = (TeamIndex)0; val3.procCoefficient = 0f; val3.radius = 120f; val3.baseForce = 8000f; val3.bonusForce = Vector3.up * 200f; val3.baseDamage = 0f; val3.falloffModel = (FalloffModel)1; val3.damageColorIndex = (DamageColorIndex)0; val3.attackerFiltering = (AttackerFiltering)2; val3.damageType = DamageTypeCombo.op_Implicit((DamageType)32); val3.position = ((EntityState)this).transform.position; val3.Fire(); stoppedSound = true; Transform modelTransform = ((EntityState)this).GetModelTransform(); if (Object.op_Implicit((Object)(object)modelTransform)) { CharacterModel component = ((Component)modelTransform).gameObject.GetComponent<CharacterModel>(); if (Object.op_Implicit((Object)(object)component)) { if (component.temporaryOverlays == null) { component.temporaryOverlays = new List<TemporaryOverlayInstance>(); } TemporaryOverlayInstance val4 = TemporaryOverlayManager.AddOverlay(((Component)component).gameObject); val4.duration = 1000f; val4.animateShaderAlpha = true; val4.alphaCurve = AnimationCurve.EaseInOut(0f, 10f, 1f, 10f); val4.destroyComponentOnEnd = false; val4.originalMaterial = onFireMat; val4.inspectorCharacterModel = component; val4.Start(); } } ((EntityState)this).PlayAnimation("Gesture, Override", "Flamebreath", "Flamebreath.playbackRate", exitDuration, 0f); } if (stopwatch >= entryDuration + 0.75f * exitDuration && !heck) { heck = true; ((EntityState)this).PlayCrossfade("Gesture, Override", "ExitFlamebreath", "ExitFlamebreath.playbackRate", 0.75f * exitDuration, 0.1f); if (!NetworkServer.active) { } } if (stopwatch >= entryDuration + exitDuration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class FireUltraFireball : BaseState { public static int projectileCount = 15; public static float totalYawSpread = 25f; public static float baseDuration = 1.5f; public static float baseFireDuration = 0.25f; public static float damageCoefficient = 1.4f; public static float projectileSpeed = 80f; public static float force = 1200f; private float duration; private float fireDuration; private int projectilesFired; private DireseekerController direController; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = baseDuration / base.attackSpeedStat; fireDuration = baseFireDuration / base.attackSpeedStat; direController = ((EntityState)this).GetComponent<DireseekerController>(); if (Object.op_Implicit((Object)(object)direController)) { direController.FlameBurst(); } ((EntityState)this).PlayAnimation("Gesture, Additive", "FireMegaFireball", "FireMegaFireball.playbackRate", duration, 0f); Util.PlaySound("sfx_direseeker_fire", ((EntityState)this).gameObject); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_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_00d3: 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_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0100: 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_0106: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0176: 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_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); string text = "MuzzleMouth"; if (((EntityState)this).isAuthority) { int num = Mathf.FloorToInt(((EntityState)this).fixedAge / fireDuration * (float)projectileCount); if (projectilesFired <= num && projectilesFired < projectileCount) { if (Object.op_Implicit((Object)(object)FireMegaFireball.muzzleflashEffectPrefab)) { EffectManager.SimpleMuzzleFlash(FireMegaFireball.muzzleflashEffectPrefab, ((EntityState)this).gameObject, text, false); } Ray val = ((BaseState)this).GetAimRay(); float num2 = projectileSpeed; if (DireseekerPlugin.AccurateEnemiesLoaded && DireseekerPlugin.AccurateEnemiesCompat) { val = PredictAimRay(val, num2); } Vector3 point = ((Ray)(ref val)).GetPoint(100f); RaycastHit val2 = default(RaycastHit); if (Physics.Raycast(val, ref val2, 100f, LayerMask.op_Implicit(CommonMasks.bullet), (QueryTriggerInteraction)0)) { point = ((RaycastHit)(ref val2)).point; } Vector3 position = ((BaseState)this).FindModelChild(text).position; ((Ray)(ref val))..ctor(position, point - position); float num3 = (float)Mathf.FloorToInt((float)projectilesFired - (float)(projectileCount - 1) / 2f) / (float)(projectileCount - 1) * totalYawSpread; Vector3 val3 = Util.ApplySpread(((Ray)(ref val)).direction, 0f, 0f, 1f, 1f, num3, 0f); ProjectileManager.instance.FireProjectile(Projectiles.fireballPrefab, position, Util.QuaternionSafeLookRotation(val3), ((EntityState)this).gameObject, base.damageStat * damageCoefficient, force, ((BaseState)this).RollCrit(), (DamageColorIndex)0, (GameObject)null, num2, (DamageTypeCombo?)null); projectilesFired++; } } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] private Ray PredictAimRay(Ray aimRay, float speedOverride) { //IL_009b: 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_00a0: 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_007f: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody) && !((EntityState)this).characterBody.isPlayerControlled && (AccurateEnemiesPlugin.alwaysAllowBosses || !AccurateEnemiesPlugin.eliteOnly || ((EntityState)this).characterBody.isElite)) { HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)this).characterBody.master); Ray result; if (speedOverride > 0f) { speedOverride = AccurateEnemiesPlugin.GetProjectileSimpleModifiers(speedOverride); result = Util.PredictAimray(aimRay, ((BaseState)this).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, speedOverride, masterAITargetHurtbox); } else { result = Util.PredictAimrayPS(aimRay, ((BaseState)this).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, Projectiles.fireballPrefab, masterAITargetHurtbox); } return result; } return aimRay; } } public class FlamePillar : BaseState { private enum SubState { Prep, FirePillar, Exit } private class Predictor { private enum ExtrapolationType { None, Linear, Polar } private Transform bodyTransform; private Transform targetTransform; private Vector3 targetPosition0; private Vector3 targetPosition1; private Vector3 targetPosition2; private int collectedPositions; public bool hasTargetTransform => Object.op_Implicit((Object)(object)targetTransform); public bool isPredictionReady => collectedPositions > 2; public Predictor(Transform bodyTransform) { this.bodyTransform = bodyTransform; } private void PushTargetPosition(Vector3 newTargetPosition) { //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_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) targetPosition2 = targetPosition1; targetPosition1 = targetPosition0; targetPosition0 = newTargetPosition; collectedPositions++; } public void SetTargetTransform(Transform newTargetTransform) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) targetTransform = newTargetTransform; targetPosition2 = (targetPosition1 = (targetPosition0 = newTargetTransform.position)); collectedPositions = 1; } public void Update() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)targetTransform)) { PushTargetPosition(targetTransform.position); } } public bool GetPredictedTargetPosition(float time, out Vector3 predictedPosition) { //IL_0002: 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_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: 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_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_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Unknown result type (might be due to invalid IL or missing references) //IL_0227: Unknown result type (might be due to invalid IL or missing references) //IL_022c: Unknown result type (might be due to invalid IL or missing references) //IL_0231: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_023d: Unknown result type (might be due to invalid IL or missing references) //IL_0242: Unknown result type (might be due to invalid IL or missing references) //IL_024c: Unknown result type (might be due to invalid IL or missing references) //IL_0251: Unknown result type (might be due to invalid IL or missing references) //IL_0256: Unknown result type (might be due to invalid IL or missing references) //IL_025b: Unknown result type (might be due to invalid IL or missing references) //IL_026c: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: 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_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_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_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_0109: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0118: 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_0120: 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) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_028a: Unknown result type (might be due to invalid IL or missing references) //IL_028f: Unknown result type (might be due to invalid IL or missing references) //IL_01d1: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01dc: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_01ef: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Unknown result type (might be due to invalid IL or missing references) //IL_0201: Unknown result type (might be due to invalid IL or missing references) //IL_0212: Unknown result type (might be due to invalid IL or missing references) Vector3 val = targetPosition1 - targetPosition2; Vector3 val2 = targetPosition0 - targetPosition1; val.y = 0f; val2.y = 0f; ExtrapolationType extrapolationType; if (val == Vector3.zero || val2 == Vector3.zero) { extrapolationType = ExtrapolationType.None; } else { Vector3 normalized = ((Vector3)(ref val)).normalized; Vector3 normalized2 = ((Vector3)(ref val2)).normalized; extrapolationType = ((Vector3.Dot(normalized, normalized2) > 0.98f) ? ExtrapolationType.Linear : ExtrapolationType.Polar); } float num = 1f / Time.fixedDeltaTime; predictedPosition = targetPosition0; switch (extrapolationType) { case ExtrapolationType.Polar: { Vector3 position = bodyTransform.position; Vector3 val3 = Vector2.op_Implicit(Util.Vector3XZToVector2XY(targetPosition2 - position)); Vector3 val4 = Vector2.op_Implicit(Util.Vector3XZToVector2XY(targetPosition1 - position)); Vector3 val5 = Vector2.op_Implicit(Util.Vector3XZToVector2XY(targetPosition0 - position)); float magnitude = ((Vector3)(ref val3)).magnitude; float magnitude2 = ((Vector3)(ref val4)).magnitude; float magnitude3 = ((Vector3)(ref val5)).magnitude; float num2 = Vector2.SignedAngle(Vector2.op_Implicit(val3), Vector2.op_Implicit(val4)) * num; float num3 = Vector2.SignedAngle(Vector2.op_Implicit(val4), Vector2.op_Implicit(val5)) * num; float num4 = (magnitude2 - magnitude) * num; float num5 = (magnitude3 - magnitude2) * num; float num6 = (num2 + num3) * 0.5f; float num7 = (num4 + num5) * 0.5f; float num8 = magnitude3 + num7 * time; if (num8 < 0f) { num8 = 0f; } Vector2 val6 = Util.RotateVector2(Vector2.op_Implicit(val5), num6 * time); val6 *= num8 * magnitude3; predictedPosition = position; predictedPosition.x += val6.x; predictedPosition.z += val6.y; break; } case ExtrapolationType.Linear: predictedPosition = targetPosition0 + val2 * (time * num); break; } RaycastHit val7 = default(RaycastHit); if (Physics.Raycast(new Ray(predictedPosition + Vector3.up * 1f, Vector3.down), ref val7, 200f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask), (QueryTriggerInteraction)1)) { predictedPosition = ((RaycastHit)(ref val7)).point; return true; } return false; } } private static Material onFireMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Common/matOnFire.mat").WaitForCompletion(); private static GameObject genericDelayBlast = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/GenericDelayBlast.prefab").WaitForCompletion(); private static GameObject magmaOrb = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/MagmaWorm/MagmaOrbExplosion.prefab").WaitForCompletion(); public static float entryDuration = 1.5f; public static float fireDuration = 0.1f; public static float exitDuration = 0.15f; public static float maxDistance = 128f; public static float trackingDuration = 0.85f; public static float pillarDamageCoefficient = 6f; public static float pillarForce = 1000f; public static float pillarVerticalForce = 500f; public static float pillarRadius = 5f; public static float pillarDelay = 1.3f; private bool hasShownPrediction; private bool predictionOk; protected Vector3 predictedTargetPosition; private AimAnimator aimAnimator; private GameObject chargeInstance; private float stopwatch; private SubState subState; private Predictor predictor; private static GameObject predictionEffect => Assets.flamePillarPredictionEffect; public override void OnEnter() { //IL_0220: Unknown result type (might be due to invalid IL or missing references) //IL_0227: Expected O, but got Unknown //IL_0229: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Unknown result type (might be due to invalid IL or missing references) //IL_027c: Unknown result type (might be due to invalid IL or missing references) //IL_0281: Unknown result type (might be due to invalid IL or missing references) //IL_0287: Unknown result type (might be due to invalid IL or missing references) //IL_028c: Unknown result type (might be due to invalid IL or missing references) //IL_0295: Unknown result type (might be due to invalid IL or missing references) //IL_029a: Unknown result type (might be due to invalid IL or missing references) //IL_02aa: Unknown result type (might be due to invalid IL or missing references) //IL_0256: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); stopwatch = 0f; if (Object.op_Implicit((Object)(object)((EntityState)this).modelLocator)) { ChildLocator component = ((Component)((EntityState)this).modelLocator.modelTransform).GetComponent<ChildLocator>(); aimAnimator = ((Component)((EntityState)this).modelLocator.modelTransform).GetComponent<AimAnimator>(); if (Object.op_Implicit((Object)(object)aimAnimator)) { ((Behaviour)aimAnimator).enabled = true; } if (Object.op_Implicit((Object)(object)component)) { Transform modelTransform = ((EntityState)this).GetModelTransform(); if (Object.op_Implicit((Object)(object)modelTransform)) { CharacterModel component2 = ((Component)modelTransform).gameObject.GetComponent<CharacterModel>(); if (Object.op_Implicit((Object)(object)component2)) { if (component2.temporaryOverlays == null) { component2.temporaryOverlays = new List<TemporaryOverlayInstance>(); } TemporaryOverlayInstance val = TemporaryOverlayManager.AddOverlay(((Component)component2).gameObject); val.duration = 3f; val.animateShaderAlpha = true; val.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f); val.destroyComponentOnEnd = true; val.originalMaterial = onFireMat; val.inspectorCharacterModel = component2; val.Start(); } } Transform val2 = component.FindChild("MuzzleMouth"); if (Object.op_Implicit((Object)(object)val2) && Object.op_Implicit((Object)(object)ChargeMegaFireball.chargeEffectPrefab)) { chargeInstance = Object.Instantiate<GameObject>(ChargeMegaFireball.chargeEffectPrefab, val2.position, val2.rotation); chargeInstance.transform.parent = val2; ScaleParticleSystemDuration component3 = chargeInstance.GetComponent<ScaleParticleSystemDuration>(); if (Object.op_Implicit((Object)(object)component3)) { component3.newDuration = 0.5f; } } } } ((EntityState)this).PlayAnimation("Gesture, Override", "PrepFlamebreath", "PrepFlamebreath.playbackRate", entryDuration, 0f); subState = SubState.Prep; Util.PlaySound("sfx_direseeker_woosh", ((EntityState)this).gameObject); if (NetworkServer.active) { BullseyeSearch val3 = new BullseyeSearch(); val3.teamMaskFilter = TeamMask.allButNeutral; if (Object.op_Implicit((Object)(object)((EntityState)this).teamComponent)) { ((TeamMask)(ref val3.teamMaskFilter)).RemoveTeam(((EntityState)this).teamComponent.teamIndex); } val3.maxDistanceFilter = maxDistance; val3.maxAngleFilter = 90f; Ray aimRay = ((BaseState)this).GetAimRay(); val3.searchOrigin = ((Ray)(ref aimRay)).origin; val3.searchDirection = ((Ray)(ref aimRay)).direction; val3.filterByLoS = false; val3.sortMode = (SortMode)2; val3.RefreshCandidates(); HurtBox val4 = val3.GetResults().FirstOrDefault(); if (Object.op_Implicit((Object)(object)val4)) { predictor = new Predictor(((EntityState)this).transform); predictor.SetTargetTransform(((Component)val4).transform); } } } public override void OnExit() { ((EntityState)this).OnExit(); if (Object.op_Implicit((Object)(object)chargeInstance)) { EntityState.Destroy((Object)(object)chargeInstance); } ((EntityState)this).PlayCrossfade("Gesture, Override", "BufferEmpty", 0.1f); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); stopwatch += ((EntityState)this).GetDeltaTime(); switch (subState) { case SubState.Prep: if (predictor != null) { predictor.Update(); } if (stopwatch <= trackingDuration) { if (predictor != null) { predictionOk = predictor.GetPredictedTargetPosition(pillarDelay, out predictedTargetPosition); } } else if (!hasShownPrediction) { hasShownPrediction = true; PlacePredictedAttack(); } if (stopwatch >= entryDuration) { predictor = null; subState = SubState.FirePillar; stopwatch = 0f; ((EntityState)this).PlayAnimation("Gesture, Override", "Flamebreath", "Flamebreath.playbackRate", entryDuration, 0f); if (Object.op_Implicit((Object)(object)chargeInstance)) { EntityState.Destroy((Object)(object)chargeInstance); } } break; case SubState.FirePillar: if (stopwatch >= fireDuration) { subState = SubState.Exit; stopwatch = 0f; } break; case SubState.Exit: if (stopwatch >= exitDuration) { ((EntityState)this).PlayCrossfade("Gesture, Override", "ExitFlamebreath", "ExitFlamebreath.playbackRate", fireDuration, 0.1f); if (((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } break; } } protected virtual void PlacePredictedAttack() { //IL_0003: Unknown result type (might be due to invalid IL or missing references) PlaceSingleDelayBlast(predictedTargetPosition, 0f); } protected void PlaceSingleDelayBlast(Vector3 position, float delay) { //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_000c: 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_001e: 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) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Expected O, but got Unknown //IL_0035: 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_0049: 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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: 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_00ec: Unknown result type (might be due to invalid IL or missing references) EffectManager.SpawnEffect(predictionEffect, new EffectData { origin = position, scale = pillarRadius, rotation = Quaternion.identity }, true); GameObject val = Object.Instantiate<GameObject>(genericDelayBlast, position, Quaternion.identity); DelayBlast component = val.GetComponent<DelayBlast>(); component.position = position; component.baseDamage = base.damageStat * pillarDamageCoefficient; component.baseForce = pillarForce; component.bonusForce = pillarVerticalForce * Vector3.up; component.attacker = ((EntityState)this).gameObject; component.radius = pillarRadius; component.crit = ((BaseState)this).RollCrit(); component.maxTimer = entryDuration - trackingDuration + delay; component.falloffModel = (FalloffModel)0; component.explosionEffect = magmaOrb; component.maxTimer = pillarDelay; component.damageType.damageSource = (DamageSource)4; val.GetComponent<TeamFilter>().teamIndex = TeamComponent.GetObjectTeam(component.attacker); } } public class FlamePillars : FlamePillar { protected override void PlacePredictedAttack() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_004d: 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_0054: 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_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: 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) RaycastHit val4 = default(RaycastHit); for (int i = 0; i < 2; i++) { int num = 0; Vector3 val = predictedTargetPosition; Vector3 val2 = Quaternion.Euler(0f, Random.Range(0f, 360f), 0f) * Vector3.forward; for (int j = -(2 * FireGoldFist.fistCount / 2); j < 2 * FireGoldFist.fistCount / 2; j++) { Vector3 val3 = val + val2 * FireGoldFist.distanceBetweenFists * (float)j; float num2 = 60f; if (Physics.Raycast(new Ray(val3 + Vector3.up * (num2 / 2f), Vector3.down), ref val4, num2, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask), (QueryTriggerInteraction)1)) { val3 = ((RaycastHit)(ref val4)).point; } PlaceSingleDelayBlast(val3, FireGoldFist.delayBetweenFists * (float)num); num++; } } } } public class Flamethrower : BaseState { private float lastUpdateTime; public static GameObject flamethrowerEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Lemurian/FlamebreathEffect.prefab").WaitForCompletion(); public static float baseEntryDuration = 0.5f; public static float baseExitDuration = 0.75f; public static float baseFlamethrowerDuration = 2.25f; private float tickDamageCoefficient; private float flamethrowerStopwatch; private float stopwatch; private float entryDuration; private float exitDuration; private float flamethrowerDuration; private bool hasBegunFlamethrower; private ChildLocator childLocator; private Transform flamethrowerEffectInstance; private Transform secondaryFlamethrowerEffectInstance; private Transform muzzleTransform; private bool isCrit; private const float flamethrowerEffectBaseDistance = 16f; public override void OnEnter() { ((BaseState)this).OnEnter(); lastUpdateTime = Time.time; stopwatch = 0f; entryDuration = baseEntryDuration / base.attackSpeedStat; exitDuration = baseExitDuration / base.attackSpeedStat; flamethrowerDuration = baseFlamethrowerDuration; Transform modelTransform = ((EntityState)this).GetModelTransform(); if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody)) { ((EntityState)this).characterBody.SetAimTimer(entryDuration + flamethrowerDuration + 1f); } if (Object.op_Implicit((Object)(object)modelTransform)) { childLocator = ((Component)modelTransform).GetComponent<ChildLocator>(); ((Behaviour)((Component)modelTransform).GetComponent<AimAnimator>()).enabled = true; } float num = flamethrowerDuration * Flamebreath.tickFrequency; tickDamageCoefficient = Flamebreath.totalDamageCoefficient / num; if (((EntityState)this).isAuthority && Object.op_Implicit((Object)(object)((EntityState)this).characterBody)) { isCrit = Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master); } ((EntityState)this).PlayAnimation("Gesture, Override", "PrepFlamebreath", "PrepFlamebreath.playbackRate", entryDuration, 0f); } public override void OnExit() { Util.PlaySound(Flamebreath.endAttackSoundString, ((EntityState)this).gameObject); ((EntityState)this).PlayCrossfade("Gesture, Override", "BufferEmpty", 0.1f); if (Object.op_Implicit((Object)(object)flamethrowerEffectInstance)) { EntityState.Destroy((Object)(object)((Component)flamethrowerEffectInstance).gameObject); } if (Object.op_Implicit((Object)(object)secondaryFlamethrowerEffectInstance)) { EntityState.Destroy((Object)(object)((Component)secondaryFlamethrowerEffectInstance).gameObject); } ((EntityState)this).OnExit(); } private void FireFlame(string muzzleString) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_008a: 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_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: 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_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: 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_010a: Expected O, but got Unknown //IL_0111: Unknown result type (might be due to invalid IL or missing references) if (((EntityState)this).isAuthority && Object.op_Implicit((Object)(object)muzzleTransform)) { BulletAttack val = new BulletAttack { owner = ((EntityState)this).gameObject, weapon = ((EntityState)this).gameObject, origin = muzzleTransform.position, aimVector = muzzleTransform.forward, minSpread = 0f, maxSpread = Flamebreath.maxSpread, damage = tickDamageCoefficient * base.damageStat, force = Flamebreath.force, muzzleName = muzzleString, hitEffectPrefab = Flamebreath.impactEffectPrefab, isCrit = isCrit, radius = Flamebreath.radius * 3f, falloffModel = (FalloffModel)0, stopperMask = ((LayerIndex)(ref LayerIndex.world)).mask, procCoefficient = Flamebreath.procCoefficientPerTick, maxDistance = Flamebreath.maxDistance, smartCollision = true, damageType = DamageTypeCombo.op_Implicit((DamageType)8192) }; val.damageType.damageSource = (DamageSource)2; val.Fire(); } } public override void FixedUpdate() { //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_016b: 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_018b: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); float num = Time.time - lastUpdateTime; lastUpdateTime = Time.time; stopwatch += num; if (stopwatch >= entryDuration && stopwatch < entryDuration + flamethrowerDuration && !hasBegunFlamethrower) { hasBegunFlamethrower = true; Util.PlaySound(Flamebreath.startAttackSoundString, ((EntityState)this).gameObject); ((EntityState)this).PlayAnimation("Gesture, Override", "Flamebreath", "Flamebreath.playbackRate", flamethrowerDuration, 0f); if (Object.op_Implicit((Object)(object)childLocator)) { muzzleTransform = childLocator.FindChild("MuzzleMouth"); if (Object.op_Implicit((Object)(object)Flamebreath.flamethrowerEffectPrefab)) { flamethrowerEffectInstance = Object.Instantiate<GameObject>(Flamebreath.flamethrowerEffectPrefab, muzzleTransform).transform; ((Component)flamethrowerEffectInstance).transform.localPosition = Vector3.zero; ((Component)flamethrowerEffectInstance).GetComponent<ScaleParticleSystemDuration>().newDuration = flamethrowerDuration; } if (Object.op_Implicit((Object)(object)flamethrowerEffectPrefab)) { secondaryFlamethrowerEffectInstance = Object.Instantiate<GameObject>(flamethrowerEffectPrefab, muzzleTransform).transform; Transform transform = ((Component)secondaryFlamethrowerEffectInstance).transform; transform.localScale *= 1.25f; ((Component)secondaryFlamethrowerEffectInstance).transform.localPosition = Vector3.zero; ((Component)secondaryFlamethrowerEffectInstance).GetComponent<ScaleParticleSystemDuration>().newDuration = flamethrowerDuration; } } } if (stopwatch >= entryDuration + flamethrowerDuration && hasBegunFlamethrower) { hasBegunFlamethrower = false; ((EntityState)this).PlayCrossfade("Gesture, Override", "ExitFlamebreath", "ExitFlamebreath.playbackRate", exitDuration, 0.1f); } if (hasBegunFlamethrower) { flamethrowerStopwatch += num; if (flamethrowerStopwatch > 1f / Flamebreath.tickFrequency) { flamethrowerStopwatch -= 1f / Flamebreath.tickFrequency; FireFlame("MuzzleCenter"); } } else if (Object.op_Implicit((Object)(object)flamethrowerEffectInstance)) { EntityState.Destroy((Object)(object)((Component)flamethrowerEffectInstance).gameObject); } if (stopwatch >= flamethrowerDuration + entryDuration + exitDuration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class SpawnState : EntityState { private float lastUpdateTime; public static float duration = 2.5f; private float effectStopwatch; public override void OnEnter() { ((EntityState)this).OnEnter(); lastUpdateTime = Time.time; ((EntityState)this).GetModelAnimator(); Util.PlaySound(SpawnState.spawnSoundString, ((EntityState)this).gameObject); Util.PlaySound("sfx_direseeker_spawn", ((EntityState)this).gameObject); ((EntityState)this).PlayAnimation("Body", "Spawn", "Spawn.playbackRate", duration, 0f); EffectManager.SimpleMuzzleFlash(SpawnState.spawnEffectPrefab, ((EntityState)this).gameObject, "SpawnEffectOrigin", false); effectStopwatch = 0.7f; } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); float num = Time.time - lastUpdateTime; lastUpdateTime = Time.time; effectStopwatch -= num; if ((effectStopwatch <= 0f) & (((EntityState)this).fixedAge < 0.5f * duration)) { PlaySpawnEffect(); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { base.outer.SetNextStateToMain(); } } private void PlaySpawnEffect() { //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_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: 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_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Expected O, but got Unknown effectStopwatch = 0.1f; for (int i = 0; i <= 5; i++) { Vector3 origin = ((EntityState)this).characterBody.footPosition + Random.insideUnitSphere * 22f; origin.y = ((EntityState)this).characterBody.footPosition.y; EffectManager.SpawnEffect(SpawnState.spawnEffectPrefab, new EffectData { origin = origin, scale = 4f }, true); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0003: 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) return (InterruptPriority)9; } } } namespace DireseekerMod.States.Sun { public abstract class SunBase : BaseState { protected DireseekerSunController sunController { get; private set; } protected Transform vfxRoot { get; private set; } protected virtual bool shouldEnableSunController => false; public virtual bool shouldSpawnEffect => true; protected abstract float desiredVfxScale { get; } public override void OnEnter() { ((BaseState)this).OnEnter(); sunController = ((EntityState)this).GetComponent<DireseekerSunController>(); ((Behaviour)sunController).enabled = shouldEnableSunController; vfxRoot = ((EntityState)this).transform.Find("VfxRoot"); SetVfxScale(desiredVfxScale); } public override void Update() { ((EntityState)this).Update(); SetVfxScale(desiredVfxScale); } private void SetVfxScale(float newScale) { //IL_0026: 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) newScale = Mathf.Max(newScale, 0.01f); if (Object.op_Implicit((Object)(object)vfxRoot) && ((Component)vfxRoot).transform.localScale.x != newScale) { ((Component)vfxRoot).transform.localScale = new Vector3(newScale, newScale, newScale); } } } public class SunDeath : SunBase { public static float baseDuration; private float duration; public override bool shouldSpawnEffect => false; protected override float desiredVfxScale => 1f - Mathf.Clamp01(((EntityState)this).age / duration); public override void OnEnter() { base.OnEnter(); duration = baseDuration; } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (NetworkServer.active && ((EntityState)this).fixedAge >= duration) { NetworkServer.Destroy(((EntityState)this).gameObject); } } } public class SunMain : SunBase { private GenericOwnership ownership; protected override bool shouldEnableSunController => true; public override bool shouldSpawnEffect => false; protected override float desiredVfxScale => 1f; public override void OnEnter() { base.OnEnter(); ownership = ((EntityState)this).GetComponent<GenericOwnership>(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority && !Object.op_Implicit((Object)(object)ownership.ownerObject)) { ((EntityState)this).outer.SetNextState((EntityState)(object)new SunDeath()); } } } public class SunSpawn : SunBase { public static float baseDuration = 0.6f; private float duration; protected override float desiredVfxScale => Mathf.Clamp01(((EntityState)this).age / duration); public override void OnEnter() { base.OnEnter(); duration = baseDuration; } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration) { ((EntityState)this).outer.SetNextState((EntityState)(object)new SunMain()); } } } } namespace DireseekerMod.States.Missions.DireseekerEncounter { public class Listening : EntityState { public static float delayBeforeBeginningEncounter = 3f; public static int buttonsPressedToTriggerEncounter = 4; private ScriptedCombatEncounter scriptedCombatEncounter; private List<DireseekerButtonController> buttonList = new List<DireseekerButtonController>(); private const float delayBeforeRegisteringButtons = 2f; private bool hasRegisteredButtons; private int previousPressedButtonCount; private bool beginEncounterCountdown; private float encounterCountdown; public override void OnEnter() { ((EntityState)this).OnEnter(); scriptedCombatEncounter = ((EntityState)this).GetComponent<ScriptedCombatEncounter>(); } public override void FixedUpdate() { //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_00c0: Expected O, but got Unknown //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_0108: Expected O, but got Unknown //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Expected O, but got Unknown ((EntityState)this).FixedUpdate(); if (!NetworkServer.active) { return; } if (((EntityState)this).fixedAge >= 2f) { RegisterButtons(); } if (!hasRegisteredButtons) { return; } int num = 0; for (int i = 0; i < buttonList.Count; i++) { if (buttonList[i].isPressedServer) { num++; } } int num2 = buttonsPressedToTriggerEncounter - 1; if (previousPressedButtonCount < num2 && num >= num2) { Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage { baseToken = "DIRESEEKER_SPAWN_WARNING" }); } if (num >= buttonsPressedToTriggerEncounter && !beginEncounterCountdown) { encounterCountdown = delayBeforeBeginningEncounter; beginEncounterCountdown = true; Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage { baseToken = "DIRESEEKER_SPAWN_BEGIN" }); } if (beginEncounterCountdown) { encounterCountdown -= Time.fixedDeltaTime; if (encounterCountdown <= 0f) { scriptedCombatEncounter.BeginEncounter(); base.outer.SetNextState((EntityState)new Idle()); } } previousPressedButtonCount = num; } private void RegisterButtons() { if (!hasRegisteredButtons) { DireseekerButtonController[] array = Object.FindObjectsOfType<DireseekerButtonController>(); foreach (DireseekerButtonController item in array) { buttonList.Add(item); } hasRegisteredButtons = true; } } } } namespace DireseekerMod.Modules { public static class Assets { public static GameObject roarEffect; public static GameObject sunPrefab; public static AssetBundle mainAssetBundle; public static AssetBundle altAssetBundle; public static Texture bossPortrait; public static Texture charPortrait; public static GameObject flamePillarPredictionEffect; public static GameObject direseekerEncounter; public static GameObject direseekerButton; public static void PopulateAssets() { //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_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_0230: Unknown result type (might be due to invalid IL or missing references) //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_0282: Unknown result type (might be due to invalid IL or missing references) //IL_0287: Unknown result type (might be due to invalid IL or missing references) //IL_02e3: Unknown result type (might be due to invalid IL or missing references) //IL_02e8: Unknown result type (might be due to invalid IL or missing references) //IL_0393: Unknown result type (might be due to invalid IL or missing references) //IL_0398: Unknown result type (might be due to invalid IL or missing references) //IL_0462: Unknown result type (might be due to invalid IL or missing references) //IL_0467: Unknown result type (might be due to invalid IL or missing references) //IL_0489: Unknown result type (might be due to invalid IL or missing references) //IL_0493: Unknown result type (might be due to invalid IL or missing references) //IL_0506: Unknown result type (might be due to invalid IL or missing references) //IL_0510: Unknown result type (might be due to invalid IL or missing references) //IL_0534: Unknown result type (might be due to invalid IL or missing references) //IL_053e: Unknown result type (might be due to invalid IL or missing references) //IL_0585: Unknown result type (might be due to invalid IL or missing references) //IL_058a: Unknown result type (might be due to invalid IL or missing references) //IL_05b2: Unknown result type (might be due to invalid IL or missing references) //IL_05b7: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)mainAssetBundle == (Object)null) { using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Direseeker.direseeker"); mainAssetBundle = AssetBundle.LoadFromStream(stream); } if ((Object)(object)altAssetBundle == (Object)null) { using Stream stream2 = Assembly.GetExecutingAssembly().GetManifestResourceStream("Direseeker.direseeker2"); altAssetBundle = AssetBundle.LoadFromStream(stream2); } using (Stream stream3 = Assembly.GetExecutingAssembly().GetManifestResourceStream("Direseeker.direseeker_bank2.bnk")) { byte[] array = new byte[stream3.Length]; stream3.Read(array, 0, array.Length); SoundBanks.Add(array); } bossPortrait = (Texture)(object)altAssetBundle.LoadAsset<Sprite>("texDireseekerIcon").texture; charPortrait = (Texture)(object)mainAssetBundle.LoadAsset<Sprite>("texDireseekerPlayerIcon").texture; direseekerEncounter = mainAssetBundle.LoadAsset<GameObject>("BossEncounter"); direseekerEncounter.AddComponent<NetworkIdentity>(); PrefabAPI.RegisterNetworkPrefab(direseekerEncounter); direseekerButton = mainAssetBundle.LoadAsset<GameObject>("DireseekerButton"); Shader shader = Addressables.LoadAssetAsync<Shader>((object)"RoR2/Base/Shaders/HGStandard.shader").WaitForCompletion(); Material material = ((Renderer)direseekerButton.GetComponentInChildren<SkinnedMeshRenderer>()).material; material.shader = shader; direseekerButton.AddComponent<DireseekerButtonController>(); direseekerButton.AddComponent<NetworkIdentity>(); PrefabAPI.RegisterNetworkPrefab(direseekerButton); roarEffect = altAssetBundle.LoadAsset<GameObject>("DireseekerRoar"); ((Renderer)((Component)roarEffect.transform.Find("Nova")).GetComponent<ParticleSystemRenderer>()).material = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Common/matTeamAreaIndicatorFullMonster.mat").WaitForCompletion(); ((Renderer)((Component)roarEffect.transform.Find("Distortion")).GetComponent<ParticleSystemRenderer>()).material = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Common/VFX/matDistortion.mat").WaitForCompletion(); GameObject gameObject = ((Component)roarEffect.transform.Find("PP")).gameObject; gameObject.layer = 20; PostProcessVolume val = gameObject.AddComponent<PostProcessVolume>(); val.sharedProfile = Addressables.LoadAssetAsync<PostProcessProfile>((object)"RoR2/GlobalContent/ppLocalBlur.asset").WaitForCompletion(); val.blendDistance = 120f; val.priority = 6f; val.weight = 1f; val.isGlobal = false; PostProcessDuration val2 = gameObject.AddComponent<PostProcessDuration>(); val2.ppVolume = val; val2.ppWeightCurve = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ImpBoss/ImpBossBlink.prefab").WaitForCompletion().GetComponentInChildren<PostProcessDuration>() .ppWeightCurve; val2.maxDuration = 5f; val2.destroyOnEnd = true; SphereCollider val3 = gameObject.AddComponent<SphereCollider>(); ((Collider)val3).contactOffset = 0.01f; ((Collider)val3).isTrigger = true; val3.radius = 120f; flamePillarPredictionEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/Items/MeteorAttackOnHighDamage/RunicMeteorStrikePredictionEffect.prefab").WaitForCompletion(), "DireseekerPredictionEffect", true); flamePillarPredictionEffect.GetComponent<DestroyOnTimer>().duration = FlamePillar.pillarDelay; AnimateShaderAlpha[] componentsInChildren = flamePillarPredictionEffect.GetComponentsInChildren<AnimateShaderAlpha>(true); for (int i = 0; i < componentsInChildren.Length; i++) { componentsInChildren[i].timeMax = FlamePillar.pillarDelay; } ObjectScaleCurve[] componentsInChildren2 = flamePillarPredictionEffect.GetComponentsInChildren<ObjectScaleCurve>(true); for (int j = 0; j < componentsInChildren2.Length; j++) { componentsInChildren2[j].timeMax = FlamePillar.pillarDelay; } ContentAddition.AddEffect(flamePillarPredictionEffect); sunPrefab = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Grandparent/GrandParentSun.prefab").WaitForCompletion(), "DireseekerSun", true); DireseekerSunController direseekerSunController = sunPrefab.AddComponent<DireseekerSunController>(); GrandParentSunController component = sunPrefab.GetComponent<GrandParentSunController>(); direseekerSunController.buffApplyEffect = component.buffApplyEffect; direseekerSunController.buffDef = component.buffDef; direseekerSunController.activeLoopDef = component.activeLoopDef; direseekerSunController.damageLoopDef = component.damageLoopDef; direseekerSunController.stopSoundName = component.stopSoundName; Object.DestroyImmediate((Object)(object)component); sunPrefab.AddComponent<DireseekerSunNetworkController>(); Object.DestroyImmediate((Object)(object)sunPrefab.GetComponent<EntityStateMachine>()); sunPrefab.AddComponent<EntityStateMachine>(); EntityStateMachine component2 = sunPrefab.GetComponent<EntityStateMachine>(); ((Object)component2).name = "Body"; component2.initialStateType = new SerializableEntityStateType(typeof(SunSpawn)); sunPrefab.GetComponent<NetworkStateMachine>().stateMachines[0] = component2; sunPrefab.transform.localScale = Vector3.one * 1f; Light component3 = ((Component)sunPrefab.transform.Find("VfxRoot/LightSpinner/LightSpinner/Point Light")).GetComponent<Light>(); component3.intensity *= 0.1f; ((Component)sunPrefab.transform.Find("VfxRoot/LightSpinner/LightSpinner/Point Light")).GetComponent<Light>().range = 200f; ((Component)sunPrefab.transform.Find("VfxRoot/Mesh/SunMesh")).transform.localScale = Vector3.one * 1f; ((Component)sunPrefab.transform.Find("VfxRoot/Mesh/AreaIndicator")).transform.localScale = Vector3.one * 180f; Object.DestroyImmediate((Object)(object)((Component)sunPrefab.transform.Find("VfxRoot/Mesh/SunMesh/MoonMesh")).gameObject); ParticleSystem component4 = ((Component)sunPrefab.transform.Find("VfxRoot/Particles/Sparks")).GetComponent<ParticleSystem>(); EmissionModule emission = component4.emission; ((EmissionModule)(ref emission)).enabled = false; ParticleSystem component5 = ((Component)sunPrefab.transform.Find("VfxRoot/Particles/Goo, Drip")).GetComponent<ParticleSystem>(); EmissionModule emission2 = component5.emission; ((EmissionModule)(ref emission2)).enabled = false; } public static void UpdateAssets() { //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: 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_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) GameObject gameObject = ((Component)direseekerEncounter.transform.GetChild(0)).gameObject; gameObject.AddComponent<NetworkIdentity>(); PrefabAPI.RegisterNetworkPrefab(gameObject); ScriptedCombatEncounter val = gameObject.AddComponent<ScriptedCombatEncounter>(); direseekerEncounter.transform.GetChild(0).GetChild(1).Translate(0f, 1f, 0f); val.spawns = (SpawnInfo[])(object)new SpawnInfo[1] { new SpawnInfo { explicitSpawnPosition = direseekerEncounter.transform.GetChild(0).GetChild(0), spawnCard = (SpawnCard)(object)SpawnCards.bossSpawnCard } }; val.randomizeSeed = false; val.teamIndex = (TeamIndex)2; val.spawnOnStart = false; val.grantUniqueBonusScaling = true; BossGroup val2 = gameObject.AddComponent<BossGroup>(); val2.bossDropChance = 1f; val2.dropPosition = direseekerEncounter.transform.GetChild(0).GetChild(1); val2.forceTier3Reward = true; val2.scaleRewardsByPlayerCount = true; val2.shouldDisplayHealthBarOnHud = true; CombatSquad val3 = gameObject.AddComponent<CombatSquad>(); EntityStateMachine val4 = gameObject.AddComponent<EntityStateMachine>(); val4.initialStateType = new SerializableEntityStateType(typeof(Listening)); val4.mainStateType = new SerializableEntityStateType(typeof(Listening)); } private static GameObject LoadEffect(string resourceName, string soundName) { //IL_002b: 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) GameObject val = mainAssetBundle.LoadAsset<GameObject>(resourceName); val.AddComponent<DestroyOnTimer>().duration = 12f; val.AddComponent<NetworkIdentity>(); val.AddComponent<VFXAttributes>().vfxPriority = (VFXPriority)2; EffectComponent val2 = val.AddComponent<EffectComponent>(); val2.applyScale = false; val2.effectIndex = (EffectIndex)(-1); val2.parentToReferencedTransform = true; val2.positionAtReferencedTransform = true; val2.soundName = soundName; ContentAddition.AddEffect(val); return val; } } public class Hooks { public Vector3[] buttonPosition; public Vector3[] buttonRotation; private void InitButtonPositions() { //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_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_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_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_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_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_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) buttonPosition = (Vector3[])(object)new Vector3[7] { new Vector3(2f, -140.5f, -439f), new Vector3(110f, -179.2f, -150f), new Vector3(203f, -75f, -195.5f), new Vector3(51f, -86f, -200.6f), new Vector3(-154f, -153f, -103.6f), new Vector3(-0.5f, -135.5f, -12.5f), new Vector3(-37.5f, -127f, -287.8f) }; buttonRotation = (Vector3[])(object)new Vector3[7] { new Vector3(0f, 60f, 5f), new Vector3(0f, 45f, 0f), new Vector3(290f, 340f, 0f), new Vector3(270f, 0f, 0f), new Vector3(270f, 0f, 0f), new Vector3(0f, 0f, 0f), new Vector3(0f, 90f, 110f) }; } public void ApplyHooks() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown InitButtonPositions(); SceneDirector.Start += (hook_Start)delegate(orig_Start orig, SceneDirector self) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) if (NetworkServer.active) { Scene activeScene = SceneManager.GetActiveScene(); if (((Scene)(ref activeScene)).name == "dampcavesimple") { Object.Destroy((Object)(object)((Component)GameObject.Find("HOLDER: Newt Statues and Preplaced Chests").transform.Find("GoldChest")).gameObject); for (int i = 0; i < buttonPosition.Length; i++) { GameObject val = Object.Instantiate<GameObject>(Assets.direseekerButton); val.transform.position = buttonPosition[i]; val.transform.rotation = Quaternion.Euler(buttonRotation[i]); NetworkServer.Spawn(val); } GameObject val2 = Object.Instantiate<GameObject>(Assets.direseekerEncounter); NetworkServer.Spawn(val2); } } orig.Invoke(self); }; } } public static class Prefabs { public static GameObject direseekerBodyPrefab; public static GameObject masterPrefab; public static void CreatePrefab() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Unknown result type (might be due to invalid IL or missing references) //IL_027d: Unknown result type (might be due to invalid IL or missing references) //IL_0282: Unknown result type (might be due to invalid IL or missing references) //IL_02a2: Unknown result type (might be due to invalid IL or missing references) //IL_02b2: Unknown result type (might be due to invalid IL or missing references) //IL_02b7: Unknown result type (might be due to invalid IL or missing references) //IL_0306: Unknown result type (might be due to invalid IL or missing references) //IL_0326: Unknown result type (might be due to invalid IL or missing references) //IL_032b: Unknown result type (might be due to invalid IL or missing references) //IL_034b: Unknown result type (might be due to invalid IL or missing references) //IL_0385: Unknown result type (might be due to invalid IL or missing references) //IL_03a6: Unknown result type (might be due to invalid IL or missing references) //IL_03ab: Unknown result type (might be due to invalid IL or missing references) //IL_03cc: Unknown result type (might be due to invalid IL or missing references) //IL_0406: Unknown result type (might be due to invalid IL or missing references) //IL_0427: Unknown result type (might be due to invalid IL or missing references) //IL_042c: Unknown result type (might be due to invalid IL or missing references) //IL_044d: Unknown result type (might be due to invalid IL or missing references) //IL_04b0: Unknown result type (might be due to invalid IL or missing references) //IL_04b5: Unknown result type (might be due to invalid IL or missing references) //IL_04be: Unknown result type (might be due to invalid IL or missing references) //IL_04c5: Expected O, but got Unknown //IL_0535: Unknown result type (might be due to invalid IL or missing references) //IL_053a: Unknown result type (might be due to invalid IL or missing references) //IL_0553: Unknown result type (might be due to invalid IL or missing references) //IL_0558: Unknown result type (might be due to invalid IL or missing references) //IL_05b2: Unknown result type (might be due to invalid IL or missing references) //IL_05cd: Unknown result type (might be due to invalid IL or missing references) //IL_05da: Unknown result type (might be due to invalid IL or missing references) //IL_05dc: Unknown result type (might be due to invalid IL or missing references) //IL_05e5: Unknown result type (might be due to invalid IL or missing references) //IL_0604: Unknown result type (might be due to invalid IL or missing references) //IL_0611: Unknown result type (might be due to invalid IL or missing references) //IL_0613: Unknown result type (might be due to invalid IL or missing references) //IL_061c: Unknown result type (might be due to invalid IL or missing references) //IL_063b: Unknown result type (might be due to invalid IL or missing references) //IL_0648: Unknown result type (might be due to invalid IL or missing references) //IL_064a: Unknown result type (might be due to invalid IL or missing references) //IL_0692: Unknown result type (might be due to invalid IL or missing references) //IL_0697: Unknown result type (might be due to invalid IL or missing references) direseekerBodyPrefab = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LemurianBruiser/LemurianBruiserBody.prefab").WaitForCompletion(), "DireseekerBody", true); Rigidbody component = direseekerBodyPrefab.GetComponent<Rigidbody>(); if (Object.op_Implicit((Object)(object)component)) { component.mass = 900f; } Object.Destroy((Object)(object)direseekerBodyPrefab.GetComponent<SetStateOnHurt>()); CharacterBody component2 = direseekerBodyPrefab.GetComponent<CharacterBody>(); ((Object)component2).name = "DireseekerBossBody"; component2.baseNameToken = "DIRESEEKER_BOSS_BODY_NAME"; component2.subtitleNameToken = "DIRESEEKER_BOSS_BODY_SUBTITLE"; component2.baseMoveSpeed = 11f; component2.baseMaxHealth = 2800f; component2.levelMaxHealth = component2.baseMaxHealth * 0.3f; component2.baseDamage = 20f; component2.levelDamage = component2.baseDamage * 0.2f; component2.isChampion = true; component2.portraitIcon = Assets.bossPortrait; component2.bodyFlags = (BodyFlags)(component2.bodyFlags | 0x80000); component2.bodyFlags = (BodyFlags)(component2.bodyFlags | 0x200); direseekerBodyPrefab.GetComponent<SfxLocator>().deathSound = "sfx_direseeker_death"; Transform modelBaseTransform = direseekerBodyPrefab.GetComponent<ModelLocator>().modelBaseTransform; modelBaseTransform.localScale *= 1.5f; direseekerBodyPrefab.GetComponent<ModelLocator>().modelBaseTransform.localPosition = Vector3.up * -5.5f; KinematicCharacterMotor[] componentsInChildren = direseekerBodyPrefab.GetComponentsInChildren<KinematicCharacterMotor>(); foreach (KinematicCharacterMotor val in componentsInChildren) { val.SetCapsuleDimensions(val.Capsule.radius * 1.5f, val.Capsule.height * 1.5f, 1.5f); } GameObject val2 = PrefabAPI.InstantiateClone(Assets.mainAssetBundle.LoadAsset<GameObject>("DireHorn"), "DireseekerHorn", false); GameObject val3 = PrefabAPI.InstantiateClone(Assets.mainAssetBundle.LoadAsset<GameObject>("DireHornBroken"), "DireseekerHornBroken", false); GameObject val4 = PrefabAPI.InstantiateClone(Assets.mainAssetBundle.LoadAsset<GameObject>("DireseekerRageFlame"), "DireseekerRageFlame", false); GameObject val5 = PrefabAPI.InstantiateClone(Assets.mainAssetBundle.LoadAsset<GameObject>("DireseekerBurstFlame"), "DireseekerBurstFlame", false); ChildLocator componentInChildren = direseekerBodyPrefab.GetComponentInChildren<ChildLocator>(); val2.transform.SetParent(componentInChildren.FindChild("Head")); val2.transform.localPosition = new Vector3(-2.5f, 1f, -0.5f); val2.transform.localRotation = Quaternion.Euler(new Vector3(45f, 0f, 90f)); val2.transform.localScale = new Vector3(100f, 100f, 100f); Shader shader = Addressables.LoadAssetAsync<Shader>((object)"RoR2/Base/Shaders/HGStandard.shader").WaitForCompletion(); Material material = ((Renderer)val2.GetComponentInChildren<MeshRenderer>()).material; material.shader = shader; val3.transform.SetParent(componentInChildren.FindChild("Head")); val3.transform.localPosition = new Vector3(2.5f, 1f, -0.5f); val3.transform.localRotation = Quaternion.Euler(new Vector3(45f, 0f, 90f)); val3.transform.localScale = new Vector3(100f, -100f, 100f); val4.transform.SetParent(componentInChildren.FindChild("Head")); val4.transform.localPosition = new Vector3(0f, 1f, 0f); val4.transform.localRotation = Quaternion.Euler(new Vector3(270f, 180f, 0f)); val4.transform.localScale = new Vector3(4f, 4f, 4f); val5.transform.SetParent(componentInChildren.FindChild("Head")); val5.transform.localPosition = new Vector3(0f, 1f, 0f); val5.transform.localRotation = Quaternion.Euler(new Vector3(270f, 180f, 0f)); val5.transform.localScale = new Vector3(6f, 6f, 6f); DireseekerController direseekerController = direseekerBodyPrefab.AddComponent<DireseekerController>(); direseekerController.burstFlame = val5.GetComponent<ParticleSystem>(); direseekerController.rageFlame = val4.GetComponent<ParticleSystem>(); direseekerController.rageFlame.Stop(); CharacterModel componentInChildren2 = direseekerBodyPrefab.GetComponentInChildren<CharacterModel>(); ((Object)((Component)componentInChildren2).gameObject).name = "mdlDireseeker"; Material val6 = new Material(Addressables.LoadAssetAsync<Material>((object)RoR2_Base_Lemurian.matLemurianBruiser_mat).WaitForCompletion()); ((Object)val6).name = "matDireseekerMesh"; val6.SetTexture("_MainTex", Assets.mainAssetBundle.LoadAsset<Material>("matDireseeker").GetTexture("_MainTex")); val6.SetTexture("_EmTex", Assets.mainAssetBundle.LoadAsset<Material>("matDireseeker").GetTexture("_EmissionMap")); val6.SetFloat("_EmPower", 50f); SkinDef val7 = Addressables.LoadAssetAsync<SkinDef>((object)RoR2_Base_LemurianBruiser.skinLemurianBruiserBodyDefault_asset).WaitForCompletion(); SkinDef val8 = Object.Instantiate<SkinDef>(val7); SkinDefParams val9 = Addressables.LoadAssetAsync<SkinDefParams>((object)RoR2_Base_LemurianBruiser_skinLemurianBruiserBodyDefault.params_asset).WaitForCompletion(); val8.skinDefParams = Object.Instantiate<SkinDefParams>(val9); val8.skinDefParamsAddress = new AssetReferenceT<SkinDefParams>(""); val8.rootObject = ((Component)componentInChildren2).gameObject; Renderer component3 = ((Component)((Component)componentInChildren2).transform.Find("LemurianBruiserMesh")).GetComponent<Renderer>(); RendererInfo[] rendererInfos = (RendererInfo[])(object)new RendererInfo[3] { new RendererInfo { renderer