public static void OnTradePut(WorldClient client, INetPacketStream packet) { var tradePacket = new TradePutPacket(packet); var tradeEvent = new TradePutEventArgs(tradePacket.Position, tradePacket.ItemType, tradePacket.ItemId, tradePacket.Count); client.Player.NotifySystem <TradeSystem>(tradeEvent); }
/// <summary> /// Put an item to the current trade /// </summary> /// <param name="player"></param> /// <param name="e"></param> private static void PutItem(IPlayerEntity player, TradePutEventArgs e) { Logger.Debug("Trade PutItem"); if (IsNotTrading(player)) { throw new RhisisSystemException($"No trade target {player.Object.Name}"); } var target = GetEntityFromContextOf(player, player.Trade.TargetId); if (IsNotTrading(target)) { CancelTrade(player); throw new RhisisSystemException($"Target is not trading {target.Object.Name}"); } if (IsNotTradeState(player, TradeComponent.TradeState.Item) || IsNotTradeState(target, TradeComponent.TradeState.Item)) { throw new RhisisSystemException($"Not the right trade state {player.Object.Name}"); } var item = player.Inventory.GetItem(e.ItemId); if (item == null) { throw new ArgumentException($"TradeSystem: Cannot find item with unique id: {e.ItemId}"); } if (e.Count > item.Quantity) { throw new ArgumentException($"TradeSystem: More quantity than available for: {e.ItemId}"); } var slotItem = player.Trade.Items[e.Slot]; if (slotItem != null && slotItem.Id != -1) { return; } item.ExtraUsed = e.Count; player.Trade.Items[e.Slot] = item; player.Trade.ItemCount++; WorldPacketFactory.SendTradePut(player, player.Id, e.Slot, e.ItemType, e.ItemId, e.Count); WorldPacketFactory.SendTradePut(target, player.Id, e.Slot, e.ItemType, e.ItemId, e.Count); }