private static void HandleCategory(KEY k, List <Regex> r, RandomizationLevel randomizationLevel) { switch (randomizationLevel) { case RandomizationLevel.None: default: break; case RandomizationLevel.Subtype: for (int i = 1; i < r.Count; i++) { List <string> temp = new List <string>(k.KeyTable.Where(x => r[i].IsMatch(x.ResRef) && !Is_Forbidden(x.ResRef) && x.ResourceType == (short)ResourceType.UTI).Select(x => x.ResRef)); Type_Lists.Add(temp); } break; case RandomizationLevel.Type: List <string> type = new List <string>(k.KeyTable.Where(x => r[0].IsMatch(x.ResRef) && !Is_Forbidden(x.ResRef) && x.ResourceType == (short)ResourceType.UTI).Select(x => x.ResRef)); Type_Lists.Add(type); break; case RandomizationLevel.Max: Max_Rando.AddRange(k.KeyTable.Where(x => r[0].IsMatch(x.ResRef) && !Is_Forbidden(x.ResRef) && x.ResourceType == (short)ResourceType.UTI).Select(x => x.ResRef)); break; } }
public static void item_rando(KPaths paths) { // Prepare lists for new randomization. Max_Rando.Clear(); Type_Lists.Clear(); LookupTable.Clear(); // Load KEY file. KEY k = new KEY(paths.chitin); // Handle categories HandleCategory(k, ArmbandsRegs, Properties.Settings.Default.RandomizeArmbands); HandleCategory(k, ArmorRegs, Properties.Settings.Default.RandomizeArmor); HandleCategory(k, BeltsRegs, Properties.Settings.Default.RandomizeBelts); HandleCategory(k, BlastersRegs, Properties.Settings.Default.RandomizeBlasters); HandleCategory(k, HidesRegs, Properties.Settings.Default.RandomizeHides); HandleCategory(k, CreatureRegs, Properties.Settings.Default.RandomizeCreature); HandleCategory(k, DroidRegs, Properties.Settings.Default.RandomizeDroid); HandleCategory(k, GlovesRegs, Properties.Settings.Default.RandomizeGloves); HandleCategory(k, GrenadesRegs, Properties.Settings.Default.RandomizeGrenades); HandleCategory(k, ImplantsRegs, Properties.Settings.Default.RandomizeImplants); HandleCategory(k, LightsabersRegs, Properties.Settings.Default.RandomizeLightsabers); HandleCategory(k, MaskRegs, Properties.Settings.Default.RandomizeMask); HandleCategory(k, MeleeRegs, Properties.Settings.Default.RandomizeMelee); HandleCategory(k, MinesRegs, Properties.Settings.Default.RandomizeMines); HandleCategory(k, PazRegs, Properties.Settings.Default.RandomizePaz); HandleCategory(k, StimsRegs, Properties.Settings.Default.RandomizeStims); HandleCategory(k, UpgradeRegs, Properties.Settings.Default.RandomizeUpgrade); // Handle Various switch (Properties.Settings.Default.RandomizeVarious) { default: case RandomizationLevel.None: break; case RandomizationLevel.Type: List <string> type = new List <string>(k.KeyTable.Where(x => Matches_None(x.ResRef) && !Is_Forbidden(x.ResRef) && x.ResourceType == (short)ResourceType.UTI).Select(x => x.ResRef)); Type_Lists.Add(type); break; case RandomizationLevel.Max: Max_Rando.AddRange(k.KeyTable.Where(x => Matches_None(x.ResRef) && !Is_Forbidden(x.ResRef) && x.ResourceType == (short)ResourceType.UTI).Select(x => x.ResRef)); break; } // Omitted Items foreach (var item in Globals.OmitItems) { LookupTable.Add(new Tuple <string, string>(item, item)); } // Max Rando List <string> Max_Rando_Iterator = new List <string>(Max_Rando); Randomize.FisherYatesShuffle(Max_Rando); int j = 0; foreach (KEY.KeyEntry ke in k.KeyTable.Where(x => Max_Rando_Iterator.Contains(x.ResRef))) { LookupTable.Add(new Tuple <string, string>(ke.ResRef, Max_Rando[j])); ke.ResRef = Max_Rando[j]; j++; } // Type Rando foreach (List <string> li in Type_Lists) { List <string> type_copy = new List <string>(li); Randomize.FisherYatesShuffle(type_copy); j = 0; foreach (KEY.KeyEntry ke in k.KeyTable.Where(x => li.Contains(x.ResRef))) { LookupTable.Add(new Tuple <string, string>(ke.ResRef, type_copy[j])); ke.ResRef = type_copy[j]; j++; } } k.WriteToFile(paths.chitin); }