protected override bool PrivateUpdate(ScenarioFrame frame) { Dictionary <CareerLocation, JobNeed> locations = new Dictionary <CareerLocation, JobNeed>(); foreach (SimDescription sim in Careers.Employed) { Career career = sim.Occupation as Career; if (career == null) { continue; } if (ManagerCareer.IsPlaceholderCareer(career)) { continue; } if (career.CareerLoc == null) { continue; } if (!NewBossScenario.NeedsBoss(career, true)) { continue; } if ((career.Boss == null) && (career.CurLevel.NextLevels.Count > 0)) { JobNeed need; if (!locations.TryGetValue(career.CareerLoc, out need)) { need = new JobNeed(); locations.Add(career.CareerLoc, need); } if (SimTypes.IsSelectable(sim)) { need.mNeed += 10; } else { need.mNeed++; } if ((need.Sim == null) || (need.Sim.Occupation.CareerLevel < sim.Occupation.CareerLevel)) { need.Sim = sim; } } } int maxNeed = 0; foreach (JobNeed need in locations.Values) { if ((mRequirement.mCareerSim == null) || (maxNeed < need.mNeed)) { maxNeed = need.mNeed; mRequirement.mCareerSim = need.Sim; } } return(true); }
protected List <Occupation> GetChoices(bool checkQuit) { List <Occupation> allCareers = new List <Occupation>(); foreach (Occupation occupation in CareerManager.OccupationList) { if (occupation is School) { continue; } if (occupation.IsAcademicCareer) { continue; } if (!Careers.TestCareer(this, Sim, occupation.Guid)) { continue; } Career career = occupation as Career; if (career != null) { if (!career.CareerAgeTest(Sim)) { continue; } if (career.IsPartTime != Sim.Teen) { continue; } if (ManagerCareer.IsPlaceholderCareer(career)) { continue; } if (career.Level1.PayPerHourBase <= 0) { continue; } CareerLocation location = Career.FindClosestCareerLocation(Sim, career.Guid); if (location == null) { continue; } if (!AllowStandalone(location)) { continue; } } if (checkQuit) { Occupation oldCareer; if (Sim.CareerManager.QuitCareers.TryGetValue(occupation.Guid, out oldCareer)) { if (oldCareer.CareerLevel >= 5) { continue; } } } allCareers.Add(occupation); } return(allCareers); }
protected override bool PrivateUpdate(ScenarioFrame frame) { if (Sim.AssignedRole != null) { if (ManagerCareer.IsRegisterInstalled()) { if ((Sim.LotHome == null) && (Sim.Occupation == null)) { IncStat("Registered Retiremenet"); GetData <CareerSimData>(Sim).Retire(); } } return(true); } else if (SimTypes.IsSpecial(Sim)) { IncStat("Special"); return(false); } bool enroll = false; if (GameUtils.IsUniversityWorld()) { enroll = true; } else if (Careers.TestCareer(this, Sim, OccupationNames.AcademicCareer)) { if (Careers.AllowHomeworldUniversity(Sim)) { AcademicDegreeManager degreeManager = Sim.CareerManager.DegreeManager; if (degreeManager != null) { if (!degreeManager.HasCompletedAnyDegree()) { enroll = true; } } } } if (!mForce) { if (GetValue <ManualCareerOption, bool>(Sim)) { IncStat("Manual"); return(false); } } List <OccupationNames> careers = new List <OccupationNames>(); bool dream = Careers.GetPotentialCareers(this, Sim, careers, mCheckQuit); bool partTime = false; if (Sim.Teen) { bool scoreSuccess = true; if (mForce) { if (AddScoring("FindJob", Sim) < 0) { scoreSuccess = false; } } else { if (AddScoring("ChanceFindJob", Sim) < 0) { scoreSuccess = false; } } if ((!scoreSuccess) && (!GetValue <ForceTeensOption, bool>())) { IncStat("Score Fail"); return(false); } partTime = true; } if (partTime) { List <OccupationNames> partTimeList = new List <OccupationNames>(); AddStat(Sim.Age + ": Part-time Choices", careers.Count); foreach (OccupationNames career in careers) { Career staticCareer = CareerManager.GetStaticCareer(career); if (staticCareer == null) { continue; } if (staticCareer is School) { continue; } CareerLocation location = Career.FindClosestCareerLocation(Sim, staticCareer.Guid); if (location == null) { continue; } if (!AllowStandalone(location)) { continue; } foreach (CareerLocation loc in location.Owner.CareerLocations.Values) { Career possible = loc.Career; if (!possible.IsPartTime) { continue; } if (ManagerCareer.IsPlaceholderCareer(possible)) { continue; } partTimeList.Add(possible.Guid); } } careers = partTimeList; AddStat(Sim.Age + ": Part-time Final", careers.Count); } else { AddStat(Sim.Age + ": Full-time Final", careers.Count); } if ((!mForce) && (!dream) && (Sim.Occupation != null) && (!(Sim.Occupation is Retired))) { IncStat("Non-Dream Employed"); return(false); } if (enroll) { AcademicDegreeNames degreeName = AcademicDegreeNames.Undefined; foreach (DreamJob job in ManagerCareer.GetDreamJob(Sim)) { if (job == null) { continue; } foreach (AcademicDegreeStaticData data in AcademicDegreeManager.sDictionary.Values) { if (data.AssociatedOccupations.Contains(job.mCareer)) { degreeName = data.AcademicDegreeName; break; } } } if (degreeName == AcademicDegreeNames.Undefined) { degreeName = AcademicDegreeManager.ChooseWeightRandomSuitableDegree(Sim); } if (!Careers.IsDegreeAllowed(Manager, Sim, degreeName)) { degreeName = Careers.GetAllowedDegree(Manager, Sim); } if (degreeName != AcademicDegreeNames.Undefined) { if (AcademicCareer.GlobalTermLength == AcademicCareer.TermLength.kInvalid) { AcademicCareer.GlobalTermLength = AcademicCareer.TermLength.kOneWeek; } AcademicCareer.EnrollSimInAcademicCareer(Sim, degreeName, AcademicCareer.ChooseRandomCoursesPerDay()); return(true); } } bool promptForJob = GetValue <ChooseCareerOption, bool>(); if ((promptForJob) && (!Careers.MatchesAlertLevel(Sim))) { promptForJob = false; } if (careers.Count > 0) { if ((Sim.Occupation != null) && (careers.Contains(Sim.Occupation.Guid))) { IncStat("Already Has Choice"); return(false); } if (!promptForJob) { if (AskForJob(Sim, RandomUtil.GetRandomObjectFromList(careers))) { return(true); } } } if ((!mForce) && (Sim.Occupation != null)) { IncStat("Already Employed"); return(false); } List <Occupation> allCareers = null; if (careers.Count > 0) { allCareers = new List <Occupation>(); foreach (Career career in CareerManager.CareerList) { if (careers.Contains(career.Guid)) { allCareers.Add(career); } } } if ((allCareers == null) || (allCareers.Count == 0)) { if (Sim.LifetimeWish == (uint)LifetimeWant.JackOfAllTrades) { allCareers = GetChoices(true); } } if ((allCareers == null) || (allCareers.Count == 0)) { allCareers = GetChoices(false); } if (allCareers.Count > 0) { AddStat("Random Choices", allCareers.Count); if ((promptForJob) && (AcceptCancelDialog.Show(ManagerSim.GetPersonalInfo(Sim, Common.Localize("ChooseCareer:Prompt", Sim.IsFemale))))) { List <JobItem> jobs = new List <JobItem>(); foreach (Occupation career in GetChoices(false)) { jobs.Add(new JobItem(career, allCareers.Contains(career))); } bool okayed; JobItem choice = new CommonSelection <JobItem>(Common.Localize("ChooseCareer:Header", Sim.IsFemale), Sim.FullName, jobs, new JobPreferenceColumn()).SelectSingle(out okayed); if (!okayed) { return(false); } if (choice != null) { allCareers.Clear(); allCareers.Add(choice.Value); SetValue <ManualCareerOption, bool>(Sim, true); } } while (allCareers.Count > 0) { Occupation choice = RandomUtil.GetRandomObjectFromList(allCareers); allCareers.Remove(choice); if (choice != null) { if (AskForJob(Sim, choice)) { return(true); } } } IncStat("Ask Failure"); return(false); } else { if (promptForJob) { Common.Notify(Common.Localize("ChooseCareer:PromptFailure", Sim.IsFemale, new object[] { Sim })); } IncStat("No Applicable"); return(false); } }
protected bool HasProperJob(SimDescription sim) { if (sim.Occupation == null) { return(false); } if (sim.Occupation is AcademicCareer) { return(true); } if (!Careers.TestCareer(this, sim, sim.Occupation.Guid)) { return(false); } if (ManagerCareer.IsPlaceholderCareer(sim.Occupation as Career)) { IncStat("Proper Job: Placeholder"); return(true); } if (sim.Teen) { IncStat("Proper Job: Teen"); return(true); } if (!GetValue <AssignDreamJobToEmployedOption, bool>()) { IncStat("Proper Job: Employed Denied"); return(true); } bool retired = false; if (sim.Elder) { if (sim.Occupation is Retired) { retired = true; if (!GetValue <AllowSelfEmployedRetirementOption, bool>()) { IncStat("Proper Job: Retired Denied"); return(true); } } else { IncStat("Proper Job: Elder Not Retired"); return(true); } } if (sim.HasCompletedLifetimeWish) { IncStat("Proper Job: Wish Completed"); return(true); } else { List <DreamJob> jobs = ManagerCareer.GetDreamJob(sim, retired); if (jobs.Count == 0) { if (!retired) { if (sim.YoungAdultOrAbove) { Career career = sim.Occupation as Career; if ((career != null) && (career.IsPartTime)) { IncStat("Proper Job: No Dream Part-Time"); return(false); } } IncStat("Proper Job: No Dream Job"); return(true); } else { IncStat("Proper Job: No Dream Retired"); return(false); } } foreach (DreamJob job in jobs) { if (job == null) { continue; } if (job.mCareer == sim.Occupation.Guid) { if (job.Satisfies(Careers, sim, sim.LotHome, false)) { IncStat("Proper Job: Already Dream"); return(true); } else { IncStat("Proper Job: Dream No Satisfy"); return(false); } } } AddStat("Proper Job: Default", jobs.Count); return(false); } }