private static void HandleOpenUGCMarket(GameSession session, PacketReader packet, MeretMarketCategoryMetadata metadata) { GenderFlag gender = (GenderFlag)packet.ReadByte(); JobFlag job = (JobFlag)packet.ReadInt(); short sortBy = packet.ReadByte(); List <UGCMarketItem> items = GameServer.UGCMarketManager.FindItemsByCategory(metadata.ItemCategories, gender, job, sortBy); session.Send(MeretMarketPacket.LoadUGCShopCategory(items)); }
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 List <UGCMarketItem> FindItemsByCategory(List <string> categories, GenderFlag genderFlag, JobFlag job, short sort) { List <UGCMarketItem> items = new(); foreach (UGCMarketItem item in Items.Values) { if (!categories.Contains(item.Item.Category) || item.Status != UGCMarketListingStatus.Active) { continue; } // check job if (!JobHelper.CheckJobFlagForJob(item.Item.RecommendJobs, job)) { continue; } // check gender Gender itemGender = ItemMetadataStorage.GetGender(item.Item.Id); if (!genderFlag.HasFlag(GenderFlag.Male) && !genderFlag.HasFlag(GenderFlag.Female)) { Gender gender = genderFlag.HasFlag(GenderFlag.Male) ? Gender.Male : Gender.Female; } items.Add(item); } UGCMarketSort marketSort = (UGCMarketSort)sort; switch (marketSort) { // TODO: Handle Most Popular sorting. case UGCMarketSort.MostPopular: case UGCMarketSort.TopSeller: items = items.OrderByDescending(x => x.SalesCount).ToList(); break; case UGCMarketSort.MostRecent: items = items.OrderByDescending(x => x.CreationTimestamp).ToList(); break; } 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)); }
public static bool Contains(this GenderFlag genders, Gender gender) => genders.HasFlag((GenderFlag)(1 << (int)gender));
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); }