public IEnumerable <UgcMarketItem> FindItems(List <string> categories, GenderFlag genderFlag, JobFlag job, string searchString) { List <UgcMarketItem> items = new(); foreach (UgcMarketItem item in Items.Values) { if (!categories.Contains(item.Item.Category) && categories.Count > 0) { continue; } if (item.Status != UgcMarketListingStatus.Active) { continue; } if (!item.Item.Ugc.Name.ToLower().Contains(searchString) && !item.Tags.Contains(searchString)) { continue; } // Check items tags if any tags have the searched string bool validTag = false; foreach (string tag in item.Tags) { if (tag.ToLower().Contains(searchString.ToLower())) { validTag = true; } } if (!validTag) { continue; } // check job if (!JobHelper.CheckJobFlagForJob(item.Item.RecommendJobs, job)) { continue; } // check gender if (!MeretMarketHelper.CheckGender(genderFlag, item.Item.Id)) { continue; } items.Add(item); } return(items); }
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 static void HandleOpenShop(GameSession session, PacketReader packet) { MeretMarketCategory category = (MeretMarketCategory)packet.ReadInt(); GenderFlag gender = (GenderFlag)packet.ReadByte(); JobFlag job = (JobFlag)packet.ReadInt(); MeretMarketSort sortBy = (MeretMarketSort)packet.ReadByte(); string searchString = packet.ReadUnicodeString(); int startPage = packet.ReadInt(); packet.ReadInt(); // repeat page? MeretMarketSection section = ReadMarketSection(packet.ReadByte()); packet.ReadByte(); byte itemsPerPage = packet.ReadByte(); MeretMarketTab metadata = MeretMarketCategoryMetadataStorage.GetTabMetadata(section, (int)category); if (metadata is null) { return; } List <MeretMarketItem> items = new(); switch (section) { case MeretMarketSection.UgcMarket: items.AddRange(GameServer.UgcMarketManager.FindItems(metadata.ItemCategories, gender, job, searchString)); break; case MeretMarketSection.PremiumMarket: case MeretMarketSection.RedMeretMarket: items.AddRange(DatabaseManager.MeretMarket.FindAllByCategory(section, category, gender, job, searchString)); break; } int totalItems = items.Count; items = MeretMarketHelper.MarketItemsSorted(items, sortBy); items = MeretMarketHelper.TakeLimit(items, startPage, itemsPerPage); session.Send(MeretMarketPacket.LoadShopCategory(items, totalItems)); }