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