public void Handle(WorldClient client, TradeRemoveItemPacket packet) { var ok = _tradeManager.TryRemoveItem(packet.SlotInTradeWindow); if (ok) { _packetFactory.SendRemovedItemFromTrade(client, 1); _packetFactory.SendRemovedItemFromTrade(_gameWorld.Players[_tradeManager.PartnerId].GameSession.Client, 2); // Decline both. _packetFactory.SendTradeDecide(client, 1, false); _packetFactory.SendTradeDecide(client, 2, false); _packetFactory.SendTradeDecide(_gameWorld.Players[_tradeManager.PartnerId].GameSession.Client, 1, false); _packetFactory.SendTradeDecide(_gameWorld.Players[_tradeManager.PartnerId].GameSession.Client, 2, false); } }
/// <summary> /// Removes item from trade. /// </summary> /// <param name="sender">player, that removed item</param> private void RemoveItemFromTrade(WorldClient sender, TradeRemoveItemPacket tradeRemoveItemPacket) { var trader = _gameWorld.Players[sender.CharID]; var partner = trader.TradePartner; trader.TradeItems.TryRemove(tradeRemoveItemPacket.SlotInTradeWindow, out var removed); if (removed is null) { // Possible cheating? return; } TradeDecideDecline(sender); SendRemovedItemFromTrade(trader.Client, 1); SendRemovedItemFromTrade(partner.Client, 2); }