Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of VoidBeacon v1.0.2
VoidBeacon.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using EntityStates; using EntityStates.VoidSurvivor; using EntityStates.VoidSurvivor.Weapon; using Microsoft.CodeAnalysis; using On.EntityStates.VoidSurvivor.Weapon; using On.RoR2.UI; using R2API; using RoR2; using RoR2.CharacterAI; using RoR2.Navigation; using RoR2.Skills; using RoR2.UI; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Events; using UnityEngine.Networking; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")] [assembly: AssemblyCompany("VoidBeacon")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("VoidBeacon")] [assembly: AssemblyTitle("VoidBeacon")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] 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 VoidBeacon { public class Enemies { private GameObject voidZombieBody = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidSurvivor/VoidSurvivorBody.prefab").WaitForCompletion(), "VoidZombieNux"); private GameObject voidZombieMaster = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidSurvivor/VoidSurvivorMonsterMaster.prefab").WaitForCompletion(), "VoidZombieNuxMaster"); private List<string> skillDriversToDestroy = new List<string> { "Back up a little for comfort", "Flee and Heal", "Void Blink Up", "Fire Corrupt Ball", "Fire Corrupt Beam", "Crush Self Heal" }; private SkillDef voidMelee = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC1/VoidSurvivor/SwingMelee.asset").WaitForCompletion(); private SkillDef voidBall = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC1/VoidSurvivor/ChargeMegaBlaster.asset").WaitForCompletion(); private SkillDef voidBlink = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC1/VoidSurvivor/VoidBlinkUp.asset").WaitForCompletion(); public static GameObject voidZombieSpawnEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidJailer/VoidJailerSpawnEffect.prefab").WaitForCompletion(), "VoidZombieSpawnEffectNux"); public static CharacterSpawnCard spawnCard = ScriptableObject.CreateInstance<CharacterSpawnCard>(); public Enemies() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_02e8: Unknown result type (might be due to invalid IL or missing references) //IL_02ed: Unknown result type (might be due to invalid IL or missing references) //IL_0350: Unknown result type (might be due to invalid IL or missing references) //IL_035b: Unknown result type (might be due to invalid IL or missing references) //IL_0366: Unknown result type (might be due to invalid IL or missing references) //IL_0371: Unknown result type (might be due to invalid IL or missing references) Transform transform = voidZombieSpawnEffect.transform; transform.localScale /= 4f; voidZombieSpawnEffect.AddComponent<NetworkIdentity>(); ContentAddition.AddEffect(voidZombieSpawnEffect); bool flag = default(bool); ContentAddition.AddEntityState<VoidZombieSpawn>(ref flag); ChangeEntityStateValue("RoR2/DLC1/VoidSurvivor/EntityStates.VoidSurvivor.Weapon.SwingMelee1.asset", "beginSwingSoundString", "Play_voidman_m1_corrupted_end"); ChangeEntityStateValue("RoR2/DLC1/VoidSurvivor/EntityStates.VoidSurvivor.Weapon.SwingMelee2.asset", "beginSwingSoundString", "Play_voidman_m1_corrupted_end"); ChangeEntityStateValue("RoR2/DLC1/VoidSurvivor/EntityStates.VoidSurvivor.Weapon.SwingMelee3.asset", "beginSwingSoundString", "Play_voidman_m1_corrupted_end"); Object.Destroy((Object)(object)voidZombieBody.GetComponent<VoidSurvivorController>()); AISkillDriver[] components = voidZombieMaster.GetComponents<AISkillDriver>(); foreach (AISkillDriver val in components) { val.requiredSkill = null; if (val.customName == "Fire Hand Beam") { val.minDistance = 0f; val.maxDistance = 4f; val.movementType = (MovementType)1; } if (val.customName.Contains("Chase")) { val.minDistance = 4f; val.shouldSprint = true; } if (val.customName.Contains("Blink")) { val.minDistance = 30f; } if (skillDriversToDestroy.Contains(val.customName)) { Object.Destroy((Object)(object)val); } } CharacterBody component = voidZombieBody.GetComponent<CharacterBody>(); component.baseMaxHealth = 225f; component.levelMaxHealth = 68f; component.baseDamage = 6f; component.levelDamage = 1.2f; component.baseNameToken = "Void Zombie"; component.subtitleNameToken = ""; GenericSkill[] components2 = voidZombieBody.GetComponents<GenericSkill>(); for (int i = 0; i < components2.Length; i++) { Object.Destroy((Object)(object)components2[i]); } ZombieSkills(); (from x in voidZombieBody.GetComponents<EntityStateMachine>() where x.customName == "Body" select x).First().initialStateType = new SerializableEntityStateType(typeof(VoidZombieSpawn)); voidZombieMaster.GetComponent<CharacterMaster>().bodyPrefab = voidZombieBody; ContentAddition.AddBody(voidZombieBody); ContentAddition.AddMaster(voidZombieMaster); ((Object)spawnCard).name = "cscVoidZombie"; ((SpawnCard)spawnCard).prefab = voidZombieMaster; ((SpawnCard)spawnCard).sendOverNetwork = true; ((SpawnCard)spawnCard).hullSize = (HullClassification)0; ((SpawnCard)spawnCard).nodeGraphType = (GraphType)0; ((SpawnCard)spawnCard).requiredFlags = (NodeFlags)0; ((SpawnCard)spawnCard).forbiddenFlags = (NodeFlags)4; ((SpawnCard)spawnCard).directorCreditCost = 20; ((SpawnCard)spawnCard).occupyPosition = true; } private void ZombieSkills() { //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_019d: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_01f0: Unknown result type (might be due to invalid IL or missing references) //IL_020f: Unknown result type (might be due to invalid IL or missing references) //IL_0214: Unknown result type (might be due to invalid IL or missing references) //IL_02f5: Unknown result type (might be due to invalid IL or missing references) //IL_0304: Unknown result type (might be due to invalid IL or missing references) //IL_0306: Unknown result type (might be due to invalid IL or missing references) SkillLocator component = voidZombieBody.GetComponent<SkillLocator>(); GenericSkill val = voidZombieBody.AddComponent<GenericSkill>(); val.skillName = "VoidZombiePrimary"; SkillFamily val2 = ScriptableObject.CreateInstance<SkillFamily>(); ((Object)val2).name = "VoidZombiePrimaryFamily"; val2.variants = (Variant[])(object)new Variant[1] { new Variant { skillDef = voidMelee } }; val._skillFamily = val2; ContentAddition.AddSkillFamily(val2); component.primary = val; SkillDef val3 = ScriptableObject.CreateInstance<SkillDef>(); val3.skillName = "VoidBall"; ((Object)val3).name = "VoidBall"; val3.activationState = new SerializableEntityStateType(typeof(ChargeMegaBlaster)); val3.activationStateMachineName = "Weapon"; val3.interruptPriority = voidBall.interruptPriority; val3.baseMaxStock = 1; val3.baseRechargeInterval = 20f; val3.rechargeStock = 1; val3.requiredStock = 1; val3.stockToConsume = 1; val3.dontAllowPastMaxStocks = true; val3.beginSkillCooldownOnSkillEnd = voidBall.beginSkillCooldownOnSkillEnd; val3.canceledFromSprinting = voidBall.canceledFromSprinting; val3.forceSprintDuringState = voidBall.forceSprintDuringState; val3.fullRestockOnAssign = true; val3.resetCooldownTimerOnUse = false; val3.isCombatSkill = true; val3.mustKeyPress = false; val3.cancelSprintingOnActivation = voidBall.cancelSprintingOnActivation; ContentAddition.AddSkillDef(val3); GenericSkill val4 = voidZombieBody.AddComponent<GenericSkill>(); val4.skillName = "VoidZombieSecondary"; SkillFamily val5 = ScriptableObject.CreateInstance<SkillFamily>(); ((Object)val5).name = "VoidZombieSecondaryFamily"; val5.variants = (Variant[])(object)new Variant[1] { new Variant { skillDef = val3 } }; val4._skillFamily = val5; ContentAddition.AddSkillFamily(val5); component.secondary = val4; SkillDef val6 = ScriptableObject.CreateInstance<SkillDef>(); val6.skillName = "VoidBlink"; ((Object)val6).name = "VoidBlink"; val6.activationState = new SerializableEntityStateType(typeof(VoidBlinkDown)); val6.activationStateMachineName = voidBlink.activationStateMachineName; val6.interruptPriority = voidBlink.interruptPriority; val6.baseMaxStock = 1; val6.baseRechargeInterval = 10f; val6.rechargeStock = 1; val6.requiredStock = 1; val6.stockToConsume = 1; val6.dontAllowPastMaxStocks = true; val6.beginSkillCooldownOnSkillEnd = voidBlink.beginSkillCooldownOnSkillEnd; val6.canceledFromSprinting = voidBlink.canceledFromSprinting; val6.forceSprintDuringState = voidBlink.forceSprintDuringState; val6.fullRestockOnAssign = true; val6.resetCooldownTimerOnUse = false; val6.isCombatSkill = true; val6.mustKeyPress = false; val6.cancelSprintingOnActivation = voidBlink.cancelSprintingOnActivation; ContentAddition.AddSkillDef(val6); GenericSkill val7 = voidZombieBody.AddComponent<GenericSkill>(); val7.skillName = "voidZombieUtility"; SkillFamily val8 = ScriptableObject.CreateInstance<SkillFamily>(); ((Object)val8).name = "VoidZombieUtilityFamily"; val8.variants = (Variant[])(object)new Variant[1] { new Variant { skillDef = val6 } }; val7._skillFamily = val8; ContentAddition.AddSkillFamily(val8); component.utility = val7; } private static void ChangeEntityStateValue(string entityStateConfiguration, string fieldName, string newValue) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) EntityStateConfiguration val = Addressables.LoadAssetAsync<EntityStateConfiguration>((object)entityStateConfiguration).WaitForCompletion(); for (int i = 0; i < val.serializedFieldsCollection.serializedFields.Length; i++) { if (val.serializedFieldsCollection.serializedFields[i].fieldName == fieldName) { val.serializedFieldsCollection.serializedFields[i].fieldValue.stringValue = newValue; } } } } [BepInPlugin("com.Nuxlar.VoidBeacon", "VoidBeacon", "1.0.2")] public class VoidBeacon : BaseUnityPlugin { private GameObject voidThing = PrefabAPI.InstantiateClone(((Component)Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/voidstage/VoidXYZMesh1OpenVariant.prefab").WaitForCompletion().transform.GetChild(2)).gameObject, "VoidBeaconSphere"); private GameObject voidBattery = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/DeepVoidPortalBattery/mdlVoidSignal.fbx").WaitForCompletion(), "VoidBeaconBase"); public void Awake() { //IL_0047: 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_0095: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Expected O, but got Unknown //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_0221: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Expected O, but got Unknown //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_023b: Unknown result type (might be due to invalid IL or missing references) //IL_0242: Unknown result type (might be due to invalid IL or missing references) //IL_0244: Unknown result type (might be due to invalid IL or missing references) //IL_024a: Expected O, but got Unknown //IL_02be: Unknown result type (might be due to invalid IL or missing references) //IL_02c3: Unknown result type (might be due to invalid IL or missing references) //IL_02c6: Unknown result type (might be due to invalid IL or missing references) //IL_02f2: Unknown result type (might be due to invalid IL or missing references) //IL_02fc: Expected O, but got Unknown //IL_0303: Unknown result type (might be due to invalid IL or missing references) //IL_030d: Expected O, but got Unknown new Enemies(); voidThing.AddComponent<NetworkIdentity>(); voidThing.transform.parent = voidBattery.transform; voidThing.transform.localPosition = new Vector3(0f, 4f, 0f); voidThing.transform.localScale = new Vector3(2.5f, 2.5f, 2.5f); voidBattery.transform.GetChild(2).localScale = new Vector3(1f, 1f, 2f); ((Object)voidBattery).name = "VoidBeacon"; voidBattery.AddComponent<NetworkIdentity>(); ((Component)voidBattery.transform.GetChild(0)).gameObject.AddComponent<BoxCollider>(); PurchaseInteraction val = voidBattery.AddComponent<PurchaseInteraction>(); val.contextToken = "Broadcast Si?gnal??"; val.NetworkdisplayNameToken = "Broadcast Si?gnal??"; voidBattery.GetComponent<Highlight>().targetRenderer = (Renderer)(object)((Component)voidBattery.transform.GetChild(0)).GetComponent<SkinnedMeshRenderer>(); GameObject obj = Object.Instantiate<GameObject>(new GameObject("Trigger"), voidBattery.transform); ((Collider)obj.AddComponent<BoxCollider>()).isTrigger = true; obj.AddComponent<EntityLocator>().entity = voidBattery; voidBattery.AddComponent<VoidBeaconManager>().purchaseInteraction = val; ((Behaviour)voidBattery.AddComponent<CrystalManager>()).enabled = false; CombatDirector obj2 = voidBattery.AddComponent<CombatDirector>(); ((Behaviour)obj2).enabled = false; obj2.moneyWaveIntervals = (RangeFloat[])(object)new RangeFloat[1] { new RangeFloat { min = 1f, max = 1f } }; InteractableSpawnCard val2 = ScriptableObject.CreateInstance<InteractableSpawnCard>(); ((Object)val2).name = "iscVoidBeacon"; ((SpawnCard)val2).prefab = voidBattery; ((SpawnCard)val2).sendOverNetwork = true; ((SpawnCard)val2).hullSize = (HullClassification)0; ((SpawnCard)val2).nodeGraphType = (GraphType)0; ((SpawnCard)val2).requiredFlags = (NodeFlags)0; ((SpawnCard)val2).forbiddenFlags = (NodeFlags)16; ((SpawnCard)val2).directorCreditCost = 0; ((SpawnCard)val2).occupyPosition = true; val2.orientToFloor = false; val2.skipSpawnWhenSacrificeArtifactEnabled = false; val2.maxSpawnsPerStage = 1; DirectorCard card = new DirectorCard { selectionWeight = 10, spawnCard = (SpawnCard)(object)val2 }; DirectorCardHolder val3 = new DirectorCardHolder { Card = card, InteractableCategory = (InteractableCategory)4 }; foreach (Stage item in new List<Stage> { (Stage)4, (Stage)2, (Stage)8, (Stage)16, (Stage)262144, (Stage)134217728, (Stage)64, (Stage)32, (Stage)131072, (Stage)256, (Stage)16384 }) { Helpers.AddNewInteractableToStage(val3, item, ""); } FireMegaBlasterBase.OnEnter += new hook_OnEnter(ReduceZombieDamage); DestroyTimeCrystals.GenerateString += new hook_GenerateString(DestroyTimeCrystals_GenerateString); } private void ReduceZombieDamage(orig_OnEnter orig, FireMegaBlasterBase self) { if (((Object)((EntityState)self).characterBody).name.Contains("VoidZombieNux")) { Debug.LogWarning((object)self.damageCoefficient); if (self is FireMegaBlasterBig) { self.damageCoefficient = 6f; } if (self is FireMegaBlasterSmall) { self.damageCoefficient = 3f; } } orig.Invoke(self); } private string DestroyTimeCrystals_GenerateString(orig_GenerateString orig, ObjectiveTracker self) { CrystalManager crystalManager = (CrystalManager)(object)InstanceTracker.FindInstancesEnumerable(typeof(CrystalManager)).First(); if (Object.op_Implicit((Object)(object)crystalManager)) { return string.Format(Language.GetString(self.baseToken), crystalManager.crystalsKilled, crystalManager.crystalsRequiredToKill); } return orig.Invoke(self); } } public class VoidBeaconManager : NetworkBehaviour { public PurchaseInteraction purchaseInteraction; private GameObject shrineUseEffect = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/ShrineUseEffect.prefab").WaitForCompletion(); private GameObject skybox = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/GameModes/InfiniteTowerRun/InfiniteTowerAssets/Weather, InfiniteTower.prefab").WaitForCompletion(); private GameObject signalEffect = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidSurvivor/VoidSurvivorMegaBlasterExplosion.prefab").WaitForCompletion(); public void Start() { if (NetworkServer.active && Object.op_Implicit((Object)(object)Run.instance)) { purchaseInteraction.SetAvailable(true); } ((UnityEvent<Interactor>)(object)purchaseInteraction.onPurchase).AddListener((UnityAction<Interactor>)OnPurchase); } [Server] public void OnPurchase(Interactor interactor) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Expected O, but got Unknown //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_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_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Expected O, but got Unknown //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Expected O, but got Unknown if (!NetworkServer.active) { Debug.LogWarning((object)"[Server] function 'VoidBeaconManager::OnPurchase(RoR2.Interactor)' called on client"); return; } EffectManager.SpawnEffect(shrineUseEffect, new EffectData { origin = ((Component)this).gameObject.transform.position, rotation = Quaternion.identity, scale = 3f, color = Color32.op_Implicit(Color.magenta) }, true); Transform val = ((Component)this).gameObject.transform.Find("VoidBeaconSphere"); EffectManager.SpawnEffect(signalEffect, new EffectData { origin = val.position, rotation = Quaternion.identity, scale = 1f }, true); ((Component)val).gameObject.SetActive(false); ((Component)this).gameObject.GetComponent<PurchaseInteraction>().SetAvailable(false); CrystalManager component = ((Component)this).gameObject.GetComponent<CrystalManager>(); component.skyboxInstance = Object.Instantiate<GameObject>(skybox, new Vector3(0f, 0f, 0f), Quaternion.identity); ((Behaviour)component).enabled = true; CombatDirector component2 = ((Component)this).gameObject.GetComponent<CombatDirector>(); component2.monsterCredit = Mathf.CeilToInt(60f * Run.instance.difficultyCoefficient); component2.monsterCardsSelection = new WeightedSelection<DirectorCard>(8); component2.monsterCardsSelection.AddChoice(new DirectorCard { spawnCard = (SpawnCard)(object)Enemies.spawnCard, selectionWeight = 1 }, 1f); ((Behaviour)component2).enabled = true; if (Object.op_Implicit((Object)(object)TeleporterInteraction.instance)) { ChildLocator component3 = ((Component)((Component)TeleporterInteraction.instance).GetComponent<ModelLocator>().modelTransform).GetComponent<ChildLocator>(); if (Object.op_Implicit((Object)(object)component3)) { ((Component)component3.FindChild("TimeCrystalProps")).gameObject.SetActive(true); ((Component)component3.FindChild("TimeCrystalBeaconBlocker")).gameObject.SetActive(true); } } } } public class CrystalManager : MonoBehaviour { public GameObject skyboxInstance; public SpawnCard crystalSpawnCard = Addressables.LoadAssetAsync<SpawnCard>((object)"RoR2/Base/WeeklyRun/bscTimeCrystal.asset").WaitForCompletion(); public uint crystalCount = 3u; public uint crystalsRequiredToKill = 3u; private BasicPickupDropTable voidDropTable = Addressables.LoadAssetAsync<BasicPickupDropTable>((object)"RoR2/Base/Common/dtVoidChest.asset").WaitForCompletion(); private List<OnDestroyCallback> crystalActiveList = new List<OnDestroyCallback>(); public uint crystalsKilled => (uint)(crystalCount - crystalActiveList.Count); public static event Action<CrystalManager> onBossGroupStartServer; public void OnStart() { if (NetworkServer.active) { CrystalManager.onBossGroupStartServer?.Invoke(this); } } private void OnEnable() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown DirectorPlacementRule val = new DirectorPlacementRule(); val.placementMode = (PlacementMode)4; for (int i = 0; i < crystalCount; i++) { crystalActiveList.Add(OnDestroyCallback.AddCallback(DirectorCore.instance.TrySpawnObject(new DirectorSpawnRequest(crystalSpawnCard, val, Run.instance.stageRng)), (Action<OnDestroyCallback>)delegate(OnDestroyCallback component) { crystalActiveList.Remove(component); })); } InstanceTracker.Add<CrystalManager>(this); ObjectivePanelController.collectObjectiveSources += ReportObjective; } private void OnDisable() { ObjectivePanelController.collectObjectiveSources -= ReportObjective; InstanceTracker.Remove<CrystalManager>(this); } public void ReportObjective(CharacterMaster master, List<ObjectiveSourceDescriptor> output) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) if (crystalsKilled != crystalCount) { output.Add(new ObjectiveSourceDescriptor { source = (Object)(object)this, master = master, objectiveType = typeof(DestroyTimeCrystals) }); } } public void FixedUpdate() { //IL_009c: 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_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Expected O, but got Unknown //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Expected O, but got Unknown if (!Object.op_Implicit((Object)(object)TeleporterInteraction.instance)) { return; } bool flag = crystalsRequiredToKill > crystalsKilled; if (flag == TeleporterInteraction.instance.locked) { return; } if (flag) { if (NetworkServer.active) { TeleporterInteraction.instance.locked = true; } return; } if (NetworkServer.active) { TeleporterInteraction.instance.locked = false; } ChildLocator component = ((Component)((Component)TeleporterInteraction.instance).GetComponent<ModelLocator>().modelTransform).GetComponent<ChildLocator>(); if (Object.op_Implicit((Object)(object)component)) { Util.PlaySound("Play_outro_planetExplode_01", ((Component)TeleporterInteraction.instance).gameObject); Transform val = component.FindChild("TimeCrystalBeaconBlocker"); EffectManager.SpawnEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/TimeCrystalDeath"), new EffectData { origin = ((Component)val).transform.position }, false); ((Component)val).gameObject.SetActive(false); ((Behaviour)this).enabled = false; TeleporterInteraction.instance.bossGroup.dropTable = (PickupDropTable)(object)voidDropTable; Object.Destroy((Object)(object)skyboxInstance); ((Behaviour)((Component)this).gameObject.GetComponent<CombatDirector>()).enabled = false; Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage { baseToken = "<color=#9b42f5>The teleporter hums with a strange new energy...</color>" }); } } } public class VoidZombieSpawn : GenericCharacterSpawnState { private Animator modelAnimator; private CharacterModel characterModel; private bool hasLaunched; public override void OnEnter() { //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) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown ((GenericCharacterSpawnState)this).OnEnter(); modelAnimator = ((EntityState)this).GetModelAnimator(); if (Object.op_Implicit((Object)(object)modelAnimator)) { characterModel = ((Component)modelAnimator).gameObject.GetComponent<CharacterModel>(); CharacterModel obj = characterModel; obj.invisibilityCount++; } Util.PlaySound("Play_voidJailer_spawn", ((EntityState)this).gameObject); EffectManager.SpawnEffect(Enemies.voidZombieSpawnEffect, new EffectData { origin = ((EntityState)this).characterBody.footPosition, rotation = Quaternion.identity, scale = 1f }, true); } public override void FixedUpdate() { //IL_0038: 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_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0054: 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_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Expected O, but got Unknown ((GenericCharacterSpawnState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= 1f && !hasLaunched) { hasLaunched = true; HealthComponent component = ((Component)((EntityState)this).characterBody).GetComponent<HealthComponent>(); if (Object.op_Implicit((Object)(object)component)) { component.TakeDamageForce(new DamageInfo { attacker = ((EntityState)this).gameObject, force = Vector3.up * 2000f, position = ((EntityState)this).characterBody.corePosition }, true, false); CharacterModel obj = characterModel; obj.invisibilityCount--; } } } } }