Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of ImprovedCommandEssence v1.4.5
ImprovedCommandEssence.dll
Decompiled a year 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 BepInEx.Configuration; using EntityStates; using EntityStates.Scrapper; using Microsoft.CodeAnalysis; using On.EntityStates.Scrapper; using On.RoR2; using On.RoR2.Artifacts; using RoR2; using RoR2.Artifacts; using UnityEngine; 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("ImprovedCommandEssence")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+78aa6b457ebb220eaa0428592846d9319bb08c08")] [assembly: AssemblyProduct("ImprovedCommandEssence")] [assembly: AssemblyTitle("ImprovedCommandEssence")] [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 ImprovedCommandEssence { [BepInPlugin("Cercain.ImprovedCommandEssence", "ImprovedCommandEssence", "1.4.4")] public class ImprovedCommandEssence : BaseUnityPlugin { [CompilerGenerated] private static class <>O { public static hook_OnGenerateInteractableCardSelection <0>__OnGenCommandCards; } public const string PluginGUID = "Cercain.ImprovedCommandEssence"; public const string PluginAuthor = "Cercain"; public const string PluginName = "ImprovedCommandEssence"; public const string PluginVersion = "1.4.4"; public static ConfigFile configFile = new ConfigFile(Paths.ConfigPath + "\\ImprovedCommandEssence.cfg", true); public static ConfigEntry<int> itemAmountCommon { get; set; } public static ConfigEntry<int> itemAmountUncommon { get; set; } public static ConfigEntry<int> itemAmountLegendary { get; set; } public static ConfigEntry<int> itemAmountLunar { get; set; } public static ConfigEntry<int> itemAmountVoid { get; set; } public static ConfigEntry<int> itemAmountEquip { get; set; } public static ConfigEntry<int> itemAmountAspect { get; set; } public static ConfigEntry<int> itemAmountPotential { get; set; } public static ConfigEntry<int> itemAmountPotentialCache { get; set; } public static ConfigEntry<int> itemAmountBoss { get; set; } public static ConfigEntry<bool> keepCategory { get; set; } public static ConfigEntry<bool> onInBazaar { get; set; } public static ConfigEntry<bool> onInDropShip { get; set; } public static ConfigEntry<bool> onForHidden { get; set; } public static ConfigEntry<bool> onForAdaptive { get; set; } public static ConfigEntry<bool> onForYellowBossDrops { get; set; } public static ConfigEntry<bool> onForPotential { get; set; } public static ConfigEntry<bool> onForDelusion { get; set; } public static ConfigEntry<bool> onForAspect { get; set; } public static ConfigEntry<bool> sameBossDrops { get; set; } public static ConfigEntry<bool> onForTrophy { get; set; } public static ConfigEntry<bool> enableScrappers { get; set; } public static ConfigEntry<bool> enablePrinters { get; set; } public static ConfigEntry<bool> enableMultishops { get; set; } public static ConfigEntry<bool> scrappersDropEssence { get; set; } public static ConfigEntry<int> essenceChance { get; set; } public static ConfigEntry<string> customCompatibility { get; set; } private void ConfigOnSettingChanged(object sender, SettingChangedEventArgs e) { if (itemAmountCommon.Value <= 0) { itemAmountCommon.Value = 1; } if (itemAmountUncommon.Value <= 0) { itemAmountUncommon.Value = 1; } if (itemAmountLegendary.Value <= 0) { itemAmountLegendary.Value = 1; } if (itemAmountLunar.Value <= 0) { itemAmountLunar.Value = 1; } if (itemAmountVoid.Value <= 0) { itemAmountVoid.Value = 1; } if (itemAmountEquip.Value <= 0) { itemAmountEquip.Value = 1; } if (essenceChance.Value > 100) { essenceChance.Value = 100; } if (essenceChance.Value < 0) { essenceChance.Value = 0; } } public void OnEnable() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Expected O, but got Unknown //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Expected O, but got Unknown //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Expected O, but got Unknown //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Expected O, but got Unknown //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Expected O, but got Unknown //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Expected O, but got Unknown //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Expected O, but got Unknown //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Expected O, but got Unknown //IL_0195: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Expected O, but got Unknown //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Expected O, but got Unknown //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Expected O, but got Unknown //IL_0214: Unknown result type (might be due to invalid IL or missing references) //IL_021e: Expected O, but got Unknown //IL_023e: Unknown result type (might be due to invalid IL or missing references) //IL_0248: Expected O, but got Unknown //IL_0268: Unknown result type (might be due to invalid IL or missing references) //IL_0272: Expected O, but got Unknown //IL_0292: Unknown result type (might be due to invalid IL or missing references) //IL_029c: Expected O, but got Unknown //IL_02bc: Unknown result type (might be due to invalid IL or missing references) //IL_02c6: Expected O, but got Unknown //IL_02e6: Unknown result type (might be due to invalid IL or missing references) //IL_02f0: Expected O, but got Unknown //IL_0310: Unknown result type (might be due to invalid IL or missing references) //IL_031a: Expected O, but got Unknown //IL_033a: Unknown result type (might be due to invalid IL or missing references) //IL_0344: Expected O, but got Unknown //IL_0364: Unknown result type (might be due to invalid IL or missing references) //IL_036e: Expected O, but got Unknown //IL_038e: Unknown result type (might be due to invalid IL or missing references) //IL_0398: Expected O, but got Unknown //IL_03b8: Unknown result type (might be due to invalid IL or missing references) //IL_03c2: Expected O, but got Unknown //IL_03e2: Unknown result type (might be due to invalid IL or missing references) //IL_03ec: Expected O, but got Unknown //IL_040c: Unknown result type (might be due to invalid IL or missing references) //IL_0416: Expected O, but got Unknown //IL_0436: Unknown result type (might be due to invalid IL or missing references) //IL_0440: Expected O, but got Unknown //IL_0463: Unknown result type (might be due to invalid IL or missing references) //IL_046d: Expected O, but got Unknown //IL_0474: Unknown result type (might be due to invalid IL or missing references) //IL_047e: Expected O, but got Unknown //IL_0485: Unknown result type (might be due to invalid IL or missing references) //IL_048f: Expected O, but got Unknown //IL_0496: Unknown result type (might be due to invalid IL or missing references) //IL_04a0: Expected O, but got Unknown //IL_04b3: Unknown result type (might be due to invalid IL or missing references) //IL_04bd: Expected O, but got Unknown //IL_04d0: Unknown result type (might be due to invalid IL or missing references) //IL_04da: Expected O, but got Unknown //IL_04ed: Unknown result type (might be due to invalid IL or missing references) //IL_04f7: Expected O, but got Unknown //IL_052b: Unknown result type (might be due to invalid IL or missing references) //IL_0530: Unknown result type (might be due to invalid IL or missing references) //IL_0536: Expected O, but got Unknown //IL_054e: Unknown result type (might be due to invalid IL or missing references) //IL_0558: Expected O, but got Unknown //IL_057c: Unknown result type (might be due to invalid IL or missing references) //IL_0586: Expected O, but got Unknown //IL_056b: Unknown result type (might be due to invalid IL or missing references) //IL_0575: Expected O, but got Unknown itemAmountCommon = configFile.Bind<int>("ImprovedCommandEssence", "itemAmountCommon", 6, new ConfigDescription("Set the amount of Common (white) options shown when opening White Command Essences.", (AcceptableValueBase)null, Array.Empty<object>())); itemAmountUncommon = configFile.Bind<int>("ImprovedCommandEssence", "itemAmountUncommon", 4, new ConfigDescription("Set the amount of Uncommon (Green) options shown when opening Green Command Essences.", (AcceptableValueBase)null, Array.Empty<object>())); itemAmountLegendary = configFile.Bind<int>("ImprovedCommandEssence", "itemAmountLegendary", 2, new ConfigDescription("Set the amount of Legendary (Red) options shown when opening Red Command Essences.", (AcceptableValueBase)null, Array.Empty<object>())); itemAmountBoss = configFile.Bind<int>("ImprovedCommandEssence", "itemAmountBoss", 2, new ConfigDescription("Set the amount of Boss (Yellow) items shown when opening Yellow Command Essences with 'onForYellowBossDrops' set to true.", (AcceptableValueBase)null, Array.Empty<object>())); itemAmountLunar = configFile.Bind<int>("ImprovedCommandEssence", "itemAmountLunar", 2, new ConfigDescription("Set the amount of Blue items shown when opening Lunar Command Essences.", (AcceptableValueBase)null, Array.Empty<object>())); itemAmountVoid = configFile.Bind<int>("ImprovedCommandEssence", "itemAmountVoid", 2, new ConfigDescription("Set the amount of Blue items shown when opening Void Command Essences.", (AcceptableValueBase)null, Array.Empty<object>())); itemAmountEquip = configFile.Bind<int>("ImprovedCommandEssence", "itemAmountEquip", 4, new ConfigDescription("Set the amount of Orange items shown when opening Equiptment Command Essences.", (AcceptableValueBase)null, Array.Empty<object>())); itemAmountAspect = configFile.Bind<int>("ImprovedCommandEssence", "itemAmountAspect", 2, new ConfigDescription("Set the amount of Aspect items shown when opening Aspect Command Essences.", (AcceptableValueBase)null, Array.Empty<object>())); itemAmountPotential = configFile.Bind<int>("ImprovedCommandEssence", "itemAmountPotential", 6, new ConfigDescription("Set the amount of items shown when opening a Void Potential from a Void Cache.", (AcceptableValueBase)null, Array.Empty<object>())); itemAmountPotentialCache = configFile.Bind<int>("ImprovedCommandEssence", "itemAmountPotentialCache", 4, new ConfigDescription("Set the amount of items shown when opening a Void Potential from a Void Triple.", (AcceptableValueBase)null, Array.Empty<object>())); essenceChance = configFile.Bind<int>("ImprovedCommandEssence", "essenceChance", 100, new ConfigDescription("Set the chance for item drops to drop as a Command Essence (0-100) from non-explicit chests", (AcceptableValueBase)null, Array.Empty<object>())); keepCategory = configFile.Bind<bool>("ImprovedCommandEssence", "keepCategory", true, new ConfigDescription("Set if category chests only show items of the corresponding category.", (AcceptableValueBase)null, Array.Empty<object>())); onInBazaar = configFile.Bind<bool>("ImprovedCommandEssence", "onInBazaar", false, new ConfigDescription("Set if the Command Artifact is turn on in the Bazaar.", (AcceptableValueBase)null, Array.Empty<object>())); onInDropShip = configFile.Bind<bool>("ImprovedCommandEssence", "onInDropShip", false, new ConfigDescription("Set if the Command Artifact is turn on for Drop Ship items.", (AcceptableValueBase)null, Array.Empty<object>())); onForHidden = configFile.Bind<bool>("ImprovedCommandEssence", "onForHidden", true, new ConfigDescription("When 'onInDropShip' is false, set if hidden (?) items drop as a Command Essence or the hidden item.", (AcceptableValueBase)null, Array.Empty<object>())); onForAdaptive = configFile.Bind<bool>("ImprovedCommandEssence", "onForAdaptive", false, new ConfigDescription("Set if Adaptive Chests will drop a Command Essense (true) or their item (false).", (AcceptableValueBase)null, Array.Empty<object>())); onForYellowBossDrops = configFile.Bind<bool>("ImprovedCommandEssence", "onForYellowBossDrops", true, new ConfigDescription("Set if boss items dropped by the teleporter event will drop a Command Essence (true) or their item (false).", (AcceptableValueBase)null, Array.Empty<object>())); onForPotential = configFile.Bind<bool>("ImprovedCommandEssence", "onForPotential", false, new ConfigDescription("Set if the Command Artifact is turn on for Void Potentials and Void Caches.", (AcceptableValueBase)null, Array.Empty<object>())); onForDelusion = configFile.Bind<bool>("ImprovedCommandEssence", "onForDelusion", false, new ConfigDescription("Set if the items dropped by the Delusion artifact drop as their item or a Command Essence.", (AcceptableValueBase)null, Array.Empty<object>())); onForAspect = configFile.Bind<bool>("ImprovedCommandEssence", "onForAspect", false, new ConfigDescription("Set if the Aspects dropped by Elites drop as their item or a Command Essence.", (AcceptableValueBase)null, Array.Empty<object>())); sameBossDrops = configFile.Bind<bool>("ImprovedCommandEssence", "sameBossDrops", true, new ConfigDescription("Set if the Command Essences that drop from the Teleporter boss give the same options.", (AcceptableValueBase)null, Array.Empty<object>())); onForTrophy = configFile.Bind<bool>("ImprovedCommandEssence", "onForTrophy", false, new ConfigDescription("Set if the item dropped by bosses killed via Trophy Hunter's Tricorn drop as a Command Essence (true) or the boss item (false)", (AcceptableValueBase)null, Array.Empty<object>())); enableScrappers = configFile.Bind<bool>("ImprovedCommandEssence", "enableScrappers", false, new ConfigDescription("Set if Scrappers spawn", (AcceptableValueBase)null, Array.Empty<object>())); enablePrinters = configFile.Bind<bool>("ImprovedCommandEssence", "enablePrinters", false, new ConfigDescription("Set if Printers spawn (onInDropShip must be on to drop as the item)", (AcceptableValueBase)null, Array.Empty<object>())); enableMultishops = configFile.Bind<bool>("ImprovedCommandEssence", "enableTerminals", false, new ConfigDescription("Set if Multishops spawn (onInDropShip must be on to drop as the item)", (AcceptableValueBase)null, Array.Empty<object>())); scrappersDropEssence = configFile.Bind<bool>("ImprovedCommandEssence", "scrappersDropEssence", false, new ConfigDescription("Set if Scrappers drop scrap (false) or Command Essence (true)", (AcceptableValueBase)null, Array.Empty<object>())); ((BaseUnityPlugin)this).Config.SettingChanged += ConfigOnSettingChanged; PickupPickerController.SetOptionsFromPickupForCommandArtifact += new hook_SetOptionsFromPickupForCommandArtifact(SetOptions); ChestBehavior.BaseItemDrop += new hook_BaseItemDrop(BaseItemDrop); PickupDropletController.OnCollisionEnter += new hook_OnCollisionEnter(DropletCollisionEnter); BossGroup.DropRewards += new hook_DropRewards(BossGroupDropRewards); if (!onInDropShip.Value) { ShopTerminalBehavior.DropPickup += new hook_DropPickup(TerminalDrop); } if (!onForAdaptive.Value) { RouletteChestController.EjectPickupServer += new hook_EjectPickupServer(RouletteEject); } if (!onForTrophy.Value) { EquipmentSlot.FireBossHunter += new hook_FireBossHunter(BossHunterDrop); } if (enableScrappers.Value || enableMultishops.Value || enablePrinters.Value) { object obj = <>O.<0>__OnGenCommandCards; if (obj == null) { hook_OnGenerateInteractableCardSelection val = OnGenCommandCards; <>O.<0>__OnGenCommandCards = val; obj = (object)val; } CommandArtifactManager.OnGenerateInteractableCardSelection += (hook_OnGenerateInteractableCardSelection)obj; } if (!scrappersDropEssence.Value) { ScrappingToIdle.OnEnter += new hook_OnEnter(ScrapperDrop); } if (!onForPotential.Value) { OptionChestBehavior.Roll += new hook_Roll(PotentialRoll); } OptionChestBehavior.ItemDrop += new hook_ItemDrop(OptionItemDrop); } [Server] public void PotentialRoll(orig_Roll orig, OptionChestBehavior self) { if (!RunArtifactManager.instance.IsArtifactEnabled(Artifacts.commandArtifactDef)) { orig.Invoke(self); } else if (!NetworkServer.active) { Debug.LogWarning((object)"[Server] function 'System.Void RoR2.OptionChestBehavior::Roll()' called on client"); } else if (((Component)self).gameObject.GetComponent<GenericDisplayNameProvider>().displayToken == "LOCKBOXVOID_NAME") { self.generatedDrops = self.dropTable.GenerateUniqueDrops(itemAmountPotentialCache.Value, self.rng); } else { self.generatedDrops = self.dropTable.GenerateUniqueDrops(itemAmountPotential.Value, self.rng); } } [Server] public void OptionItemDrop(orig_ItemDrop orig, OptionChestBehavior self) { //IL_004d: 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_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) if (!RunArtifactManager.instance.IsArtifactEnabled(Artifacts.commandArtifactDef)) { orig.Invoke(self); } else if (!NetworkServer.active) { Debug.LogWarning((object)"[Server] function 'System.Void RoR2.OptionChestBehavior::ItemDrop()' called on client"); } else if (self.generatedDrops != null && self.generatedDrops.Length != 0) { TrackBehaviour track = new TrackBehaviour { PickupSource = PickupSource.VoidPotential }; CreatePickupInfo pickupInfo = new CreatePickupInfo { pickerOptions = PickupPickerController.GenerateOptionsFromArray(self.generatedDrops), prefabOverride = self.pickupPrefab, position = self.dropTransform.position, rotation = Quaternion.identity }; ((CreatePickupInfo)(ref pickupInfo)).pickupIndex = PickupCatalog.FindPickupIndex(self.displayTier); CreatePickupDroplet(pickupInfo, Vector3.up * self.dropUpVelocityStrength + self.dropTransform.forward * self.dropForwardVelocityStrength, track); self.generatedDrops = null; } } private bool BossHunterDrop(orig_FireBossHunter orig, EquipmentSlot self) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: 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_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0111: 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_025d: Unknown result type (might be due to invalid IL or missing references) //IL_0264: Expected O, but got Unknown //IL_0273: Unknown result type (might be due to invalid IL or missing references) //IL_0275: Unknown result type (might be due to invalid IL or missing references) //IL_027f: 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_02a2: Unknown result type (might be due to invalid IL or missing references) //IL_02a4: Unknown result type (might be due to invalid IL or missing references) //IL_02a9: Unknown result type (might be due to invalid IL or missing references) //IL_02ae: Unknown result type (might be due to invalid IL or missing references) //IL_02b0: 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_02b6: Unknown result type (might be due to invalid IL or missing references) //IL_02bd: Unknown result type (might be due to invalid IL or missing references) //IL_02be: Unknown result type (might be due to invalid IL or missing references) //IL_02c0: Unknown result type (might be due to invalid IL or missing references) //IL_02cb: Expected O, but got Unknown //IL_031d: Unknown result type (might be due to invalid IL or missing references) //IL_0457: Unknown result type (might be due to invalid IL or missing references) //IL_0461: Unknown result type (might be due to invalid IL or missing references) //IL_047c: Unknown result type (might be due to invalid IL or missing references) //IL_03ab: Unknown result type (might be due to invalid IL or missing references) //IL_03b0: Unknown result type (might be due to invalid IL or missing references) //IL_03b8: 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_03c3: 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_03d1: Unknown result type (might be due to invalid IL or missing references) //IL_03d6: Unknown result type (might be due to invalid IL or missing references) //IL_03db: Unknown result type (might be due to invalid IL or missing references) //IL_03e0: Unknown result type (might be due to invalid IL or missing references) //IL_03e5: Unknown result type (might be due to invalid IL or missing references) //IL_03ed: Unknown result type (might be due to invalid IL or missing references) //IL_0402: Expected O, but got Unknown //IL_0359: Unknown result type (might be due to invalid IL or missing references) //IL_035e: 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_0370: Unknown result type (might be due to invalid IL or missing references) //IL_0378: Unknown result type (might be due to invalid IL or missing references) //IL_037d: Unknown result type (might be due to invalid IL or missing references) //IL_0382: Unknown result type (might be due to invalid IL or missing references) //IL_038a: Unknown result type (might be due to invalid IL or missing references) //IL_039f: Expected O, but got Unknown if (!RunArtifactManager.instance.IsArtifactEnabled(Artifacts.commandArtifactDef)) { return orig.Invoke(self); } self.UpdateTargets(Equipment.BossHunter.equipmentIndex, true); HurtBox hurtBox = self.currentTarget.hurtBox; DeathRewards val; if ((Object)(object)hurtBox == (Object)null) { val = null; } else { HealthComponent healthComponent = hurtBox.healthComponent; if ((Object)(object)healthComponent == (Object)null) { val = null; } else { CharacterBody body = healthComponent.body; if ((Object)(object)body == (Object)null) { val = null; } else { GameObject gameObject = ((Component)body).gameObject; val = (((Object)(object)gameObject != (Object)null) ? gameObject.GetComponent<DeathRewards>() : null); } } } DeathRewards val2 = val; if (Object.op_Implicit((Object)(object)hurtBox) && Object.op_Implicit((Object)(object)val2)) { TrackBehaviour trackBehaviour = new TrackBehaviour(); trackBehaviour.ItemTag = (ItemTag)0; trackBehaviour.PickupSource = PickupSource.BossHunter; CharacterBody body2 = hurtBox.healthComponent.body; Vector3 val3 = (Object.op_Implicit((Object)(object)body2) ? body2.corePosition : Vector3.zero); Vector3 val4 = val3 - self.characterBody.corePosition; Vector3 normalized = ((Vector3)(ref val4)).normalized; CreatePickupDroplet(val2.bossDropTable.GenerateDrop(self.rng), val3, normalized * 15f, trackBehaviour); Object val5; if ((Object)(object)hurtBox == (Object)null) { val5 = null; } else { HealthComponent healthComponent2 = hurtBox.healthComponent; if ((Object)(object)healthComponent2 == (Object)null) { val5 = null; } else { CharacterBody body3 = healthComponent2.body; val5 = (Object)(object)(((Object)(object)body3 != (Object)null) ? body3.master : null); } } if (Object.op_Implicit(val5)) { hurtBox.healthComponent.body.master.TrueKill(((Component)this).gameObject, (GameObject)null, (DamageType)0); } CharacterModel component = ((Component)hurtBox.hurtBoxGroup).GetComponent<CharacterModel>(); if (Object.op_Implicit((Object)(object)component)) { TemporaryOverlay obj = ((Component)component).gameObject.AddComponent<TemporaryOverlay>(); obj.duration = 0.1f; obj.animateShaderAlpha = true; obj.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f); obj.destroyComponentOnEnd = true; obj.originalMaterial = LegacyResourcesAPI.Load<Material>("Materials/matHuntressFlashBright"); obj.AddToCharacerModel(component); TemporaryOverlay obj2 = ((Component)component).gameObject.AddComponent<TemporaryOverlay>(); obj2.duration = 1.2f; obj2.animateShaderAlpha = true; obj2.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f); obj2.destroyComponentOnEnd = true; obj2.originalMaterial = LegacyResourcesAPI.Load<Material>("Materials/matGhostEffect"); obj2.AddToCharacerModel(component); } DamageInfo val6 = new DamageInfo(); val6.attacker = ((Component)this).gameObject; val6.force = -normalized * 2500f; self.healthComponent.TakeDamageForce(val6, true, false); GameObject obj3 = LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/BossHunterKillEffect"); Quaternion rotation = Util.QuaternionSafeLookRotation(normalized, Vector3.up); EffectManager.SpawnEffect(obj3, new EffectData { origin = val3, rotation = rotation }, true); ModelLocator component2 = ((Component)this).gameObject.GetComponent<ModelLocator>(); CharacterModel val7; if ((Object)(object)component2 == (Object)null) { val7 = null; } else { Transform modelTransform = component2.modelTransform; val7 = (((Object)(object)modelTransform != (Object)null) ? ((Component)modelTransform).GetComponent<CharacterModel>() : null); } CharacterModel val8 = val7; if (Object.op_Implicit((Object)(object)val8)) { foreach (GameObject equipmentDisplayObject in val8.GetEquipmentDisplayObjects(Equipment.BossHunter.equipmentIndex)) { if (((Object)equipmentDisplayObject).name.Contains("DisplayTricorn")) { EffectManager.SpawnEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/BossHunterHatEffect"), new EffectData { origin = equipmentDisplayObject.transform.position, rotation = equipmentDisplayObject.transform.rotation, scale = equipmentDisplayObject.transform.localScale.x }, true); } else { EffectManager.SpawnEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/BossHunterGunEffect"), new EffectData { origin = equipmentDisplayObject.transform.position, rotation = Util.QuaternionSafeLookRotation(val3 - equipmentDisplayObject.transform.position, Vector3.up), scale = equipmentDisplayObject.transform.localScale.x }, true); } } } CharacterBody characterBody = self.characterBody; if (Object.op_Implicit((Object)(object)(((Object)(object)characterBody != (Object)null) ? characterBody.inventory : null))) { CharacterMasterNotificationQueue.PushEquipmentTransformNotification(self.characterBody.master, self.characterBody.inventory.currentEquipmentIndex, Equipment.BossHunterConsumed.equipmentIndex, (TransformationType)0); self.characterBody.inventory.SetEquipmentIndex(Equipment.BossHunterConsumed.equipmentIndex); } self.InvalidateCurrentTarget(); return true; } return false; } private void BossGroupDropRewards(orig_DropRewards orig, BossGroup self) { //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_0198: 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_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_0218: Unknown result type (might be due to invalid IL or missing references) //IL_03b8: Unknown result type (might be due to invalid IL or missing references) //IL_03c5: Unknown result type (might be due to invalid IL or missing references) //IL_03ca: 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_03db: Unknown result type (might be due to invalid IL or missing references) //IL_03dd: Unknown result type (might be due to invalid IL or missing references) //IL_03e2: Unknown result type (might be due to invalid IL or missing references) //IL_02bd: Unknown result type (might be due to invalid IL or missing references) //IL_02c2: Unknown result type (might be due to invalid IL or missing references) //IL_029e: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_037b: Unknown result type (might be due to invalid IL or missing references) //IL_0388: Unknown result type (might be due to invalid IL or missing references) //IL_0396: Unknown result type (might be due to invalid IL or missing references) //IL_0398: Unknown result type (might be due to invalid IL or missing references) //IL_039d: Unknown result type (might be due to invalid IL or missing references) //IL_039f: Unknown result type (might be due to invalid IL or missing references) //IL_032c: Unknown result type (might be due to invalid IL or missing references) //IL_02e3: Unknown result type (might be due to invalid IL or missing references) if (!RunArtifactManager.instance.IsArtifactEnabled(Artifacts.commandArtifactDef)) { orig.Invoke(self); return; } if (!Object.op_Implicit((Object)(object)Run.instance)) { Debug.LogError((object)"No valid run instance!"); return; } if (self.rng == null) { Debug.LogError((object)"RNG is null!"); return; } int participatingPlayerCount = Run.instance.participatingPlayerCount; if (participatingPlayerCount == 0) { return; } if (Object.op_Implicit((Object)(object)self.dropPosition)) { PickupIndex none = PickupIndex.none; Option[] optionsFromPickupIndex; if (Object.op_Implicit((Object)(object)self.dropTable)) { none = self.dropTable.GenerateDrop(self.rng); optionsFromPickupIndex = PickupPickerController.GetOptionsFromPickupIndex(none); } else { List<PickupIndex> list = Run.instance.availableTier2DropList; if (self.forceTier3Reward) { list = Run.instance.availableTier3DropList; } none = self.rng.NextElementUniform<PickupIndex>(list); optionsFromPickupIndex = PickupPickerController.GetOptionsFromPickupIndex(none); } int itemAmountFromTier = GetItemAmountFromTier(((PickupIndex)(ref optionsFromPickupIndex[0].pickupIndex)).pickupDef); optionsFromPickupIndex = (from x in optionsFromPickupIndex.ToList() orderby self.rng.Next() select x).Take(itemAmountFromTier).ToArray(); int num = 1 + self.bonusRewardCount; if (self.scaleRewardsByPlayerCount) { num *= participatingPlayerCount; } float num2 = 360f / (float)num; Vector3 val = Quaternion.AngleAxis((float)Random.Range(0, 360), Vector3.up) * (Vector3.up * 40f + Vector3.forward * 5f); Quaternion val2 = Quaternion.AngleAxis(num2, Vector3.up); bool flag = self.bossDrops != null && self.bossDrops.Count > 0; bool flag2 = self.bossDropTables != null && self.bossDropTables.Count > 0; int num3 = 0; Option[] array = null; while (num3 < num) { TrackBehaviour trackBehaviour = new TrackBehaviour(); trackBehaviour.PickupSource = PickupSource.Boss; Option[] options = optionsFromPickupIndex; PickupIndex val3 = none; if (self.bossDrops != null && (flag || flag2) && self.rng.nextNormalizedFloat <= self.bossDropChance) { trackBehaviour.PickupSource = PickupSource.YellowBoss; Debug.Log((object)"Generated Boss Rewards"); if (flag2) { PickupDropTable val4 = self.rng.NextElementUniform<PickupDropTable>(self.bossDropTables); if ((Object)(object)val4 != (Object)null) { val3 = val4.GenerateDrop(self.rng); } } else { val3 = self.rng.NextElementUniform<PickupIndex>(self.bossDrops); } if (onForYellowBossDrops.Value) { if (sameBossDrops.Value) { if (array == null) { array = (from x in PickupPickerController.GetOptionsFromPickupIndex(val3) orderby self.rng.Next() select x).Take(itemAmountBoss.Value).ToArray(); } options = array; } else { options = (from x in PickupPickerController.GetOptionsFromPickupIndex(val3) orderby self.rng.Next() select x).Take(itemAmountBoss.Value).ToArray(); } } else { options = (Option[])(object)new Option[1] { new Option { available = Run.instance.IsPickupAvailable(val3), pickupIndex = val3 } }; } } trackBehaviour.ItemTag = (ItemTag)0; trackBehaviour.Options = options; CreatePickupDroplet(val3, self.dropPosition.position, val, trackBehaviour); num3++; val = val2 * val; } } else { Debug.LogWarning((object)"dropPosition not set for BossGroup! No item will be spawned."); } } private static void OnGenCommandCards(orig_OnGenerateInteractableCardSelection orig, SceneDirector sceneDirector, DirectorCardCategorySelection dccs) { dccs.RemoveCardsThatFailFilter((Predicate<DirectorCard>)CheckCardsFilter); } private static bool CheckCardsFilter(DirectorCard card) { GameObject prefab = card.spawnCard.prefab; if (!enableMultishops.Value && Object.op_Implicit((Object)(object)prefab.GetComponent<MultiShopController>())) { return false; } if (!enableScrappers.Value && Object.op_Implicit((Object)(object)prefab.GetComponent<ScrapperController>())) { return false; } if (!enablePrinters.Value && Object.op_Implicit((Object)(object)prefab.GetComponent<ShopTerminalBehavior>())) { return false; } return true; } private void ScrapperDrop(orig_OnEnter orig, ScrappingToIdle self) { //IL_00ef: 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_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0165: 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_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Expected I4, but got Unknown //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: 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_0137: Unknown result type (might be due to invalid IL or missing references) //IL_013c: 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_0149: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) if (!RunArtifactManager.instance.IsArtifactEnabled(Artifacts.commandArtifactDef)) { orig.Invoke(self); return; } if (Object.op_Implicit((Object)(object)((EntityState)self).characterBody)) { ((BaseState)self).attackSpeedStat = ((EntityState)self).characterBody.attackSpeed; ((BaseState)self).damageStat = ((EntityState)self).characterBody.damage; ((BaseState)self).critStat = ((EntityState)self).characterBody.crit; ((BaseState)self).moveSpeedStat = ((EntityState)self).characterBody.moveSpeed; } ((ScrapperBaseState)self).pickupPickerController = ((EntityState)self).GetComponent<PickupPickerController>(); ((ScrapperBaseState)self).scrapperController = ((EntityState)self).GetComponent<ScrapperController>(); ((ScrapperBaseState)self).pickupPickerController.SetAvailable(((ScrapperBaseState)self).enableInteraction); Util.PlaySound(ScrappingToIdle.enterSoundString, ((EntityState)self).gameObject); ((EntityState)self).PlayAnimation("Base", "ScrappingToIdle", "Scrapping.playbackRate", ScrappingToIdle.duration); if (Object.op_Implicit((Object)(object)ScrappingToIdle.muzzleflashEffectPrefab)) { EffectManager.SimpleMuzzleFlash(ScrappingToIdle.muzzleflashEffectPrefab, ((EntityState)self).gameObject, ScrappingToIdle.muzzleString, false); } if (!NetworkServer.active) { return; } self.foundValidScrap = false; PickupIndex val = PickupIndex.none; ItemDef itemDef = ItemCatalog.GetItemDef(((ScrapperBaseState)self).scrapperController.lastScrappedItemIndex); if ((Object)(object)itemDef != (Object)null) { ItemTier tier = itemDef.tier; switch ((int)tier) { case 0: val = PickupCatalog.FindPickupIndex("ItemIndex.ScrapWhite"); break; case 1: val = PickupCatalog.FindPickupIndex("ItemIndex.ScrapGreen"); break; case 2: val = PickupCatalog.FindPickupIndex("ItemIndex.ScrapRed"); break; case 4: val = PickupCatalog.FindPickupIndex("ItemIndex.ScrapYellow"); break; } } if (val != PickupIndex.none) { self.foundValidScrap = true; Transform val2 = ((BaseState)self).FindModelChild(ScrappingToIdle.muzzleString); TrackBehaviour trackBehaviour = new TrackBehaviour(); trackBehaviour.PickupSource = PickupSource.Scrapper; CreatePickupDroplet(val, val2.position, Vector3.up * ScrappingToIdle.dropUpVelocityStrength + val2.forward * ScrappingToIdle.dropForwardVelocityStrength, trackBehaviour); ScrapperController scrapperController = ((ScrapperBaseState)self).scrapperController; int itemsEaten = scrapperController.itemsEaten; scrapperController.itemsEaten = itemsEaten - 1; } } private void RouletteEject(orig_EjectPickupServer orig, RouletteChestController self, PickupIndex pickupIndex) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) if (!RunArtifactManager.instance.IsArtifactEnabled(Artifacts.commandArtifactDef)) { orig.Invoke(self, pickupIndex); } else if (!(pickupIndex == PickupIndex.none)) { TrackBehaviour trackBehaviour = new TrackBehaviour(); trackBehaviour.PickupSource = PickupSource.Roulette; CreatePickupDroplet(pickupIndex, self.ejectionTransform.position, self.ejectionTransform.rotation * self.localEjectionVelocity, trackBehaviour); } } [Server] public void BaseItemDrop(orig_BaseItemDrop orig, ChestBehavior self) { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_004a: 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_0060: 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_0070: 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_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //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_0103: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) if (!RunArtifactManager.instance.IsArtifactEnabled(Artifacts.commandArtifactDef)) { orig.Invoke(self); } else if (NetworkServer.active && !(self.dropPickup == PickupIndex.none) && self.dropCount >= 1) { float num = 360f / (float)self.dropCount; Vector3 val = Vector3.up * self.dropUpVelocityStrength + self.dropTransform.forward * self.dropForwardVelocityStrength; Quaternion val2 = Quaternion.AngleAxis(num, Vector3.up); TrackBehaviour track = new TrackBehaviour { ItemTag = self.requiredItemTag, DropTable = self.dropTable, PickupSource = PickupSource.Chest }; for (int i = 0; i < self.dropCount; i++) { CreatePickupInfo pickupInfo = default(CreatePickupInfo); ((CreatePickupInfo)(ref pickupInfo)).pickupIndex = self.dropPickup; pickupInfo.position = self.dropTransform.position + Vector3.up * 1.5f; pickupInfo.chest = self; pickupInfo.artifactFlag = (PickupArtifactFlag)(self.isCommandChest ? 1 : 0); CreatePickupDroplet(pickupInfo, val, track); val = val2 * val; } self.dropPickup = PickupIndex.none; } } [Server] private void TerminalDrop(orig_DropPickup orig, ShopTerminalBehavior self) { //IL_0055: 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_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) if (!RunArtifactManager.instance.IsArtifactEnabled(Artifacts.commandArtifactDef)) { orig.Invoke(self); return; } if (!NetworkServer.active) { Debug.LogWarning((object)"[Server] function 'System.Void RoR2.ShopTerminalBehavior::DropPickup()' called on client"); return; } TrackBehaviour trackBehaviour = new TrackBehaviour(); if (!onForHidden.Value || !self.hidden) { trackBehaviour.PickupSource = PickupSource.Terminal; } self.SetHasBeenPurchased(true); CreatePickupDroplet(self.pickupIndex, (Object.op_Implicit((Object)(object)self.dropTransform) ? self.dropTransform : ((Component)self).transform).position, ((Component)self).transform.TransformVector(self.dropVelocity), trackBehaviour); } private void CreatePickupDroplet(PickupIndex pickupIndex, Vector3 position, Vector3 velocity, TrackBehaviour track) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_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_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) CreatePickupInfo pickupInfo = new CreatePickupInfo { rotation = Quaternion.identity, position = position }; ((CreatePickupInfo)(ref pickupInfo)).pickupIndex = pickupIndex; CreatePickupDroplet(pickupInfo, velocity, track); } public void CreatePickupDroplet(CreatePickupInfo pickupInfo, Vector3 velocity, TrackBehaviour track) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: 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_0088: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: 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_006f: 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) if (CommandArtifactManager.IsCommandArtifactEnabled) { ref PickupArtifactFlag artifactFlag = ref pickupInfo.artifactFlag; artifactFlag = (PickupArtifactFlag)((uint)artifactFlag & 0xFFFFFFFEu); } GameObject obj = Object.Instantiate<GameObject>(PickupDropletController.pickupDropletPrefab, pickupInfo.position, Quaternion.identity); PickupDropletController component = obj.GetComponent<PickupDropletController>(); TrackBehaviour trackBehaviour = obj.AddComponent<TrackBehaviour>(); trackBehaviour.PickupSource = track.PickupSource; trackBehaviour.DropTable = track.DropTable; trackBehaviour.ItemTag = track.ItemTag; trackBehaviour.Options = track.Options; if (Object.op_Implicit((Object)(object)component)) { component.createPickupInfo = pickupInfo; component.NetworkpickupIndex = ((CreatePickupInfo)(ref pickupInfo)).pickupIndex; } Rigidbody component2 = obj.GetComponent<Rigidbody>(); component2.velocity = velocity; component2.AddTorque(Random.Range(150f, 120f) * Random.onUnitSphere); NetworkServer.Spawn(obj); } public void DropletCollisionEnter(orig_OnCollisionEnter orig, PickupDropletController self, Collision collision) { //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_0149: 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_0160: Invalid comparison between Unknown and I4 //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_02a0: Unknown result type (might be due to invalid IL or missing references) //IL_02a6: Invalid comparison between Unknown and I4 //IL_02b8: Unknown result type (might be due to invalid IL or missing references) //IL_02be: Invalid comparison between Unknown and I4 //IL_02d0: Unknown result type (might be due to invalid IL or missing references) //IL_02d6: Invalid comparison between Unknown and I4 if (!RunArtifactManager.instance.IsArtifactEnabled(Artifacts.commandArtifactDef)) { orig.Invoke(self, collision); } else if (NetworkServer.active && self.alive) { List<EquipmentDef> source = new List<EquipmentDef> { Equipment.AffixBlue, Equipment.AffixHaunted, Equipment.AffixLunar, Equipment.AffixPoison, Equipment.AffixRed, Equipment.AffixWhite, Equipment.EliteVoidEquipment, Elites.Earth.eliteEquipmentDef }; ((BaseUnityPlugin)this).Logger.LogInfo((object)$"Droplet {self.pickupIndex}:{((PickupIndex)(ref self.pickupIndex)).pickupDef.itemIndex}:{((PickupIndex)(ref self.pickupIndex)).pickupDef.equipmentIndex}"); self.alive = false; self.createPickupInfo.position = ((Component)self).transform.position; bool shouldSpawn = true; TrackBehaviour trackBehaviour = default(TrackBehaviour); bool flag = ((Component)self).gameObject.TryGetComponent<TrackBehaviour>(ref trackBehaviour); PickupDef pickupDef = PickupCatalog.GetPickupDef(self.pickupIndex); bool flag2 = false; if ((int)pickupDef.itemIndex != -1) { flag2 = ItemCatalog.GetItemDef(pickupDef.itemIndex).ContainsTag((ItemTag)9); } if (!(Random.Range(0f, 100f) < (float)essenceChance.Value) || flag2 || (!onForDelusion.Value && ((Enum)self.createPickupInfo.artifactFlag).HasFlag((Enum)(object)(PickupArtifactFlag)2)) || (!onInBazaar.Value && (Object)(object)BazaarController.instance != (Object)null) || (!scrappersDropEssence.Value && flag && trackBehaviour.PickupSource == PickupSource.Scrapper) || (!onForAdaptive.Value && flag && trackBehaviour.PickupSource == PickupSource.Roulette) || (!onInDropShip.Value && flag && trackBehaviour.PickupSource == PickupSource.Terminal) || (!onForTrophy.Value && flag && trackBehaviour.PickupSource == PickupSource.BossHunter) || (!onForPotential.Value && flag && trackBehaviour.PickupSource == PickupSource.VoidPotential) || ((PickupIndex)(ref self.pickupIndex)).pickupDef == null || ((int)((PickupIndex)(ref self.pickupIndex)).pickupDef.itemIndex == -1 && (int)((PickupIndex)(ref self.pickupIndex)).pickupDef.equipmentIndex == -1 && (int)((PickupIndex)(ref self.pickupIndex)).pickupDef.itemTier == 5) || (!onForAspect.Value && source.Any((EquipmentDef x) => x.equipmentIndex == ((PickupIndex)(ref self.pickupIndex)).pickupDef.equipmentIndex))) { GenericPickupController.CreatePickup(ref self.createPickupInfo); } else if (flag && trackBehaviour.Options.Count() == 1) { self.createPickupInfo.pickerOptions = trackBehaviour.Options; GenericPickupController.CreatePickup(ref self.createPickupInfo); } else { CreateCommandCube(ref self.createPickupInfo, ref shouldSpawn, trackBehaviour); } Object.Destroy((Object)(object)((Component)self).gameObject); } } private void CreateCommandCube(ref CreatePickupInfo createPickupInfo, ref bool shouldSpawn, TrackBehaviour trackBehaviour = null) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0007: 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_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Invalid comparison between Unknown and I4 //IL_0064: 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_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Invalid comparison between Unknown and I4 //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_0086: 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_005b: Invalid comparison between Unknown and I4 PickupIndex pickupIndex = ((CreatePickupInfo)(ref createPickupInfo)).pickupIndex; PickupDef pickupDef = PickupCatalog.GetPickupDef(pickupIndex); ((BaseUnityPlugin)this).Logger.LogInfo((object)$"PickupDef {pickupDef.internalName}:{pickupDef.itemTier}:{pickupDef.itemIndex}"); if (pickupDef != null && ((int)pickupDef.itemIndex != -1 || (int)pickupDef.equipmentIndex != -1 || (int)pickupDef.itemTier != 5)) { GameObject val = Object.Instantiate<GameObject>(CommandArtifactManager.commandCubePrefab, createPickupInfo.position, createPickupInfo.rotation); if ((Object)(object)trackBehaviour != (Object)null) { TrackBehaviour trackBehaviour2 = val.AddComponent<TrackBehaviour>(); trackBehaviour2.ItemTag = trackBehaviour.ItemTag; trackBehaviour2.DropTable = trackBehaviour.DropTable; trackBehaviour2.PickupSource = trackBehaviour.PickupSource; trackBehaviour2.Options = trackBehaviour.Options; } val.GetComponent<PickupIndexNetworker>().NetworkpickupIndex = pickupIndex; PickupPickerController component = val.GetComponent<PickupPickerController>(); component.SetOptionsFromPickupForCommandArtifact(pickupIndex); component.chestGeneratedFrom = createPickupInfo.chest; NetworkServer.Spawn(val); shouldSpawn = false; } } [Server] private void SetOptions(orig_SetOptionsFromPickupForCommandArtifact orig, PickupPickerController self, PickupIndex pickupIndex) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Invalid comparison between Unknown and I4 //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Expected I4, but got Unknown //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Invalid comparison between Unknown and I4 //IL_0206: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Invalid comparison between Unknown and I4 //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Invalid comparison between Unknown and I4 //IL_0300: Unknown result type (might be due to invalid IL or missing references) //IL_0311: Unknown result type (might be due to invalid IL or missing references) //IL_0316: Unknown result type (might be due to invalid IL or missing references) //IL_031b: Unknown result type (might be due to invalid IL or missing references) //IL_031d: Unknown result type (might be due to invalid IL or missing references) //IL_037d: Unknown result type (might be due to invalid IL or missing references) //IL_0382: Unknown result type (might be due to invalid IL or missing references) //IL_038a: Unknown result type (might be due to invalid IL or missing references) //IL_039a: Unknown result type (might be due to invalid IL or missing references) //IL_039c: Unknown result type (might be due to invalid IL or missing references) //IL_03a1: Unknown result type (might be due to invalid IL or missing references) //IL_03a3: Unknown result type (might be due to invalid IL or missing references) TrackBehaviour component = ((Component)self).gameObject.GetComponent<TrackBehaviour>(); if (!NetworkServer.active) { return; } int count = GetItemAmountFromTier(((PickupIndex)(ref pickupIndex)).pickupDef); PickupIndex[] array = null; if ((Object)(object)component != (Object)null && keepCategory.Value && ((int)component.ItemTag == 1 || (int)component.ItemTag == 2 || (int)component.ItemTag == 3)) { PickupDropTable dropTable = component.DropTable; array = (from x in ((BasicPickupDropTable)((dropTable is BasicPickupDropTable) ? dropTable : null)).selector.choices where ((PickupIndex)(ref x.value)).pickupDef.itemTier == ((PickupIndex)(ref pickupIndex)).pickupDef.itemTier select x.value).ToArray(); } else { if ((Object)(object)component != (Object)null && sameBossDrops.Value && component.PickupSource == PickupSource.Boss) { self.SetOptionsServer(component.Options); return; } if ((Object)(object)component != (Object)null && component.PickupSource == PickupSource.YellowBoss) { self.SetOptionsServer(component.Options); return; } ItemTier itemTier = ((PickupIndex)(ref pickupIndex)).pickupDef.itemTier; switch ((int)itemTier) { case 0: array = Run.instance.availableTier1DropList.ToArray(); break; case 1: array = Run.instance.availableTier2DropList.ToArray(); break; case 2: array = Run.instance.availableTier3DropList.ToArray(); break; case 4: array = Run.instance.availableBossDropList.ToArray(); break; case 3: array = Run.instance.availableLunarItemDropList.ToArray(); break; case 6: array = Run.instance.availableVoidTier1DropList.ToArray(); break; case 7: array = Run.instance.availableVoidTier2DropList.ToArray(); break; case 8: array = Run.instance.availableVoidTier3DropList.ToArray(); break; case 9: array = Run.instance.availableVoidBossDropList.ToArray(); break; case 5: if ((int)((PickupIndex)(ref pickupIndex)).pickupDef.equipmentIndex != -1) { array = ((!((PickupIndex)(ref pickupIndex)).pickupDef.isLunar) ? Run.instance.availableEquipmentDropList.ToArray() : Run.instance.availableLunarEquipmentDropList.ToArray()); } break; } } List<EquipmentDef> source = new List<EquipmentDef> { Equipment.AffixBlue, Equipment.AffixHaunted, Equipment.AffixLunar, Equipment.AffixPoison, Equipment.AffixRed, Equipment.AffixWhite, Elites.Earth.eliteEquipmentDef }; if (onForAspect.Value && source.Any((EquipmentDef x) => x.equipmentIndex == ((PickupIndex)(ref pickupIndex)).pickupDef.equipmentIndex)) { array = source.Select((EquipmentDef x) => PickupCatalog.FindPickupIndex(x.equipmentIndex)).ToArray(); count = itemAmountAspect.Value; } Option[] array2; if (array == null) { array2 = (Option[])(object)new Option[1] { new Option { available = true, pickupIndex = pickupIndex } }; } else { Xoroshiro128Plus rng = Run.instance.treasureRng; List<PickupIndex> list = (from x in array.ToList() orderby rng.Next() select x).Take(count).ToList(); array2 = (Option[])(object)new Option[list.Count]; for (int i = 0; i < list.Count; i++) { PickupIndex pickupIndex2 = list[i]; array2[i] = new Option { available = true, pickupIndex = pickupIndex2 }; } } self.SetOptionsServer(array2); } public int GetItemAmountFromTier(PickupDef pickup) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected I4, but got Unknown //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Invalid comparison between Unknown and I4 int result = 0; ItemTier itemTier = pickup.itemTier; switch ((int)itemTier) { case 0: result = itemAmountCommon.Value; break; case 1: result = itemAmountUncommon.Value; break; case 2: result = itemAmountLegendary.Value; break; case 4: result = itemAmountBoss.Value; break; case 3: result = itemAmountLunar.Value; break; case 5: if ((int)pickup.equipmentIndex != -1) { result = itemAmountEquip.Value; } break; case 6: case 7: case 8: case 9: result = itemAmountVoid.Value; break; default: result = itemAmountCommon.Value; break; } return result; } } public class TrackBehaviour : MonoBehaviour { public ItemTag ItemTag { get; set; } public PickupDropTable DropTable { get; set; } public PickupSource PickupSource { get; set; } public Option[] Options { get; set; } public TrackBehaviour() { Options = (Option[])(object)new Option[0]; } } public enum PickupSource { Chest, Terminal, Boss, YellowBoss, BossHunter, Roulette, Scrapper, VoidPotential, Cell } }