using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using On.RoR2; using RoR2; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("DeadPlayerCatchup")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("DeadPlayerCatchup")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("1c4cbe8f-81f8-49a0-9a30-44ef055885e7")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] [BepInPlugin("com.yourname.deadplayercatchup", "DeadPlayerCatchup", "2.2.0")] public class DeadPlayerCatchupPlugin : BaseUnityPlugin { private readonly HashSet suppressMachineDrops = new HashSet(); public void Awake() { //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 GenericPickupController.AttemptGrant += new hook_AttemptGrant(OnAttemptGrant); PurchaseInteraction.OnInteractionBegin += new hook_OnInteractionBegin(OnPurchaseInteractionBegin); ShopTerminalBehavior.DropPickup_bool += new hook_DropPickup_bool(OnShopTerminalDropPickup); ((BaseUnityPlugin)this).Logger.LogInfo((object)"DeadPlayerCatchup loaded!"); } private void OnAttemptGrant(orig_AttemptGrant orig, GenericPickupController self, CharacterBody body) { //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Invalid comparison between Unknown and I4 //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, body); if ((Object)(object)self == (Object)null || (Object)(object)body == (Object)null || (Object)(object)body.inventory == (Object)null) { return; } UniquePickup pickup = self.pickup; if (((UniquePickup)(ref pickup)).isTempItem) { return; } PickupDef pickupDef = PickupCatalog.GetPickupDef(self.pickupIndex); if (pickupDef == null || (int)pickupDef.equipmentIndex != -1) { return; } ItemIndex itemIndex = pickupDef.itemIndex; if ((int)itemIndex != -1) { ItemDef itemDef = ItemCatalog.GetItemDef(itemIndex); if (IsAllowedItem(itemDef)) { GiveRandomSameTierItemsToDeadPlayers(body.inventory, itemDef.tier); } } } private void OnPurchaseInteractionBegin(orig_OnInteractionBegin orig, PurchaseInteraction self, Interactor activator) { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: 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_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Invalid comparison between Unknown and I4 //IL_00cf: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)self == (Object)null || (Object)(object)activator == (Object)null) { orig.Invoke(self, activator); return; } ShopTerminalBehavior component = ((Component)self).GetComponent(); if ((Object)(object)component == (Object)null) { orig.Invoke(self, activator); return; } if (!IsPrinterScrapperOrCauldronCost(self.costType)) { orig.Invoke(self, activator); return; } CharacterBody component2 = ((Component)activator).GetComponent(); if ((Object)(object)component2 == (Object)null || (Object)(object)component2.inventory == (Object)null) { orig.Invoke(self, activator); return; } PickupIndex val = component.CurrentPickupIndex(); PickupDef pickupDef = PickupCatalog.GetPickupDef(val); if (pickupDef != null && (int)pickupDef.itemIndex != -1) { component2.inventory.GiveItem(pickupDef.itemIndex, 1); } suppressMachineDrops.Add(component); orig.Invoke(self, activator); } private void OnShopTerminalDropPickup(orig_DropPickup_bool orig, ShopTerminalBehavior self, bool isDuplicated) { if ((Object)(object)self != (Object)null && suppressMachineDrops.Contains(self)) { suppressMachineDrops.Remove(self); } else { orig.Invoke(self, isDuplicated); } } private bool IsPrinterScrapperOrCauldronCost(CostTypeIndex costType) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Expected I4, but got Unknown int num = (int)costType; return num == 4 || num == 5 || num == 6 || num == 9 || num == 10; } private void GiveRandomSameTierItemsToDeadPlayers(Inventory pickerInventory, ItemTier tier) { //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Invalid comparison between Unknown and I4 //IL_0078: 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) foreach (CharacterMaster readOnlyInstances in CharacterMaster.readOnlyInstancesList) { if (!((Object)(object)readOnlyInstances == (Object)null) && !((Object)(object)readOnlyInstances.inventory == (Object)null) && IsDeadOrRemoteOperationPlayer(readOnlyInstances) && !((Object)(object)readOnlyInstances.inventory == (Object)(object)pickerInventory)) { ItemIndex randomItemFromTier = GetRandomItemFromTier(tier); if ((int)randomItemFromTier != -1) { readOnlyInstances.inventory.GiveItem(randomItemFromTier, 1); SendPickupMessage(randomItemFromTier); } } } } private bool IsAllowedItem(ItemDef itemDef) { //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Invalid comparison between Unknown and I4 //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Invalid comparison between Unknown and I4 //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Invalid comparison between Unknown and I4 //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Invalid comparison between Unknown and I4 //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Invalid comparison between Unknown and I4 //IL_00d2: 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_00e0: Invalid comparison between Unknown and I4 //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Invalid comparison between Unknown and I4 //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Invalid comparison between Unknown and I4 if ((Object)(object)itemDef == (Object)null) { return false; } if (itemDef.hidden) { return false; } if (((Object)itemDef).name.ToLowerInvariant().Contains("scrap")) { return false; } if ((int)itemDef.tier == 3) { return false; } if ((int)itemDef.tier == 6 || (int)itemDef.tier == 7 || (int)itemDef.tier == 8 || (int)itemDef.tier == 9) { return false; } if (itemDef.ContainsTag((ItemTag)13)) { return false; } string text = ((Object)itemDef).name.ToLowerInvariant(); if (text.Contains("temporary") || text.Contains("temp")) { return false; } return (int)itemDef.tier == 0 || (int)itemDef.tier == 1 || (int)itemDef.tier == 2 || (int)itemDef.tier == 4; } private bool IsDeadOrRemoteOperationPlayer(CharacterMaster master) { if ((Object)(object)master == (Object)null) { return false; } if ((Object)(object)master.playerCharacterMasterController == (Object)null) { return false; } if (!master.hasBody) { return true; } CharacterBody body = master.GetBody(); if ((Object)(object)body == (Object)null) { return true; } string text = ((Object)body).name.ToLowerInvariant(); if (text.Contains("drone") || text.Contains("turret") || text.Contains("beetleguard") || text.Contains("equipmentdrone") || text.Contains("emergencydrone") || text.Contains("flamedrone") || text.Contains("missiledrone") || text.Contains("megadrone") || text.Contains("roboball") || text.Contains("squidturret")) { return true; } return false; } private ItemIndex GetRandomItemFromTier(ItemTier tier) { //IL_0008: 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_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_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0022: 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_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_0087: 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) List list = new List(); GenericStaticEnumerable allItems = ItemCatalog.allItems; AllItemsEnumerator enumerator = allItems.GetEnumerator(); try { while (((AllItemsEnumerator)(ref enumerator)).MoveNext()) { ItemIndex current = ((AllItemsEnumerator)(ref enumerator)).Current; ItemDef itemDef = ItemCatalog.GetItemDef(current); if (IsAllowedItem(itemDef) && itemDef.tier == tier) { list.Add(current); } } } finally { ((IDisposable)(AllItemsEnumerator)(ref enumerator)).Dispose(); } if (list.Count == 0) { return (ItemIndex)(-1); } int index = Random.Range(0, list.Count); return list[index]; } private void SendPickupMessage(ItemIndex itemIndex) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0032: 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_0052: Expected O, but got Unknown ItemDef itemDef = ItemCatalog.GetItemDef(itemIndex); if (!((Object)(object)itemDef == (Object)null)) { string text = Language.GetString(itemDef.nameToken); if (string.IsNullOrEmpty(text)) { text = ((Object)itemDef).name; } Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage { baseToken = "A dead player received " + text + "" }); } } }