Example #1
0
        public void Test_Add_Items()
        {
            _exchangeService.OpenExchange(1, 2);

            var item = new ItemInstance
            {
                Amount   = 1,
                ItemVNum = 1012
            };

            _exchangeService.AddItems(1, item, item.Amount);

            var data1 = _exchangeService.GetData(1);

            Assert.IsTrue(data1.ExchangeItems.Any(s => s.Key.ItemVNum == 1012 && s.Key.Amount == 1));
        }
        public void ExchangeList(ExcListPacket packet)
        {
            if (packet.Gold > Session.Character.Gold || packet.BankGold > Session.Account.BankMoney)
            {
                _logger.Error(LogLanguage.Instance.GetMessageFromKey(LogLanguageKey.NOT_ENOUGH_GOLD));
                return;
            }
            var subPacketList = new List <ServerExcListSubPacket>();

            var target = Broadcaster.Instance.GetCharacter(s => s.VisualId == _exchangeService.GetTargetId(Session.Character.VisualId) &&
                                                           s.MapInstanceId == Session.Character.MapInstanceId) as Character;

            if (packet.SubPackets.Count > 0 && target != null)
            {
                byte i = 0;
                foreach (var value in packet.SubPackets)
                {
                    var item = Session.Character.Inventory.LoadBySlotAndType <IItemInstance>(value.Slot, value.PocketType);

                    if (item == null || item.Amount < value.Amount)
                    {
                        var closeExchange = _exchangeService.CloseExchange(Session.Character.VisualId, ExchangeResultType.Failure);
                        Session.SendPacket(closeExchange);
                        target.SendPacket(closeExchange);
                        _logger.Error(LogLanguage.Instance.GetMessageFromKey(LogLanguageKey.INVALID_EXCHANGE_LIST));
                        return;
                    }

                    if (!item.Item.IsTradable)
                    {
                        Session.SendPacket(_exchangeService.CloseExchange(Session.Character.CharacterId, ExchangeResultType.Failure));
                        target.SendPacket(_exchangeService.CloseExchange(target.VisualId, ExchangeResultType.Failure));
                        _logger.Error(LogLanguage.Instance.GetMessageFromKey(LogLanguageKey.CANNOT_TRADE_NOT_TRADABLE_ITEM));
                        return;
                    }

                    _exchangeService.AddItems(Session.Character.CharacterId, item, value.Amount);

                    var subPacket = new ServerExcListSubPacket
                    {
                        ExchangeSlot = i,
                        PocketType   = value.PocketType,
                        ItemVnum     = item.ItemVNum,
                        Upgrade      = item.Upgrade,
                        AmountOrRare = value.PocketType == PocketType.Equipment ? item.Rare : value.Amount
                    };


                    subPacketList.Add(subPacket);
                    i++;
                }
            }
            else
            {
                subPacketList.Add(new ServerExcListSubPacket {
                    ExchangeSlot = null
                });
            }

            _exchangeService.SetGold(Session.Character.CharacterId, packet.Gold, packet.BankGold);
            target?.SendPacket(Session.Character.GenerateServerExcListPacket(packet.Gold, packet.BankGold, subPacketList));
        }