Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        // 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);
        }
Example #6
0
        // 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);
        }
Example #7
0
        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);
        }