Beispiel #1
0
        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);
        }
Beispiel #2
0
        /// <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);
            }
        }
Beispiel #3
0
        /// <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);
            }
        }