public void Handle(WorldClient client, TradeAddItemPacket packet)
        {
            var ok = _tradeManager.TryAddItem(packet.Bag, packet.Slot, packet.Quantity, packet.SlotInTradeWindow, out var tradeItem);

            if (ok)
            {
                _packetFactory.SendAddedItemToTrade(client, packet.Bag, packet.Slot, packet.Quantity, packet.SlotInTradeWindow);
                _packetFactory.SendAddedItemToTrade(_gameWorld.Players[_tradeManager.PartnerId].GameSession.Client, tradeItem, packet.Quantity, packet.SlotInTradeWindow);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Handles event, when player adds something to trade window.
        /// </summary>
        /// <param name="sender">player, that added something</param>
        private void AddedItemToTrade(WorldClient sender, TradeAddItemPacket tradeAddItemPacket)
        {
            var trader  = _gameWorld.Players[sender.CharID];
            var partner = trader.TradePartner;

            var tradeItem = trader.InventoryItems.First(item => item.Bag == tradeAddItemPacket.Bag && item.Slot == tradeAddItemPacket.Slot);

            tradeItem.TradeQuantity = tradeItem.Count > tradeAddItemPacket.Quantity ? tradeAddItemPacket.Quantity : tradeItem.Count;
            trader.TradeItems.Add(tradeItem);

            SendAddedItemToTrade(trader.Client, tradeAddItemPacket.Bag, tradeAddItemPacket.Slot, tradeAddItemPacket.Quantity, tradeAddItemPacket.SlotInTradeWindow);
            SendAddedItemToTrade(partner.Client, tradeItem, tradeAddItemPacket.Quantity, tradeAddItemPacket.SlotInTradeWindow);
        }
Esempio n. 3
0
        /// <summary>
        /// Handles event, when player adds something to trade window.
        /// </summary>
        /// <param name="sender">player, that added something</param>
        private void AddedItemToTrade(WorldClient sender, TradeAddItemPacket tradeAddItemPacket)
        {
            var trader  = _gameWorld.Players[sender.CharID];
            var partner = trader.TradePartner;

            trader.InventoryItems.TryGetValue((tradeAddItemPacket.Bag, tradeAddItemPacket.Slot), out var tradeItem);
            if (tradeItem is null)
            {
                // Possible cheating?
                return;
            }
            tradeItem.TradeQuantity = tradeItem.Count > tradeAddItemPacket.Quantity ? tradeAddItemPacket.Quantity : tradeItem.Count;
            trader.TradeItems.Add(tradeAddItemPacket.SlotInTradeWindow, tradeItem);

            SendAddedItemToTrade(trader.Client, tradeAddItemPacket.Bag, tradeAddItemPacket.Slot, tradeAddItemPacket.Quantity, tradeAddItemPacket.SlotInTradeWindow);
            SendAddedItemToTrade(partner.Client, tradeItem, tradeAddItemPacket.Quantity, tradeAddItemPacket.SlotInTradeWindow);
        }