public IEnumerable <PremiumMarketItem> FindAllByCategory(MeretMarketSection section, MeretMarketCategory category, GenderFlag gender, JobFlag jobFlag, string searchString)
    {
        List <PremiumMarketItem> items   = new();
        IEnumerable <dynamic>    results = QueryFactory.Query(TableName).Get();

        if (section != MeretMarketSection.All)
        {
            results = QueryFactory.Query(TableName).Where("section", (int)section).Get();
        }

        foreach (dynamic data in results)
        {
            if (category != MeretMarketCategory.None && (MeretMarketCategory)data.category != category)
            {
                continue;
            }

            if (data.parent_market_id != 0)
            {
                continue;
            }
            PremiumMarketItem meretMarketItem = ReadMeretMarketItem(data);

            if (!meretMarketItem.ItemName.ToLower().Contains(searchString.ToLower()))
            {
                continue;
            }

            List <Job> jobs = ItemMetadataStorage.GetRecommendJobs(meretMarketItem.ItemId);
            if (!JobHelper.CheckJobFlagForJob(jobs, jobFlag))
            {
                continue;
            }

            if (!MeretMarketHelper.CheckGender(gender, meretMarketItem.ItemId))
            {
                continue;
            }

            if (meretMarketItem.BannerId != 0)
            {
                meretMarketItem.Banner = DatabaseManager.Banners.FindById(meretMarketItem.BannerId);
            }

            items.Add(meretMarketItem);
        }

        return(items);
    }
    private MeretMarketItem ReadMeretMarketItem(dynamic data)
    {
        PremiumMarketItem item = new(data);

        //Find additional quantities
        IEnumerable <dynamic> results = QueryFactory.Query(TableName).Where("parent_market_id", item.MarketId).Get();

        foreach (dynamic result in results)
        {
            PremiumMarketItem meretMarketItem = ReadAdditionalQuantityMarketItem(result);
            item.AdditionalQuantities.Add(meretMarketItem);
        }

        return(item);
    }
Example #3
0
 private static void WriteMeretMarketItem(PacketWriter pWriter, PremiumMarketItem item)
 {
     pWriter.WriteInt((int)item.MarketId);
     pWriter.WriteByte(2);
     pWriter.WriteUnicodeString(item.ItemName);
     pWriter.WriteByte(1);
     pWriter.WriteInt(item.ParentMarketId);
     pWriter.WriteInt(254);
     pWriter.WriteInt();
     pWriter.WriteByte(2);
     pWriter.Write(item.Flag);
     pWriter.Write(item.TokenType);
     pWriter.WriteLong(item.Price);
     pWriter.WriteLong(item.SalePrice);
     pWriter.WriteByte(1);
     pWriter.WriteLong(item.SellBeginTime);
     pWriter.WriteLong(item.SellEndTime);
     pWriter.Write(item.JobRequirement);
     pWriter.WriteInt(3);
     pWriter.WriteBool(item.RestockUnavailable);
     pWriter.WriteInt();
     pWriter.WriteByte();
     pWriter.WriteShort(item.MinLevelRequirement);
     pWriter.WriteShort(item.MaxLevelRequirement);
     pWriter.Write(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();
     pWriter.WriteByte();
     pWriter.Write(item.PromoFlag);
     pWriter.WriteString(item.Banner?.Name ?? "");
     pWriter.WriteString();
     pWriter.WriteByte();
     pWriter.WriteByte();
     pWriter.WriteInt();
     pWriter.WriteByte();
     pWriter.WriteInt(item.RequiredAchievementId);
     pWriter.WriteInt(item.RequiredAchievementGrade);
     pWriter.WriteInt();
     pWriter.WriteBool(item.PCCafe);
     pWriter.WriteByte();
     pWriter.WriteInt();
 }
Example #4
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();

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

        long itemPrice = marketItem.Price;

        if (marketItem.SalePrice != 0)
        {
            itemPrice = marketItem.SalePrice;
        }
        if (!HandleMarketItemPay(session, itemPrice, marketItem.TokenType))
        {
            SystemNotice noticeId = SystemNotice.EmptyString;
            switch (marketItem.TokenType)
            {
            case MeretMarketCurrencyType.Meso:
                noticeId = SystemNotice.ErrorInsufficientMeso;
                break;

            case MeretMarketCurrencyType.Meret:
                noticeId = SystemNotice.ErrorInsufficientMeret;
                break;

            case MeretMarketCurrencyType.RedMeret:
                noticeId = SystemNotice.ErrorInsufficientMeretRed;
                break;
            }

            session.Send(NoticePacket.Notice(noticeId, NoticeType.Popup));
            return;
        }

        Item item = new(marketItem.ItemId, marketItem.Quantity + marketItem.BonusQuantity, 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((int)marketItem.MarketId, 0, marketItem.Price, totalQuantity, itemIndex));
    }