Decompiled source of UmbralMithrixFork v2.5.6
plugins/UmbralMithrix/UmbralMithrix.dll
Decompiled 3 weeks ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using EntityStates; using EntityStates.BrotherMonster; using EntityStates.BrotherMonster.Weapon; using EntityStates.Destructible; using EntityStates.LunarWisp; using EntityStates.Missions.BrotherEncounter; using HG; using IL.RoR2; using IL.RoR2.CharacterAI; using KinematicCharacterController; using Microsoft.CodeAnalysis; using Mono.Cecil.Cil; using MonoMod.Cil; using On.EntityStates; using On.EntityStates.BrotherMonster; using On.EntityStates.Destructible; using On.EntityStates.Missions.BrotherEncounter; using On.RoR2; using On.RoR2.CharacterAI; using R2API; using Rewired.ComponentControls.Effects; using RiskOfOptions; using RiskOfOptions.OptionConfigs; using RiskOfOptions.Options; using RoR2; using RoR2.CharacterAI; using RoR2.ContentManagement; using RoR2.Projectile; using RoR2.Skills; using RoR2BepInExPack.GameAssetPaths; using UmbralMithrix.Components; using UmbralMithrix.EntityStates; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; using UnityEngine.ResourceManagement.AsyncOperations; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("UmbralMithrix")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+d1d8a55b0ab56607d13da6e6a69929ecd6e54456")] [assembly: AssemblyProduct("UmbralMithrix")] [assembly: AssemblyTitle("UmbralMithrix")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace UmbralMithrix { public class ArbitraryCrystalComponent : MonoBehaviour { } public class CloneController : MonoBehaviour { private List<CharacterBody> playerBodies = new List<CharacterBody>(); private SpawnCard cloneCard = UmbralMithrix.mithrixGlassCard; private float stopwatch; private float interval = 8f; private void Start() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Invalid comparison between Unknown and I4 foreach (CharacterMaster readOnlyInstances in CharacterMaster.readOnlyInstancesList) { if ((int)readOnlyInstances.teamIndex == 1) { CharacterBody body = readOnlyInstances.GetBody(); if (Object.op_Implicit((Object)(object)body) && body.isPlayerControlled) { playerBodies.Add(body); } } } } private void FixedUpdate() { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Expected O, but got Unknown //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_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_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Expected O, but got Unknown stopwatch += Time.deltaTime; if (stopwatch < interval) { return; } foreach (CharacterMaster readOnlyInstances in CharacterMaster.readOnlyInstancesList) { if ((int)readOnlyInstances.teamIndex == 1) { CharacterBody body = readOnlyInstances.GetBody(); if (Object.op_Implicit((Object)(object)body) && body.isPlayerControlled) { playerBodies.Add(body); } } } stopwatch %= interval; DirectorPlacementRule val = new DirectorPlacementRule(); val.placementMode = (PlacementMode)3; val.minDistance = 8f; val.maxDistance = 16f; val.position = playerBodies[Random.Range(0, playerBodies.Count)].corePosition; Xoroshiro128Plus rng = RoR2Application.rng; DirectorCore.instance.TrySpawnObject(new DirectorSpawnRequest(cloneCard, val, rng) { summonerBodyObject = ((Component)this).gameObject, onSpawnedServer = delegate(SpawnResult spawnResult) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) spawnResult.spawnedInstance.GetComponent<Inventory>().GiveItem(Items.HealthDecay, 6); } }); } } public class DeathZoneController : MonoBehaviour { private SphereZone zone; private float stopwatch; private float interval = 1f; private float zoneRadius = 100f; private void Start() { zone = ((Component)this).GetComponent<SphereZone>(); } private void FixedUpdate() { stopwatch += Time.deltaTime; if (!(stopwatch < interval)) { stopwatch %= interval; if (zone.Networkradius > zoneRadius) { SphereZone obj = zone; obj.Networkradius -= 10f; } } } } public class P4Controller : MonoBehaviour { public bool finishedItemSteal; private CharacterBody body; private float shockwaveStopwatch; private float pizzaStopwatch; private float missileStopwatch; private float shockwaveInterval = 3.75f; private float pizzaInterval = 1.5f; private float missileInterval = 1.25f; private readonly List<CharacterBody> _trackedPlayers = new List<CharacterBody>(); private void Start() { body = ((Component)this).GetComponent<CharacterBody>(); } private void OnEnable() { foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances) { if (Object.op_Implicit((Object)(object)instance) && instance.isConnected && Object.op_Implicit((Object)(object)instance.master)) { CharacterBody val = instance.master.GetBody(); if (Object.op_Implicit((Object)(object)val)) { handlePlayerBody(val); } } } CharacterBody.onBodyStartGlobal += onBodyStartGlobal; CharacterBody.onBodyDestroyGlobal += onBodyDestroyGlobal; } private void OnDisable() { CharacterBody.onBodyStartGlobal -= onBodyStartGlobal; CharacterBody.onBodyDestroyGlobal -= onBodyDestroyGlobal; foreach (CharacterBody trackedPlayer in _trackedPlayers) { trackedPlayer.RemoveBuff(Buffs.TeamWarCry); } _trackedPlayers.Clear(); } private void FixedUpdate() { //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Unknown result type (might be due to invalid IL or missing references) //IL_0200: Unknown result type (might be due to invalid IL or missing references) //IL_0205: Unknown result type (might be due to invalid IL or missing references) //IL_03bd: Unknown result type (might be due to invalid IL or missing references) //IL_03c2: Unknown result type (might be due to invalid IL or missing references) //IL_03c7: 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_03d4: Unknown result type (might be due to invalid IL or missing references) //IL_03d9: Unknown result type (might be due to invalid IL or missing references) //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_0289: Unknown result type (might be due to invalid IL or missing references) //IL_03e9: Unknown result type (might be due to invalid IL or missing references) //IL_03ee: Unknown result type (might be due to invalid IL or missing references) //IL_03f3: Unknown result type (might be due to invalid IL or missing references) //IL_03f5: Unknown result type (might be due to invalid IL or missing references) //IL_03fa: 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_0408: Unknown result type (might be due to invalid IL or missing references) //IL_040a: Unknown result type (might be due to invalid IL or missing references) //IL_02cc: Unknown result type (might be due to invalid IL or missing references) //IL_02ce: Unknown result type (might be due to invalid IL or missing references) //IL_02d0: Unknown result type (might be due to invalid IL or missing references) //IL_02d5: Unknown result type (might be due to invalid IL or missing references) //IL_02b5: Unknown result type (might be due to invalid IL or missing references) //IL_02ba: Unknown result type (might be due to invalid IL or missing references) //IL_02c8: Unknown result type (might be due to invalid IL or missing references) //IL_02ca: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_02e5: Unknown result type (might be due to invalid IL or missing references) //IL_02ea: Unknown result type (might be due to invalid IL or missing references) //IL_02ef: Unknown result type (might be due to invalid IL or missing references) //IL_02f1: Unknown result type (might be due to invalid IL or missing references) //IL_02f6: Unknown result type (might be due to invalid IL or missing references) //IL_02ff: Unknown result type (might be due to invalid IL or missing references) //IL_0301: Unknown result type (might be due to invalid IL or missing references) //IL_0303: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_014f: 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_0160: 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_017d: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active) { return; } if (finishedItemSteal && Object.op_Implicit((Object)(object)body.healthComponent) && body.healthComponent.alive) { missileStopwatch += Time.deltaTime; pizzaStopwatch += Time.deltaTime; shockwaveStopwatch += Time.deltaTime; if (missileStopwatch >= missileInterval) { missileStopwatch %= 1f; int num = 8; int num2 = 8; Vector3 val = (Object.op_Implicit((Object)(object)body.inputBank) ? body.inputBank.aimDirection : body.transform.forward); float num3 = 180f / (float)num; float num4 = (float)(3.0 + (double)(int)body.radius * 1.0); float damage = body.damage * 0.5f; Quaternion rotation = Util.QuaternionSafeLookRotation(val); for (int i = 0; i < num; i++) { Vector3 position = body.aimOrigin + Quaternion.AngleAxis((float)((double)(num2 - 1) * (double)num3 - (double)num3 * (double)(num - 1) / 2.0), val) * Vector3.up * num4; ProjectileManager.instance.FireProjectile(new FireProjectileInfo { projectilePrefab = UmbralMithrix.lunarMissile, position = position, rotation = rotation, owner = ((Component)this).gameObject, damage = damage, force = 100f }); num2--; } } } if (pizzaStopwatch >= pizzaInterval) { pizzaStopwatch %= 1f; Vector3 val2 = Vector3.ProjectOnPlane(body.inputBank.aimDirection, Vector3.up); float num5 = 40f; Vector3 val3 = default(Vector3); ((Vector3)(ref val3))..ctor((float)Random.Range(-45, -25), 0f, (float)Random.Range(-45, -25)); if ((double)Random.value <= 0.5) { ((Vector3)(ref val3))..ctor((float)Random.Range(25, 45), 0f, (float)Random.Range(25, 45)); } GameObject val4 = UmbralMithrix.leftP4Line; if ((double)Random.value <= 0.5) { val4 = UmbralMithrix.rightP4Line; } Vector3 val5 = body.footPosition; if (_trackedPlayers.Count > 0) { Vector3 footPosition = _trackedPlayers[Random.Range(0, _trackedPlayers.Count)].footPosition; footPosition.y = 491f; val5 = footPosition; } val5 += val3; for (int j = 0; j < 9; j++) { Vector3 val6 = Quaternion.AngleAxis(num5 * (float)j, Vector3.up) * val2; ProjectileManager.instance.FireProjectile(val4, val5, Util.QuaternionSafeLookRotation(val6), ((Component)this).gameObject, body.damage * (UltChannelState.waveProjectileDamageCoefficient * 0.5f), UltChannelState.waveProjectileForce / 8f, Util.CheckRoll(body.crit, body.master), (DamageColorIndex)0, (GameObject)null, -1f, (DamageTypeCombo?)null); } } if (shockwaveStopwatch >= shockwaveInterval) { shockwaveStopwatch %= 1f; Util.PlaySound(ExitSkyLeap.soundString, ((Component)this).gameObject); float num6 = 360f / (float)ExitSkyLeap.waveProjectileCount; Vector3 val7 = Vector3.ProjectOnPlane(body.inputBank.aimDirection, Vector3.up); Vector3 footPosition2 = body.footPosition; for (int k = 0; k < ExitSkyLeap.waveProjectileCount; k++) { Vector3 val8 = Quaternion.AngleAxis(num6 * (float)k, Vector3.up) * val7; ProjectileManager.instance.FireProjectile(ExitSkyLeap.waveProjectilePrefab, footPosition2, Util.QuaternionSafeLookRotation(val8), ((Component)this).gameObject, body.damage * (ExitSkyLeap.waveProjectileDamageCoefficient * 0.75f), ExitSkyLeap.waveProjectileForce / 4f, Util.CheckRoll(body.crit, body.master), (DamageColorIndex)0, (GameObject)null, -1f, (DamageTypeCombo?)null); } } } private void onBodyStartGlobal(CharacterBody body) { if (body.isPlayerControlled) { handlePlayerBody(body); } } private void onBodyDestroyGlobal(CharacterBody body) { _trackedPlayers.Remove(body); } private void handlePlayerBody(CharacterBody playerBody) { if (!_trackedPlayers.Contains(playerBody)) { _trackedPlayers.Add(playerBody); playerBody.AddBuff(Buffs.TeamWarCry); } } } public class SelfDestructController : MonoBehaviour { [CompilerGenerated] private sealed class <SelfDestruct>d__1 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public SelfDestructController <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <SelfDestruct>d__1(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown int num = <>1__state; SelfDestructController selfDestructController = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(ModConfig.CrushingLeap.Value); <>1__state = 1; return true; case 1: <>1__state = -1; Object.Destroy((Object)(object)((Component)selfDestructController).gameObject); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private void Start() { ((MonoBehaviour)this).StartCoroutine(SelfDestruct()); } [IteratorStateMachine(typeof(<SelfDestruct>d__1))] private IEnumerator SelfDestruct() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <SelfDestruct>d__1(0) { <>4__this = this }; } } public class MiscHooks { [CompilerGenerated] private static class <>O { public static Action<SceneDef> <0>__onMostRecentSceneDefChanged; public static Action<Run> <1>__onRunStartGlobal; public static Manipulator <2>__TetherVfxOrigin_AddTether; } public MiscHooks() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Expected O, but got Unknown //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Expected O, but got Unknown //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Expected O, but got Unknown //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Expected O, but got Unknown //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Expected O, but got Unknown //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Expected O, but got Unknown //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Expected O, but got Unknown //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Expected O, but got Unknown //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Expected O, but got Unknown //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Expected O, but got Unknown BaseAI.FindEnemyHurtBox += new Manipulator(TargetOnlyPlayers); CharacterBody.UpdateAllTemporaryVisualEffects += new Manipulator(AddUmbralParticles); CharacterModel.UpdateOverlays += new Manipulator(AddUmbralOverlay); CharacterModel.UpdateOverlays += new Manipulator(AddUmbralOverlayCrystal); BaseAI.FindEnemyHurtBox += new hook_FindEnemyHurtBox(ChangeP3CloneTargeting); CharacterMaster.OnBodyDeath += new hook_OnBodyDeath(CharacterMaster_OnBodyDeath); PurchaseInteraction.OnInteractionBegin += new hook_OnInteractionBegin(PurchaseInteraction_OnInteractionBegin); CombatDirector.OnEnable += new hook_OnEnable(CombatDirector_OnEnable); HealthComponent.TakeDamage += new hook_TakeDamage(HealthComponent_TakeDamage); SceneCatalog.onMostRecentSceneDefChanged += onMostRecentSceneDefChanged; Run.onRunStartGlobal += onRunStartGlobal; CharacterMaster.OnBodyStart += new hook_OnBodyStart(CharacterMaster_OnBodyStart); FrozenState.OnEnter += new hook_OnEnter(FrozenState_OnEnter); CharacterBody.AddTimedBuff_BuffDef_float += new hook_AddTimedBuff_BuffDef_float(AddTimedBuff_BuffDef_float); TimeCrystalDeath.OnEnter += new hook_OnEnter(RemoveUmbralImmune); ItemStealController.BrotherItemFilter += new hook_BrotherItemFilter(ItemStealController_BrotherItemFilter); object obj = <>O.<2>__TetherVfxOrigin_AddTether; if (obj == null) { Manipulator val = TetherVfxOrigin_AddTether; <>O.<2>__TetherVfxOrigin_AddTether = val; obj = (object)val; } TetherVfxOrigin.AddTether += (Manipulator)obj; } private static void TetherVfxOrigin_AddTether(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (!val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdfld<TetherVfxOrigin>(x, "onTetherAdded") })) { Log.Error("Failed to find onTetherAdded field load", "X:\\Git\\RoR2\\UmbralMithrix\\UmbralMithrix\\Hooks\\MiscHooks.cs", "TetherVfxOrigin_AddTether", 47); return; } val.Emit(OpCodes.Dup); ILLabel val2 = val.DefineLabel(); val.Emit(OpCodes.Brfalse, (object)val2); if (!val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<TetherAddDelegate>(x, "Invoke") })) { Log.Error("Failed to find onTetherAdded Invoke call", "X:\\Git\\RoR2\\UmbralMithrix\\UmbralMithrix\\Hooks\\MiscHooks.cs", "TetherVfxOrigin_AddTether", 58); return; } ILLabel val3 = val.DefineLabel(); val.Emit(OpCodes.Br, (object)val3); val.Emit(OpCodes.Pop); val2.Target = val.Prev; val.MarkLabel(val3); } private bool ItemStealController_BrotherItemFilter(orig_BrotherItemFilter orig, ItemIndex itemIndex) { return false; } private void RemoveUmbralImmune(orig_OnEnter orig, TimeCrystalDeath self) { if (Object.op_Implicit((Object)(object)PhaseCounter.instance) && (PhaseCounter.instance.phase == 2 || PhaseCounter.instance.phase == 3)) { TimeCrystalDeath.explosionDamageCoefficient = 0f; TimeCrystalDeath.explosionForce = 0f; GameObject val = ((PhaseCounter.instance.phase == 2) ? GameObject.Find("BrotherBody(Clone)") : GameObject.Find("BrotherHurtBodyP3(Clone)")); if (Object.op_Implicit((Object)(object)val) && val.GetComponent<CharacterBody>().HasBuff(Buffs.Immune) && UmbralMithrix.timeCrystals.Count == 1) { UmbralMithrix.timeCrystals.RemoveAt(0); val.GetComponent<CharacterBody>().RemoveBuff(Buffs.Immune); } else if (UmbralMithrix.timeCrystals.Count > 0) { UmbralMithrix.timeCrystals.RemoveAt(0); } } else { TimeCrystalDeath.explosionForce = 4000f; TimeCrystalDeath.explosionDamageCoefficient = 2f; } orig.Invoke(self); } private void TargetOnlyPlayers(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_0039: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (!val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<BullseyeSearch>(x, "GetResults") })) { return; } val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Func<IEnumerable<HurtBox>, BaseAI, IEnumerable<HurtBox>>>((Func<IEnumerable<HurtBox>, BaseAI, IEnumerable<HurtBox>>)delegate(IEnumerable<HurtBox> results, BaseAI instance) { if (Object.op_Implicit((Object)(object)instance) && (((Object)instance.body).name == "BrotherBody(Clone)" || ((Object)instance.body).name == "BrotherGlassBody(Clone)" || ((Object)instance.body).name == "BrotherHurtBody(Clone)")) { IEnumerable<HurtBox> enumerable = results.Where(delegate(HurtBox hurtBox) { GameObject val2 = HurtBox.FindEntityObject(hurtBox); CharacterBody val3 = default(CharacterBody); return Object.op_Implicit((Object)(object)val2) && val2.TryGetComponent<CharacterBody>(ref val3) && val3.isPlayerControlled; }); if (!enumerable.Any()) { return results; } return enumerable; } return results; }); } private HurtBox ChangeP3CloneTargeting(orig_FindEnemyHurtBox orig, BaseAI self, float maxDistance, bool full360Vision, bool filterByLoS) { if (Object.op_Implicit((Object)(object)self) && (((Object)self.body).name == "BrotherBody(Clone)" || ((Object)self.body).name == "BrotherGlassBody(Clone)" || ((Object)self.body).name == "BrotherHurtBody(Clone)") && Object.op_Implicit((Object)(object)PhaseCounter.instance) && PhaseCounter.instance.phase == 3) { maxDistance = float.PositiveInfinity; filterByLoS = false; full360Vision = true; } return orig.Invoke(self, maxDistance, full360Vision, filterByLoS); } private void AddUmbralParticles(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); val.GotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Items), "InvadingDoppelganger") }); val.Index += 2; val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Func<int, CharacterBody, int>>((Func<int, CharacterBody, int>)delegate(int vengeanceCount, CharacterBody self) { if (((Object)self).name.Contains("Brother") && Object.op_Implicit((Object)(object)self.inventory) && self.inventory.GetItemCount(UmbralMithrix.UmbralItem) > 0 && ModConfig.purpleMithrix.Value) { vengeanceCount++; } return vengeanceCount; }); } private void AddUmbralOverlay(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); val.GotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Items), "InvadingDoppelganger") }); val.Index += 2; val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Func<int, CharacterModel, int>>((Func<int, CharacterModel, int>)delegate(int vengeanceCount, CharacterModel self) { if (((Object)self.body).name.Contains("Brother") && Object.op_Implicit((Object)(object)self.body.inventory) && self.body.inventory.GetItemCount(UmbralMithrix.UmbralItem) > 0 && ModConfig.purpleMithrix.Value) { vengeanceCount++; } return vengeanceCount; }); } private void AddUmbralOverlayCrystal(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); val.GotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Items), "InvadingDoppelganger") }); val.Index -= 1; val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Func<bool, CharacterModel, bool>>((Func<bool, CharacterModel, bool>)((bool hasInventory, CharacterModel self) => (((Object)self.body).name.Contains("Crystal") && Object.op_Implicit((Object)(object)((Component)self.body).gameObject.GetComponent<ArbitraryCrystalComponent>())) || hasInventory)); } private void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo) { CharacterBody body = self.body; if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)self) && ((Object)body).name == "BrotherBody(Clone)" && PhaseCounter.instance.phase == 2 && !UmbralMithrix.p2ThresholdReached && self.health - damageInfo.damage <= self.fullHealth * 0.75f) { UmbralMithrix.p2ThresholdReached = true; P2ThresholdEvent(((Component)body).gameObject); self.health = self.fullHealth * 0.75f; damageInfo.rejected = true; GameObject.Find("BrotherBody(Clone)").GetComponent<CharacterBody>().AddBuff(Buffs.Immune); } if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)self) && ((Object)body).name == "BrotherHurtBodyP3(Clone)" && PhaseCounter.instance.phase == 3 && !UmbralMithrix.p3ThresholdReached && self.health - damageInfo.damage <= self.fullHealth * 0.75f) { UmbralMithrix.p3ThresholdReached = true; GameObject.Find("BrotherBody(Clone)").GetComponent<HealthComponent>().health = 1f; P3ThresholdEvent(((Component)body).gameObject); self.health = self.fullHealth * 0.75f; damageInfo.rejected = true; GameObject.Find("BrotherHurtBodyP3(Clone)").GetComponent<CharacterBody>().AddBuff(Buffs.Immune); } orig.Invoke(self, damageInfo); } private void CharacterMaster_OnBodyStart(orig_OnBodyStart orig, CharacterMaster self, CharacterBody body) { //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Expected O, but got Unknown //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Expected O, but got Unknown //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, body); if (!Object.op_Implicit((Object)(object)PhaseCounter.instance)) { return; } if (((Object)body).name == "BrotherHurtBodyP3(Clone)") { if (ModConfig.purpleMithrix.Value) { self.inventory.GiveItem(UmbralMithrix.UmbralItem, 1); } self.inventory.GiveItem(Items.AdaptiveArmor, 1); } if ((((Object)body).name == "BrotherBody(Clone)" || ((Object)body).name == "BrotherGlassBody(Clone)") && ModConfig.purpleMithrix.Value) { self.inventory.GiveItem(UmbralMithrix.UmbralItem, 1); } if (((Object)body).name == "BrotherBody(Clone)") { if (Object.op_Implicit((Object)(object)PhaseCounter.instance) && PhaseCounter.instance.phase != 3) { ((Component)body).gameObject.AddComponent<CloneController>(); } if (Object.op_Implicit((Object)(object)PhaseCounter.instance) && PhaseCounter.instance.phase == 1) { ChildLocator component = ((Component)SceneInfo.instance).GetComponent<ChildLocator>(); if (Object.op_Implicit((Object)(object)component)) { Transform val = component.FindChild("CenterOfArena"); if (Object.op_Implicit((Object)(object)val)) { Object.Destroy((Object)(object)((Component)val).gameObject); } } } } if (((Object)body).name == "BrotherHurtBody(Clone)" && PhaseCounter.instance.phase == 4) { if (ModConfig.skipPhase4.Value) { body.healthComponent.Suicide((GameObject)null, (GameObject)null, default(DamageTypeCombo)); return; } body.levelMoveSpeed = 0f; body.baseMoveSpeed = 0f; body.inventory.GiveItem(UmbralMithrix.UmbralItem, 1); body.AddBuff(Buffs.Immune); body.inventory.GiveItem(Items.HealthDecay, 40); ((Component)body).GetComponent<SkillLocator>().primary = new GenericSkill(); ((Component)body).GetComponent<SkillLocator>().secondary = new GenericSkill(); } } private void CharacterMaster_OnBodyDeath(orig_OnBodyDeath orig, CharacterMaster self, CharacterBody body) { orig.Invoke(self, body); if (NetworkServer.active && body.isPlayerControlled && UmbralMithrix.practiceModeEnabled && !self.IsExtraLifePendingServer() && Object.op_Implicit((Object)(object)PhaseCounter.instance)) { self.RespawnExtraLife(); } } private void CombatDirector_OnEnable(orig_OnEnable orig, CombatDirector self) { if (Object.op_Implicit((Object)(object)PhaseCounter.instance) && (PhaseCounter.instance.phase == 2 || PhaseCounter.instance.phase == 3)) { ((Component)self).gameObject.SetActive(false); } else { orig.Invoke(self); } } private void P2ThresholdEvent(GameObject summoner) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown //IL_0028: 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_0068: 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_0079: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Expected O, but got Unknown UmbralMithrix.timeCrystals.Clear(); int num = 4; for (int i = 0; i < num; i++) { DirectorPlacementRule val = new DirectorPlacementRule(); val.placementMode = (PlacementMode)3; val.minDistance = 3f; val.maxDistance = 10f; val.position = UmbralMithrix.p23PizzaPoints[i]; Xoroshiro128Plus rng = RoR2Application.rng; DirectorCore.instance.TrySpawnObject(new DirectorSpawnRequest(UmbralMithrix.timeCrystalCard, val, rng) { summonerBodyObject = summoner, onSpawnedServer = delegate(SpawnResult spawnResult) { //IL_0000: 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_001d: Unknown result type (might be due to invalid IL or missing references) spawnResult.spawnedInstance.AddComponent<ArbitraryCrystalComponent>(); spawnResult.spawnedInstance.GetComponent<TeamComponent>().teamIndex = (TeamIndex)2; TetherVfxOrigin obj = spawnResult.spawnedInstance.gameObject.AddComponent<TetherVfxOrigin>(); obj.tetherPrefab = UmbralMithrix.tether; obj.AddTether(summoner.transform); } }); UmbralMithrix.timeCrystals.Add(summoner); } } private void P3ThresholdEvent(GameObject summoner) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown //IL_0028: 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_0068: 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_0079: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Expected O, but got Unknown UmbralMithrix.timeCrystals.Clear(); int num = 4; for (int i = 0; i < num; i++) { DirectorPlacementRule val = new DirectorPlacementRule(); val.placementMode = (PlacementMode)3; val.minDistance = 3f; val.maxDistance = 10f; val.position = UmbralMithrix.p23PizzaPoints[i]; Xoroshiro128Plus rng = RoR2Application.rng; DirectorCore.instance.TrySpawnObject(new DirectorSpawnRequest(UmbralMithrix.timeCrystalCard, val, rng) { summonerBodyObject = summoner, onSpawnedServer = delegate(SpawnResult spawnResult) { //IL_0000: 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_001d: Unknown result type (might be due to invalid IL or missing references) spawnResult.spawnedInstance.AddComponent<ArbitraryCrystalComponent>(); spawnResult.spawnedInstance.GetComponent<TeamComponent>().teamIndex = (TeamIndex)2; TetherVfxOrigin obj = spawnResult.spawnedInstance.gameObject.AddComponent<TetherVfxOrigin>(); obj.tetherPrefab = UmbralMithrix.tether; obj.AddTether(summoner.transform); } }); UmbralMithrix.timeCrystals.Add(summoner); } } private static void onRunStartGlobal(Run run) { UmbralMithrix.practiceModeEnabled = false; } private static void onMostRecentSceneDefChanged(SceneDef sceneDef) { if (sceneDef.cachedName == "moon2") { UmbralMithrix.ArenaSetup(); UmbralMithrix.SpawnPracticeModeShrine(); } } private void PurchaseInteraction_OnInteractionBegin(orig_OnInteractionBegin orig, PurchaseInteraction self, Interactor activator) { if (((Object)self).name == "PracticeModeShrine") { UmbralMithrix.practiceModeEnabled = true; } orig.Invoke(self, activator); } private void FrozenState_OnEnter(orig_OnEnter orig, FrozenState self) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) if (((Object)((EntityState)self).characterBody).name == "BrotherBody(Clone)" && Random.value > 0.5f) { Ray aimRay = ((BaseState)self).GetAimRay(); for (int i = 0; i < 6; i++) { Util.PlaySound(FireLunarShards.fireSound, ((EntityState)self).gameObject); ProjectileManager.instance.FireProjectile(FireLunarShards.projectilePrefab, ((Ray)(ref aimRay)).origin, Quaternion.LookRotation(((Ray)(ref aimRay)).direction), ((EntityState)self).gameObject, (float)((double)((EntityState)self).characterBody.damage * 0.100000001490116 / 12.0), 0f, Util.CheckRoll(((EntityState)self).characterBody.crit, ((EntityState)self).characterBody.master), (DamageColorIndex)0, (GameObject)null, -1f, (DamageTypeCombo?)null); } } orig.Invoke(self); } private void AddTimedBuff_BuffDef_float(orig_AddTimedBuff_BuffDef_float orig, CharacterBody self, BuffDef buffDef, float duration) { //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0051: 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_0083: 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_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) if (((Object)self).name == "BrotherBody(Clone)" && (Object)(object)buffDef == (Object)(object)Buffs.Nullified && Random.value < 0.25f) { duration /= 2f; Ray val = (Object.op_Implicit((Object)(object)self.inputBank) ? new Ray(self.inputBank.aimOrigin, self.inputBank.aimDirection) : new Ray(self.transform.position, self.transform.forward)); for (int i = 0; i < 6; i++) { Util.PlaySound(FireLunarShards.fireSound, ((Component)self).gameObject); ProjectileManager.instance.FireProjectile(FireLunarShards.projectilePrefab, ((Ray)(ref val)).origin, Quaternion.LookRotation(((Ray)(ref val)).direction), ((Component)self).gameObject, (float)((double)self.damage * 0.100000001490116 / 12.0), 0f, Util.CheckRoll(self.crit, self.master), (DamageColorIndex)0, (GameObject)null, -1f, (DamageTypeCombo?)null); } } orig.Invoke(self, buffDef, duration); } private void SetPosition(Vector3 newPosition, CharacterBody body) { //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) if (Object.op_Implicit((Object)(object)body.characterMotor)) { ((BaseCharacterController)body.characterMotor).Motor.SetPositionAndRotation(newPosition, Quaternion.identity, true); } } } public class MissionHooks { public MissionHooks() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Expected O, but got Unknown //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown BrotherEncounterPhaseBaseState.OnEnter += new hook_OnEnter(BrotherEncounterPhaseBaseStateOnEnter); Phase1.OnEnter += new hook_OnEnter(Phase1OnEnter); Phase2.OnEnter += new hook_OnEnter(Phase2OnEnter); Phase3.OnEnter += new hook_OnEnter(Phase3OnEnter); Phase4.OnEnter += new hook_OnEnter(Phase4OnEnter); BossDeath.OnEnter += new hook_OnEnter(BossDeathOnEnter); } private void Phase1OnEnter(orig_OnEnter orig, Phase1 self) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) UmbralMithrix.spawnedClone = false; UmbralMithrix.p2ThresholdReached = false; UmbralMithrix.p3ThresholdReached = false; UmbralMithrix.finishedItemSteal = false; UmbralMithrix.mithrix.GetComponent<EntityStateMachine>().initialStateType = new SerializableEntityStateType(typeof(ThroneSpawnState)); GameObject val = GameObject.Find("EscapeSequenceController"); if (Object.op_Implicit((Object)(object)val)) { Transform val2 = val.transform.Find("EscapeSequenceObjects/Mega Glows"); if (Object.op_Implicit((Object)(object)val2)) { Object.Instantiate<GameObject>(((Component)val2).gameObject, new Vector3(-88.5f, 491.5f, -0.3f), Quaternion.Euler(270f, 0f, 0f)).transform.localScale = new Vector3(0.1f, 0.1f, 0.1f); } } orig.Invoke(self); } private void Phase2OnEnter(orig_OnEnter orig, Phase2 self) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) UmbralMithrix.mithrix.GetComponent<EntityStateMachine>().initialStateType = new SerializableEntityStateType(typeof(SkySpawnState)); ((BrotherEncounterBaseState)self).KillAllMonsters(); orig.Invoke(self); } private void Phase3OnEnter(orig_OnEnter orig, Phase3 self) { ((BrotherEncounterBaseState)self).KillAllMonsters(); orig.Invoke(self); } private void Phase4OnEnter(orig_OnEnter orig, Phase4 self) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Expected O, but got Unknown //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Expected O, but got Unknown //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown GameObject obj = Object.Instantiate<GameObject>(UmbralMithrix.voidling, new Vector3(-88.5f, 520f, -0.3f), Quaternion.identity); obj.AddComponent<DeathZoneController>(); obj.GetComponent<TeamComponent>().teamIndex = (TeamIndex)2; SkillLocator skillLocator = obj.GetComponent<CharacterBody>().skillLocator; skillLocator.primary = new GenericSkill(); skillLocator.secondary = new GenericSkill(); skillLocator.utility = new GenericSkill(); skillLocator.special = new GenericSkill(); NetworkServer.Spawn(obj); orig.Invoke(self); } private void BossDeathOnEnter(orig_OnEnter orig, BossDeath self) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); GameObject.Find("InactiveVoidling(Clone)").GetComponent<HealthComponent>().Suicide((GameObject)null, (GameObject)null, default(DamageTypeCombo)); } private void BrotherEncounterPhaseBaseStateOnEnter(orig_OnEnter orig, BrotherEncounterPhaseBaseState self) { //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_0173: 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_0184: Unknown result type (might be due to invalid IL or missing references) //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_019d: 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_01c6: 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_01e2: 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) orig.Invoke(self); if (!NetworkServer.active || (Object)(object)self.phaseScriptedCombatEncounter == (Object)null || !Object.op_Implicit((Object)(object)PhaseCounter.instance)) { return; } ((BrotherEncounterBaseState)self).childLocator = ((EntityState)self).GetComponent<ChildLocator>(); Transform val = ((BrotherEncounterBaseState)self).childLocator.FindChild("ArenaWalls"); Material doppelMat = UmbralMithrix.doppelMat; if (Object.op_Implicit((Object)(object)val)) { ((Component)val).gameObject.SetActive(((BrotherEncounterBaseState)self).shouldEnableArenaWalls); if (ModConfig.purpleArena.Value) { Renderer[] componentsInChildren = ((Component)val).GetComponentsInChildren<Renderer>(); for (int i = 0; i < componentsInChildren.Length; i++) { componentsInChildren[i].material = doppelMat; } } } self.phaseBossGroup.bestObservedName = "Umbral Mithrix"; self.phaseBossGroup.bestObservedSubtitle = "<sprite name=\"CloudLeft\"> The Collective <sprite name=\"CloudRight\">"; if (PhaseCounter.instance.phase == 2) { Transform transform = new GameObject().transform; transform.position = new Vector3(-88.5f, 491.5f, -0.3f); SpawnInfo val2 = default(SpawnInfo); val2.explicitSpawnPosition = transform; val2.spawnCard = UmbralMithrix.mithrixCard; SpawnInfo val3 = val2; self.phaseScriptedCombatEncounter.spawns = (SpawnInfo[])(object)new SpawnInfo[1] { val3 }; } if (PhaseCounter.instance.phase == 3) { Transform transform2 = new GameObject().transform; transform2.position = new Vector3(-88.5f, 491.5f, -0.3f); SpawnInfo val2 = default(SpawnInfo); val2.explicitSpawnPosition = transform2; val2.spawnCard = UmbralMithrix.mithrixHurtP3Card; SpawnInfo val4 = val2; self.phaseScriptedCombatEncounter.spawns = (SpawnInfo[])(object)new SpawnInfo[1] { val4 }; } if (PhaseCounter.instance.phase == 4) { Transform transform3 = new GameObject().transform; transform3.position = new Vector3(-88.5f, 491.5f, -0.3f); SpawnInfo val2 = default(SpawnInfo); val2.explicitSpawnPosition = transform3; val2.spawnCard = UmbralMithrix.mithrixHurtCard; SpawnInfo val5 = val2; self.phaseScriptedCombatEncounter.spawns = (SpawnInfo[])(object)new SpawnInfo[1] { val5 }; } } } public class MithrixMiscHooks { public MithrixMiscHooks() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Expected O, but got Unknown //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown SkyLeapDeathState.OnEnter += new hook_OnEnter(SkyLeapDeathState_OnEnter); SpellChannelExitState.OnEnter += new hook_OnEnter(SpellChannelExitState_OnEnter); StaggerEnter.OnEnter += new hook_OnEnter(StaggerEnter_OnEnter); TrueDeathState.OnEnter += new hook_OnEnter(TrueDeathState_OnEnter); } private void SkyLeapDeathState_OnEnter(orig_OnEnter orig, SkyLeapDeathState self) { if (((Object)((EntityState)self).characterBody).name == "BrotherGlassBody(Clone)" && Object.op_Implicit((Object)(object)PhaseCounter.instance) && PhaseCounter.instance.phase == 2) { ((GenericCharacterDeath)self).DestroyModel(); if (NetworkServer.active) { ((GenericCharacterDeath)self).DestroyBodyAsapServer(); } } else { orig.Invoke(self); } } private void SpellChannelExitState_OnEnter(orig_OnEnter orig, SpellChannelExitState self) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Invalid comparison between Unknown and I4 //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Expected O, but got Unknown //IL_0069: 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) UmbralMithrix.finishedItemSteal = true; ((Component)((EntityState)self).characterBody).gameObject.GetComponent<P4Controller>().finishedItemSteal = true; bool flag = false; foreach (CharacterMaster readOnlyInstances in CharacterMaster.readOnlyInstancesList) { if ((int)readOnlyInstances.teamIndex == 1) { CharacterBody body = readOnlyInstances.GetBody(); if (Object.op_Implicit((Object)(object)body) && !body.isPlayerControlled && Object.op_Implicit((Object)(object)body.healthComponent)) { body.healthComponent.Suicide((GameObject)null, (GameObject)null, default(DamageTypeCombo)); } } } if (flag) { Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage { baseToken = "UMBRAL_KILLED_ALL_ALLIES_MESAAGE" }); } orig.Invoke(self); } private void StaggerEnter_OnEnter(orig_OnEnter orig, StaggerEnter self) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Expected O, but got Unknown //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Expected O, but got Unknown ((StaggerBaseState)self).duration = 0f; if (Object.op_Implicit((Object)(object)PhaseCounter.instance) && PhaseCounter.instance.phase == 4) { ((EntityState)self).outer.SetNextState((EntityState)new SpellChannelEnterState()); } if (Object.op_Implicit((Object)(object)PhaseCounter.instance) && PhaseCounter.instance.phase == 3 && !UmbralMithrix.spawnedClone) { UmbralMithrix.spawnedClone = true; DirectorPlacementRule val = new DirectorPlacementRule(); val.placementMode = (PlacementMode)3; val.minDistance = 3f; val.maxDistance = 20f; val.position = new Vector3(-88.5f, 491.5f, -0.3f); Xoroshiro128Plus rng = RoR2Application.rng; DirectorSpawnRequest val2 = new DirectorSpawnRequest(UmbralMithrix.mithrixCard, val, rng); val2.summonerBodyObject = ((EntityState)self).gameObject; val2.onSpawnedServer = (Action<SpawnResult>)Delegate.Combine(val2.onSpawnedServer, (Action<SpawnResult>)delegate(SpawnResult spawnResult) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) CharacterMaster component = spawnResult.spawnedInstance.GetComponent<CharacterMaster>(); component.GetBody().AddBuff(Buffs.Immune); BaseAI[] components = ((Component)component).GetComponents<BaseAI>(); foreach (BaseAI val3 in components) { if (Object.op_Implicit((Object)(object)val3)) { val3.fullVision = true; val3.neverRetaliateFriendlies = true; } } }); DirectorCore.instance.TrySpawnObject(val2); } orig.Invoke(self); } private void TrueDeathState_OnEnter(orig_OnEnter orig, TrueDeathState self) { //IL_0011: 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_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: 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_003f: 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_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) TrueDeathState.dissolveDuration = 3f; if (!UmbralMithrix.practiceModeEnabled) { Vector3 val = Vector3.up * 40f + Vector3.forward * 2f; PickupDropletController.CreatePickupDroplet(PickupCatalog.FindPickupIndex(UmbralMithrix.UmbralItem.itemIndex), ((EntityState)self).characterBody.footPosition + Vector3.up * 1.5f, val); } UmbralMithrix.practiceModeEnabled = false; orig.Invoke(self); } } internal static class LanguageManager { public static void Register(string searchFolder, string langFolderName = "lang") { string langFolderPath = Path.Combine(searchFolder, langFolderName); if (Directory.Exists(langFolderPath)) { Language.collectLanguageRootFolders += delegate(List<string> folders) { folders.Add(langFolderPath); }; } else { Log.Error("Lang folder not found: " + langFolderPath, "X:\\Git\\RoR2\\UmbralMithrix\\UmbralMithrix\\LanguageManager.cs", "Register", 20); } } } internal static class Log { private static readonly StringBuilder _sharedStringBuilder; private static readonly int _cachedCallerPathPrefixLength; private static ManualLogSource _logSource; static Log() { _sharedStringBuilder = new StringBuilder(256); _cachedCallerPathPrefixLength = getCallerPathPrefixLength("X:\\Git\\RoR2\\UmbralMithrix\\UmbralMithrix\\Log.cs"); static int getCallerPathPrefixLength([CallerFilePath] string callerPath = null) { int num = callerPath.LastIndexOf("UmbralMithrix\\"); if (num >= 0) { return num + "UmbralMithrix\\".Length; } Debug.LogError((object)"[UmbralMithrix] Logger failed to determine caller path prefix length"); return 0; } } internal static void Init(ManualLogSource logSource) { _logSource = logSource; } private static StringBuilder AppendCallerPrefix(this StringBuilder stringBuilder, string callerPath, string callerMemberName, int callerLineNumber) { return stringBuilder.Append(callerPath, _cachedCallerPathPrefixLength, callerPath.Length - _cachedCallerPathPrefixLength).Append(':').Append(callerLineNumber) .Append(" (") .Append(callerMemberName) .Append("):"); } private static StringBuilder buildCallerLogString(string callerPath, string callerMemberName, int callerLineNumber, object data) { return _sharedStringBuilder.Clear().AppendCallerPrefix(callerPath, callerMemberName, callerLineNumber).Append(' ') .Append(data); } [Conditional("DEBUG")] internal static void Debug(object data, [CallerFilePath] string callerPath = "", [CallerMemberName] string callerMemberName = "", [CallerLineNumber] int callerLineNumber = -1) { _logSource.LogDebug((object)buildCallerLogString(callerPath, callerMemberName, callerLineNumber, data)); } [MethodImpl(MethodImplOptions.AggressiveInlining)] [Conditional("DEBUG")] internal static void Debug_NoCallerPrefix(object data) { _logSource.LogDebug(data); } internal static void Error(object data, [CallerFilePath] string callerPath = "", [CallerMemberName] string callerMemberName = "", [CallerLineNumber] int callerLineNumber = -1) { _logSource.LogError((object)buildCallerLogString(callerPath, callerMemberName, callerLineNumber, data)); } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static void Error_NoCallerPrefix(object data) { _logSource.LogError(data); } internal static void Fatal(object data, [CallerFilePath] string callerPath = "", [CallerMemberName] string callerMemberName = "", [CallerLineNumber] int callerLineNumber = -1) { _logSource.LogFatal((object)buildCallerLogString(callerPath, callerMemberName, callerLineNumber, data)); } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static void Fatal_NoCallerPrefix(object data) { _logSource.LogFatal(data); } internal static void Info(object data, [CallerFilePath] string callerPath = "", [CallerMemberName] string callerMemberName = "", [CallerLineNumber] int callerLineNumber = -1) { _logSource.LogInfo((object)buildCallerLogString(callerPath, callerMemberName, callerLineNumber, data)); } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static void Info_NoCallerPrefix(object data) { _logSource.LogInfo(data); } internal static void Message(object data, [CallerFilePath] string callerPath = "", [CallerMemberName] string callerMemberName = "", [CallerLineNumber] int callerLineNumber = -1) { _logSource.LogMessage((object)buildCallerLogString(callerPath, callerMemberName, callerLineNumber, data)); } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static void Message_NoCallerPrefix(object data) { _logSource.LogMessage(data); } internal static void Warning(object data, [CallerFilePath] string callerPath = "", [CallerMemberName] string callerMemberName = "", [CallerLineNumber] int callerLineNumber = -1) { _logSource.LogWarning((object)buildCallerLogString(callerPath, callerMemberName, callerLineNumber, data)); } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static void Warning_NoCallerPrefix(object data) { _logSource.LogWarning(data); } internal static void LogType(LogLevel level, object data, [CallerFilePath] string callerPath = "", [CallerMemberName] string callerMemberName = "", [CallerLineNumber] int callerLineNumber = -1) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) if ((level & 0x20) == 0) { _logSource.Log(level, (object)buildCallerLogString(callerPath, callerMemberName, callerLineNumber, data)); } } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static void LogType_NoCallerPrefix(LogLevel level, object data) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) if ((level & 0x20) == 0) { _logSource.Log(level, data); } } } public static class ModConfig { internal static ConfigFile UMConfig; public static ConfigEntry<bool> purpleArena; public static ConfigEntry<bool> skipPhase4; public static ConfigEntry<bool> addShockwave; public static ConfigEntry<bool> purpleMithrix; public static ConfigEntry<float> basehealth; public static ConfigEntry<float> levelhealth; public static ConfigEntry<float> basedamage; public static ConfigEntry<float> leveldamage; public static ConfigEntry<float> basearmor; public static ConfigEntry<float> baseattackspeed; public static ConfigEntry<float> basespeed; public static ConfigEntry<float> mass; public static ConfigEntry<float> turningspeed; public static ConfigEntry<float> jumpingpower; public static ConfigEntry<float> acceleration; public static ConfigEntry<float> aircontrol; public static ConfigEntry<int> PrimStocks; public static ConfigEntry<int> SecStocks; public static ConfigEntry<int> UtilStocks; public static ConfigEntry<float> PrimCD; public static ConfigEntry<float> SecCD; public static ConfigEntry<float> UtilCD; public static ConfigEntry<float> SpecialCD; public static ConfigEntry<float> CrushingLeap; public static ConfigEntry<int> SlamOrbProjectileCount; public static ConfigEntry<int> LunarShardAdd; public static ConfigEntry<int> UltimateWaves; public static ConfigEntry<int> UltimateCount; public static ConfigEntry<float> UltimateDuration; public static ConfigEntry<int> JumpWaveCount; public static ConfigEntry<float> ShardHoming; public static ConfigEntry<float> ShardRange; public static ConfigEntry<float> ShardCone; [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static void Init() { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown if (UmbralMithrix.RooInstalled) { InitRoO(); } UMConfig = new ConfigFile(Paths.ConfigPath + "\\com.Nuxlar.UmbralMithrix.cfg", true); purpleMithrix = UMConfig.BindOption("General", "Purple Mithrix", defaultValue: true, "Adds umbral effects to Mithrix (purple when spawning in)."); purpleArena = UMConfig.BindOption("General", "Purple Arena", defaultValue: false, "Adds swirling purple walls/ceiling to the arena."); skipPhase4 = UMConfig.BindOption("General", "Skip Phase 4", defaultValue: false, "Skips Phase 4."); addShockwave = UMConfig.BindOption("General", "Add shockwave to Hammer Swipe", defaultValue: false, "Adds a 1 shockwave when Mithrix swipes."); basehealth = UMConfig.BindOptionSteppedSlider("Stats", "Base Health", 1000f, 25f, "Vanilla: 1000", 500f, 2500f); levelhealth = UMConfig.BindOptionSteppedSlider("Stats", "Level Health", 325f, 25f, "Health gained per level. Vanilla: 300", 100f, 1000f); basedamage = UMConfig.BindOptionSteppedSlider("Stats", "Base Damage", 15f, 1f, "Vanilla: 16", 10f, 30f); leveldamage = UMConfig.BindOptionSteppedSlider("Stats", "Level Damage", 3f, 0.25f, "Damage gained per level. Vanilla: 3.2", 1f, 6.4f); basearmor = UMConfig.BindOptionSteppedSlider("Stats", "Base Armor", 30f, 5f, "Vanilla: 20", 5f, 50f); baseattackspeed = UMConfig.BindOptionSteppedSlider("Stats", "Base Attack Speed", 1.25f, 0.25f, "Vanilla: 1", 0.25f, 3f); basespeed = UMConfig.BindOptionSteppedSlider("Stats", "Base Move Speed", 15f, 1f, "Vanilla: 15", 10f, 30f); mass = UMConfig.BindOptionSteppedSlider("Stats", "Mass", 5000f, 100f, "Recommended to increase if you increase his movement speed. Vanilla: 900", 900f, 10000f); turningspeed = UMConfig.BindOptionSteppedSlider("Stats", "Turn Speed", 300f, 10f, "Vanilla: 270", 200f, 1000f); jumpingpower = UMConfig.BindOptionSteppedSlider("Stats", "Jump Power", 50f, 5f, "How high Mithrix jumps. Vanilla: 25", 25f, 100f); acceleration = UMConfig.BindOptionSteppedSlider("Stats", "Acceleration", 100f, 5f, "Vanilla: 45", 45f, 500f); aircontrol = UMConfig.BindOptionSteppedSlider("Stats", "Air Control", 1f, 0.5f, "Vanilla: 0.25", 0.25f, 3f); PrimStocks = UMConfig.BindOptionSlider("Skills", "Primary Stocks", 1, "Max Stocks for Mithrix's Weapon Slam. Vanilla: 1", 1f, 5f); SecStocks = UMConfig.BindOptionSlider("Skills", "Secondary Stocks", 1, "Max Stocks for Mithrix's Dash Attack. Vanilla: 1", 1f, 5f); UtilStocks = UMConfig.BindOptionSlider("Skills", "Util Stocks", 3, "Max Stocks for Mithrix's Dash. Vanilla: 2", 1f, 5f); PrimCD = UMConfig.BindOptionSteppedSlider("Skills", "Primary Cooldown", 4f, 0.25f, "Cooldown for Mithrix's Weapon Slam. Vanilla: 4", 1f, 5f); SecCD = UMConfig.BindOptionSteppedSlider("Skills", "Secondary Cooldown", 4.5f, 0.25f, "Cooldown for Mithrix's Dash Attack. Vanilla: 5", 1f, 5f); UtilCD = UMConfig.BindOptionSteppedSlider("Skills", "Util Cooldown", 2.5f, 0.25f, "Cooldown for Mithrix's Dash. Vanilla: 3", 1f, 5f); SpecialCD = UMConfig.BindOptionSteppedSlider("Skills", "Special Cooldown", 30f, 1f, "Cooldown for Mithrix's Jump Attack. Vanilla: 30", 10f, 50f); CrushingLeap = UMConfig.BindOptionSteppedSlider("Skill Mods", "Crushing Leap", 3f, 0.1f, "How long Mithrix stays in the air during the crushing leap. Vanilla: 3", 0.1f, 6f); SlamOrbProjectileCount = UMConfig.BindOptionSlider("Skill Mods", "Orb Projectile Count", 3, "Orbs fired by weapon slam in a circle. Vanilla: N/A", 0f, 16f); LunarShardAdd = UMConfig.BindOptionSlider("Skill Mods", "Shard Add Count", 1, "Bonus shards added to each shot of lunar shards. Vanilla: N/A", 1f, 5f); UltimateWaves = UMConfig.BindOptionSlider("Skill Mods", "P3 Ult Lines", 8, "Total lines in ultimate per burst. Vanilla: 4", 4f, 18f); UltimateCount = UMConfig.BindOptionSlider("Skill Mods", "P3 Ult Bursts", 6, "Total times the ultimate fires. Vanilla: 4", 4f, 8f); UltimateDuration = UMConfig.BindOptionSteppedSlider("Skill Mods", "P3 Ult Duration", 8f, 0.25f, "How long ultimate lasts. Vanilla: 8", 5f, 10f); JumpWaveCount = UMConfig.BindOptionSlider("Skill Mods", "Jump Wave Count", 16, "Shockwave count when Mithrix lands after a jump. Vanilla: 12", 12f, 24f); ShardHoming = UMConfig.BindOptionSteppedSlider("Skill Mods", "Shard Homing", 25f, 5f, "How strongly lunar shards home in to targets. Vanilla: 20", 10f, 60f); ShardRange = UMConfig.BindOptionSteppedSlider("Skill Mods", "Shard Range", 100f, 10f, "Range (distance) in which shards look for targets. Vanilla: 80", 80f, 160f); ShardCone = UMConfig.BindOptionSteppedSlider("Skill Mods", "Shard Cone", 120f, 10f, "Cone (Angle) in which shards look for targets. Vanilla: 90", 90f, 180f); WipeConfig(); } private static void WipeConfig() { ((Dictionary<ConfigDefinition, string>)typeof(ConfigFile).GetProperty("OrphanedEntries", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(UMConfig)).Clear(); UMConfig.Save(); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static void InitRoO() { //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Expected O, but got Unknown //IL_0074: 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_008d: Expected O, but got Unknown try { ModSettingsManager.SetModDescription("Umbral Mithrix", "com.Nuxlar.UmbralMithrix", "UmbralMithrix"); string directoryName = Path.GetDirectoryName(((BaseUnityPlugin)UmbralMithrix.Instance).Info.Location); byte[] array = File.ReadAllBytes(Path.Combine(directoryName.Substring(0, directoryName.Length - 21), "icon.png")); Texture2D val = new Texture2D(256, 256); ImageConversion.LoadImage(val, array); ModSettingsManager.SetModIcon(Sprite.Create(val, new Rect(0f, 0f, 256f, 256f), new Vector2(0.5f, 0.5f)), "com.Nuxlar.UmbralMithrix", "UmbralMithrix"); } catch (Exception) { } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static ConfigEntry<T> BindOption<T>(this ConfigFile myConfig, string section, string name, T defaultValue, string description = "", bool restartRequired = true) { //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Expected O, but got Unknown if ((defaultValue is int || defaultValue is float) ? true : false) { return myConfig.BindOptionSlider(section, name, defaultValue, description, 0f, 20f, restartRequired); } if (string.IsNullOrEmpty(description)) { description = name; } if (restartRequired) { description += " (restart required)"; } ConfigEntry<T> val = myConfig.Bind<T>(section, name, defaultValue, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>())); if (UmbralMithrix.RooInstalled) { TryRegisterOption<T>(val, restartRequired); } return val; } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static ConfigEntry<T> BindOptionSlider<T>(this ConfigFile myConfig, string section, string name, T defaultValue, string description = "", float min = 0f, float max = 20f, bool restartRequired = true) { //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Expected O, but got Unknown if (!(defaultValue is int) && !(defaultValue is float)) { return myConfig.BindOption(section, name, defaultValue, description, restartRequired); } if (string.IsNullOrEmpty(description)) { description = name; } string text = description; T val = defaultValue; description = text + " (Default: " + val?.ToString() + ")"; if (restartRequired) { description += " (restart required)"; } AcceptableValueBase val2 = (AcceptableValueBase)((typeof(T) == typeof(int)) ? ((object)new AcceptableValueRange<int>((int)min, (int)max)) : ((object)new AcceptableValueRange<float>(min, max))); ConfigEntry<T> val3 = myConfig.Bind<T>(section, name, defaultValue, new ConfigDescription(description, val2, Array.Empty<object>())); if (UmbralMithrix.RooInstalled) { TryRegisterOptionSlider<T>(val3, min, max, restartRequired); } return val3; } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static ConfigEntry<T> BindOptionSteppedSlider<T>(this ConfigFile myConfig, string section, string name, T defaultValue, float increment = 1f, string description = "", float min = 0f, float max = 20f, bool restartRequired = true) { //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Expected O, but got Unknown if (string.IsNullOrEmpty(description)) { description = name; } string text = description; T val = defaultValue; description = text + " (Default: " + val?.ToString() + ")"; if (restartRequired) { description += " (restart required)"; } ConfigEntry<T> val2 = myConfig.Bind<T>(section, name, defaultValue, new ConfigDescription(description, (AcceptableValueBase)(object)new AcceptableValueRange<float>(min, max), Array.Empty<object>())); if (UmbralMithrix.RooInstalled) { TryRegisterOptionSteppedSlider<T>(val2, increment, min, max, restartRequired); } return val2; } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static void TryRegisterOption<T>(ConfigEntry<T> entry, bool restartRequired) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Expected O, but got Unknown //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Expected O, but got Unknown //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Expected O, but got Unknown //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Expected O, but got Unknown if (entry is ConfigEntry<string> val) { ModSettingsManager.AddOption((BaseOption)new StringInputFieldOption(val, new InputFieldConfig { submitOn = (SubmitEnum)6, restartRequired = restartRequired }), "com.Nuxlar.UmbralMithrix", "UmbralMithrix"); } else if (entry is ConfigEntry<bool> val2) { ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(val2, restartRequired), "com.Nuxlar.UmbralMithrix", "UmbralMithrix"); } else if (entry is ConfigEntry<KeyboardShortcut> val3) { ModSettingsManager.AddOption((BaseOption)new KeyBindOption(val3, restartRequired), "com.Nuxlar.UmbralMithrix", "UmbralMithrix"); } else if (typeof(T).IsEnum) { ModSettingsManager.AddOption((BaseOption)new ChoiceOption((ConfigEntryBase)(object)entry, restartRequired), "com.Nuxlar.UmbralMithrix", "UmbralMithrix"); } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static void TryRegisterOptionSlider<T>(ConfigEntry<T> entry, float min, float max, bool restartRequired) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0018: 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_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Expected O, but got Unknown //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Expected O, but got Unknown //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Expected O, but got Unknown if (entry is ConfigEntry<int> val) { ModSettingsManager.AddOption((BaseOption)new IntSliderOption(val, new IntSliderConfig { min = (int)min, max = (int)max, formatString = "{0:0.00}", restartRequired = restartRequired }), "com.Nuxlar.UmbralMithrix", "UmbralMithrix"); } else if (entry is ConfigEntry<float> val2) { ModSettingsManager.AddOption((BaseOption)new SliderOption(val2, new SliderConfig { min = min, max = max, FormatString = "{0:0.00}", restartRequired = restartRequired }), "com.Nuxlar.UmbralMithrix", "UmbralMithrix"); } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static void TryRegisterOptionSteppedSlider<T>(ConfigEntry<T> entry, float increment, float min, float max, bool restartRequired) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0017: 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_0025: 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_003d: Expected O, but got Unknown //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Expected O, but got Unknown if (entry is ConfigEntry<float> val) { ModSettingsManager.AddOption((BaseOption)new StepSliderOption(val, new StepSliderConfig { increment = increment, min = min, max = max, FormatString = "{0:0.00}", restartRequired = restartRequired }), "com.Nuxlar.UmbralMithrix", "UmbralMithrix"); } } } [BepInPlugin("com.Nuxlar.UmbralMithrix", "UmbralMithrix", "2.5.6")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class UmbralMithrix : BaseUnityPlugin { public const string PluginGUID = "com.Nuxlar.UmbralMithrix"; public const string PluginAuthor = "Nuxlar"; public const string PluginName = "UmbralMithrix"; public const string PluginVersion = "2.5.6"; public static bool practiceModeEnabled; public static bool hasfired; public static bool spawnedClone = false; public static bool finishedItemSteal = false; public static bool p2ThresholdReached = false; public static bool p3ThresholdReached = false; public static List<GameObject> timeCrystals = new List<GameObject>(); public static Dictionary<int, Vector3> p23PizzaPoints = new Dictionary<int, Vector3> { { 0, new Vector3(13.5f, 489.7f, -107f) }, { 1, new Vector3(-189f, 489.7f, 107f) }, { 2, new Vector3(16.7f, 489.7f, 101f) }, { 3, new Vector3(-196f, 489.7f, -101f) } }; public static Dictionary<int, Vector3> p4PizzaPoints = new Dictionary<int, Vector3> { { 0, new Vector3(-175f, 489.7f, -0.08f) }, { 1, new Vector3(-0.08f, 489.7f, 0.08f) }, { 2, new Vector3(-91f, 489.7f, -89f) }, { 3, new Vector3(-89f, 489.7f, 89f) } }; public static ItemDef UmbralItem; public static GameObject umbralSlamImpact; public static GameObject umbralSlamProjectile; public static GameObject umbralSlamPillar; public static GameObject umbralSlamHitEffect; public static NetworkSoundEventDef umbralSlamHitSound; public static GameObject umbralLeapWave; public static GameObject umbralSwingEffect; public static GameObject umbralUltMuzzleFlash; public static GameObject leapIndicatorPrefab; public static GameObject leapIndicator; public static SpawnCard timeCrystalCard; public static GameObject lunarMissile; public static GameObject mithrixHurtP3Master; public static GameObject mithrix; public static GameObject mithrixHurtP3; public static GameObject mithrixHurt; public static SpawnCard mithrixCard; public static SpawnCard mithrixHurtCard; public static GameObject mithrixGlass; public static SpawnCard mithrixGlassCard; public static GameObject leftP4Line; public static GameObject rightP4Line; public static GameObject leftUltLine; public static GameObject rightUltLine; public static GameObject staticUltLine; public static GameObject shardProjectile; public static Material preBossMat; public static Material arenaWallMat; public static Material stealAuraMat; public static Material moonMat; public static Material doppelMat; public static GameObject youngTeleporter; public static Transform practiceFire; public static GameObject implodeEffect; public static GameObject tether; public static GameObject voidling; public static SpawnCard mithrixHurtP3Card = (SpawnCard)(object)ScriptableObject.CreateInstance<CharacterSpawnCard>(); private static SkillDef shardDef = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Brother/FireLunarShards.asset").WaitForCompletion(); private static SkillDef slamDef = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Brother/WeaponSlam.asset").WaitForCompletion(); private static SkillDef bashDef = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Brother/SprintBash.asset").WaitForCompletion(); private static SkillDef leapDef = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Brother/SkyLeap.asset").WaitForCompletion(); public static SkillDef ultDef = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Brother/Ult.asset").WaitForCompletion(); internal static UmbralMithrix Instance { get; private set; } public static bool RooInstalled => Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions"); public void Awake() { //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) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_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_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0087: 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_00a0: Unknown result type (might be due to invalid IL or missing references) Instance = this; Log.Init(((BaseUnityPlugin)this).Logger); ModConfig.Init(); LoadAssets(); CloneAssets(); SetupVoidling(); shardDef.activationState = new SerializableEntityStateType(typeof(FireUmbralShards)); slamDef.activationState = new SerializableEntityStateType(typeof(UmbralHammerSlam)); bashDef.activationState = new SerializableEntityStateType(typeof(UmbralBash)); leapDef.activationState = new SerializableEntityStateType(typeof(EnterUmbralLeap)); ultDef.activationState = new SerializableEntityStateType(typeof(EnterUmbralUlt)); CreateDoppelItem(); AddEntityStates(); ChangeVanillaEntityStateValues(); new MiscHooks(); new MissionHooks(); new MithrixMiscHooks(); LanguageManager.Register(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location)); } private void ChangeVanillaEntityStateValues() { SetVanillaEntityStateField(RoR2_Base_Brother_EntityStates_BrotherMonster.FistSlam_asset, "healthCostFraction", "0"); SetVanillaEntityStateField(RoR2_Base_Brother_EntityStates_BrotherMonster.SpellChannelEnterState_asset, "duration", "3"); SetVanillaEntityStateField(RoR2_Base_Brother_EntityStates_BrotherMonster.SpellChannelState_asset, "maxDuration", "5"); } public static void ArenaSetup() { GameObject val = GameObject.Find("HOLDER: Final Arena"); if (Object.op_Implicit((Object)(object)val)) { Transform val2 = val.transform.Find("Columns_Inner"); if (Object.op_Implicit((Object)(object)val2)) { ((Component)val2).gameObject.SetActive(false); } Transform val3 = val.transform.Find("Rocks"); if (Object.op_Implicit((Object)(object)val3)) { ((Component)val3).gameObject.SetActive(false); } } SceneInfo instance = SceneInfo.instance; if (Object.op_Implicit((Object)(object)instance)) { Transform val4 = ((Component)instance).transform.Find("BrotherMissionController/BrotherEncounter, Phase 1/PhaseObjects/mdlBrotherThrone"); if (Object.op_Implicit((Object)(object)val4)) { ((Component)val4).gameObject.SetActive(true); } } } public static void SpawnPracticeModeShrine() { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) GameObject val = Object.Instantiate<GameObject>(youngTeleporter, new Vector3(1090.1f, -283.1f, 1138.6f), Quaternion.identity); GameObject obj = Object.Instantiate<GameObject>(((Component)practiceFire).gameObject, new Vector3(1090.1f, -283.1f, 1138.6f), Quaternion.identity); val.GetComponent<PurchaseInteraction>().NetworkcontextToken = "UMBRAL_PRACTICE_MODE_CONTEXT"; ((Object)val).name = "PracticeModeShrine"; obj.transform.parent = val.transform; obj.transform.localPosition = new Vector3(0f, 0f, 0f); NetworkServer.Spawn(val); } private void AddEntityStates() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0012: 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_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) bool flag = default(bool); ContentAddition.AddEntityState<GlassSpawnState>(ref flag); ContentAddition.AddEntityState<FireUmbralShards>(ref flag); ContentAddition.AddEntityState<UmbralHammerSlam>(ref flag); ContentAddition.AddEntityState<EnterUmbralLeap>(ref flag); ContentAddition.AddEntityState<HoldUmbralLeap>(ref flag); ContentAddition.AddEntityState<ExitUmbralLeap>(ref flag); ContentAddition.AddEntityState<UmbralBash>(ref flag); } private void CreateDoppelItem() { //IL_001f: 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_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_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) UmbralItem = ScriptableObject.CreateInstance<ItemDef>(); ((Object)UmbralItem).name = "UmbralMithrixUmbralItem"; UmbralItem.deprecatedTier = (ItemTier)3; ItemDef umbralItem = UmbralItem; ItemTag[] array = new ItemTag[4]; RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/); umbralItem.tags = (ItemTag[])(object)array; UmbralItem.nameToken = "UMBRALMITHRIX_UMBRAL_ITEM_NAME"; UmbralItem.pickupToken = "UMBRALMITHRIX_UMBRAL_ITEM_PICKUP"; UmbralItem.descriptionToken = "UMBRALMITHRIX_UMBRAL_ITEM_DESC"; UmbralItem.loreToken = "UMBRALMITHRIX_UMBRAL_ITEM_LORE"; UmbralItem.pickupIconSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/TeamDeath/texArtifactDeathDisabled.png").WaitForCompletion(); UmbralItem.pickupModelPrefab = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/TeamDeath/PickupTeamDeath.prefab").WaitForCompletion(), "PickupUmbralCore", false); Material material = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/InvadingDoppelganger/matDoppelganger.mat").WaitForCompletion(); Renderer[] componentsInChildren = UmbralItem.pickupModelPrefab.GetComponentsInChildren<Renderer>(); for (int i = 0; i < componentsInChildren.Length; i++) { componentsInChildren[i].material = material; } ContentAddition.AddItemDef(UmbralItem); } public static void SetVanillaEntityStateField(string fullEntityStatePath, string fieldName, string value) { //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) AsyncOperationHandle<EntityStateConfiguration> val = AssetAsyncReferenceManager<EntityStateConfiguration>.LoadAsset(new AssetReferenceT<EntityStateConfiguration>(fullEntityStatePath), (AsyncReferenceHandleUnloadType)2); val.Completed += delegate(AsyncOperationHandle<EntityStateConfiguration> x) { EntityStateConfiguration result = x.Result; for (int i = 0; i < result.serializedFieldsCollection.serializedFields.Length; i++) { if (result.serializedFieldsCollection.serializedFields[i].fieldName == fieldName) { result.serializedFieldsCollection.serializedFields[i].fieldValue.stringValue = value; } } }; } private void SetupVoidling() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) AsyncOperationHandle<GameObject> val = AssetAsyncReferenceManager<GameObject>.LoadAsset(new AssetReferenceT<GameObject>(RoR2_DLC1_VoidRaidCrab.MiniVoidRaidCrabBodyPhase3_prefab), (AsyncReferenceHandleUnloadType)2); val.Completed += delegate(AsyncOperationHandle<GameObject> x) { voidling = PrefabAPI.InstantiateClone(x.Result, "InactiveVoidling"); ModelLocator val2 = default(ModelLocator); if (voidling.TryGetComponent<ModelLocator>(ref val2)) { Transform modelTransform = val2.modelTransform; if (Object.op_Implicit((Object)(object)modelTransform)) { ((Component)modelTransform).gameObject.SetActive(false); } } SphereZone component = voidling.GetComponent<SphereZone>(); component.radius = 275f; if (Object.op_Implicit((Object)(object)component.rangeIndicator)) { MeshRenderer componentInChildren = ((Component)component.rangeIndicator).GetComponentInChildren<MeshRenderer>(); if (Object.op_Implicit((Object)(object)componentInChildren)) { ((Renderer)componentInChildren).sharedMaterials = (Material[])(object)new Material[3] { preBossMat, arenaWallMat, stealAuraMat }; } } FogDamageController component2 = voidling.GetComponent<FogDamageController>(); component2.healthFractionPerSecond = 0.01f; component2.healthFractionRampCoefficientPerSecond = 2.5f; }; } private void CloneAssets() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_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) AsyncOperationHandle<GameObject> val = AssetAsyncReferenceManager<GameObject>.LoadAsset(new AssetReferenceT<GameObject>(RoR2_Base_Brother.BrotherUltLineProjectileRotateLeft_prefab), (AsyncReferenceHandleUnloadType)2); val.Completed += delegate(AsyncOperationHandle<GameObject> x) { GameObject result2 = x.Result; leftUltLine = PrefabAPI.InstantiateClone(result2, "UmbralUltLineLeft"); leftP4Line = PrefabAPI.InstantiateClone(result2, "P4UltLineLeft"); staticUltLine = PrefabAPI.InstantiateClone(result2, "StaticUltLine"); Object.Destroy((Object)(object)staticUltLine.GetComponent<RotateAroundAxis>()); RotateAroundAxis component5 = leftUltLine.GetComponent<RotateAroundAxis>(); component5.fastRotationSpeed = 21f; component5.slowRotationSpeed = 21f; RotateAroundAxis component6 = leftP4Line.GetComponent<RotateAroundAxis>(); component6.fastRotationSpeed = 10f; component6.slowRotationSpeed = 10f; }; val = AssetAsyncReferenceManager<GameObject>.LoadAsset(new AssetReferenceT<GameObject>(RoR2_Base_Brother.BrotherUltLineProjectileRotateRight_prefab), (AsyncReferenceHandleUnloadType)2); val.Completed += delegate(AsyncOperationHandle<GameObject> x) { GameObject result = x.Result; rightUltLine = PrefabAPI.InstantiateClone(result, "UmbralUltLineRight"); rightP4Line = PrefabAPI.InstantiateClone(result, "P4UltLineRight"); RotateAroundAxis component3 = rightUltLine.GetComponent<RotateAroundAxis>(); component3.fastRotationSpeed = 21f; component3.slowRotationSpeed = 21f; RotateAroundAxis component4 = rightP4Line.GetComponent<RotateAroundAxis>(); component4.fastRotationSpeed = 10f; component4.slowRotationSpeed = 10f; }; val = AssetAsyncReferenceManager<GameObject>.LoadAsset(new AssetReferenceT<GameObject>(RoR2_Base_Brother.BrotherHurtBody_prefab), (AsyncReferenceHandleUnloadType)2); val.Completed += delegate(AsyncOperationHandle<GameObject> x) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) mithrixHurtP3 = PrefabAPI.InstantiateClone(x.Result, "BrotherHurtBodyP3"); mithrixHurtP3.GetComponent<EntityStateMachine>().initialStateType = new SerializableEntityStateType(typeof(StaggerEnter)); CharacterBody component = mithrixHurtP3.GetComponent<CharacterBody>(); component.bodyFlags = (BodyFlags)(component.bodyFlags | 0x10); component.baseMaxHealth = ModConfig.basehealth.Value; component.levelMaxHealth = ModConfig.levelhealth.Value; component.baseDamage = ModConfig.basedamage.Value / 2f; component.levelDamage = ModConfig.leveldamage.Value / 2f; ContentAddition.AddBody(mithrixHurtP3); mithrixHurt = x.Result; mithrixHurt.AddComponent<P4Controller>(); CharacterBody component2 = mithrixHurt.GetComponent<CharacterBody>(); component2.baseDamage = ModConfig.basedamage.Value; component2.levelDamage = ModConfig.leveldamage.Value; }; val = AssetAsyncReferenceManager<GameObject>.LoadAsset(new AssetReferenceT<GameObject>(RoR2_Base_Brother.BrotherHurtMaster_prefab), (AsyncReferenceHandleUnloadType)2); val.Completed += delegate(AsyncOperationHandle<GameObject> x) { //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_008e: 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) mithrixHurtP3Master = PrefabAPI.InstantiateClone(x.Result, "BrotherHurtMasterP3"); mithrixHurtP3Master.GetComponent<CharacterMaster>().bodyPrefab = mithrixHurtP3; ((Object)mithrixHurtP3Card).name = "cscBrotherHurtP3"; mithrixHurtP3Card.prefab = mithrixHurtP3Master; mithrixHurtP3Card.hullSize = mithrixHurtCard.hullSize; mithrixHurtP3Card.nodeGraphType = mithrixHurtCard.nodeGraphType; mithrixHurtP3Card.requiredFlags = mithrixHurtCard.requiredFlags; mithrixHurtP3Card.forbiddenFlags = mithrixHurtCard.forbiddenFlags; ContentAddition.AddMaster(mithrixHurtP3Master); }; val = AssetAsyncReferenceManager<GameObject>.LoadAsset(new AssetReferenceT<GameObject>(RoR2_Base_bazaar_Bazaar.Light_prefab), (AsyncReferenceHandleUnloadType)2); val.Completed += delegate(AsyncOperationHandle<GameObject> x) { practiceFire = PrefabAPI.InstantiateClone(((Component)x.Result.transform.Find("FireLODLevel")).gameObject, "PracticeFire").transform; }; val = AssetAsyncReferenceManager<GameObject>.LoadAsset(new AssetReferenceT<GameObject>(RoR2_Base_EliteLunar.LunarMissileProjectile_prefab), (AsyncReferenceHandleUnloadType)2); val.Completed += delegate(AsyncOperationHandle<GameObject> x) { lunarMissile = PrefabAPI.InstantiateClone(x.Result, "UmbralLunarMissile", false); }; val = AssetAsyncReferenceManager<GameObject>.LoadAsset(new AssetReferenceT<GameObject>(RoR2_Base_Vagrant.VagrantNovaAreaIndicator_prefab), (AsyncReferenceHandleUnloadType)2); val.Completed += delegate(AsyncOperationHandle<GameObject> x) { leapIndicatorPrefab = PrefabAPI.InstantiateClone(x.Result, "UmbralLeapIndicator"); leapIndicatorPrefab.AddComponent<NetworkIdentity>(); }; val = AssetAsyncReferenceManager<GameObject>.LoadAsset(new AssetReferenceT<GameObject>(RoR2_Base_Brother.BrotherSunderWave_prefab), (AsyncReferenceHandleUnloadType)2); val.Completed += delegate(AsyncOperationHandle<GameObject> x) { umbralLeapWave = PrefabAPI.InstantiateClone(x.Result, "UmbralLeapWave"); }; } private void LoadAssets() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or miss