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); }
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); }