Пример #1
0
 //Adds a raw data class to a list.
 private void add_dataclass_to_final_list(BaseItemDC ri, ref List <Item> target_list)
 {
     if (ri is ArmorDC)
     {
         target_list.Add(process_aDC((ArmorDC)ri));
     }
     else if (ri is WeaponDC)
     {
         target_list.Add(process_wDC((WeaponDC)ri));
     }
     else if (ri is ScrollDC)
     {
         target_list.Add(process_sDC((ScrollDC)ri));
     }
 }
Пример #2
0
 //Adds a raw data class to a list.
 private void add_dataclass_to_final_list(BaseItemDC ri, ref List<Item> target_list)
 {
     if (ri is ArmorDC)
         target_list.Add(process_aDC((ArmorDC)ri));
     else if (ri is WeaponDC)
         target_list.Add(process_wDC((WeaponDC)ri));
     else if (ri is ScrollDC)
         target_list.Add(process_sDC((ScrollDC)ri));
 }
Пример #3
0
        public List <Item> retrieve_random_items(Permanent_ITypes iTyp, Player pl, int number)
        {
            BaseItemDC[]      raw_items      = new BaseItemDC[0];
            List <BaseItemDC> selected_items = new List <BaseItemDC>();
            List <BaseItemDC> teaser_items   = new List <BaseItemDC>();
            List <Item>       fetched_items  = new List <Item>();

            switch (iTyp)
            {
            case Permanent_ITypes.Armor:
                raw_items = cManager.Load <ArmorDC[]>("XmlData/Items/armors");
                break;

            case Permanent_ITypes.Weapon:
                raw_items = cManager.Load <WeaponDC[]>("XmlData/Items/weapons");
                break;

            case Permanent_ITypes.Scroll:
                raw_items = cManager.Load <ScrollDC[]>("XmlData/Items/scrolls");
                break;
            }

            int    playerGold      = pl.get_my_gold();
            int    tiers_available = calc_tier(playerGold);
            int    teaser_tier     = calc_tier(pl.get_my_lifetime_gold());
            string pl_chclass      = pl.my_class_as_string();

            for (int i = 0; i < raw_items.Count(); i++)
            {
                string[] available_for = raw_items[i].ValidClasses.Split(' ');
                bool     valid_class   = false;
                for (int cl = 0; cl < available_for.Count(); cl++)
                {
                    if (String.Compare(available_for[cl], pl_chclass) == 0)
                    {
                        valid_class = true;
                    }
                }

                if (valid_class && (raw_items[i].ItemTier == tiers_available ||
                                    raw_items[i].ItemTier == tiers_available - 1) &&
                    (raw_items[i].Cost <= playerGold ||
                     raw_items[i].Cost == 250))
                {
                    selected_items.Add(raw_items[i]);
                }

                if (raw_items[i].ItemTier == teaser_tier)
                {
                    teaser_items.Add(raw_items[i]);
                }
            }

            while (fetched_items.Count < number - 1 && selected_items.Count > 0)
            {
                int selected_index = rGen.Next(selected_items.Count);
                add_dataclass_to_final_list(selected_items[selected_index], ref fetched_items);
                //Remove them from the list afterwards.
                selected_items.RemoveAt(selected_index);
            }

            int teaser_item = rGen.Next(2);

            if (teaser_item == 0 && teaser_items.Count() > 0 && tiers_available != teaser_tier)
            {
                int teaser_index = rGen.Next(teaser_items.Count());
                add_dataclass_to_final_list(teaser_items[teaser_index], ref fetched_items);
            }
            else
            {
                if (selected_items.Count > 0)
                {
                    int selected_index = rGen.Next(selected_items.Count);
                    add_dataclass_to_final_list(selected_items[selected_index], ref fetched_items);
                }
            }

            return(fetched_items);
        }
Пример #4
0
        public List<Item> retrieve_random_items(Permanent_ITypes iTyp, Player pl, int number, int c_floor)
        {
            BaseItemDC[] raw_items = new BaseItemDC[0];
            List<BaseItemDC> selected_items = new List<BaseItemDC>();
            List<BaseItemDC> teaser_items = new List<BaseItemDC>();
            List<Item> fetched_items = new List<Item>();

            switch (iTyp)
            {
                case Permanent_ITypes.Armor:
                    raw_items = cManager.Load<ArmorDC[]>("XmlData/Items/armors");
                    break;
                case Permanent_ITypes.Weapon:
                    raw_items = cManager.Load<WeaponDC[]>("XmlData/Items/weapons");
                    break;
                case Permanent_ITypes.Scroll:
                    raw_items = cManager.Load<ScrollDC[]>("XmlData/Items/scrolls");
                    break;
            }

            int playerGold = pl.get_my_gold();
            int tiers_available = calc_tier(playerGold);
            if (iTyp == Permanent_ITypes.Scroll)
                tiers_available = calc_scroll_tier(playerGold);
            int teaser_tier = calc_tier(pl.get_my_lifetime_gold());
            string pl_chclass = pl.my_class_as_string();

            for (int i = 0; i < raw_items.Count(); i++)
            {
                string[] available_for = raw_items[i].ValidClasses.Split(' ');
                bool valid_class = false;
                for(int cl = 0; cl < available_for.Count(); cl++)
                    if(String.Compare(available_for[cl], pl_chclass) == 0)
                        valid_class = true;

                if (valid_class && (raw_items[i].ItemTier == tiers_available ||
                                   raw_items[i].ItemTier == tiers_available - 1) &&
                                   (raw_items[i].Cost <= playerGold ||
                                    raw_items[i].Cost == 250) &&
                                   c_floor > raw_items[i].FloorsRequired)
                    selected_items.Add(raw_items[i]);

                if (valid_class && raw_items[i].ItemTier == teaser_tier)
                    teaser_items.Add(raw_items[i]);
            }

            while (fetched_items.Count < number - 1 && selected_items.Count > 0)
            {
                int selected_index = rGen.Next(selected_items.Count);
                add_dataclass_to_final_list(selected_items[selected_index], ref fetched_items);
                //Remove them from the list afterwards.
                selected_items.RemoveAt(selected_index);
            }

            int teaser_item = rGen.Next(2);
            if (teaser_item == 0 && teaser_items.Count() > 0 && tiers_available != teaser_tier)
            {
                int teaser_index = rGen.Next(teaser_items.Count());
                add_dataclass_to_final_list(teaser_items[teaser_index], ref fetched_items);
            }
            else
            {
                if (selected_items.Count > 0)
                {
                    int selected_index = rGen.Next(selected_items.Count);
                    add_dataclass_to_final_list(selected_items[selected_index], ref fetched_items);
                }
            }

            return fetched_items;
        }