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