protected override OptionResult Run(GameHitParameters <GameObject> parameters) { SimSelection.ICriteria selection = base.RunFilterSelection(callingMod); if (selection == null) { return(OptionResult.Failure); } Delete(selection.Name); return(OptionResult.SuccessRetain); }
protected override OptionResult Run(GameHitParameters <GameObject> parameters) { List <SimSelection.ICriteria> selCrit = new List <SimSelection.ICriteria>(); List <string> existingCrit = new List <string>(); SavedFilter filter; if (mFilter != string.Empty) { filter = MasterController.GetFilter(mFilter); if (filter == null) { return(OptionResult.Failure); } } else { SimSelection.ICriteria selection = base.RunFilterSelection(string.Empty); if (selection == null) { return(OptionResult.Failure); } filter = MasterController.GetFilter(selection.Name); if (filter == null) { return(OptionResult.Failure); } } foreach (SimSelection.ICriteria criteria in filter.Elements) { existingCrit.Add(criteria.GetType().Name); } base.mForbiddenCrit.AddRange(existingCrit); selCrit = base.RunCriteriaSelection(parameters, 20, true); foreach (SimSelection.ICriteria pick in selCrit) { filter.Elements.Add(pick); } return(OptionResult.SuccessRetain); }
public static List <string> GetAllCriteriaOptions(string criteria, IMiniSimDescription actor) { List <string> results = new List <string>(); SimSelection.ICriteria pick = null; foreach (SimSelection.ICriteria crit in SelectionOption.List) { if (crit.Name == criteria) { pick = crit; break; } } if (pick != null) { if (actor == null && PlumbBob.SelectedActor != null) { actor = PlumbBob.SelectedActor.SimDescription.GetMiniSimDescription(); } List <IMiniSimDescription> picks = new List <IMiniSimDescription>(); foreach (List <IMiniSimDescription> sims in SimListing.AllSims(actor, false).Values) { foreach (IMiniSimDescription sim in sims) { if (SimSelection.IsSpecial(sim)) { continue; } picks.Add(sim); } } List <ICommonOptionItem> options = pick.GetOptions(actor, new List <SimSelection.ICriteria>(), picks); foreach (ICommonOptionItem opt in options) { results.Add(opt.Name); } } return(results); }
protected override OptionResult Run(GameHitParameters <GameObject> parameters) { SavedFilter filter; SimSelection.ICriteria criteria = null; if (mFilter != string.Empty && mCriteria != string.Empty) { filter = MasterController.GetFilter(mFilter); if (filter == null) { return(OptionResult.Failure); } foreach (SimSelection.ICriteria crit in filter.Elements) { if (crit.GetType().Name == mCriteria) { criteria = crit; break; } } if (criteria == null) { return(OptionResult.Failure); } } else { SimSelection.ICriteria selection = base.RunFilterSelection(string.Empty); if (selection == null) { return(OptionResult.Failure); } filter = MasterController.GetFilter(selection.Name); if (filter == null) { return(OptionResult.Failure); } List <string> nonexistingCrit = new List <string>(); foreach (SimSelection.ICriteria crit in SelectionOption.List) { foreach (SimSelection.ICriteria crit2 in filter.Elements) { if (crit.Name == crit2.Name) { goto Skip; } } nonexistingCrit.Add(crit.GetType().Name); Skip :; } base.mForbiddenCrit.AddRange(nonexistingCrit); List <SimSelection.ICriteria> selCrit = base.RunCriteriaSelection(parameters, 1, false); if (selCrit.Count == 0) { return(OptionResult.Failure); } foreach (SimSelection.ICriteria crit in filter.Elements) { if (crit.Name == selCrit[0].Name) { criteria = crit; break; } } } if (!SelectionOption.StringList.ContainsKey(criteria.GetType().Name)) { return(OptionResult.Failure); } List <IMiniSimDescription> sims = new List <IMiniSimDescription>(); Dictionary <ulong, SimDescription> residents = SimListing.GetResidents(false); foreach (KeyValuePair <ulong, SimDescription> sim in residents) { sims.Add(sim.Value as IMiniSimDescription); } List <ICommonOptionItem> options = SelectionOption.StringList[criteria.GetType().Name].GetOptions(null, filter.Elements, sims); List <ICommonOptionItem> existingOptions = criteria.GetOptions(null, filter.Elements, sims); if (options == null || existingOptions == null) { return(OptionResult.Failure); } List <Item> opts = new List <Item>(); List <string> existingByName = new List <string>(); foreach (ICommonOptionItem opt2 in existingOptions) { existingByName.Add(opt2.Name); } foreach (ICommonOptionItem opt in options) { if (existingByName.Contains(opt.Name)) { continue; } opts.Add(new Item(opt)); } CommonSelection <Item> .Results optSelection = new CommonSelection <Item>(Name, opts).SelectMultiple(20); if (optSelection == null || optSelection.Count == 0) { return(OptionResult.Failure); } foreach (Item item in optSelection) { existingOptions.Add(item.mOption); } criteria.SetOptions(existingOptions); return(OptionResult.SuccessRetain); }
// this needs to be updated to use the cleaner ICreationData interface public static string CreateAndReturnRandomFilter(string callingNamespace, IMiniSimDescription actor, List <string> forbiddenCrit, Dictionary <string, string> forbiddenOptions, int[] minMaxCrit, Dictionary <string, int[]> minMaxOptions) { List <SimSelection.ICriteria> validCriteria = new List <SimSelection.ICriteria>(); foreach (SimSelection.ICriteria crit in SelectionOption.List) { if (!forbiddenCrit.Contains(crit.Name)) { validCriteria.Add(crit); } } if (validCriteria.Count == 0) { return(string.Empty); } if (actor == null && PlumbBob.SelectedActor != null) { actor = PlumbBob.SelectedActor.SimDescription.GetMiniSimDescription(); } List <IMiniSimDescription> picks = new List <IMiniSimDescription>(); foreach (List <IMiniSimDescription> sims in SimListing.AllSims(actor, false).Values) { foreach (IMiniSimDescription sim in sims) { if (SimSelection.IsSpecial(sim)) { continue; } picks.Add(sim); } } if (picks.Count == 0) { return(string.Empty); } if (minMaxCrit.Length < 2) { minMaxCrit[0] = 1; minMaxCrit[1] = 2; } int critpicks = RandomUtil.GetInt(minMaxCrit[0], minMaxCrit[1]); Common.Notify("Picking " + critpicks + " from " + validCriteria.Count); List <SimSelection.ICriteria> finalPicks = new List <SimSelection.ICriteria>(); if (validCriteria.Count == critpicks) { finalPicks = validCriteria; } else { while (true) { if (validCriteria.Count < critpicks && finalPicks.Count == validCriteria.Count) { break; } if (finalPicks.Count < critpicks) { SimSelection.ICriteria critpick = RandomUtil.GetRandomObjectFromList <SimSelection.ICriteria>(validCriteria); if (!finalPicks.Contains(critpick)) { finalPicks.Add(critpick); } continue; } break; } } bool failed = false; foreach (SimSelection.ICriteria crit2 in finalPicks) { Common.Notify("Picked " + crit2.Name); List <ICommonOptionItem> finalOpts = new List <ICommonOptionItem>(); List <ICommonOptionItem> opts = crit2.GetOptions(actor, finalPicks, picks); if (opts != null && opts.Count > 0) { Common.Notify("Opts not null"); int optpicks = 0; if (minMaxOptions.ContainsKey(crit2.Name) && minMaxOptions[crit2.Name].Length > 1) { optpicks = RandomUtil.GetInt(minMaxOptions[crit2.Name][0], minMaxOptions[crit2.Name][1]); } else { optpicks = 1; } Common.Notify("Picking " + optpicks + " from " + opts.Count); if (opts.Count == optpicks) { finalOpts = opts; } else { while (true) { if (opts.Count < optpicks && finalOpts.Count == opts.Count) { break; } if (finalOpts.Count < optpicks) { ICommonOptionItem opt = RandomUtil.GetRandomObjectFromList <ICommonOptionItem>(opts); ITestableOption testOpt = opt as ITestableOption; if (!finalOpts.Contains(opt) && (!forbiddenOptions.ContainsKey(crit2.Name) || (testOpt != null && !forbiddenOptions[crit2.Name].Contains(testOpt.OptionName)))) { // test if this gives me the name, if so we can revert the changes to ITestableOption Common.Notify("Picked " + opt.Name); finalOpts.Add(opt); } continue; } break; } } crit2.SetOptions(finalOpts); } else { failed = true; break; } } if (failed) { Common.Notify("Failed"); return(string.Empty); } string filterName; while (true) { filterName = callingNamespace + ".SimAttractionFilter" + RandomGen.NextDouble(); if (GetFilter(filterName) != null) { continue; } else { MasterController.Settings.mFilters.Add(new SavedFilter(filterName, finalPicks)); break; } } Common.Notify("Set and returning filter " + filterName); return(filterName); }
// settled on a seperate interface within attraction profiles to set certain criteria as random which will use the above to pull the options allowing users to allow/disallow criteria. Problems begin with localization of values when handling them as strings. I'll deal with that later. public static string CreateFilterWithCriteria(string callingNamespace, IMiniSimDescription actor, List <SimSelection.ICriteriaCreation> creationData) { if (creationData == null) { Common.Notify("Creation Data null"); return(string.Empty); } if (actor == null && PlumbBob.SelectedActor != null) { actor = PlumbBob.SelectedActor.SimDescription.GetMiniSimDescription(); } List <IMiniSimDescription> picks = new List <IMiniSimDescription>(); foreach (List <IMiniSimDescription> sims in SimListing.AllSims(actor, false).Values) { foreach (IMiniSimDescription sim in sims) { if (SimSelection.IsSpecial(sim)) { continue; } picks.Add(sim); } } List <SimSelection.ICriteria> finalCriteria = new List <SimSelection.ICriteria>(); foreach (SimSelection.ICriteriaCreation cData in creationData) { List <SimSelection.ICriteria> validCriteria = new List <SimSelection.ICriteria>(); List <string> forbiddenCrit = new List <string>(); if (cData.RandomCriteria && cData.ForbiddenRandomCriteria != null) { forbiddenCrit = cData.ForbiddenRandomCriteria; } foreach (SimSelection.ICriteria crit in SelectionOption.List) { if (crit.Name == cData.CriteriaName) { validCriteria.Add(crit); break; } if (!forbiddenCrit.Contains(crit.Name)) { validCriteria.Add(crit); } } SimSelection.ICriteria pickedCritera = null; if (validCriteria.Count == 1) { pickedCritera = validCriteria[0]; } else { int loop = 0; while (true) { if (loop > 4) { break; } pickedCritera = RandomUtil.GetRandomObjectFromList <SimSelection.ICriteria>(validCriteria); if (finalCriteria.Contains(pickedCritera)) { loop++; continue; } } } if (pickedCritera == null) { Common.Notify("pickedCriteria was null"); continue; } List <ICommonOptionItem> criteriaOptions = pickedCritera.GetOptions(actor, new List <SimSelection.ICriteria>(), picks); if (criteriaOptions == null || criteriaOptions.Count == 0) { Common.Notify("criteriaOptions null or 0"); continue; } List <string> forbiddenOptions = new List <string>(); if (cData.RandomOptions && cData.ForbiddenRandomOptions != null) { forbiddenOptions = cData.ForbiddenRandomOptions; } List <ICommonOptionItem> finalOptions = new List <ICommonOptionItem>(); List <ICommonOptionItem> validRandomOptions = new List <ICommonOptionItem>(); foreach (ICommonOptionItem opt in criteriaOptions) { if (cData.CriteriaOptions != null && cData.CriteriaOptions.Contains(opt.Name) && !finalOptions.Contains(opt)) { finalOptions.Add(opt); if (validRandomOptions.Contains(opt)) { validRandomOptions.Remove(opt); } continue; } if (cData.RandomOptions && !forbiddenOptions.Contains(opt.Name) && !finalOptions.Contains(opt)) { validRandomOptions.Add(opt); } } if (validRandomOptions.Count > 0) { List <ICommonOptionItem> pickedRandomOptions = new List <ICommonOptionItem>(); if (cData.MinMaxRandomOptions != null || cData.MinMaxRandomOptions.Length == 2) { int numOpt = RandomUtil.GetInt(cData.MinMaxRandomOptions[0], cData.MinMaxRandomOptions[1]); if (numOpt != 0) { while (true) { if (validRandomOptions.Count == 0 || pickedRandomOptions.Count == numOpt) { break; } ICommonOptionItem opt = RandomUtil.GetRandomObjectFromList <ICommonOptionItem>(validRandomOptions); if (opt != null) { pickedRandomOptions.Add(opt); validRandomOptions.Remove(opt); } } } finalOptions.AddRange(pickedRandomOptions); } } pickedCritera.SetOptions(finalOptions); finalCriteria.Add(pickedCritera); } if (finalCriteria.Count > 0) { string filterName; while (true) { filterName = callingNamespace + ".SimAttractionFilter" + RandomGen.NextDouble(); if (GetFilter(filterName) != null) { continue; } else { MasterController.Settings.mFilters.Add(new SavedFilter(filterName, finalCriteria)); break; } } return(filterName); } return(string.Empty); }
protected override OptionResult Run(GameHitParameters <GameObject> parameters) { SavedFilter filter; if (mFilter != string.Empty) { filter = MasterController.GetFilter(mFilter); if (filter == null) { return(OptionResult.Failure); } } else { SimSelection.ICriteria selection = base.RunFilterSelection(string.Empty); if (selection == null) { return(OptionResult.Failure); } filter = MasterController.GetFilter(selection.Name); if (filter == null) { return(OptionResult.Failure); } } List <string> existing = new List <string>(); foreach (SimSelection.ICriteria crit in filter.Elements) { existing.Add(crit.GetType().Name); } List <string> forbidden = new List <string>(); foreach (string crit in SelectionOption.StringList.Keys) { if (!existing.Contains(crit)) { forbidden.Add(crit); } } base.mForbiddenCrit = forbidden; List <SimSelection.ICriteria> selected = base.RunCriteriaSelection(parameters, 20, false); if (selected.Count == 0) { return(OptionResult.Failure); } foreach (SimSelection.ICriteria crit in selected) { foreach (SimSelection.ICriteria element in new List <SimSelection.ICriteria>(filter.Elements)) { if (element.Name == crit.Name) { filter.Elements.Remove(element); break; } } } return(OptionResult.SuccessRetain); }