Example #1
0
            public override bool Perform(SimDescription me, bool applyAll)
            {
                Occupation job        = me.Occupation;
                Occupation retiredJob = me.CareerManager.mRetiredCareer;

                me.CareerManager.mRetiredCareer = null;

                Occupation staticCareer = CareerManager.GetStaticOccupation(mCareer.Guid);

                if (staticCareer is School)
                {
                    me.CareerManager.mJob = null;
                }

                int originaHighest = 0;

                try
                {
                    if (mLocation != null)
                    {
                        AcquireOccupationParameters parameters = new AcquireOccupationParameters(mLocation, false, false);
                        parameters.ForceAutomaticChange = applyAll;

                        me.CareerManager.AcquireOccupation(parameters);
                    }
                    else
                    {
                        if (mCareer.Guid == OccupationNames.Firefighter)
                        {
                            ActiveCareerStaticData activeCareerStaticData = ActiveCareer.GetActiveCareerStaticData(OccupationNames.Firefighter);

                            originaHighest = activeCareerStaticData.HighestLevel;

                            // Required to bypass auto promotion in SetAttributesForNewJob
                            activeCareerStaticData.HighestLevel = 1;
                        }

                        AcquireOccupation(me.CareerManager, new AcquireOccupationParameters(mCareer.Guid, false, false), !applyAll);
                    }
                }
                finally
                {
                    me.CareerManager.mRetiredCareer = retiredJob;

                    if (me.CareerManager.mJob == null)
                    {
                        me.CareerManager.mJob = job;
                    }

                    if (mCareer.Guid == OccupationNames.Firefighter)
                    {
                        ActiveCareerStaticData activeCareerStaticData = ActiveCareer.GetActiveCareerStaticData(OccupationNames.Firefighter);
                        activeCareerStaticData.HighestLevel = originaHighest;
                    }
                }

                return(true);
            }
Example #2
0
        protected bool AskForJob(SimDescription sim, Occupation occupation)
        {
            if ((sim.Occupation != null) && (sim.Occupation.Guid == occupation.Guid))
            {
                IncStat("Same Job");
                return(false);
            }

            Career career = occupation as Career;

            if (career != null)
            {
                if (!career.CareerAgeTest(sim))
                {
                    IncStat("Wrong Age");
                    return(false);
                }
            }

            if (!Careers.TestCareer(this, Sim, occupation.Guid))
            {
                IncStat("User Disallow " + occupation.CareerName);
                return(false);
            }

            AcquireOccupationParameters parameters;

            if (occupation is Career)
            {
                CareerLocation location = Career.FindClosestCareerLocation(sim, occupation.Guid);
                if (location == null)
                {
                    IncStat("No Location " + occupation.CareerName);
                    return(false);
                }
                else if (!AllowStandalone(location))
                {
                    IncStat("Standalone " + occupation.CareerName);
                    return(false);
                }
                else
                {
                    parameters = new AcquireOccupationParameters(location, false, false);
                }
            }
            else
            {
                parameters = new AcquireOccupationParameters(occupation.Guid, false, false);
            }

            try
            {
                if (sim.Occupation != null)
                {
                    if (sim.Occupation.Guid == occupation.Guid)
                    {
                        IncStat("Already In Job");
                        return(true);
                    }

                    if (sim.Occupation.CareerLoc != null)
                    {
                        foreach (SimDescription worker in sim.Occupation.CareerLoc.Workers)
                        {
                            if (worker.Occupation == null)
                            {
                                continue;
                            }

                            if (worker.Occupation.Coworkers == null)
                            {
                                worker.Occupation.Coworkers = new List <SimDescription>();
                            }
                        }
                    }

                    sim.Occupation.LeaveJobNow(Career.LeaveJobReason.kQuit);
                }

                Occupation retiredCareer = sim.CareerManager.mRetiredCareer;
                sim.CareerManager.mRetiredCareer = null;

                int originaHighest = 0;
                try
                {
                    if (occupation is ActiveFireFighter)
                    {
                        ActiveCareerStaticData activeCareerStaticData = ActiveCareer.GetActiveCareerStaticData(OccupationNames.Firefighter);

                        originaHighest = activeCareerStaticData.HighestLevel;

                        // Required to bypass auto promotion in SetAttributesForNewJob
                        activeCareerStaticData.HighestLevel = 1;
                    }

                    if (occupation is XpBasedCareer)
                    {
                        // Required by Stylist.GetOccupationJoiningTnsTextPrefix()
                        if (!Sims.Instantiate(sim, sim.LotHome, false))
                        {
                            IncStat("Hibernating");
                            return(false);
                        }
                    }

                    if (AcquireOccupation(sim.CareerManager, parameters))
                    {
                        IncStat(occupation.Guid.ToString());
                        return(true);
                    }
                }
                finally
                {
                    sim.CareerManager.mRetiredCareer = retiredCareer;

                    if (occupation is ActiveFireFighter)
                    {
                        ActiveCareerStaticData activeCareerStaticData = ActiveCareer.GetActiveCareerStaticData(OccupationNames.Firefighter);
                        activeCareerStaticData.HighestLevel = originaHighest;
                    }
                }
            }
            catch (Exception e)
            {
                Common.DebugException(sim, e);
            }

            IncStat("Core Failure");
            return(false);
        }