Exemplo n.º 1
0
        public static void OnDropItem(WorldClient client, INetPacketStream packet)
        {
            var dropItemPacket = new DropItemPacket(packet);
            var inventoryEvent = new InventoryDropItemEventArgs(dropItemPacket.ItemId, dropItemPacket.ItemQuantity);

            client.Player.NotifySystem <InventorySystem>(inventoryEvent);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Drops an item from the inventory to the ground.
        /// </summary>
        /// <param name="player">Player entity.</param>
        /// <param name="e">Drop item event arguments.</param>
        private void ProcessDropItem(IPlayerEntity player, InventoryDropItemEventArgs e)
        {
            Item inventoryItem = player.Inventory.GetItem(e.UniqueItemId);

            if (inventoryItem == null)
            {
                Logger.LogWarning($"{player.Object.Name}: Cannot find item with unique Id: {e.UniqueItemId}");
                return;
            }

            if (inventoryItem.Slot >= EquipOffset)
            {
                Logger.LogWarning($"{player.Object.Name}: Cannot drop an equiped item.");
                return;
            }

            int quantityToDrop = Math.Min(e.Quantity, inventoryItem.Quantity);

            if (quantityToDrop < 0)
            {
                Logger.LogError($"{player.Object.Name} tried to drop a negative quantity.");
                return;
            }

            Item itemToDrop = inventoryItem.Clone();

            itemToDrop.Quantity = quantityToDrop;
            player.NotifySystem <DropSystem>(new DropItemEventArgs(itemToDrop));

            inventoryItem.Quantity -= quantityToDrop;
            if (inventoryItem.Quantity <= 0)
            {
                inventoryItem.Reset();
            }

            WorldPacketFactory.SendItemUpdate(player, UpdateItemType.UI_NUM, inventoryItem.UniqueId, inventoryItem.Quantity);
        }