//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)); } }
//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)); }
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); }
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; }