Esempio n. 1
0
        public static Packet Purchase(MeretMarketItem item, int itemIndex, int totalQuantity)
        {
            PacketWriter pWriter = PacketWriter.Of(SendOp.MERET_MARKET);

            pWriter.WriteEnum(MeretMarketMode.Purchase);
            pWriter.WriteByte((byte)totalQuantity);
            pWriter.WriteInt(item.MarketId);
            pWriter.WriteLong();
            pWriter.WriteInt(1);
            pWriter.WriteInt();
            pWriter.WriteLong();
            pWriter.WriteInt(itemIndex);
            pWriter.WriteInt(totalQuantity);
            pWriter.WriteInt();
            pWriter.WriteByte();
            pWriter.WriteUnicodeString("");
            pWriter.WriteUnicodeString("");
            pWriter.WriteLong(item.SalePrice);
            pWriter.WriteByte();
            pWriter.WriteByte();
            pWriter.WriteInt();
            pWriter.WriteInt();
            pWriter.WriteInt();
            pWriter.WriteInt();
            return(pWriter);
        }
Esempio n. 2
0
        private static void HandleMarketItemPay(GameSession session, MeretMarketItem marketItem, int itemIndex, int totalQuantity)
        {
            switch (marketItem.TokenType)
            {
            case MeretMarketCurrencyType.Meret:
                if (!session.Player.Account.RemoveMerets(marketItem.SalePrice))
                {
                    return;
                }
                break;

            case MeretMarketCurrencyType.Meso:
                if (!session.Player.Wallet.Meso.Modify(marketItem.SalePrice))
                {
                    return;
                }
                break;
            }

            Item item = new Item(marketItem.ItemId)
            {
                Amount = marketItem.Quantity + marketItem.BonusQuantity,
                Rarity = marketItem.Rarity
            };

            if (marketItem.Duration != 0)
            {
                item.ExpiryTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds() + Environment.TickCount + (marketItem.Duration * (24 * 60 * 60));
            }
            InventoryController.Add(session, item, true);
            session.Send(MeretMarketPacket.Purchase(marketItem, itemIndex, totalQuantity));
        }
Esempio n. 3
0
        private static void HandlePurchase(GameSession session, PacketReader packet)
        {
            byte quantity     = packet.ReadByte();
            int  marketItemId = packet.ReadInt();

            byte[] unk = packet.Read(12);
            int    childMarketItemId = packet.ReadInt();
            long   unk2          = packet.ReadLong();
            int    itemIndex     = packet.ReadInt();
            int    totalQuantity = packet.ReadInt();
            int    unk3          = packet.ReadInt();
            byte   unk4          = packet.ReadByte();
            string unk5          = packet.ReadUnicodeString();
            string unk6          = packet.ReadUnicodeString();
            long   price         = packet.ReadLong();

            MeretMarketItem marketItem = DatabaseManager.GetMeretMarketItem(marketItemId);

            if (marketItem == null)
            {
                return;
            }

            if (childMarketItemId == 0)
            {
                HandleMarketItemPay(session, marketItem, itemIndex, totalQuantity);
            }
            else
            {
                MeretMarketItem childItem = marketItem.AdditionalQuantities.FirstOrDefault(x => x.MarketId == childMarketItemId);
                HandleMarketItemPay(session, childItem, itemIndex, totalQuantity);
            }
        }
Esempio n. 4
0
        public static void WriteMeretMarketItem(PacketWriter pWriter, MeretMarketItem item)
        {
            pWriter.WriteInt(item.MarketId);
            pWriter.WriteByte(2);
            pWriter.WriteUnicodeString(item.ItemName);
            pWriter.WriteByte(1);
            pWriter.WriteInt(item.ParentMarketId);
            pWriter.WriteInt(254);
            pWriter.WriteInt(); // promo bool
            pWriter.WriteByte(2);
            pWriter.WriteEnum(item.Flag);
            pWriter.WriteEnum(item.TokenType);
            pWriter.WriteLong(item.Price);
            pWriter.WriteLong(item.SalePrice);
            pWriter.WriteByte(1);
            pWriter.WriteLong(item.SellBeginTime);
            pWriter.WriteLong(item.SellEndTime);
            pWriter.WriteEnum(item.JobRequirement);
            pWriter.WriteInt(3);
            pWriter.WriteBool(item.RestockUnavailable);
            pWriter.WriteInt();
            pWriter.WriteByte();
            pWriter.WriteShort(item.MinLevelRequirement);
            pWriter.WriteShort(item.MaxLevelRequirement);
            pWriter.WriteEnum(item.JobRequirement);
            pWriter.WriteInt(item.ItemId);
            pWriter.WriteByte(item.Rarity);
            pWriter.WriteInt(item.Quantity);
            pWriter.WriteInt(item.Duration);
            pWriter.WriteInt(item.BonusQuantity);
            pWriter.WriteInt(40300);
            pWriter.WriteInt(0);
            pWriter.WriteByte(0);
            pWriter.WriteEnum(item.PromoFlag);
            string bannerName = "";

            if (item.Banner != null)
            {
                bannerName = item.Banner.Name;
            }
            pWriter.WriteMapleString(bannerName);
            pWriter.WriteMapleString("");
            pWriter.WriteByte();
            pWriter.WriteByte(0);
            pWriter.WriteInt(0);
            pWriter.WriteByte(0);
            pWriter.WriteInt(item.RequiredAchievementId);
            pWriter.WriteInt(item.RequiredAchievementGrade);
            pWriter.WriteInt(0);
            pWriter.WriteBool(item.PCCafe);
            pWriter.WriteByte(0);
            pWriter.WriteInt(0);
        }
Esempio n. 5
0
    public List <MeretMarketItem> FindAllByCategoryId(MeretMarketCategory category)
    {
        List <MeretMarketItem> items   = new();
        IEnumerable <dynamic>  results = QueryFactory.Query(TableName).Where("category", (int)category).Get();

        foreach (dynamic data in results)
        {
            MeretMarketItem meretMarketItem = ReadMeretMarketItem(data);
            if (meretMarketItem.BannerId != 0)
            {
                meretMarketItem.Banner = DatabaseManager.Banners.FindById(meretMarketItem.BannerId);
            }
            items.Add(meretMarketItem);
        }
        return(items);
    }
Esempio n. 6
0
    private static void PurchasePremiumItem(GameSession session, PacketReader packet, int marketItemId)
    {
        packet.ReadInt();
        int    childMarketItemId = packet.ReadInt();
        long   unk2          = packet.ReadLong();
        int    itemIndex     = packet.ReadInt();
        int    totalQuantity = packet.ReadInt();
        int    unk3          = packet.ReadInt();
        byte   unk4          = packet.ReadByte();
        string unk5          = packet.ReadUnicodeString();
        string unk6          = packet.ReadUnicodeString();
        long   price         = packet.ReadLong();

        MeretMarketItem marketItem = DatabaseManager.MeretMarket.FindById(marketItemId);

        if (marketItem is null)
        {
            return;
        }

        if (childMarketItemId != 0)
        {
            marketItem = marketItem.AdditionalQuantities.FirstOrDefault(x => x.MarketId == childMarketItemId);
            if (marketItem is null)
            {
                return;
            }
        }

        if (!HandleMarketItemPay(session, marketItem.Price, marketItem.TokenType))
        {
            return;
        }

        Item item = new(marketItem.ItemId)
        {
            Amount = marketItem.Quantity + marketItem.BonusQuantity,
            Rarity = marketItem.Rarity
        };

        if (marketItem.Duration != 0)
        {
            item.ExpiryTime = TimeInfo.Now() + Environment.TickCount + marketItem.Duration * 24 * 60 * 60;
        }
        session.Player.Inventory.AddItem(session, item, true);
        session.Send(MeretMarketPacket.Purchase(marketItem.MarketId, 0, marketItem.Price, totalQuantity, itemIndex));
    }