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