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 ShareSuiteMultiprintingCompat v1.16.1
ShareSuite.dll
Decompiled 9 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Timers; using BepInEx; using BepInEx.Configuration; using EntityStates.GoldGat; using EntityStates.ScavBackpack; using EntityStates.Scrapper; using HG.Reflection; using IL.EntityStates.GoldGat; using IL.RoR2; using Mono.Cecil; using Mono.Cecil.Cil; using MonoMod.Cil; using On.EntityStates.GoldGat; using On.EntityStates.ScavBackpack; using On.EntityStates.Scrapper; using On.RoR2; using On.RoR2.Artifacts; using On.RoR2.Networking; using R2API.Utils; using RoR2; using RoR2.Networking; using ShareSuite.Networking; using UnityEngine; using UnityEngine.Networking; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: OptIn] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("ShareSuite")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("ShareSuite")] [assembly: AssemblyTitle("ShareSuite")] [assembly: AssemblyVersion("1.0.0.0")] namespace ShareSuite { public static class Blacklist { private static ItemMask _cachedAvailableItems = new ItemMask(); private static ItemMask _items = new ItemMask(); private static EquipmentMask _equipment = new EquipmentMask(); private static readonly List<PickupIndex> _availableTier1DropList = new List<PickupIndex>(); private static readonly List<PickupIndex> _availableTier2DropList = new List<PickupIndex>(); private static readonly List<PickupIndex> _availableTier3DropList = new List<PickupIndex>(); private static readonly List<PickupIndex> _availableLunarDropList = new List<PickupIndex>(); private static readonly List<PickupIndex> _availableBossDropList = new List<PickupIndex>(); private static readonly List<PickupIndex> _availableVoidDropList = new List<PickupIndex>(); public static List<PickupIndex> AvailableTier1DropList => Get(_availableTier1DropList); public static List<PickupIndex> AvailableTier2DropList => Get(_availableTier2DropList); public static List<PickupIndex> AvailableTier3DropList => Get(_availableTier3DropList); public static List<PickupIndex> AvailableLunarDropList => Get(_availableLunarDropList); public static List<PickupIndex> AvailableBossDropList => Get(_availableBossDropList); public static List<PickupIndex> AvailableVoidDropList => Get(_availableVoidDropList); private static void LoadBlackListItems() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Invalid comparison between Unknown and I4 //IL_0040: Unknown result type (might be due to invalid IL or missing references) _items = new ItemMask(); string[] array = ShareSuite.ItemBlacklist.Value.Split(','); foreach (string text in array) { ItemIndex val = ItemCatalog.FindItemIndex(text); if ((int)val != -1) { _items.Add(val); } } } private static void LoadBlackListEquipment() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Invalid comparison between Unknown and I4 //IL_0040: Unknown result type (might be due to invalid IL or missing references) _equipment = new EquipmentMask(); string[] array = ShareSuite.EquipmentBlacklist.Value.Split(','); foreach (string text in array) { EquipmentIndex val = EquipmentCatalog.FindEquipmentIndex(text); if ((int)val != -1) { _equipment.Add(val); } } } public static bool HasItem(ItemIndex itemIndex) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) ValidateItemCache(); return _items.Contains(itemIndex); } public static bool HasEquipment(EquipmentIndex equipmentIndex) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) ValidateItemCache(); return _equipment.Contains(equipmentIndex); } public static void Recalculate() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Expected O, but got Unknown _cachedAvailableItems = new ItemMask(); } private static void ValidateItemCache() { if ((Object)(object)Run.instance == (Object)null) { Recalculate(); } else { if (((object)_cachedAvailableItems).Equals((object?)Run.instance.availableItems)) { return; } _cachedAvailableItems = Run.instance.availableItems; LoadBlackListItems(); LoadBlackListEquipment(); IEnumerable<PickupIndex> item = new List<PickupIndex>().Concat(Run.instance.availableVoidTier1DropList).Concat(Run.instance.availableVoidTier2DropList).Concat(Run.instance.availableVoidTier3DropList) .Concat(Run.instance.availableVoidBossDropList); (List<PickupIndex>, IEnumerable<PickupIndex>)[] array = new(List<PickupIndex>, IEnumerable<PickupIndex>)[6] { (_availableTier1DropList, Run.instance.availableTier1DropList), (_availableTier2DropList, Run.instance.availableTier2DropList), (_availableTier3DropList, Run.instance.availableTier3DropList), (_availableLunarDropList, Run.instance.availableLunarItemDropList), (_availableBossDropList, Run.instance.availableBossDropList), (_availableVoidDropList, item) }; (List<PickupIndex>, IEnumerable<PickupIndex>)[] array2 = array; for (int i = 0; i < array2.Length; i++) { var (list, source) = array2[i]; list.Clear(); list.AddRange(source.Where(delegate(PickupIndex pickupIndex) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) PickupDef pickupDef = PickupCatalog.GetPickupDef(pickupIndex); return pickupDef != null && !_items.Contains(pickupDef.itemIndex); })); } } } private static List<PickupIndex> Get(List<PickupIndex> list) { ValidateItemCache(); return list; } } public static class ChatHandler { public delegate void SendPickupMessageDelegate(CharacterMaster master, PickupIndex pickupIndex); private const string GrayColor = "7e91af"; private const string RedColor = "ed4c40"; private const string LinkColor = "5cb1ed"; private const string ErrorColor = "ff0000"; private const string NotSharingColor = "f07d6e"; private static readonly string[] PlayerColors = new string[8] { "f23030", "2083fc", "f1f41a", "4dc344", "f27b0c", "3cdede", "db46bd", "9400ea" }; public static readonly SendPickupMessageDelegate SendPickupMessage = (SendPickupMessageDelegate)Delegate.CreateDelegate(typeof(SendPickupMessageDelegate), typeof(GenericPickupController).GetMethod("SendPickupMessage", BindingFlags.Static | BindingFlags.Public) ?? throw new MissingMethodException("Unable to find SendPickupMessage")); public static void UnHook() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown GenericPickupController.SendPickupMessage -= new hook_SendPickupMessage(RemoveDefaultPickupMessage); Chat.SendPlayerConnectedMessage -= new hook_SendPlayerConnectedMessage(SendIntroMessage); } public static void Hook() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown GenericPickupController.SendPickupMessage += new hook_SendPickupMessage(RemoveDefaultPickupMessage); Chat.SendPlayerConnectedMessage += new hook_SendPlayerConnectedMessage(SendIntroMessage); } public static void SendIntroMessage(orig_SendPlayerConnectedMessage orig, NetworkUser user) { orig.Invoke(user); if (!ShareSuite.LastMessageSent.Value.Equals(ShareSuite.MessageSendVer)) { ShareSuite.LastMessageSent.Value = ShareSuite.MessageSendVer; string notRepeatedMessage = "<color=#7e91af>(This message will </color><color=#ed4c40>NOT</color><color=#7e91af> display again!) </color>"; string message = "<color=#7e91af>Hey there! Thanks for installing </color><color=#ed4c40>ShareSuite 2.9.0 CommandHelper Beta</color><color=#7e91af>! This release may still contain problems. Have fun!</color>"; string clickChatBox = "<color=#ed4c40>(Click the chat box to view the full message)</color>"; Timer timer = new Timer(5000.0); timer.Elapsed += delegate { //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_0017: Expected O, but got Unknown //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Expected O, but got Unknown //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Expected O, but got Unknown Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage { baseToken = notRepeatedMessage }); Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage { baseToken = message }); Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage { baseToken = clickChatBox }); }; timer.AutoReset = false; timer.Start(); } } public static void RemoveDefaultPickupMessage(orig_SendPickupMessage orig, CharacterMaster master, PickupIndex pickupIndex) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) if (!ShareSuite.RichMessagesEnabled.Value) { orig.Invoke(master, pickupIndex); } } public static void SendRichPickupMessage(CharacterMaster player, PickupDef pickupDef) { //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_013c: 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_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Expected O, but got Unknown //IL_0211: 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_0262: Unknown result type (might be due to invalid IL or missing references) //IL_0267: Unknown result type (might be due to invalid IL or missing references) //IL_0274: Expected O, but got Unknown //IL_01cb: Unknown result type (might be due to invalid IL or missing references) //IL_01d0: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Expected O, but got Unknown CharacterBody val = (player.hasBody ? player.GetBody() : null); if (!GeneralHooks.IsMultiplayer() || (Object)(object)val == (Object)null || !ShareSuite.RichMessagesEnabled.Value) { if (ShareSuite.RichMessagesEnabled.Value) { SendPickupMessage(player, pickupDef.pickupIndex); } return; } Color baseColor = pickupDef.baseColor; string @string = Language.GetString(pickupDef.nameToken); string playerColor = GetPlayerColor(player.playerCharacterMasterController); int itemCount = player.inventory.GetItemCount(pickupDef.itemIndex); if (pickupDef.coinValue != 0) { string baseToken = "<color=#" + playerColor + ">" + val.GetUserName() + "</color> <color=#7e91af>picked up</color> <color=#" + ColorUtility.ToHtmlStringRGB(baseColor) + ">" + string.Format("{0} ({1})</color> <color=#{2}>for themselves.</color>", string.IsNullOrEmpty(@string) ? "???" : @string, pickupDef.coinValue, "7e91af"); Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage { baseToken = baseToken }); } else if (Blacklist.HasItem(pickupDef.itemIndex) || !ItemSharingHooks.IsValidItemPickup(pickupDef.pickupIndex)) { string baseToken2 = "<color=#" + playerColor + ">" + val.GetUserName() + "</color> <color=#7e91af>picked up</color> <color=#" + ColorUtility.ToHtmlStringRGB(baseColor) + ">" + string.Format("{0} ({1})</color> <color=#{2}>for themselves. </color>", string.IsNullOrEmpty(@string) ? "???" : @string, itemCount, "7e91af") + "<color=#f07d6e>(Item Set to NOT be Shared)</color>"; Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage { baseToken = baseToken2 }); } else { string baseToken3 = "<color=#" + playerColor + ">" + val.GetUserName() + "</color> <color=#7e91af>picked up</color> <color=#" + ColorUtility.ToHtmlStringRGB(baseColor) + ">" + string.Format("{0} ({1})</color> <color=#{2}>for themselves</color>", string.IsNullOrEmpty(@string) ? "???" : @string, itemCount, "7e91af") + ItemPickupFormatter(val) + "<color=#7e91af>.</color>"; Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage { baseToken = baseToken3 }); } } public static void SendRichCauldronMessage(CharacterMaster player, PickupIndex index) { //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_008a: 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_0050: 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_0108: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Expected O, but got Unknown CharacterBody val = (player.hasBody ? player.GetBody() : null); if (!GeneralHooks.IsMultiplayer() || (Object)(object)val == (Object)null || !ShareSuite.RichMessagesEnabled.Value) { if (ShareSuite.RichMessagesEnabled.Value) { SendPickupMessage(player, index); } return; } PickupDef pickupDef = PickupCatalog.GetPickupDef(index); Color baseColor = pickupDef.baseColor; string @string = Language.GetString(pickupDef.nameToken); string playerColor = GetPlayerColor(player.playerCharacterMasterController); int itemCount = player.inventory.GetItemCount(pickupDef.itemIndex); string baseToken = "<color=#" + playerColor + ">" + val.GetUserName() + "</color> <color=#7e91af>traded for</color> <color=#" + ColorUtility.ToHtmlStringRGB(baseColor) + ">" + string.Format("{0} ({1})</color><color=#{2}>.</color>", string.IsNullOrEmpty(@string) ? "???" : @string, itemCount, "7e91af"); Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage { baseToken = baseToken }); } public static void SendRichRandomizedPickupMessage(CharacterMaster origPlayer, PickupDef origPickup, Dictionary<CharacterMaster, PickupDef> pickupIndices) { //IL_0032: 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_0090: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Expected O, but got Unknown if (!GeneralHooks.IsMultiplayer() || !ShareSuite.RichMessagesEnabled.Value) { if (ShareSuite.RichMessagesEnabled.Value) { SendPickupMessage(origPlayer, origPickup.pickupIndex); } return; } if (pickupIndices.Count == 1) { SendRichPickupMessage(origPlayer, origPickup); return; } int num = pickupIndices.Count; string text = ""; foreach (KeyValuePair<CharacterMaster, PickupDef> pickupIndex in pickupIndices) { Color baseColor = pickupIndex.Value.baseColor; string @string = Language.GetString(pickupIndex.Value.nameToken); string playerColor = GetPlayerColor(pickupIndex.Key.playerCharacterMasterController); int itemCount = pickupIndex.Key.playerCharacterMasterController.master.inventory.GetItemCount(pickupIndex.Value.itemIndex); if (num != pickupIndices.Count) { if (num > 1) { text += "<color=#7e91af>,</color> "; } else if (num == 1) { text += "<color=#7e91af>, and</color> "; } } num--; text = text + "<color=#" + playerColor + ">" + pickupIndex.Key.playerCharacterMasterController.GetDisplayName() + "</color> <color=#7e91af>got</color> <color=#" + ColorUtility.ToHtmlStringRGB(baseColor) + ">" + string.Format("{0} ({1})</color>", string.IsNullOrEmpty(@string) ? "???" : @string, itemCount); } Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage { baseToken = text }); } private static string ItemPickupFormatter(CharacterBody body) { int num = GetEligiblePlayers(body); if (num < 1) { return " <color=#7e91af>and no-one else</color>"; } if (num == 1) { foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances) { CharacterMaster master = instance.master; if (!master.hasBody || (Object)(object)master.GetBody() == (Object)(object)body) { continue; } string playerColor = GetPlayerColor(instance); return " <color=#7e91af>and</color> <color=#" + playerColor + ">" + instance.GetDisplayName() + "</color>"; } return "<color=#ff0000>???</color>"; } string text = ""; foreach (PlayerCharacterMasterController instance2 in PlayerCharacterMasterController.instances) { CharacterMaster master2 = instance2.master; if (master2.hasBody && !((Object)(object)master2.GetBody() == (Object)(object)body) && (!master2.IsDeadAndOutOfLivesServer() || ShareSuite.DeadPlayersGetItems.Value)) { string playerColor2 = GetPlayerColor(instance2); if (num > 1) { text += "<color=#7e91af>,</color> "; } else if (num == 1) { text += "<color=#7e91af>, and</color> "; } num--; text = text + "<color=#" + playerColor2 + ">" + instance2.GetDisplayName() + "</color>"; } } return text; } private static string GetPlayerColor(PlayerCharacterMasterController controllerMaster) { int num = PlayerCharacterMasterController.instances.IndexOf(controllerMaster); return PlayerColors[num % 8]; } private static int GetEligiblePlayers(CharacterBody body) { int num = 0; foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances) { CharacterMaster master = instance.master; if (Object.op_Implicit((Object)(object)master.inventory) && !((Object)(object)master.GetBody() == (Object)(object)body) && (!master.IsDeadAndOutOfLivesServer() || ShareSuite.DeadPlayersGetItems.Value)) { num++; } } return num; } } public static class EquipmentSharingHooks { public static void UnHook() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown GenericPickupController.AttemptGrant -= new hook_AttemptGrant(OnGrantEquipment); } public static void Hook() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown GenericPickupController.AttemptGrant += new hook_AttemptGrant(OnGrantEquipment); } private static void OnGrantEquipment(orig_AttemptGrant orig, GenericPickupController self, CharacterBody body) { //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_0230: Unknown result type (might be due to invalid IL or missing references) //IL_0238: Unknown result type (might be due to invalid IL or missing references) //IL_0239: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_0206: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_0211: 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_0222: Unknown result type (might be due to invalid IL or missing references) if (!ShareSuite.EquipmentShared.Value || !GeneralHooks.IsMultiplayer() || !NetworkServer.active) { orig.Invoke(self, body); return; } EquipmentIndex currentEquipmentIndex = body.inventory.currentEquipmentIndex; PickupIndex pickupIndex = GetPickupIndex(currentEquipmentIndex); EquipmentIndex equip = PickupCatalog.GetPickupDef(self.pickupIndex).equipmentIndex; ChatHandler.SendPickupMessage(body.master, self.pickupIndex); body.inventory.SetEquipmentIndex(equip); Object.Destroy((Object)(object)((Component)self).gameObject); if (!EquipmentShared(currentEquipmentIndex) && EquipmentShared(equip)) { CreateDropletIfExists(pickupIndex, ((Component)self).transform.position); DropAllOtherSharedEquipment(self, body, currentEquipmentIndex); } else { if ((EquipmentShared(currentEquipmentIndex) && !EquipmentShared(equip) && GetLivingPlayersWithEquipment(currentEquipmentIndex) < 1) || (!EquipmentShared(currentEquipmentIndex) && !EquipmentShared(equip))) { CreateDropletIfExists(pickupIndex, ((Component)self).transform.position); return; } if (!EquipmentShared(equip)) { return; } CreateDropletIfExists(pickupIndex, ((Component)self).transform.position); } foreach (CharacterMaster item in from p in PlayerCharacterMasterController.instances select p.master into p where Object.op_Implicit((Object)(object)p.inventory) && (Object)(object)p != (Object)(object)body.master select p) { Inventory inventory = item.inventory; EquipmentIndex currentEquipmentIndex2 = inventory.currentEquipmentIndex; if (!EquipmentShared(currentEquipmentIndex2)) { if (!ShareSuite.DropBlacklistedEquipmentOnShare.Value) { continue; } Transform transform = item.GetBodyObject().transform; PickupIndex val = PickupCatalog.FindPickupIndex(currentEquipmentIndex2); PickupDropletController.CreatePickupDroplet(val, transform.position, transform.forward * 20f); } inventory.SetEquipmentIndex(equip); self.NetworkpickupIndex = PickupCatalog.FindPickupIndex(equip); SyncToolbotEquip(item, ref equip); } } private static void DropAllOtherSharedEquipment(GenericPickupController self, CharacterBody body, EquipmentIndex originalEquip) { //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_0081: 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_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) List<EquipmentIndex> list = new List<EquipmentIndex>(); foreach (CharacterMaster item in from p in PlayerCharacterMasterController.instances select p.master into p where Object.op_Implicit((Object)(object)p.inventory) && (Object)(object)p != (Object)(object)body.master select p) { EquipmentIndex equipmentIndex = item.inventory.GetEquipmentIndex(); if (EquipmentShared(equipmentIndex) && !list.Contains(equipmentIndex) && equipmentIndex != originalEquip) { CreateDropletIfExists(GetPickupIndex(equipmentIndex), ((Component)self).transform.position); list.Add(equipmentIndex); } } } private static PickupIndex GetPickupIndex(EquipmentIndex originalEquip) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Invalid comparison between Unknown and I4 //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_001c: 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) return ((int)originalEquip != -1) ? PickupCatalog.GetPickupDef(PickupCatalog.FindPickupIndex(originalEquip)).pickupIndex : PickupIndex.none; } public static void RemoveAllUnBlacklistedEquipment() { //IL_0065: Unknown result type (might be due to invalid IL or missing references) foreach (CharacterMaster item in from p in PlayerCharacterMasterController.instances select p.master into p where Object.op_Implicit((Object)(object)p.inventory) select p) { if (!Blacklist.HasEquipment(item.inventory.currentEquipmentIndex)) { item.inventory.SetEquipmentIndex((EquipmentIndex)(-1)); } } } private static void SetEquipmentIndex(Inventory self, EquipmentIndex newEquipmentIndex, uint slot) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: 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_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) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Invalid comparison between Unknown and I4 //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0041: 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) if (NetworkServer.active && self.currentEquipmentIndex != newEquipmentIndex) { EquipmentState equipment = self.GetEquipment(0u); byte b = equipment.charges; if ((int)equipment.equipmentIndex == -1) { b = 1; } self.SetEquipment(new EquipmentState(newEquipmentIndex, equipment.chargeFinishTime, b, false), slot); } } private static void SyncToolbotEquip(CharacterMaster characterMaster, ref EquipmentIndex equip) { if (!(((Object)characterMaster.bodyPrefab).name != "ToolbotBody")) { SetEquipmentIndex(characterMaster.inventory, equip, (uint)(characterMaster.inventory.activeEquipmentSlot + 1) % 2u); } } private static void CreateDropletIfExists(PickupIndex pickupIndex, Vector3 position) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) if (pickupIndex != PickupIndex.none) { PickupDropletController.CreatePickupDroplet(pickupIndex, position, new Vector3(Random.Range(-200f, 200f), 50f, Random.Range(-200f, 200f))); } } private static int GetLivingPlayersWithEquipment(EquipmentIndex originalEquip) { //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) return (from p in PlayerCharacterMasterController.instances select p.master into p where Object.op_Implicit((Object)(object)p.inventory) && !p.IsDeadAndOutOfLivesServer() select p).Count((CharacterMaster master) => master.inventory.currentEquipmentIndex == originalEquip); } private static bool EquipmentShared(EquipmentIndex pickup) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Invalid comparison between Unknown and I4 //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) if ((int)pickup == -1) { return true; } return IsEquipment(pickup) && !Blacklist.HasEquipment(pickup); } private static bool IsEquipment(EquipmentIndex index) { //IL_0001: 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) return ((IEnumerable<EquipmentIndex>)(object)EquipmentCatalog.allEquipment).Contains(index); } } public static class GeneralHooks { private static int _sacrificeOffset = 1; private static int _bossItems = 1; private static List<string> NoInteractibleOverrideScenes = new List<string> { "MAP_BAZAAR_TITLE", "MAP_ARENA_TITLE", "MAP_LIMBO_TITLE", "MAP_MYSTERYSPACE_TITLE" }; internal static void Hook() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown BossGroup.DropRewards += new hook_DropRewards(BossGroup_DropRewards); SceneDirector.PlaceTeleporter += new hook_PlaceTeleporter(InteractibleCreditOverride); TeleporterInteraction.OnInteractionBegin += new hook_OnInteractionBegin(OverrideBossLootScaling); SacrificeArtifactManager.OnPrePopulateSceneServer += new hook_OnPrePopulateSceneServer(SetSacrificeOffset); Util.GetExpAdjustedDropChancePercent += new hook_GetExpAdjustedDropChancePercent(GetExpAdjustedDropChancePercent); } internal static void UnHook() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown BossGroup.DropRewards -= new hook_DropRewards(BossGroup_DropRewards); SceneDirector.PlaceTeleporter -= new hook_PlaceTeleporter(InteractibleCreditOverride); TeleporterInteraction.OnInteractionBegin -= new hook_OnInteractionBegin(OverrideBossLootScaling); SacrificeArtifactManager.OnPrePopulateSceneServer -= new hook_OnPrePopulateSceneServer(SetSacrificeOffset); Util.GetExpAdjustedDropChancePercent -= new hook_GetExpAdjustedDropChancePercent(GetExpAdjustedDropChancePercent); } private static void BossGroup_DropRewards(orig_DropRewards orig, BossGroup group) { group.scaleRewardsByPlayerCount = false; group.bonusRewardCount += _bossItems - 1; orig.Invoke(group); } private static void SetSacrificeOffset(orig_OnPrePopulateSceneServer orig, SceneDirector sceneDirector) { _sacrificeOffset = 2; orig.Invoke(sceneDirector); } private static void OverrideBossLootScaling(orig_OnInteractionBegin orig, TeleporterInteraction self, Interactor activator) { _bossItems = (ShareSuite.OverrideBossLootScalingEnabled.Value ? ShareSuite.BossLootCredit.Value : Run.instance.participatingPlayerCount); orig.Invoke(self, activator); } public static bool IsMultiplayer() { return ShareSuite.OverrideMultiplayerCheck.Value || PlayerCharacterMasterController.instances.Count > 1; } private static void InteractibleCreditOverride(orig_PlaceTeleporter orig, SceneDirector self) { //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); Debug.Log((object)SceneInfo.instance.sceneDef.nameToken); int num = 200; ClassicStageInfo component = ((Component)SceneInfo.instance).GetComponent<ClassicStageInfo>(); if (Object.op_Implicit((Object)(object)component)) { num = component.sceneDirectorInteractibleCredits; int num2 = Math.Min(Run.instance.participatingPlayerCount, 8); float num3 = (float)(0.95 + (double)num2 * 0.05); num3 *= (float)Math.Max(1.0 + 0.1 * (double)Math.Min(Run.instance.participatingPlayerCount * 2 - Run.instance.stageClearCount - 2, 3), 1.0); num = (int)((float)num / num3); if (component.bonusInteractibleCreditObjects != null) { BonusInteractibleCreditObject[] bonusInteractibleCreditObjects = component.bonusInteractibleCreditObjects; foreach (BonusInteractibleCreditObject val in bonusInteractibleCreditObjects) { if (val.objectThatGrantsPointsIfEnabled.activeSelf) { num += val.points / num2; } } } } if (ShareSuite.OverridePlayerScalingEnabled.Value && (!Object.op_Implicit((Object)(object)SceneInfo.instance) || !NoInteractibleOverrideScenes.Contains(SceneInfo.instance.sceneDef.nameToken))) { self.interactableCredit = (int)((double)num * ShareSuite.InteractablesCredit.Value / (double)_sacrificeOffset) + ShareSuite.InteractablesOffset.Value; } _sacrificeOffset = 1; } private static float GetExpAdjustedDropChancePercent(orig_GetExpAdjustedDropChancePercent orig, float baseChancePercent, GameObject characterBodyObject) { if (ShareSuite.SacrificeFixEnabled.Value) { baseChancePercent /= (float)PlayerCharacterMasterController.instances.Count; } return orig.Invoke(baseChancePercent, characterBodyObject); } } public static class ItemSharingHooks { private static bool _itemLock = false; private static readonly List<CostTypeIndex> PrinterCosts = new List<CostTypeIndex> { (CostTypeIndex)4, (CostTypeIndex)5, (CostTypeIndex)6, (CostTypeIndex)10, (CostTypeIndex)9 }; public static event Func<GenericPickupController, CharacterBody, bool> AdditionalPickupValidityChecks; public static void UnHook() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Expected O, but got Unknown PurchaseInteraction.OnInteractionBegin -= new hook_OnInteractionBegin(OnShopPurchase); ShopTerminalBehavior.DropPickup -= new hook_DropPickup(OnPurchaseDrop); GenericPickupController.AttemptGrant -= new hook_AttemptGrant(OnGrantItem); Opening.OnEnter -= new hook_OnEnter(OnScavengerDrop); PlayerPickupChatMessage.ConstructChatString -= new hook_ConstructChatString(FixZeroItemCount); ScrappingToIdle.OnEnter -= new hook_OnEnter(ScrappingToIdle_OnEnter); PickupCatalog.FindPickupIndex_string -= new hook_FindPickupIndex_string(ItemLock); ArenaMissionController.EndRound -= new Manipulator(ArenaDropEnable); InfiniteTowerWaveController.DropRewards -= new Manipulator(SimulacrumArenaDropEnable); } public static void Hook() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Expected O, but got Unknown //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Expected O, but got Unknown PurchaseInteraction.OnInteractionBegin += new hook_OnInteractionBegin(OnShopPurchase); ShopTerminalBehavior.DropPickup += new hook_DropPickup(OnPurchaseDrop); GenericPickupController.AttemptGrant += new hook_AttemptGrant(OnGrantItem); Opening.OnEnter += new hook_OnEnter(OnScavengerDrop); PlayerPickupChatMessage.ConstructChatString += new hook_ConstructChatString(FixZeroItemCount); ScrappingToIdle.OnEnter += new hook_OnEnter(ScrappingToIdle_OnEnter); PickupCatalog.FindPickupIndex_string += new hook_FindPickupIndex_string(ItemLock); if (ShareSuite.OverrideVoidFieldLootScalingEnabled.Value) { ArenaMissionController.EndRound += new Manipulator(ArenaDropEnable); InfiniteTowerWaveController.DropRewards += new Manipulator(SimulacrumArenaDropEnable); } } private static PickupIndex ItemLock(orig_FindPickupIndex_string orig, string pickupName) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) if (_itemLock) { _itemLock = false; return orig.Invoke("This is not an item!"); } return orig.Invoke(pickupName); } private static void ScrappingToIdle_OnEnter(orig_OnEnter orig, ScrappingToIdle self) { //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: 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_0100: 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_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Expected I4, but got Unknown //IL_013d: 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_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: 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_0198: Unknown result type (might be due to invalid IL or missing references) if (!ShareSuite.PrinterCauldronFixEnabled.Value || !NetworkServer.active || !GeneralHooks.IsMultiplayer()) { orig.Invoke(self); return; } _itemLock = true; orig.Invoke(self); object instanceField = GetInstanceField(typeof(ScrapperBaseState), self, "scrapperController"); ScrapperController val = (ScrapperController)((instanceField is ScrapperController) ? instanceField : null); Debug.Log((object)val); Debug.Log((object)_itemLock); if (!Object.op_Implicit((Object)(object)val)) { return; } PickupIndex val2 = PickupIndex.none; ItemDef itemDef = ItemCatalog.GetItemDef(val.lastScrappedItemIndex); if ((Object)(object)itemDef != (Object)null) { ItemTier tier = itemDef.tier; ItemTier val3 = tier; switch ((int)val3) { case 0: val2 = PickupCatalog.FindPickupIndex("ItemIndex.ScrapWhite"); break; case 1: val2 = PickupCatalog.FindPickupIndex("ItemIndex.ScrapGreen"); break; case 2: val2 = PickupCatalog.FindPickupIndex("ItemIndex.ScrapRed"); break; case 4: val2 = PickupCatalog.FindPickupIndex("ItemIndex.ScrapYellow"); break; } } if (!(val2 == PickupIndex.none)) { object instanceField2 = GetInstanceField(typeof(ScrapperController), val, "interactor"); Interactor val4 = (Interactor)((instanceField2 is Interactor) ? instanceField2 : null); Debug.Log((object)"Interactor Established"); PickupDef pickupDef = PickupCatalog.GetPickupDef(val2); if (Object.op_Implicit((Object)(object)val4)) { SetInstanceField(typeof(ScrappingToIdle), self, "foundValidScrap", true); CharacterBody component = ((Component)val4).GetComponent<CharacterBody>(); HandleGiveItem(component.master, pickupDef); ChatHandler.SendRichCauldronMessage(((Component)component.inventory).GetComponent<CharacterMaster>(), val2); val.itemsEaten -= 1; } } } private static void OnGrantItem(orig_AttemptGrant orig, GenericPickupController self, CharacterBody body) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000e: 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_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0209: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) PickupDef pickupDef = PickupCatalog.GetPickupDef(self.pickupIndex); ItemDef itemDef = ItemCatalog.GetItemDef(pickupDef.itemIndex); Dictionary<CharacterMaster, PickupDef> dictionary = new Dictionary<CharacterMaster, PickupDef>(); object obj = ((body != null) ? body.master : null); if (obj == null) { Inventory inventory = body.inventory; obj = ((inventory != null) ? ((Component)inventory).GetComponent<CharacterMaster>() : null); } CharacterMaster val = (CharacterMaster)obj; if (!Blacklist.HasItem(pickupDef.itemIndex) && NetworkServer.active && IsValidItemPickup(self.pickupIndex) && IsValidPickupObject(self, body) && GeneralHooks.IsMultiplayer()) { if (ShareSuite.RandomizeSharedPickups.Value) { dictionary.Add(val, pickupDef); } foreach (CharacterMaster item in PlayerCharacterMasterController.instances.Select((PlayerCharacterMasterController p) => p.master)) { if (!ShareSuite.DeadPlayersGetItems.Value && item.IsDeadAndOutOfLivesServer()) { continue; } if ((Object)(object)item.inventory == (Object)(object)body.inventory) { if (!((NetworkBehaviour)item).isLocalPlayer) { NetworkHandler.SendItemPickupMessage(((NetworkBehaviour)item.playerCharacterMasterController.networkUser).connectionToClient.connectionId, pickupDef.pickupIndex); } } else if (ShareSuite.RandomizeSharedPickups.Value) { PickupIndex? randomItemOfTier = GetRandomItemOfTier(itemDef.tier, pickupDef.pickupIndex); if (randomItemOfTier.HasValue) { PickupDef pickupDef2 = PickupCatalog.GetPickupDef(randomItemOfTier.Value); HandleGiveItem(item, pickupDef2); dictionary.Add(item, pickupDef2); } } else { HandleGiveItem(item, pickupDef); } } if (ShareSuite.RandomizeSharedPickups.Value) { orig.Invoke(self, body); ChatHandler.SendRichRandomizedPickupMessage(val, pickupDef, dictionary); return; } } orig.Invoke(self, body); ChatHandler.SendRichPickupMessage(val, pickupDef); HandleRichMessageUnlockAndNotification(val, pickupDef.pickupIndex); } private static string FixZeroItemCount(orig_ConstructChatString orig, PlayerPickupChatMessage self) { self.pickupQuantity = Math.Max(1u, self.pickupQuantity); return orig.Invoke(self); } private static void OnPurchaseDrop(orig_DropPickup orig, ShopTerminalBehavior self) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Invalid comparison between Unknown and I4 //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Invalid comparison between Unknown and I4 //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Invalid comparison between Unknown and I4 if (!NetworkServer.active) { orig.Invoke(self); return; } CostTypeIndex costType = ((Component)self).GetComponent<PurchaseInteraction>().costType; if (!GeneralHooks.IsMultiplayer() || (!IsValidItemPickup(self.CurrentPickupIndex()) && !ShareSuite.PrinterCauldronFixEnabled.Value) || (int)self.itemTier == 3 || (int)costType == 1 || (int)costType == 0) { orig.Invoke(self); } else if (!ShareSuite.PrinterCauldronFixEnabled.Value && PrinterCosts.Contains(costType)) { orig.Invoke(self); } } private static void OnShopPurchase(orig_OnInteractionBegin orig, PurchaseInteraction self, Interactor activator) { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Invalid comparison between Unknown and I4 //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Invalid comparison between Unknown and I4 //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_01be: 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_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) if (!self.CanBeAffordedByInteractor(activator)) { return; } if (!GeneralHooks.IsMultiplayer()) { orig.Invoke(self, activator); return; } if ((int)self.costType == 0) { orig.Invoke(self, activator); return; } ShopTerminalBehavior component = ((Component)self).GetComponent<ShopTerminalBehavior>(); if (PrinterCosts.Contains(self.costType) && ShareSuite.PrinterCauldronFixEnabled.Value) { CharacterBody component2 = ((Component)activator).GetComponent<CharacterBody>(); Inventory inventory = component2.inventory; if (!(PickupCatalog.GetPickupDef(component.CurrentPickupIndex())?.itemIndex).HasValue) { MonoBehaviour.print((object)"ShareSuite: PickupCatalog is null."); } else if (((Object)((Component)component).gameObject).name.Contains("Duplicator")) { HandleGiveItem(component2.master, PickupCatalog.GetPickupDef(component.CurrentPickupIndex()), self.cost); } else { HandleGiveItem(component2.master, PickupCatalog.GetPickupDef(component.CurrentPickupIndex())); } orig.Invoke(self, activator); ChatHandler.SendRichCauldronMessage(((Component)inventory).GetComponent<CharacterMaster>(), component.CurrentPickupIndex()); return; } if (ShareSuite.EquipmentShared.Value && (int)self.costType == 7) { Xoroshiro128Plus component3 = ((Component)self).GetComponent<Xoroshiro128Plus>(); ItemIndex val = (ItemIndex)(-1); CostTypeDef costTypeDef = CostTypeCatalog.GetCostTypeDef(self.costType); if (Object.op_Implicit((Object)(object)component)) { val = PickupCatalog.GetPickupDef(component.CurrentPickupIndex()).itemIndex; } PayCostResults val2 = costTypeDef.PayCost(self.cost, activator, ((Component)self).gameObject, component3, val); if (val2.equipmentTaken.Count >= 1) { orig.Invoke(self, activator); EquipmentSharingHooks.RemoveAllUnBlacklistedEquipment(); return; } } orig.Invoke(self, activator); } private static void OnScavengerDrop(orig_OnEnter orig, Opening self) { orig.Invoke(self); ShareSuite.DefaultMaxScavItemDropCount = Math.Max(Opening.maxItemDropCount, ShareSuite.DefaultMaxScavItemDropCount); ChestBehavior fieldValue = Reflection.GetFieldValue<ChestBehavior>((object)self, "chestBehavior"); if (fieldValue.tier1Chance > 0f) { int val = Math.Max((int)Math.Ceiling((double)ShareSuite.DefaultMaxScavItemDropCount / (double)Run.instance.participatingPlayerCount), 2); Opening.maxItemDropCount = Math.Min(val, ShareSuite.DefaultMaxScavItemDropCount); } else { Opening.maxItemDropCount = ShareSuite.DefaultMaxScavItemDropCount; } } public static void ArenaDropEnable(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); int num3 = default(int); float num2 = default(float); int num = default(int); val.GotoNext(new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 1), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref num3), (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, ref num2), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num) }); int index = val.Index; val.Index = index + 1; val.EmitDelegate<Func<int, int>>((Func<int, int>)((int i) => ShareSuite.VoidFieldLootCredit.Value)); } public static void SimulacrumArenaDropEnable(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); float num = default(float); val.GotoNext(new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 0), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, 1), (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, ref num), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 1) }); int index = val.Index; val.Index = index + 1; val.EmitDelegate<Func<int, int>>((Func<int, int>)((int i) => ShareSuite.SimulacrumLootCredit.Value)); } public static bool IsValidItemPickup(PickupIndex pickup) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Invalid comparison between Unknown and I4 //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Expected I4, but got Unknown //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Invalid comparison between Unknown and I4 PickupDef pickupDef = PickupCatalog.GetPickupDef(pickup); if (pickupDef != null && (int)pickupDef.itemIndex != -1) { ItemDef itemDef = ItemCatalog.GetItemDef(pickupDef.itemIndex); ItemTier tier = itemDef.tier; ItemTier val = tier; switch ((int)val) { case 0: return ShareSuite.WhiteItemsShared.Value; case 1: return ShareSuite.GreenItemsShared.Value; case 2: return ShareSuite.RedItemsShared.Value; case 3: return ShareSuite.LunarItemsShared.Value; case 4: return ShareSuite.BossItemsShared.Value; case 6: return ShareSuite.VoidItemsShared.Value; case 7: return ShareSuite.VoidItemsShared.Value; case 8: return ShareSuite.VoidItemsShared.Value; case 9: return ShareSuite.VoidItemsShared.Value; case 10: return true; default: return false; case 5: break; } } if (pickupDef != null && (int)pickupDef.equipmentIndex != -1) { return false; } return false; } public static bool IsValidPickupObject(GenericPickupController pickup, CharacterBody picker) { if (ItemSharingHooks.AdditionalPickupValidityChecks == null) { return true; } bool flag = true; Delegate[] invocationList = ItemSharingHooks.AdditionalPickupValidityChecks.GetInvocationList(); for (int i = 0; i < invocationList.Length; i++) { Func<GenericPickupController, CharacterBody, bool> func = (Func<GenericPickupController, CharacterBody, bool>)invocationList[i]; flag &= func(pickup, picker); } return flag; } private static PickupIndex? GetRandomItemOfTier(ItemTier tier, PickupIndex orDefault) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected I4, but got Unknown //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) switch ((int)tier) { case 0: return PickRandomOf<PickupIndex>((IList<PickupIndex>)Blacklist.AvailableTier1DropList); case 1: return PickRandomOf<PickupIndex>((IList<PickupIndex>)Blacklist.AvailableTier2DropList); case 2: return PickRandomOf<PickupIndex>((IList<PickupIndex>)Blacklist.AvailableTier3DropList); case 3: if (ShareSuite.LunarItemsRandomized.Value) { return PickRandomOf<PickupIndex>((IList<PickupIndex>)Blacklist.AvailableLunarDropList); } break; case 4: if (ShareSuite.BossItemsRandomized.Value) { return PickRandomOf<PickupIndex>((IList<PickupIndex>)Blacklist.AvailableBossDropList); } break; case 9: if (ShareSuite.VoidItemsRandomized.Value) { return PickRandomOf<PickupIndex>((IList<PickupIndex>)Blacklist.AvailableVoidDropList); } break; case 6: if (ShareSuite.VoidItemsRandomized.Value) { return PickRandomOf<PickupIndex>((IList<PickupIndex>)Blacklist.AvailableVoidDropList); } break; case 7: if (ShareSuite.VoidItemsRandomized.Value) { return PickRandomOf<PickupIndex>((IList<PickupIndex>)Blacklist.AvailableVoidDropList); } break; case 8: if (ShareSuite.VoidItemsRandomized.Value) { return PickRandomOf<PickupIndex>((IList<PickupIndex>)Blacklist.AvailableVoidDropList); } break; } PickupDef pickupDef = PickupCatalog.GetPickupDef(orDefault); if (Blacklist.HasItem(pickupDef.itemIndex)) { return null; } return orDefault; } internal static object GetInstanceField(Type type, object instance, string fieldName) { BindingFlags bindingAttr = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.GetField; FieldInfo field = type.GetField(fieldName, bindingAttr); return field.GetValue(instance); } internal static void SetInstanceField(Type type, object instance, string fieldName, object value) { BindingFlags bindingAttr = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic; FieldInfo field = type.GetField(fieldName, bindingAttr); field.SetValue(instance, value); } private static T? PickRandomOf<T>(IList<T> collection) where T : struct { return (collection.Count > 0) ? new T?(collection[Random.Range(0, collection.Count)]) : null; } private static void HandleGiveItem(CharacterMaster characterMaster, PickupDef pickupDef, int amount = 1) { //IL_000d: 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) for (int i = 0; i < amount; i++) { characterMaster.inventory.GiveItem(pickupDef.itemIndex, 1); } NetworkUser networkUser = characterMaster.playerCharacterMasterController.networkUser; int? num = ((networkUser == null) ? null : ((NetworkBehaviour)networkUser).connectionToClient?.connectionId); if (num.HasValue) { NetworkHandler.SendItemPickupMessage(num.Value, pickupDef.pickupIndex); } } public static void HandleRichMessageUnlockAndNotification(CharacterMaster characterMaster, PickupIndex pickupIndex) { //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0047: 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) if (!ShareSuite.RichMessagesEnabled.Value || !((NetworkBehaviour)characterMaster).isLocalPlayer) { return; } PlayerCharacterMasterController playerCharacterMasterController = characterMaster.playerCharacterMasterController; if (playerCharacterMasterController != null) { NetworkUser networkUser = playerCharacterMasterController.networkUser; if (networkUser != null) { LocalUser localUser = networkUser.localUser; if (localUser != null) { localUser.userProfile.DiscoverPickup(pickupIndex); } } } if (characterMaster.inventory.GetItemCount(PickupCatalog.GetPickupDef(pickupIndex).itemIndex) <= 1) { CharacterMasterNotificationQueue.PushPickupNotification(characterMaster, pickupIndex); } } } public static class MoneySharingHooks { public static bool MapTransitionActive; public static int SharedMoneyValue; internal static void UnHook() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Expected O, but got Unknown //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Expected O, but got Unknown //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Expected O, but got Unknown //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Expected O, but got Unknown //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Expected O, but got Unknown SceneDirector.Start -= new hook_Start(ResetClassValues); HealthComponent.TakeDamage -= new hook_TakeDamage(BrittleCrownDamageHook); GlobalEventManager.OnHitEnemy -= new hook_OnHitEnemy(BrittleCrownOnHitHook); DeathRewards.OnKilledServer -= new hook_OnKilledServer(ShareKillMoney); BarrelInteraction.OnInteractionBegin -= new hook_OnInteractionBegin(ShareBarrelMoney); MoneyPickup.OnTriggerStay -= new hook_OnTriggerStay(ShareTomeMoney); SceneExitController.Begin -= new hook_Begin(SplitExitMoney); PurchaseInteraction.OnInteractionBegin -= new hook_OnInteractionBegin(OnShopPurchase); GoldGatFire.FireBullet -= new hook_FireBullet(GoldGatFireHook); NetworkManagerSystem.OnClientConnect -= new hook_OnClientConnect(GoldGatConnect); NetworkManagerSystem.OnClientDisconnect -= new hook_OnClientDisconnect(GoldGatDisconnect); HealthComponent.TakeDamage -= new hook_TakeDamage(RollOfPenniesDamageHook); GoldGatFire.FireBullet -= new Manipulator(RemoveGoldGatMoneyLine); } internal static void Hook() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Expected O, but got Unknown //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Expected O, but got Unknown //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Expected O, but got Unknown //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Expected O, but got Unknown //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Expected O, but got Unknown SceneDirector.Start += new hook_Start(ResetClassValues); HealthComponent.TakeDamage += new hook_TakeDamage(BrittleCrownDamageHook); GlobalEventManager.OnHitEnemy += new hook_OnHitEnemy(BrittleCrownOnHitHook); DeathRewards.OnKilledServer += new hook_OnKilledServer(ShareKillMoney); BarrelInteraction.OnInteractionBegin += new hook_OnInteractionBegin(ShareBarrelMoney); MoneyPickup.OnTriggerStay += new hook_OnTriggerStay(ShareTomeMoney); SceneExitController.Begin += new hook_Begin(SplitExitMoney); PurchaseInteraction.OnInteractionBegin += new hook_OnInteractionBegin(OnShopPurchase); GoldGatFire.FireBullet += new hook_FireBullet(GoldGatFireHook); NetworkManagerSystem.OnClientConnect += new hook_OnClientConnect(GoldGatConnect); NetworkManagerSystem.OnClientDisconnect += new hook_OnClientDisconnect(GoldGatDisconnect); HealthComponent.TakeDamage += new hook_TakeDamage(RollOfPenniesDamageHook); if (ShareSuite.MoneyIsShared.Value && GeneralHooks.IsMultiplayer()) { GoldGatFire.FireBullet += new Manipulator(RemoveGoldGatMoneyLine); } } private static void ShareTomeMoney(orig_OnTriggerStay orig, MoneyPickup self, Collider other) { if ((Object)(object)self.baseObject == (Object)null || !ShareSuite.MoneyIsShared.Value) { orig.Invoke(self, other); return; } int num = ((!self.shouldScale) ? self.baseGoldReward : ((int)((float)self.baseGoldReward * Mathf.Pow(Run.instance.difficultyCoefficient, 1.25f)))); orig.Invoke(self, other); if (!Reflection.GetFieldValue<bool>((object)self, "alive")) { SharedMoneyValue += num; if (ShareSuite.MoneyScalarEnabled.Value && NetworkServer.active) { AddToSharedMoneyValue(num); } } } public static void AddMoneyExternal(int amount) { if (ShareSuite.MoneyIsShared.Value) { SharedMoneyValue += amount; return; } foreach (CharacterMaster item in PlayerCharacterMasterController.instances.Select((PlayerCharacterMasterController p) => p.master)) { item.money += (uint)amount; } } public static bool SharedMoneyEnabled() { return ShareSuite.MoneyIsShared.Value; } private static void OnShopPurchase(orig_OnInteractionBegin orig, PurchaseInteraction self, Interactor activator) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Invalid comparison between Unknown and I4 //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Invalid comparison between Unknown and I4 if (ShareSuite.MoneyIsShared.Value && GeneralHooks.IsMultiplayer() && Object.op_Implicit((Object)(object)self)) { CostTypeIndex costType = self.costType; CostTypeIndex val = costType; if ((int)val == 1) { if (self.cost <= SharedMoneyValue) { orig.Invoke(self, activator); SharedMoneyValue -= self.cost; } return; } if ((int)val == 2) { orig.Invoke(self, activator); int num = 0; foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances) { float maxHealth = instance.master.GetBody().maxHealth; if (maxHealth > (float)num) { num = (int)maxHealth; } } PurchaseInteraction component = ((Component)self).GetComponent<PurchaseInteraction>(); ShrineBloodBehavior component2 = ((Component)self).GetComponent<ShrineBloodBehavior>(); uint num2 = (uint)((double)(num * component.cost) / 100.0 * (double)component2.goldToPaidHpRatio); if (ShareSuite.MoneyScalarEnabled.Value) { num2 = (uint)((double)num2 * ShareSuite.MoneyScalar.Value); } SharedMoneyValue += (int)num2; return; } } orig.Invoke(self, activator); } private static void SplitExitMoney(orig_Begin orig, SceneExitController self) { MapTransitionActive = true; if (!ShareSuite.MoneyIsShared.Value || !GeneralHooks.IsMultiplayer()) { orig.Invoke(self); return; } int count = PlayerCharacterMasterController.instances.Count; foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances) { instance.master.money = (uint)Mathf.FloorToInt((float)(instance.master.money / count)); } orig.Invoke(self); } private static void ShareBarrelMoney(orig_OnInteractionBegin orig, BarrelInteraction self, Interactor activator) { orig.Invoke(self, activator); if (GeneralHooks.IsMultiplayer()) { SharedMoneyValue += self.goldReward; if (ShareSuite.MoneyScalarEnabled.Value && NetworkServer.active) { AddToSharedMoneyValue(self.goldReward); } } } private static void ShareKillMoney(orig_OnKilledServer orig, DeathRewards self, DamageReport damageReport) { orig.Invoke(self, damageReport); if (GeneralHooks.IsMultiplayer()) { SharedMoneyValue += (int)self.goldReward; if (ShareSuite.MoneyScalarEnabled.Value && NetworkServer.active) { AddToSharedMoneyValue(self.goldReward); } } } private static void ResetClassValues(orig_Start orig, SceneDirector self) { SetTeleporterActive(active: false); if (ShareSuite.MoneyIsShared.Value && GeneralHooks.IsMultiplayer()) { SharedMoneyValue = 15; } orig.Invoke(self); } private static void GoldGatFireHook(orig_FireBullet orig, GoldGatFire self) { //IL_0044: Unknown result type (might be due to invalid IL or missing references) if (!GeneralHooks.IsMultiplayer() || !ShareSuite.MoneyIsShared.Value) { orig.Invoke(self); return; } CharacterMaster fieldValue = Reflection.GetFieldValue<CharacterMaster>((object)self, "bodyMaster"); int num = (int)((float)GoldGatFire.baseMoneyCostPerBullet * (1f + ((float)TeamManager.instance.GetTeamLevel(fieldValue.teamIndex) - 1f) * 0.25f)); SharedMoneyValue = Math.Max(SharedMoneyValue - num, 0); orig.Invoke(self); } public static void RemoveGoldGatMoneyLine(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); FieldReference val4 = default(FieldReference); float num = default(float); FieldReference val3 = default(FieldReference); MethodReference val2 = default(MethodReference); val.GotoNext(new Func<Instruction, bool>[6] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdfld(x, ref val4), (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, ref num), (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdfld(x, ref val3), (Instruction x) => ILPatternMatchingExt.MatchCallvirt(x, ref val2) }); val.RemoveRange(14); } private static void GoldGatDisconnect(orig_OnClientDisconnect orig, NetworkManagerSystem self, NetworkConnection conn) { bool wasMultiplayer = GeneralHooks.IsMultiplayer(); orig.Invoke(self, conn); ToggleGoldGat(wasMultiplayer); } private static void GoldGatConnect(orig_OnClientConnect orig, NetworkManagerSystem self, NetworkConnection conn) { bool wasMultiplayer = GeneralHooks.IsMultiplayer(); orig.Invoke(self, conn); ToggleGoldGat(wasMultiplayer); } private static void ToggleGoldGat(bool wasMultiplayer) { //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown bool flag = GeneralHooks.IsMultiplayer(); if (wasMultiplayer != flag) { if (ShareSuite.MoneyIsShared.Value && flag) { GoldGatFire.FireBullet += new Manipulator(RemoveGoldGatMoneyLine); } else { GoldGatFire.FireBullet -= new Manipulator(RemoveGoldGatMoneyLine); } } } private static void BrittleCrownDamageHook(orig_TakeDamage orig, HealthComponent self, DamageInfo info) { //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active) { orig.Invoke(self, info); return; } if (!ShareSuite.MoneyIsShared.Value || !GeneralHooks.IsMultiplayer() || !Object.op_Implicit((Object)(object)self.body) || !Object.op_Implicit((Object)(object)self.body.inventory)) { orig.Invoke(self, info); return; } CharacterBody body = self.body; uint money = self.body.master.money; orig.Invoke(self, info); if (!self.alive) { return; } uint money2 = self.body.master.money; if (body.inventory.GetItemCount(ItemCatalog.FindItemIndex("GoldOnHit")) <= 0) { return; } SharedMoneyValue += (int)(money2 - money); foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances) { if (Object.op_Implicit((Object)(object)instance.master.GetBody()) && !((Object)(object)instance.master.GetBody() == (Object)(object)body)) { EffectManager.SimpleImpactEffect(Resources.Load<GameObject>("Prefabs/Effects/ImpactEffects/CoinImpact"), instance.master.GetBody().corePosition, Vector3.up, true); } } } private static void RollOfPenniesDamageHook(orig_TakeDamage orig, HealthComponent self, DamageInfo info) { //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, info); if (!NetworkServer.active || !ShareSuite.MoneyIsShared.Value || !GeneralHooks.IsMultiplayer() || !self.alive) { return; } CharacterBody body = self.body; if (!Object.op_Implicit((Object)(object)((body != null) ? body.inventory : null))) { return; } int itemCount = self.body.inventory.GetItemCount(ItemCatalog.FindItemIndex("GoldOnHurt")); if (itemCount <= 0) { return; } CharacterBody val = null; if (Object.op_Implicit((Object)(object)info.attacker)) { val = info.attacker.GetComponent<CharacterBody>(); } if ((Object)(object)val == (Object)null || (Object)(object)val == (Object)(object)self.body) { return; } SharedMoneyValue += Mathf.FloorToInt((float)(itemCount * 3) * Run.instance.difficultyCoefficient); foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances) { if (Object.op_Implicit((Object)(object)instance.master.GetBody()) && !((Object)(object)instance.master.GetBody() == (Object)(object)self.body)) { EffectManager.SimpleImpactEffect(Resources.Load<GameObject>("Prefabs/Effects/ImpactEffects/CoinImpact"), instance.master.GetBody().corePosition, Vector3.up, true); } } } private static void BrittleCrownOnHitHook(orig_OnHitEnemy orig, GlobalEventManager self, DamageInfo info, GameObject victim) { //IL_00a5: Unknown result type (might be due to invalid IL or missing references) if (!ShareSuite.MoneyIsShared.Value || !GeneralHooks.IsMultiplayer() || !Object.op_Implicit((Object)(object)info.attacker) || !Object.op_Implicit((Object)(object)info.attacker.GetComponent<CharacterBody>()) || !Object.op_Implicit((Object)(object)info.attacker.GetComponent<CharacterBody>().master)) { orig.Invoke(self, info, victim); return; } CharacterBody component = info.attacker.GetComponent<CharacterBody>(); uint money = component.master.money; orig.Invoke(self, info, victim); uint money2 = component.master.money; if (Object.op_Implicit((Object)(object)component.inventory) && component.inventory.GetItemCount(ItemCatalog.FindItemIndex("GoldOnHit")) > 0) { SharedMoneyValue += (int)(money2 - money); } } private static void AddToSharedMoneyValue(float goldReward) { SharedMoneyValue = Math.Max(SharedMoneyValue + (int)Mathf.Floor(goldReward * (float)ShareSuite.MoneyScalar.Value - goldReward), 0); } public static void SetTeleporterActive(bool active) { MapTransitionActive = active; } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.funkfrog_sipondo.sharesuite", "ShareSuite", "2.9.0")] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] public class ShareSuite : BaseUnityPlugin { public static string MessageSendVer = "2.9"; public static ConfigEntry<bool> ModIsEnabled; public static ConfigEntry<bool> MoneyIsShared; public static ConfigEntry<bool> WhiteItemsShared; public static ConfigEntry<bool> GreenItemsShared; public static ConfigEntry<bool> RedItemsShared; public static ConfigEntry<bool> EquipmentShared; public static ConfigEntry<bool> LunarItemsShared; public static ConfigEntry<bool> BossItemsShared; public static ConfigEntry<bool> VoidItemsShared; public static ConfigEntry<bool> RichMessagesEnabled; public static ConfigEntry<bool> DropBlacklistedEquipmentOnShare; public static ConfigEntry<bool> PrinterCauldronFixEnabled; public static ConfigEntry<bool> DeadPlayersGetItems; public static ConfigEntry<bool> OverridePlayerScalingEnabled; public static ConfigEntry<bool> OverrideBossLootScalingEnabled; public static ConfigEntry<bool> OverrideVoidFieldLootScalingEnabled; public static ConfigEntry<bool> OverrideSimulacrumLootScalingEnabled; public static ConfigEntry<bool> SacrificeFixEnabled; public static ConfigEntry<bool> MoneyScalarEnabled; public static ConfigEntry<bool> RandomizeSharedPickups; public static ConfigEntry<bool> LunarItemsRandomized; public static ConfigEntry<bool> BossItemsRandomized; public static ConfigEntry<bool> VoidItemsRandomized; public static ConfigEntry<bool> OverrideMultiplayerCheck; public static ConfigEntry<int> BossLootCredit; public static ConfigEntry<int> VoidFieldLootCredit; public static ConfigEntry<int> SimulacrumLootCredit; public static ConfigEntry<int> InteractablesOffset; public static ConfigEntry<double> InteractablesCredit; public static ConfigEntry<double> MoneyScalar; public static ConfigEntry<string> ItemBlacklist; public static ConfigEntry<string> EquipmentBlacklist; public static ConfigEntry<string> LastMessageSent; public static ConfigEntry<short> NetworkMessageType; private bool _previouslyEnabled; public static int DefaultMaxScavItemDropCount = 0; public void Update() { if (!ModIsEnabled.Value || !MoneyIsShared.Value || MoneySharingHooks.MapTransitionActive || !GeneralHooks.IsMultiplayer()) { return; } NetworkHandler.RegisterHandlers(); if (!NetworkServer.active) { return; } foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances) { if (!instance.master.IsDeadAndOutOfLivesServer() && instance.master.money != MoneySharingHooks.SharedMoneyValue) { instance.master.money = (uint)MoneySharingHooks.SharedMoneyValue; } } } public ShareSuite() { InitConfig(); CommandHelper.AddToConsoleWhenReady(); ReloadHooks(); MoneySharingHooks.SharedMoneyValue = 15; } private void ReloadHooks(object _ = null, EventArgs __ = null) { if (_previouslyEnabled && !ModIsEnabled.Value) { GeneralHooks.UnHook(); MoneySharingHooks.UnHook(); ItemSharingHooks.UnHook(); EquipmentSharingHooks.UnHook(); ChatHandler.UnHook(); _previouslyEnabled = false; } if (!_previouslyEnabled && ModIsEnabled.Value) { _previouslyEnabled = true; GeneralHooks.Hook(); MoneySharingHooks.Hook(); ItemSharingHooks.Hook(); EquipmentSharingHooks.Hook(); ChatHandler.Hook(); } } private void InitConfig() { ModIsEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "ModEnabled", true, "Toggles whether or not the mod is enabled. If turned off while in-game, it will unhook everything and reset the game to it's default behaviors."); ModIsEnabled.SettingChanged += ReloadHooks; MoneyIsShared = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "MoneyShared", true, "Toggles money sharing between teammates. Every player gains money together and spends it from one central pool of money."); WhiteItemsShared = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "WhiteItemsShared", true, "Toggles item sharing for common (white color) items."); GreenItemsShared = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "GreenItemsShared", true, "Toggles item sharing for rare (green color) items."); RedItemsShared = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "RedItemsShared", true, "Toggles item sharing for legendary (red color) items."); EquipmentShared = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "EquipmentShared", false, "Toggles item sharing for equipment."); LunarItemsShared = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "LunarItemsShared", false, "Toggles item sharing for Lunar (blue color) items."); BossItemsShared = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "BossItemsShared", true, "Toggles item sharing for boss (yellow color) items."); VoidItemsShared = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "VoidItemsShared", false, "Toggles item sharing for void (purple/corrupted) items."); RichMessagesEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "RichMessagesEnabled", true, "Toggles detailed item pickup messages with information on who picked the item up and who all received the item."); DropBlacklistedEquipmentOnShare = ((BaseUnityPlugin)this).Config.Bind<bool>("Balance", "DropBlacklistedEquipmentOnShare", false, "Changes the way shared equipment handles blacklisted equipment. If true, blacklisted equipment will be dropped on the ground once a new equipment is shared. If false, blacklisted equipment is left untouched when new equipment is shared."); RandomizeSharedPickups = ((BaseUnityPlugin)this).Config.Bind<bool>("Balance", "RandomizeSharedPickups", false, "When enabled each player (except the player who picked up the item) will get a randomized item of the same rarity."); LunarItemsRandomized = ((BaseUnityPlugin)this).Config.Bind<bool>("Balance", "LunarItemsRandomized", true, "Toggles randomizing Lunar items in RandomizeSharedPickups mode."); BossItemsRandomized = ((BaseUnityPlugin)this).Config.Bind<bool>("Balance", "BossItemsRandomized", false, "Toggles randomizing Boss items in RandomizeSharedPickups mode."); VoidItemsRandomized = ((BaseUnityPlugin)this).Config.Bind<bool>("Balance", "VoidItemsRandomized", false, "Toggles randomizing Void items in RandomizeSharedPickups mode."); PrinterCauldronFixEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Balance", "PrinterCauldronFix", true, "Toggles 3D printer and Cauldron item dupe fix by giving the item directly instead of dropping it on the ground."); DeadPlayersGetItems = ((BaseUnityPlugin)this).Config.Bind<bool>("Balance", "DeadPlayersGetItems", true, "Toggles whether or not dead players should get copies of picked up items."); OverridePlayerScalingEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Balance", "OverridePlayerScaling", true, "Toggles override of the scalar of interactables (chests, shrines, etc) that spawn in the world to your configured credit."); InteractablesCredit = ((BaseUnityPlugin)this).Config.Bind<double>("Balance", "InteractablesCredit", 1.0, "If player scaling via this mod is enabled, the amount of players the game should think are playing in terms of chest spawns."); InteractablesOffset = ((BaseUnityPlugin)this).Config.Bind<int>("Balance", "InteractablesOffset", 0, "If player scaling via this mod is enabled, the offset from base scaling for interactables credit (e.g. 100 would add 100 interactables credit (not 100 interactables), can also be negative)."); OverrideBossLootScalingEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Balance", "OverrideBossLootScaling", true, "Toggles override of the scalar of boss loot drops to your configured balance."); BossLootCredit = ((BaseUnityPlugin)this).Config.Bind<int>("Balance", "BossLootCredit", 1, "Specifies the amount of boss items dropped when the boss drop override is true."); OverrideVoidFieldLootScalingEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Balance", "OverrideVoidLootScaling", true, "Toggles override of the scalar of Void Field loot drops to your configured balance."); OverrideSimulacrumLootScalingEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Balance", "OverrideSimulacrumLootScaling", true, "Toggles override of the scalar of Simulacrum loot drops to your configured balance."); OverrideMultiplayerCheck = ((BaseUnityPlugin)this).Config.Bind<bool>("Debug", "OverrideMultiplayerCheck", false, "Forces ShareSuite to think that the game is running in a multiplayer instance."); LastMessageSent = ((BaseUnityPlugin)this).Config.Bind<string>("Debug", "LastMessageSent", "none", "Keeps track of the last mod version that sent you a message. Prevents spam, don't touch."); VoidFieldLootCredit = ((BaseUnityPlugin)this).Config.Bind<int>("Balance", "VoidFieldLootCredit", 1, "Specifies the amount of items dropped from completed Void Fields when the Void Field scaling override is true."); SimulacrumLootCredit = ((BaseUnityPlugin)this).Config.Bind<int>("Balance", "SimulacrumLootCredit", 1, "Specifies the amount of items dropped after each Simulacrum round when the Simulacrum scaling override is true."); SacrificeFixEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Balance", "SacrificeFixEnabled", true, "Toggles the reduction in sacrifice loot drops to be balanced with shared items enabled."); MoneyScalarEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "MoneyScalarEnabled", false, "Toggles the money scalar, set MoneyScalar to an amount to fine-tune the amount of gold you recieve."); MoneyScalar = ((BaseUnityPlugin)this).Config.Bind<double>("Settings", "MoneyScalar", 1.0, "Modifies player count used in calculations of gold earned when money sharing is on."); ItemBlacklist = ((BaseUnityPlugin)this).Config.Bind<string>("Settings", "ItemBlacklist", "BeetleGland,TreasureCache,TitanGoldDuringTP,TPHealingNova,ArtifactKey,FreeChest,RoboBallBuddy,MinorConstructOnKill", "Items (by internal name) that you do not want to share, comma separated. Please find the item \"Code Names\" at: https://github.com/risk-of-thunder/R2Wiki/wiki/Item-&-Equipment-IDs-and-Names"); ItemBlacklist.SettingChanged += delegate { Blacklist.Recalculate(); }; EquipmentBlacklist = ((BaseUnityPlugin)this).Config.Bind<string>("Settings", "EquipmentBlacklist", "", "Equipment (by internal name) that you do not want to share, comma separated. Please find the \"Code Names\"s at: https://github.com/risk-of-thunder/R2Wiki/wiki/Item-&-Equipment-IDs-and-Names"); EquipmentBlacklist.SettingChanged += delegate { Blacklist.Recalculate(); }; NetworkMessageType = ((BaseUnityPlugin)this).Config.Bind<short>("Settings", "NetworkMessageType", (short)1021, "The identifier for network message for this mod. Must be unique across all mods."); } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CcModIsEnabled(ConCommandArgs args) { if (((ConCommandArgs)(ref args)).Count == 0) { Debug.Log((object)ModIsEnabled.Value); return; } bool? flag = TryGetBool(((ConCommandArgs)(ref args))[0]); if (!flag.HasValue) { Debug.Log((object)"Couldn't parse to boolean."); return; } ModIsEnabled.Value = flag.Value; Debug.Log((object)$"Mod status set to {ModIsEnabled.Value}."); } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CcMoneyIsShared(ConCommandArgs args) { //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Expected O, but got Unknown //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Expected O, but got Unknown if (((ConCommandArgs)(ref args)).Count == 0) { Debug.Log((object)MoneyIsShared.Value); return; } bool? flag = TryGetBool(((ConCommandArgs)(ref args))[0]); if (!flag.HasValue) { Debug.Log((object)"Couldn't parse to boolean."); return; } if (MoneyIsShared.Value != flag.Value) { if (MoneyIsShared.Value && !flag.Value) { GoldGatFire.FireBullet -= new Manipulator(MoneySharingHooks.RemoveGoldGatMoneyLine); } else if (GeneralHooks.IsMultiplayer()) { GoldGatFire.FireBullet += new Manipulator(MoneySharingHooks.RemoveGoldGatMoneyLine); } } MoneyIsShared.Value = flag.Value; Debug.Log((object)$"Money sharing status set to {MoneyIsShared.Value}."); } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CcMoneyScalarEnabled(ConCommandArgs args) { if (((ConCommandArgs)(ref args)).Count == 0) { Debug.Log((object)MoneyScalarEnabled.Value); return; } bool? flag = TryGetBool(((ConCommandArgs)(ref args))[0]); if (!flag.HasValue) { Debug.Log((object)"Couldn't parse to boolean."); return; } MoneyScalarEnabled.Value = flag.Value; Debug.Log((object)$"Money sharing scalar status set to {MoneyScalarEnabled.Value}."); } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CcMoneyScalar(ConCommandArgs args) { if (((ConCommandArgs)(ref args)).Count == 0) { Debug.Log((object)MoneyScalar.Value); return; } double? num = ((ConCommandArgs)(ref args)).TryGetArgDouble(0); if (!num.HasValue) { Debug.Log((object)"Couldn't parse to a number."); return; } MoneyScalar.Value = num.Value; Debug.Log((object)$"Mod status set to {MoneyScalar.Value}."); } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CcWhiteShared(ConCommandArgs args) { if (((ConCommandArgs)(ref args)).Count == 0) { Debug.Log((object)WhiteItemsShared.Value); return; } bool? flag = TryGetBool(((ConCommandArgs)(ref args))[0]); if (!flag.HasValue) { Debug.Log((object)"Couldn't parse to boolean."); return; } WhiteItemsShared.Value = flag.Value; Debug.Log((object)$"White items sharing set to {WhiteItemsShared.Value}."); } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CcGreenShared(ConCommandArgs args) { if (((ConCommandArgs)(ref args)).Count == 0) { Debug.Log((object)GreenItemsShared.Value); return; } bool? flag = TryGetBool(((ConCommandArgs)(ref args))[0]); if (!flag.HasValue) { Debug.Log((object)"Couldn't parse to boolean."); return; } GreenItemsShared.Value = flag.Value; Debug.Log((object)$"Green items sharing set to {GreenItemsShared.Value}."); } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CcRedShared(ConCommandArgs args) { if (((ConCommandArgs)(ref args)).Count == 0) { Debug.Log((object)RedItemsShared.Value); return; } bool? flag = TryGetBool(((ConCommandArgs)(ref args))[0]); if (!flag.HasValue) { Debug.Log((object)"Couldn't parse to boolean."); return; } RedItemsShared.Value = flag.Value; Debug.Log((object)$"Red item sharing set to {RedItemsShared.Value}."); } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CcEquipmentShared(ConCommandArgs args) { if (((ConCommandArgs)(ref args)).Count == 0) { Debug.Log((object)EquipmentShared.Value); return; } bool? flag = TryGetBool(((ConCommandArgs)(ref args))[0]); if (!flag.HasValue) { Debug.Log((object)"Couldn't parse to boolean."); return; } EquipmentShared.Value = flag.Value; Debug.Log((object)$"Equipment sharing set to {EquipmentShared.Value}."); } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CcLunarShared(ConCommandArgs args) { if (((ConCommandArgs)(ref args)).Count == 0) { Debug.Log((object)LunarItemsShared.Value); return; } bool? flag = TryGetBool(((ConCommandArgs)(ref args))[0]); if (!flag.HasValue) { Debug.Log((object)"Couldn't parse to boolean."); return; } LunarItemsShared.Value = flag.Value; Debug.Log((object)$"Lunar item sharing set to {LunarItemsShared.Value}."); } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CcBossShared(ConCommandArgs args) { if (((ConCommandArgs)(ref args)).Count == 0) { Debug.Log((object)BossItemsShared.Value); return; } bool? flag = TryGetBool(((ConCommandArgs)(ref args))[0]); if (!flag.HasValue) { Debug.Log((object)"Couldn't parse to boolean."); return; } BossItemsShared.Value = flag.Value; Debug.Log((object)$"Boss item sharing set to {BossItemsShared.Value}."); } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CcVoidItemsShared(ConCommandArgs args) { if (((ConCommandArgs)(ref args)).Count == 0) { Debug.Log((object)VoidItemsShared.Value); return; } bool? flag = TryGetBool(((ConCommandArgs)(ref args))[0]); if (!flag.HasValue) { Debug.Log((object)"Couldn't parse to boolean."); return; } VoidItemsShared.Value = flag.Value; Debug.Log((object)$"Void item sharing set to {VoidItemsShared.Value}."); } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CcMessagesEnabled(ConCommandArgs args) { if (((ConCommandArgs)(ref args)).Count == 0) { Debug.Log((object)RichMessagesEnabled.Value); return; } bool? flag = TryGetBool(((ConCommandArgs)(ref args))[0]); if (!flag.HasValue) { Debug.Log((object)"Couldn't parse to boolean."); return; } RichMessagesEnabled.Value = flag.Value; Debug.Log((object)$"Rich Messages Enabled set to {RichMessagesEnabled.Value}."); } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CcDropBlacklistedEquipmentOnShare(ConCommandArgs args) { if (((ConCommandArgs)(ref args)).Count == 0) { Debug.Log((object)DropBlacklistedEquipmentOnShare.Value); return; } bool? flag = TryGetBool(((ConCommandArgs)(ref args))[0]); if (!flag.HasValue) { Debug.Log((object)"Couldn't parse to boolean."); return; } DropBlacklistedEquipmentOnShare.Value = flag.Value; Debug.Log((object)$"Drop Blacklisted Equipment on Share set to {DropBlacklistedEquipmentOnShare.Value}."); } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CcRandomizeSharedPickups(ConCommandArgs args) { if (((ConCommandArgs)(ref args)).Count == 0) { Debug.Log((object)RandomizeSharedPickups.Value); return; } bool? flag = TryGetBool(((ConCommandArgs)(ref args))[0]); if (!flag.HasValue) { Debug.Log((object)"Couldn't parse to boolean."); return; } RandomizeSharedPickups.Value = flag.Value; Debug.Log((object)$"Randomize pickups per player set to {RandomizeSharedPickups.Value}."); } [ConCommand(/*Could not decode attribute arguments.*/)] priva