Ejemplo n.º 1
0
        private void Process()
        {
            var marketDB = DiscordBot.MainInstance.DataProvider.GetCollection <Market>("markets");
            var userDB   = DiscordBot.MainInstance.DataProvider.GetCollection <User>("users");

            foreach (var thing in ToProcess.GetConsumingEnumerable())
            {
                thing.Switch(
                    newListing =>
                {
                    var market = MarketHelper.GetOrCreate(marketDB, newListing.MarketId);

                    if (newListing.IsNew)
                    {
                        newListing.Listing.Timestamp = DateTimeOffset.Now;
                    }

                    List <Listing> list;
                    if (!market.Listings.ContainsKey(newListing.Emoji))
                    {
                        list = new List <Listing>();
                        market.Listings.Add(newListing.Emoji, list);
                    }
                    else
                    {
                        list = market.Listings[newListing.Emoji];
                    }

                    list.Add(newListing.Listing);

                    marketDB.Upsert(market);
                },
                    purchase =>
                {
                    var market = MarketHelper.GetOrCreate(marketDB, purchase.MarketId);

                    if (market.Listings.TryGetValue(purchase.Emoji, out var listings) && listings.Count() != 0)
                    {
                        (var lowest, var index) = listings.Select((l, i) => (l, i)).OrderBy(pair => pair.l.Price).FirstOrDefault();

                        listings.RemoveAt(index);

                        marketDB.Upsert(market);

                        ProcessPurchase(purchase, lowest);
                    }
                },
Ejemplo n.º 2
0
        public List <(Rarity rarity, string emoji)> Open(DiscordBot bot, ulong marketId)
        {
            List <(Rarity, string)> results = new List <(Rarity, string)>();

            var emojisByRarity = MarketHelper.GetRarities(bot, marketId);

            for (int i = 0; i < Items; i++)
            {
                int[] ratios = RarityRatios[i];
                int   sum    = ratios.Sum();
                int   random = bot.Random.Next(1, sum + 1);
                int   seqsum = 0;
                for (int j = 0; j < ratios.Length; j++)
                {
                    seqsum += ratios[j];
                    if (random <= seqsum)
                    {
                        var rarity = Rarity.Rarities[j];
                        var valid  = emojisByRarity[rarity];
                        results.Add((rarity, valid[bot.Random.Next(valid.Count)]));