示例#1
0
        List <String> pullFromJSON(String JSONFileName, RarityDistribution dist, int number_of_cards, int number_of_rares_or_better)
        {
            List <String> card_names = new List <String>();

            String json = System.IO.File.ReadAllText(JSONFileName);


            //TODO: read JSON
            List <YGOJSONStruct> json_list = JsonConvert.DeserializeObject <List <YGOJSONStruct> >(json);

            //get rng
            rng = new Random();
            String        rarity       = "";
            List <String> rares        = extractRarityList(json_list, "rare");
            List <String> super_rares  = extractRarityList(json_list, "super rare");
            List <String> commons      = extractRarityList(json_list, "common");
            List <String> ultra_rares  = extractRarityList(json_list, "ultra rare");
            List <String> secret_rares = extractRarityList(json_list, "secret rare");

            //define probability ranges for convenience
            double rare_bound        = m_dist.rare;
            double super_rare_bound  = rare_bound + m_dist.super_rare;
            double ultra_rare_bound  = super_rare_bound + m_dist.ultra_rare;
            double secret_rare_bound = ultra_rare_bound + m_dist.secret_rare;;

            for (int i = 0; i < number_of_rares_or_better; i++)
            {
                double rng_val = rng.NextDouble();

                //don't care about ultimate/ghost whatever

                if (rng_val <= rare_bound)
                {
                    rarity = "Rare";
                    //get random card out of rares
                    if (rares.Count == 0)
                    {
                        //card_names.Add(commons[rng.Next(commons.Count)]);
                        //TODO: what if there are no commons? cant fall back. maybe just use a random one.
                        card_names.Add(json_list[rng.Next(json_list.Count)].name);
                    }
                    else
                    {
                        card_names.Add(rares[rng.Next(rares.Count)]);
                    }
                }
                else if (rng_val > rare_bound && rng_val <= super_rare_bound)
                {
                    rarity = "Super Rare";
                    if (super_rares.Count == 0)
                    {
                        if (rares.Count == 0)
                        {
                            card_names.Add(commons[rng.Next(commons.Count)]);
                        }
                        else
                        {
                            card_names.Add(rares[rng.Next(rares.Count)]);
                        }
                    }
                    else
                    {
                        card_names.Add(super_rares[rng.Next(super_rares.Count)]);
                    }
                }
                else if (rng_val > super_rare_bound && rng_val <= ultra_rare_bound)
                {
                    rarity = "Ultra Rare";
                    if (ultra_rares.Count == 0)
                    {
                        if (super_rares.Count == 0)
                        {
                            if (rares.Count == 0)
                            {
                                card_names.Add(commons[rng.Next(commons.Count)]);
                            }
                            else
                            {
                                card_names.Add(rares[rng.Next(rares.Count)]);
                            }
                        }
                        else
                        {
                            card_names.Add(super_rares[rng.Next(super_rares.Count)]);
                        }
                    }
                    else
                    {
                        card_names.Add(ultra_rares[rng.Next(ultra_rares.Count)]);
                    }
                }
                else
                {
                    rarity = "Secret Rare";
                    if (secret_rares.Count == 0)
                    {
                        if (ultra_rares.Count == 0)
                        {
                            if (super_rares.Count == 0)
                            {
                                if (rares.Count == 0)
                                {
                                    card_names.Add(commons[rng.Next(commons.Count)]);
                                }
                                else
                                {
                                    card_names.Add(rares[rng.Next(rares.Count)]);
                                }
                            }
                            else
                            {
                                card_names.Add(super_rares[rng.Next(super_rares.Count)]);
                            }
                        }
                        else
                        {
                            card_names.Add(ultra_rares[rng.Next(ultra_rares.Count)]);
                        }
                    }
                    else
                    {
                        card_names.Add(secret_rares[rng.Next(secret_rares.Count)]);
                    }
                }
            }

            for (int i = 0; i < number_of_cards - number_of_rares_or_better; i++)
            {
                //rest is commons
                if (commons.Count != 0)
                {
                    card_names.Add(commons[rng.Next(commons.Count)]);
                }
                else
                {
                    card_names.Add(json_list[rng.Next(json_list.Count)].name);
                }
            }


            return(card_names);
        }
示例#2
0
        List <int> pullFromBoosterPoolWithRarityDistribution(BoosterPool pool, bool remove_from_pool, RarityDistribution dist, int number_of_cards, int number_of_rares_or_better)
        {
            List <int> ret_list = new List <int>();
            //rarity calc


            //define probability ranges for convenience
            double     rare_bound        = m_dist.rare;
            double     super_rare_bound  = rare_bound + m_dist.super_rare;
            double     ultra_rare_bound  = super_rare_bound + m_dist.ultra_rare;
            double     secret_rare_bound = ultra_rare_bound + m_dist.secret_rare;;
            List <int> all_cards         = new List <int>();

            all_cards.AddRange(pool.commons);
            all_cards.AddRange(pool.rares);
            all_cards.AddRange(pool.super_rares);
            all_cards.AddRange(pool.ultra_rares);
            all_cards.AddRange(pool.secret_rares);
            for (int i = 0; i < number_of_rares_or_better; i++)
            {
                double rng_val = rng.NextDouble();

                //don't care about ultimate/ghost whatever

                if (rng_val <= rare_bound)
                {
                    //rarity = "Rare";
                    //get random card out of rares
                    if (pool.rares.Count == 0)
                    {
                        //card_names.Add(commons[rng.Next(commons.Count)]);
                        //TODO: what if there are no commons? cant fall back. maybe just use a random one.
                        //ret_list.Add(all_cards[rng.Next(all_cards.Count)]);
                        addRandomCardFromPool(ret_list, all_cards, all_cards, remove_from_pool);
                        //card_names.Add(json_list[rng.Next(json_list.Count)].name);
                    }
                    else
                    {
                        //card_names.Add(rares[rng.Next(rares.Count)]);
                        addRandomCardFromPool(ret_list, pool.rares, all_cards, remove_from_pool);
                    }
                }
                else if (rng_val > rare_bound && rng_val <= super_rare_bound)
                {
                    // rarity = "Super Rare";
                    if (pool.super_rares.Count == 0)
                    {
                        if (pool.rares.Count == 0)
                        {
                            addRandomCardFromPool(ret_list, pool.commons, all_cards, remove_from_pool);
                        }
                        else
                        {
                            addRandomCardFromPool(ret_list, pool.rares, all_cards, remove_from_pool);
                        }
                    }
                    else
                    {
                        addRandomCardFromPool(ret_list, pool.super_rares, all_cards, remove_from_pool);
                    }
                }
                else if (rng_val > super_rare_bound && rng_val <= ultra_rare_bound)
                {
                    //rarity = "Ultra Rare";
                    if (pool.ultra_rares.Count == 0)
                    {
                        if (pool.super_rares.Count == 0)
                        {
                            if (pool.rares.Count == 0)
                            {
                                addRandomCardFromPool(ret_list, pool.commons, all_cards, remove_from_pool);
                            }
                            else
                            {
                                addRandomCardFromPool(ret_list, pool.rares, all_cards, remove_from_pool);
                            }
                        }
                        else
                        {
                            addRandomCardFromPool(ret_list, pool.super_rares, all_cards, remove_from_pool);
                        }
                    }
                    else
                    {
                        addRandomCardFromPool(ret_list, pool.ultra_rares, all_cards, remove_from_pool);
                    }
                }
                else
                {
                    // rarity = "Secret Rare";
                    if (pool.secret_rares.Count == 0)
                    {
                        if (pool.ultra_rares.Count == 0)
                        {
                            if (pool.super_rares.Count == 0)
                            {
                                if (pool.rares.Count == 0)
                                {
                                    addRandomCardFromPool(ret_list, pool.commons, all_cards, remove_from_pool);
                                }
                                else
                                {
                                    addRandomCardFromPool(ret_list, pool.rares, all_cards, remove_from_pool);
                                }
                            }
                            else
                            {
                                addRandomCardFromPool(ret_list, pool.super_rares, all_cards, remove_from_pool);
                            }
                        }
                        else
                        {
                            addRandomCardFromPool(ret_list, pool.ultra_rares, all_cards, remove_from_pool);
                        }
                    }
                    else
                    {
                        addRandomCardFromPool(ret_list, pool.secret_rares, all_cards, remove_from_pool);
                    }
                }
            }

            for (int i = 0; i < number_of_cards - number_of_rares_or_better; i++)
            {
                //rest is commons
                if (pool.commons.Count != 0)
                {
                    addRandomCardFromPool(ret_list, pool.commons, all_cards, remove_from_pool);
                }
                else
                {
                    addRandomCardFromPool(ret_list, all_cards, all_cards, remove_from_pool);
                }
            }



            return(ret_list);
        }