Decompiled source of ShareSuite v2.9.0
BepInEx/plugins/ShareSuite/ShareSuite.dll
Decompiled 3 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.0", FrameworkDisplayName = ".NET Standard 2.0")] [assembly: AssemblyCompany("ShareSuite")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+955b058ebd223933c8912abe4c4cd70cf3b9f9c6")] [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_0031: 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_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Invalid comparison between Unknown and I4 //IL_0048: Unknown result type (might be due to invalid IL or missing references) _items = new ItemMask(); string[] array = ShareSuite.ItemBlacklist.Value.Split(new char[1] { ',' }); 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_0031: 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_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Invalid comparison between Unknown and I4 //IL_0048: Unknown result type (might be due to invalid IL or missing references) _equipment = new EquipmentMask(); string[] array = ShareSuite.EquipmentBlacklist.Value.Split(new char[1] { ',' }); 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_0047: 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), 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_0197: 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_0207: 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_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Invalid comparison between Unknown and I4 //IL_0092: 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_0141: 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_017e: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_0100: 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 { 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) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) 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", false, "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.*/)] private static void CcPrinterCauldronFix(ConCommandArgs args) { if (((ConCommandArgs)(ref args)).Count == 0) { Debug.Log((object)PrinterCauldronFixEnabled.Value); return; } bool? flag = TryGetBool(((ConCommandArgs)(ref args))[0]); if (!flag.HasValue) { Debug.Log(