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 List <MeretMarketItem> MarketItemsSorted(List <MeretMarketItem> items, MeretMarketSort marketSort) { return(marketSort switch { // TODO: Handle Most Popular sorting. MeretMarketSort.MostPopularUgc or MeretMarketSort.MostPopularPremium or MeretMarketSort.TopSeller => items.OrderByDescending(x => x.SalesCount).ToList(), MeretMarketSort.PriceLowest => items.OrderBy(x => x.Price).ToList(), MeretMarketSort.PriceHighest => items.OrderByDescending(x => x.Price).ToList(), MeretMarketSort.MostRecent => items.OrderByDescending(x => x.CreationTimestamp).ToList(), _ => items, });