コード例 #1
0
    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));
    }
コード例 #2
0
 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,
     });