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 ImprovedCommandEssence v1.4.5
ImprovedCommandEssence.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 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 } }