Ejemplo n.º 1
0
        public async Task CBuy(GSSession session, CBuy message)
        {
            var plr   = session.Player;
            var @char = plr.Character;

            if (plr.Window == null)
            {
                throw new ArgumentException("Player isn't in buy/trade/box/Quest", nameof(session.Player.Window));
            }

            if (plr.Window.GetType() != typeof(Storage))
            {
                throw new ArgumentException("Player isn't in buy", nameof(session.Player.Window));
            }

            var shop    = plr.Window as Storage;
            var item    = shop.Items[message.Position];
            var bResult = new SBuy
            {
                Result   = 0xff,
                ItemInfo = item.GetBytes()
            };

            if (item.BuyPrice > @char.Money)
            {
                Logger
                .ForAccount(session)
                .Information("Insuficient Money");
                await session.SendAsync(bResult);

                return;
            }

            bResult.Result = @char.Inventory.Add(item);
            if (bResult.Result == 0xff)
            {
                Logger
                .ForAccount(session)
                .Information("Insuficient Space");
                await session.SendAsync(bResult);

                return;
            }

            @char.Money -= item.BuyPrice;

            Logger
            .ForAccount(session)
            .Information("Buy {0} for {1}", item.ToString(), item.BuyPrice);

            await session.SendAsync(bResult);
        }
Ejemplo n.º 2
0
        public async Task CPCPShopBuy(GSSession session, CPCPShopBuy message)
        {
            var PCPS = ResourceCache.Instance.GetPCPointShop();

            var Item = PCPS.Get(message.Position);

            var bResult = new SBuy
            {
                Result   = 0xff,
                ItemInfo = Array.Empty <byte>(),
            };

            if (Item.BuyPrice <= session.Player.Character.PCPoints)
            {
                bResult.ItemInfo = Item.GetBytes();
                bResult.Result   = session.Player.Character.Inventory.Add(Item);
            }

            await session.SendAsync(bResult);
        }