private static void HandleBuy(GameSession session, PacketReader packet) { int itemUid = packet.ReadInt(); int quantity = packet.ReadInt(); ShopItem shopItem = ShopMetadataStorage.GetItem(itemUid); switch (shopItem.TokenType) { case ShopCurrencyType.Meso: session.Player.Wallet.Meso.Modify(-(shopItem.Price * quantity)); break; case ShopCurrencyType.ValorToken: session.Player.Wallet.ValorToken.Modify(-(shopItem.Price * quantity)); break; case ShopCurrencyType.Treva: session.Player.Wallet.Treva.Modify(-(shopItem.Price * quantity)); break; case ShopCurrencyType.Rue: session.Player.Wallet.Rue.Modify(-(shopItem.Price * quantity)); break; case ShopCurrencyType.HaviFruit: session.Player.Wallet.HaviFruit.Modify(-(shopItem.Price * quantity)); break; case ShopCurrencyType.Meret: case ShopCurrencyType.GameMeret: case ShopCurrencyType.EventMeret: session.Player.Wallet.RemoveMerets(shopItem.Price * quantity); break; case ShopCurrencyType.Item: Item itemCost = session.Player.Inventory.Items.FirstOrDefault(x => x.Value.Id == shopItem.RequiredItemId).Value; if (itemCost.Amount < shopItem.Price) { return; } InventoryController.Consume(session, itemCost.Uid, shopItem.Price); break; default: session.SendNotice($"Unknown currency: {shopItem.TokenType}"); return; } // add item to inventory Item item = new(shopItem.ItemId) { Amount = quantity * shopItem.Quantity }; InventoryController.Add(session, item, true); // complete purchase session.Send(ShopPacket.Buy(shopItem.ItemId, quantity, shopItem.Price, shopItem.TokenType)); }
private static void HandleOpen(GameSession session, PacketReader packet) { int itemId = packet.ReadInt(); Item item = session.Player.Inventory.Items.Values.FirstOrDefault(x => x.Id == itemId); if (item == null) { return; } ShopMetadata shop = ShopMetadataStorage.GetShop(item.ShopID); if (shop == null) { Console.WriteLine($"Unknown shop ID: {item.ShopID}"); return; } session.Send(ShopPacket.Open(shop)); foreach (ShopItem shopItem in shop.Items) { session.Send(ShopPacket.LoadProducts(shopItem)); } session.Send(ShopPacket.Reload()); session.Send(SystemShopPacket.Open()); }
private static void HandleOpenViaItem(GameSession session, PacketReader packet) { byte unk = packet.ReadByte(); int itemId = packet.ReadInt(); IInventory inventory = session.Player.Inventory; Item item = inventory.GetById(itemId); if (item == null) { return; } Shop shop = DatabaseManager.Shops.FindById(item.ShopID); if (shop == null) { Logger.Warning("Unknown shop ID: {shopID}", item.ShopID); return; } session.Send(ShopPacket.Open(shop, 0)); foreach (ShopItem shopItem in shop.Items) { session.Send(ShopPacket.LoadProducts(shopItem)); } session.Send(ShopPacket.Reload()); }
private static void HandleOpenViaItem(GameSession session, PacketReader packet) { byte unk = packet.ReadByte(); int itemId = packet.ReadInt(); List <Item> playerInventory = new(session.Player.Inventory.Items.Values); Item item = playerInventory.FirstOrDefault(x => x.Id == itemId); if (item == null) { return; } Shop shop = DatabaseManager.GetShop(item.ShopID); if (shop == null) { Console.WriteLine($"Unknown shop ID: {item.ShopID}"); return; } session.Send(ShopPacket.Open(shop)); foreach (ShopItem shopItem in shop.Items) { session.Send(ShopPacket.LoadProducts(shopItem)); } session.Send(ShopPacket.Reload()); }
private static void HandleViaItem(GameSession session, PacketReader packet) { bool openShop = packet.ReadBool(); if (!openShop) { return; } int itemId = packet.ReadInt(); Item item = session.Player.Inventory.Items.Values.FirstOrDefault(x => x.Id == itemId); if (item == null) { return; } Shop shop = DatabaseManager.Shops.FindById(item.ShopID); if (shop == null) { Logger.Warn($"Unknown shop ID: {item.ShopID}"); return; } session.Send(ShopPacket.Open(shop)); foreach (ShopItem shopItem in shop.Items) { session.Send(ShopPacket.LoadProducts(shopItem)); } session.Send(ShopPacket.Reload()); session.Send(SystemShopPacket.Open()); }
private static void HandleBuy(GameSession session, PacketReader packet) { int itemUid = packet.ReadInt(); int quantity = packet.ReadInt(); ShopItem shopItem = DatabaseManager.ShopItems.FindByUid(itemUid); switch (shopItem.TokenType) { case ShopCurrencyType.Meso: session.Player.Wallet.Meso.Modify(-(shopItem.Price * quantity)); break; case ShopCurrencyType.ValorToken: session.Player.Wallet.ValorToken.Modify(-(shopItem.Price * quantity)); break; case ShopCurrencyType.Treva: session.Player.Wallet.Treva.Modify(-(shopItem.Price * quantity)); break; case ShopCurrencyType.Rue: session.Player.Wallet.Rue.Modify(-(shopItem.Price * quantity)); break; case ShopCurrencyType.HaviFruit: session.Player.Wallet.HaviFruit.Modify(-(shopItem.Price * quantity)); break; case ShopCurrencyType.Meret: case ShopCurrencyType.GameMeret: case ShopCurrencyType.EventMeret: session.Player.Account.RemoveMerets(shopItem.Price * quantity); break; case ShopCurrencyType.Item: Item itemCost = session.Player.Inventory.GetById(shopItem.RequiredItemId); if (itemCost.Amount < shopItem.Price) { return; } session.Player.Inventory.ConsumeItem(session, itemCost.Uid, shopItem.Price); break; default: session.SendNotice($"Unknown currency: {shopItem.TokenType}"); return; } // add item to inventory Item item = new(shopItem.ItemId, quantity *shopItem.Quantity, shopItem.ItemRank); session.Player.Inventory.AddItem(session, item, true); // complete purchase session.Send(ShopPacket.Buy(shopItem.ItemId, quantity, shopItem.Price, shopItem.TokenType)); }
private static void OpenSystemShop(GameSession session, int shopId) { Shop shop = DatabaseManager.Shops.FindById(shopId); session.Send(ShopPacket.Open(shop)); foreach (ShopItem shopItem in shop.Items) { session.Send(ShopPacket.LoadProducts(shopItem)); } session.Send(ShopPacket.Reload()); session.Send(SystemShopPacket.Open()); }
public override void Handle(EzClient client, EzPacket packet) { bool shoppingCart = packet.Data.ReadByte() > 0 ? true : false; List <Item> items = ReadShoppingCart(packet); _logger.Debug("ShoppingCart: {0}", shoppingCart); if (!HasMoney(items, client.Character)) { _logger.Debug("Not enough coins, cancel purchase"); return; } if (!HasSpace(items, client.Inventory)) { _logger.Debug("Not enough space, cancel purchase"); return; } foreach (Item item in items) { InventoryItem inventoryItem = new InventoryItem(); inventoryItem.AccountId = client.Account.Id; inventoryItem.PurchaseDate = DateTime.Now; inventoryItem.Equipped = -1; inventoryItem.Item = item; inventoryItem.Slot = -1; inventoryItem.Id = -1; if (!client.Inventory.AddItem(inventoryItem)) { _logger.Error("Couldn't add item to inventory {0}", item.Name); continue; } if (!Database.InsertInventoryItem(inventoryItem)) { _logger.Error("Couldn't save item to database {0}", item.Name); continue; } _logger.Debug("Purchased Id: {0} Name: {1}", item.Id, item.Name); IBuffer purchasePacket = ShopPacket.CreatePurchasePacket(item); Send(client, 0x1D, purchasePacket); } }
public static void HandleOpen(GameSession session, IFieldObject <Npc> npcFieldObject) { NpcMetadata metadata = NpcMetadataStorage.GetNpc(npcFieldObject.Value.Id); ShopMetadata shop = ShopMetadataStorage.GetShop(metadata.ShopId); if (shop == null) { Console.WriteLine($"Unknown shop ID: {metadata.ShopId}"); return; } session.Send(ShopPacket.Open(shop)); session.Send(ShopPacket.LoadProducts(shop.Items)); session.Send(ShopPacket.Reload()); session.Send(NpcTalkPacket.Respond(npcFieldObject, NpcType.Default, DialogType.None, 0)); }
private static void HandleSell(GameSession session, PacketReader packet) { // sell to shop long itemUid = packet.ReadLong(); int quantity = packet.ReadInt(); if (!session.Player.Inventory.Items.TryGetValue(itemUid, out Item item)) { return; } int price = ItemMetadataStorage.GetCustomSellPrice(item.Id); session.Player.Wallet.Meso.Modify(price * quantity); InventoryController.Consume(session, item.Uid, quantity); session.Send(ShopPacket.Sell(item.Id, quantity)); }
private static void HandleOpenViaItem(GameSession session, PacketReader packet) { byte unk = packet.ReadByte(); int itemId = packet.ReadInt(); List <Item> playerInventory = new(session.Player.Inventory.Items.Values); Item item = playerInventory.FirstOrDefault(x => x.Id == itemId); if (item == null) { return; } ShopMetadata shop = ShopMetadataStorage.GetShop(item.ShopID); session.Send(ShopPacket.Open(shop)); session.Send(ShopPacket.LoadProducts(shop.Items)); }
private static void HandleMapleArenaShop(GameSession session, PacketReader packet) { bool openShop = packet.ReadBool(); if (!openShop) { return; } Shop shop = DatabaseManager.GetShop(168); session.Send(ShopPacket.Open(shop)); foreach (ShopItem shopItem in shop.Items) { session.Send(ShopPacket.LoadProducts(shopItem)); } session.Send(ShopPacket.Reload()); session.Send(SystemShopPacket.Open()); }
public static void OpenSystemShop(GameSession session, int shopId, int npcId) { Shop shop = DatabaseManager.Shops.FindById(shopId); if (shop is null) { Log.Logger.ForContext(typeof(ShopHelper)).Warning("Unknown shop ID: {shopID}", shopId); return; } session.Send(ShopPacket.Open(shop, npcId)); foreach (ShopItem shopItem in shop.Items) { session.Send(ShopPacket.LoadProducts(shopItem)); } session.Send(ShopPacket.Reload()); session.Send(SystemShopPacket.Open()); }
public static void HandleOpen(GameSession session, IFieldObject <NpcMetadata> npcFieldObject, int npcId) { NpcMetadata metadata = npcFieldObject.Value; Shop shop = DatabaseManager.Shops.FindById(metadata.ShopId); if (shop == null) { Logger.Warning("Unknown shop ID: {shopId}", metadata.ShopId); return; } session.Send(ShopPacket.Open(shop, npcId)); foreach (ShopItem shopItem in shop.Items) { session.Send(ShopPacket.LoadProducts(shopItem)); } session.Send(ShopPacket.Reload()); session.Player.ShopId = shop.Id; }
public static void HandleOpen(GameSession session, IFieldObject <NpcMetadata> npcFieldObject) { NpcMetadata metadata = npcFieldObject.Value; Shop shop = DatabaseManager.Shops.FindById(metadata.ShopId); if (shop == null) { Logger.Warn($"Unknown shop ID: {metadata.ShopId}"); return; } session.Send(ShopPacket.Open(shop)); foreach (ShopItem shopItem in shop.Items) { session.Send(ShopPacket.LoadProducts(shopItem)); } session.Send(ShopPacket.Reload()); session.Send(NpcTalkPacket.Respond(npcFieldObject, NpcType.Default, DialogType.None, 0)); session.Player.ShopId = shop.Id; }
private static void HandleSell(GameSession session, PacketReader packet) { // sell to shop long itemUid = packet.ReadLong(); int quantity = packet.ReadInt(); Item item = session.Player.Inventory.GetByUid(itemUid); if (item == null) { return; } long price = ItemMetadataStorage.GetCustomSellPrice(item.Id); session.Player.Wallet.Meso.Modify(price * quantity); session.Player.Inventory.ConsumeItem(session, item.Uid, quantity); session.Send(ShopPacket.Sell(item, quantity)); }
//ShopPacket private static void HandlePacket(ShopPacket packet) { if (Interface.Interface.GameUi == null) { throw new ArgumentNullException(nameof(Interface.Interface.GameUi)); } if (packet == null) { throw new ArgumentNullException(nameof(packet)); } if (packet.ShopData != null) { Globals.GameShop = new ShopBase(); Globals.GameShop.Load(packet.ShopData); Interface.Interface.GameUi.NotifyOpenShop(); } else { Globals.GameShop = null; Interface.Interface.GameUi.NotifyCloseShop(); } }
private static void HandleClose(GameSession session) { session.Send(ShopPacket.Close()); session.Player.ShopId = 0; }
private static void HandleClose(GameSession session) { session.Send(ShopPacket.Close()); }