private void UpdateScoreboard(HUD hud, FieldInfo fieldInfo)
        {
            ScoreboardController scoreboardController = hud.scoreboardPanel.GetComponent <ScoreboardController>();

            if (scoreboardController != null)
            {
                UIElementAllocator <ScoreboardStrip> elements = (UIElementAllocator <ScoreboardStrip>) typeof(ScoreboardController)
                                                                .GetField("stripAllocator", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(scoreboardController);

                if (elements != null)
                {
                    List <ScoreboardStrip> scoreboardStrips = (List <ScoreboardStrip>) typeof(UIElementAllocator <ScoreboardStrip>)
                                                              .GetField("elementControllerComponentsList", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(elements);

                    foreach (ScoreboardStrip scoreboardStrip in scoreboardStrips)
                    {
                        if (scoreboardStrip == null)
                        {
                            continue;
                        }

                        if (fieldInfo != null)
                        {
                            List <ItemIcon> itemIcons = (List <ItemIcon>)fieldInfo.GetValue(scoreboardStrip.itemInventoryDisplay);

                            foreach (ItemIcon itemIcon in itemIcons)
                            {
                                if (itemIcon != null && itemIcon.GetComponent <DropItemController>() == null)
                                {
                                    DropItemController dropItemController = itemIcon.gameObject.AddComponent <DropItemController>();
                                    Inventory          inventory          = (Inventory)typeof(ItemInventoryDisplay).GetField("inventory", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(scoreboardStrip.itemInventoryDisplay);
                                    dropItemController.Inventory            = inventory;
                                    dropItemController.ItemIcon             = itemIcon;
                                    dropItemController.SendDropItemToServer = SendDropItemRequest;
                                }
                            }
                        }

                        EquipmentIcon equipmentIcon = scoreboardStrip.equipmentIcon;

                        if (equipmentIcon != null && equipmentIcon.GetComponent <DropItemController>() == null)
                        {
                            if (equipmentIcon.targetInventory == null)
                            {
                                continue;
                            }
                            EquipmentIndex equipmentIndex = (equipmentIcon.displayAlternateEquipment) ? equipmentIcon.targetInventory.alternateEquipmentIndex : equipmentIcon.targetInventory.currentEquipmentIndex;

                            if (equipmentIndex != EquipmentIndex.None)
                            {
                                DropItemController dropItemController = equipmentIcon.gameObject.AddComponent <DropItemController>();
                                dropItemController.Inventory                 = equipmentIcon.targetInventory;
                                dropItemController.EquipmentIcon             = equipmentIcon;
                                dropItemController.SendDropEquipmentToServer = SendDropEquipmentRequest;
                            }
                        }
                    }
                }
            }
        }
        private void Update()
        {
            if (!NetworkServer.active)
            {
                return;
            }

            if (CachedHudInstancesList == null)
            {
                CachedHudInstancesList = (List <HUD>) typeof(HUD).GetField("instancesList", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null);
            }

            foreach (HUD hud in CachedHudInstancesList)
            {
                if (hud == null || hud.itemInventoryDisplay == null)
                {
                    continue;
                }
                FieldInfo fieldInfo = typeof(ItemInventoryDisplay).GetField("itemIcons", BindingFlags.NonPublic | BindingFlags.Instance);
                if (fieldInfo == null)
                {
                    continue;
                }
                List <ItemIcon> itemIcons = (List <ItemIcon>)fieldInfo.GetValue(hud.itemInventoryDisplay);

                foreach (ItemIcon itemIcon in itemIcons)
                {
                    if (itemIcon != null && itemIcon.GetComponent <DropItemController>() == null)
                    {
                        DropItemController dropItemController = itemIcon.transform.gameObject.AddComponent <DropItemController>();
                        ItemIndex          itemIndex          = (ItemIndex)typeof(ItemIcon).GetField("itemIndex", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(itemIcon);
                        dropItemController.ItemIndex = itemIndex;
                        Inventory inventory = (Inventory)typeof(ItemInventoryDisplay).GetField("inventory", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(hud.itemInventoryDisplay);
                        dropItemController.Inventory = inventory;
                    }
                }

                foreach (EquipmentIcon equipmentIcon in hud.equipmentIcons)
                {
                    if (equipmentIcon != null && equipmentIcon.GetComponent <DropItemController>() == null)
                    {
                        if (equipmentIcon.targetEquipmentSlot == null || equipmentIcon.targetEquipmentSlot.equipmentIndex == EquipmentIndex.None)
                        {
                            continue;
                        }
                        DropItemController dropItemController = equipmentIcon.transform.gameObject.AddComponent <DropItemController>();
                        dropItemController.EquipmentIndex = equipmentIcon.targetEquipmentSlot.equipmentIndex;
                        dropItemController.Inventory      = equipmentIcon.targetInventory;
                    }
                }
            }
        }
        private void UpdateHud(HUD hud, FieldInfo fieldInfo)
        {
            if (hud.itemInventoryDisplay != null)
            {
                if (fieldInfo != null)
                {
                    List <ItemIcon> itemIcons = (List <ItemIcon>)fieldInfo.GetValue(hud.itemInventoryDisplay);

                    foreach (ItemIcon itemIcon in itemIcons)
                    {
                        if (itemIcon != null && itemIcon.GetComponent <DropItemController>() == null)
                        {
                            DropItemController dropItemController = itemIcon.gameObject.AddComponent <DropItemController>();
                            Inventory          inventory          = (Inventory)typeof(ItemInventoryDisplay).GetField("inventory", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(hud.itemInventoryDisplay);
                            dropItemController.Inventory            = inventory;
                            dropItemController.ItemIcon             = itemIcon;
                            dropItemController.SendDropItemToServer = SendDropItemRequest;
                        }
                    }
                }
            }

            foreach (EquipmentIcon equipmentIcon in hud.equipmentIcons)
            {
                if (equipmentIcon != null && equipmentIcon.GetComponent <DropItemController>() == null)
                {
                    if (equipmentIcon.targetInventory == null)
                    {
                        continue;
                    }
                    EquipmentIndex equipmentIndex = (equipmentIcon.displayAlternateEquipment) ? equipmentIcon.targetInventory.alternateEquipmentIndex : equipmentIcon.targetInventory.currentEquipmentIndex;
                    if (equipmentIndex != EquipmentIndex.None)
                    {
                        DropItemController dropItemController = equipmentIcon.gameObject.AddComponent <DropItemController>();
                        dropItemController.Inventory                 = equipmentIcon.targetInventory;
                        dropItemController.EquipmentIcon             = equipmentIcon;
                        dropItemController.SendDropEquipmentToServer = SendDropEquipmentRequest;
                    }
                }
            }
        }