Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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());
        }
Esempio n. 3
0
    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());
    }
Esempio n. 4
0
        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());
        }
Esempio n. 5
0
        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());
        }
Esempio n. 6
0
    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));
    }
Esempio n. 7
0
        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);
            }
        }
Esempio n. 9
0
        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));
        }
Esempio n. 10
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));
        }
Esempio n. 11
0
        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));
        }
Esempio n. 12
0
        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());
        }
Esempio n. 13
0
    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());
    }
Esempio n. 14
0
    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;
    }
Esempio n. 15
0
    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;
    }
Esempio n. 16
0
    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));
    }
Esempio n. 17
0
        //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();
            }
        }
Esempio n. 18
0
 private static void HandleClose(GameSession session)
 {
     session.Send(ShopPacket.Close());
     session.Player.ShopId = 0;
 }
Esempio n. 19
0
 private static void HandleClose(GameSession session)
 {
     session.Send(ShopPacket.Close());
 }