Пример #1
0
        protected override bool Run(SimDescription me, bool singleSelection)
        {
            AcademicDegreeManager manager = me.CareerManager.DegreeManager;

            if (!ApplyAll)
            {
                List <Item> choices = new List <Item>();

                foreach (AcademicDegreeStaticData data in AcademicDegreeManager.sDictionary.Values)
                {
                    int value = 0;
                    if (manager != null)
                    {
                        AcademicDegree degree = manager.GetElement(data.AcademicDegreeName);
                        if (degree != null)
                        {
                            value = degree.NumberOfCreditsTowardDegree;
                        }
                    }

                    choices.Add(new Item(data, value));
                }

                CommonSelection <Item> .Results results = new CommonSelection <Item>(Name, choices).SelectMultiple();
                if ((results == null) || (results.Count == 0))
                {
                    return(false);
                }

                foreach (Item item in results)
                {
                    string text = StringInputDialog.Show(Name, Common.Localize(GetTitlePrefix() + ":Prompt", me.IsFemale, new object[] { me.FullName, item.Value.DegreeName, item.Value.RequiredNumberOfCredit }), item.Count.ToString());
                    if (string.IsNullOrEmpty(text))
                    {
                        continue;
                    }

                    int count;
                    if (!int.TryParse(text, out count))
                    {
                        Common.Notify(Common.Localize("Numeric:Error"));
                        continue;
                    }

                    mDegrees[item.Value.AcademicDegreeName] = count;
                }
            }

            foreach (KeyValuePair <AcademicDegreeNames, int> pair in mDegrees)
            {
                AcademicDegree degree = manager.GetElement(pair.Key);
                if (degree == null)
                {
                    if (pair.Value <= 0)
                    {
                        continue;
                    }

                    manager.AddNewDegree(pair.Key, pair.Value);
                }
                else
                {
                    if (pair.Value > 0)
                    {
                        degree.mEarnedNumberOfCreditsTowardDegree = pair.Value;
                    }
                    else
                    {
                        manager.RemoveElement((ulong)pair.Key);
                    }
                }
            }

            return(true);
        }
Пример #2
0
        public static void CleanupAcademics(Logger log)
        {
            Dictionary <ulong, SimDescription> sims = SimListing.GetResidents(false);

            foreach (SimDescription sim in sims.Values)
            {
                if (sim.CareerManager == null)
                {
                    continue;
                }

                AcademicCareer career = sim.OccupationAsAcademicCareer;
                if (career != null)
                {
                    if ((career.mDegree == null) || (AcademicDegreeManager.GetStaticElement(career.mDegree.AcademicDegreeName) == null))
                    {
                        career.LeaveJobNow(Career.LeaveJobReason.kJobBecameInvalid);
                    }
                }

                AcademicDegreeManager manager = sim.CareerManager.DegreeManager;
                if (manager == null)
                {
                    continue;
                }

                List <AcademicDegreeNames> remove = new List <AcademicDegreeNames>();

                foreach (AcademicDegree degree in manager.List)
                {
                    if (AcademicDegreeManager.GetStaticElement(degree.AcademicDegreeName) == null)
                    {
                        remove.Add(degree.AcademicDegreeName);
                    }
                }

                foreach (AcademicDegreeNames degree in remove)
                {
                    manager.RemoveElement((ulong)degree);

                    if (log != null)
                    {
                        log("Remove Corrupt Degree: " + sim.FullName);
                    }
                }
            }

            if (AcademicCareer.sAcademicSims != null)
            {
                for (int i = AcademicCareer.sAcademicSims.Count - 1; i >= 0; i--)
                {
                    bool remove = false;

                    SimDescription sim;
                    if (!sims.TryGetValue(AcademicCareer.sAcademicSims[i], out sim))
                    {
                        remove = true;
                    }
                    else
                    {
                        AcademicCareer career = sim.OccupationAsAcademicCareer;
                        if (career == null)
                        {
                            remove = true;
                        }
                        else if (career.mDegree == null)
                        {
                            remove = true;
                        }
                        else if (career.Coworkers == null)
                        {
                            remove = true;
                        }
                    }

                    if (remove)
                    {
                        if (log != null)
                        {
                            if (sim != null)
                            {
                                log(" Removed: " + sim.FullName);
                            }
                            else
                            {
                                log(" Removed: " + AcademicCareer.sAcademicSims[i]);
                            }
                        }

                        AcademicCareer.sAcademicSims.RemoveAt(i);
                    }
                }
            }
        }