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); }
/// <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); }