public static void OnDoEquip(WorldClient client, INetPacketStream packet) { var equipItemPacket = new EquipItemPacket(packet); var inventoryEvent = new InventoryEquipEventArgs(equipItemPacket.UniqueId, equipItemPacket.Part); client.Player.NotifySystem <InventorySystem>(inventoryEvent); }
/// <summary> /// Equips an item. /// </summary> /// <param name="player"></param> /// <param name="e"></param> private void EquipItem(IPlayerEntity player, InventoryEquipEventArgs e) { var uniqueId = e.UniqueId; var part = e.Part; Logger.Debug("UniqueId: {0} | Part: {1}", uniqueId, part); Item item = player.Inventory.GetItem(uniqueId); if (item == null) { return; } bool equip = part == -1; Logger.Debug("Equip item: {0}", equip.ToString()); if (equip) { Logger.Debug("Item: {0}", item.ToString()); // TODO: check if the player fits the item requirements if (item.Data.ItemKind1 == ItemKind1.ARMOR && item.Data.ItemSex != player.VisualAppearance.Gender) { Logger.Debug("Wrong sex for armor"); // TODO: Send invalid sex error return; } if (player.Object.Level < item.Data.LimitLevel) { Logger.Debug("Player level to low"); // TODO: Send low level error return; } // TODO: SPECIAL: double weapon for blades... int sourceSlot = item.Slot; int equipedItemSlot = item.Data.Parts + EquipOffset; Item equipedItem = player.Inventory[equipedItemSlot]; if (equipedItem != null && equipedItem.Slot != -1) { this.UnequipItem(player, equipedItem); } // Move item item.Slot = equipedItemSlot; player.Inventory.Items.Swap(sourceSlot, equipedItemSlot); WorldPacketFactory.SendItemEquip(player, item, item.Data.Parts, true); } else { this.UnequipItem(player, item); } }
/// <summary> /// Equips an item. /// </summary> /// <param name="player"></param> /// <param name="e"></param> private void ProcessEquipItem(IPlayerEntity player, InventoryEquipEventArgs e) { Item item = player.Inventory.GetItem(e.UniqueId); if (item == null) { this.Logger.LogWarning($"Cannot find item with unique id: {e.UniqueId} for player {player.Object.Name}."); return; } bool equip = e.Part == -1; if (equip) { this.EquipItem(player, item); } else { this.UnequipItem(player, item); } }