Exemple #1
0
            protected override bool Allow(SimDescription me, IMiniSimDescription actor)
            {
                if (me.Occupation == null)
                {
                    return(false);
                }

                if (me.Occupation.Guid != mCareer.Guid)
                {
                    return(false);
                }

                Career rabbitHoleCareer = mCareer as Career;

                if (rabbitHoleCareer != null)
                {
                    CareerLocation testLoc = Career.FindClosestCareerLocation(me, mCareer.Guid);
                    if (testLoc == null)
                    {
                        return(false);
                    }
                }

                return(true);
            }
Exemple #2
0
        public void OnWorldLoadFinished()
        {
            try
            {
                Managers.ManagerCareer.RetiredLocation = null;

                Career staticCareer = CareerManager.GetStaticCareer(CareerGuid);
                if (staticCareer == null)
                {
                    return;
                }

                foreach (RabbitHole hole in RabbitHole.GetRabbitHolesOfType(RabbitHoleType.CityHall))
                {
                    CareerLocation location = new CareerLocation(hole, staticCareer);
                    if (!hole.CareerLocations.ContainsKey((ulong)staticCareer.Guid))
                    {
                        hole.CareerLocations.Add((ulong)staticCareer.Guid, location);

                        if (location.Career != null)
                        {
                            Managers.ManagerCareer.RetiredLocation = location;
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                Common.Exception("Retired WorldLoadFinished", exception);
            }
        }
Exemple #3
0
        public override void SetAttributesForNewJob(CareerLocation location, ulong lotId, bool bRequestFromCharacterImport)
        {
            base.SetAttributesForNewJob(location, lotId, bRequestFromCharacterImport);

            RemoveStipendAlarm();
            SetupStipendAlarm();
        }
        public override bool InRabbitHole()
        {
            try
            {
                Definition definition = InteractionDefinition as Definition;

                CareerLocation careerLocation = definition.mLocation;
                if (careerLocation == null)
                {
                    return(false);
                }

                TryDisablingCameraFollow(Actor);

                return(SchoolBooter.Enroll(Actor, definition.mName.Second, careerLocation));
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(Actor, Target, e);
                return(false);
            }
        }
Exemple #5
0
        protected bool AllowStandalone(CareerLocation location)
        {
            if (GetValue <AllowStandAloneOption, bool>())
            {
                return(true);
            }

            RabbitHole owner = location.Owner;

            if ((owner == null) || (owner.CareerLocations == null))
            {
                return(true);
            }

            foreach (CareerLocation loc in owner.CareerLocations.Values)
            {
                if (loc.Career == null)
                {
                    continue;
                }

                if (!loc.Career.IsPartTime)
                {
                    return(true);
                }
            }

            return(false);
        }
Exemple #6
0
        protected bool AcquireOccupation(CareerManager ths, AcquireOccupationParameters occupationParameters)
        {
            Occupation occupation;

            Sim createdSim = ths.mSimDescription.CreatedSim;

            CareerLocation  location   = occupationParameters.Location;
            OccupationNames newJobGuid = occupationParameters.TargetJob;

            if ((ths.mJob != null) && (location != null) && (ths.mJob.Guid == location.Career.Guid) && (ths.mJob.CareerLoc != location))
            {
                Career mJob = ths.mJob as Career;
                if ((mJob != null) && (mJob.TransferBetweenCareerLocations(location, false)))
                {
                    IncStat("Transferred");
                    return(true);
                }
            }

            if (!ths.TryGetNewCareer(newJobGuid, out occupation))
            {
                IncStat("TryGetNewCareer Fail");
                return(false);
            }

            if (ths.mJob != null)
            {
                if (createdSim != null)
                {
                    EventTracker.SendEvent(new TransferCareerEvent(createdSim, ths.mJob, occupation));
                }
                ths.mJob.LeaveJob(false, Career.LeaveJobReason.kTransfered);
            }

            EventTracker.SendEvent(EventTypeId.kCareerNewJob, createdSim);
            occupation.OwnerDescription        = ths.mSimDescription;
            occupation.mDateHired              = SimClock.CurrentTime();
            occupation.mAgeWhenJobFirstStarted = ths.mSimDescription.Age;
            occupation.SetAttributesForNewJob(location, occupationParameters.LotId, occupationParameters.CharacterImportRequest);
            EventTracker.SendEvent(new CareerEvent(EventTypeId.kEventCareerHired, occupation));
            EventTracker.SendEvent(new CareerEvent(EventTypeId.kEventCareerChanged, occupation));
            EventTracker.SendEvent(new CareerEvent(EventTypeId.kCareerDataChanged, occupation));
            occupation.RefreshMapTagForOccupation();
            ths.UpdateCareerUI();

            if ((createdSim != null) && createdSim.IsActiveSim)
            {
                HudController.SetInfoState(InfoState.Career);
            }

            IncStat("Job Acquired " + occupation.Guid);
            return(true);
        }
Exemple #7
0
        protected static void ChooseSchool(Sim sim)
        {
            List<ObjectPicker.HeaderInfo> headers = new List<ObjectPicker.HeaderInfo>();
            headers.Add(new ObjectPicker.HeaderInfo("NRaasSchooling:OptionColumn", "NRaasSchooling:OptionColumnTooltip", 230));

            List<ObjectPicker.RowInfo> rowInfo = new List<ObjectPicker.RowInfo>();
            foreach (Career career in CareerManager.CareerList)
            {
                if (career is SchoolElementary)
                {
                    if (!sim.SimDescription.Child) continue;
                }
                else if (career is SchoolHigh)
                {
                    if (!sim.SimDescription.Teen) continue;
                }
                else if (career is School)
                {
                    if ((!sim.SimDescription.Child) && (!sim.SimDescription.Teen)) continue;
                }
                else
                {
                    continue;
                }

                GreyedOutTooltipCallback greyedOutTooltipCallback = null;
                if (!career.CanAcceptCareer(sim.ObjectId, ref greyedOutTooltipCallback)) continue;

                CareerLocation location = Career.FindClosestCareerLocation(sim, career.Guid);
                if (location == null) continue;

                ObjectPicker.RowInfo item = new ObjectPicker.RowInfo(location, new List<ObjectPicker.ColumnInfo>());

                item.ColumnInfo.Add(new ObjectPicker.TextColumn(career.Name));

                rowInfo.Add(item);
            }

            List<ObjectPicker.TabInfo> tabInfo = new List<ObjectPicker.TabInfo>();
            tabInfo.Add(new ObjectPicker.TabInfo("shop_all_r2", Common.LocalizeEAString("Ui/Caption/ObjectPicker:All"), rowInfo));

            string buttonTrue = Common.LocalizeEAString("Ui/Caption/Global:Accept");
            string buttonFalse = Common.LocalizeEAString("Ui/Caption/ObjectPicker:Cancel");

            List<ObjectPicker.RowInfo> list = ObjectPickerDialog.Show(true, ModalDialog.PauseMode.PauseSimulator, Common.LocalizeEAString("NRaasSchooling:Title"), buttonTrue, buttonFalse, tabInfo, headers, 1, new Vector2(-1f, -1f), true);

            if ((list == null) || (list.Count == 0)) return;

            CareerLocation sel = list[0].Item as CareerLocation;
            if (sel == null) return;

            SchoolBooter.Enroll(sim, null, sel);
        }
        protected CareerLocation FindClosestCareerLocation(SimDescription s, OccupationNames careerName)
        {
            if (s.Household == null)
            {
                IncStat("No Household");
                return(null);
            }

            Career staticCareer = CareerManager.GetStaticCareer(careerName);

            if (staticCareer == null)
            {
                IncStat("Career Fail");
                return(null);
            }

            Lot lotHome = s.Household.LotHome;

            if (lotHome == null)
            {
                if (staticCareer.Locations.Count > 0x0)
                {
                    return(RandomUtil.GetRandomObjectFromList <CareerLocation>(staticCareer.Locations));
                }
                else
                {
                    IncStat("No Lot Home");
                    return(null);
                }
            }

            CareerLocation location         = null;
            float          bestDistance     = float.MaxValue;
            float          distanceToObject = 0f;

            foreach (CareerLocation location2 in staticCareer.Locations)
            {
                if (!GetLotOptions(location2.Owner.LotCurrent).AllowCastes(this, s))
                {
                    continue;
                }

                distanceToObject = lotHome.GetDistanceToObject(location2.Owner.RabbitHoleProxy);
                if (distanceToObject < bestDistance)
                {
                    location     = location2;
                    bestDistance = distanceToObject;
                }
            }

            return(location);
        }
Exemple #9
0
        protected override List <CareerLocation> GetPotentials()
        {
            List <CareerLocation> schools = new List <CareerLocation>();

            foreach (Career career in CareerManager.CareerList)
            {
                if (career is SchoolHigh)
                {
                    if (!Sim.Teen)
                    {
                        continue;
                    }
                }
                else if (career is SchoolElementary)
                {
                    if (!Sim.Child)
                    {
                        continue;
                    }
                }
                else
                {
                    continue;
                }

                if (!HasValue <ConsiderPublicOption, OccupationNames>(career.Guid))
                {
                    continue;
                }

                IncStat("Potential: " + career.Name);

                CareerLocation location = FindClosestCareerLocation(Sim, career.Guid);
                if (location == null)
                {
                    continue;
                }

                if (location.Owner == null)
                {
                    continue;
                }

                schools.Add(location);
            }

            return(schools);
        }
Exemple #10
0
            protected static bool UpdateCareer(Career career, CareerLocation location)
            {
                if (location.Career == null)
                {
                    return(false);
                }

                if (location.Career.Guid != career.Guid)
                {
                    return(false);
                }

                career.CareerLoc = location;
                if (!location.Workers.Contains(career.OwnerDescription))
                {
                    location.Workers.Add(career.OwnerDescription);
                }

                return(true);
            }
Exemple #11
0
        public void OnWorldLoadFinished()
        {
            foreach (CareerBooterElement element in sCareers)
            {
                Career staticCareer = CareerManager.GetStaticCareer(element.mCareer);
                if (staticCareer == null)
                {
                    continue;
                }

                string lotDesignator = null;

                ILotDesignator lotDesignatorClass = staticCareer as ILotDesignator;
                if (lotDesignatorClass != null)
                {
                    lotDesignator = lotDesignatorClass.LotDesignator;
                }

                foreach (RabbitHole hole in RabbitHole.GetRabbitHolesOfType(element.mType))
                {
                    if (!string.IsNullOrEmpty(lotDesignator))
                    {
                        if (hole.LotCurrent == null)
                        {
                            continue;
                        }

                        if (!hole.LotCurrent.Name.Contains(lotDesignator))
                        {
                            continue;
                        }
                    }

                    CareerLocation location = new CareerLocation(hole, staticCareer);
                    if (!hole.CareerLocations.ContainsKey((ulong)staticCareer.Guid))
                    {
                        hole.CareerLocations.Add((ulong)staticCareer.Guid, location);
                    }
                }
            }
        }
Exemple #12
0
        protected override bool PrivateSatisfies(ManagerCareer manager, SimDescription sim, Lot newLot, bool inspecting)
        {
            if (inspecting)
            {
                return(true);
            }

            if (sim.Occupation is Retired)
            {
                return(false);
            }

            CareerLocation location = Career.FindClosestCareerLocation(sim, mCareer);

            if (location == null)
            {
                return(false);
            }

            return(true);
        }
        protected override List <CareerLocation> GetPotentials()
        {
            List <CareerLocation> schools = new List <CareerLocation>();

            foreach (Career career in CareerManager.CareerList)
            {
                if (!(career is School))
                {
                    continue;
                }

                if (career.Level1 == null)
                {
                    continue;
                }

                if (career.Level1.DayLength != 0)
                {
                    continue;
                }

                if (!career.CareerAgeTest(Sim))
                {
                    continue;
                }

                CareerLocation location = FindClosestCareerLocation(Sim, career.Guid);
                if (location == null)
                {
                    continue;
                }

                if (location.Owner == null)
                {
                    continue;
                }
            }

            return(schools);
        }
Exemple #14
0
        public static bool Enroll(Sim sim, string unemployedName, CareerLocation location)
        {
            Occupation job        = sim.Occupation;
            Occupation retiredJob = sim.CareerManager.RetiredCareer;

            sim.CareerManager.mRetiredCareer = null;

            try
            {
                if (location.Career is School)
                {
                    sim.CareerManager.mJob = null;
                }

                if (!sim.AcquireOccupation(new AcquireOccupationParameters(location, true, false)))
                {
                    return(false);
                }

                NRaas.Gameplay.Careers.Unemployed unemployed = sim.Occupation as NRaas.Gameplay.Careers.Unemployed;
                if (unemployed != null)
                {
                    unemployed.UpdateName(unemployedName);
                }
                return(true);
            }
            finally
            {
                if (sim.CareerManager.mJob == null)
                {
                    sim.CareerManager.mJob = job;
                }

                sim.CareerManager.mRetiredCareer = retiredJob;
                sim.CareerManager.UpdateCareerUI();
            }
        }
 public CareerItem(Occupation career, CareerLocation location)
 {
     mCareer = career;
     mLocation = location;
 }
Exemple #16
0
        public static void OnAccepted(Sim actor, Sim target, string interaction, ActiveTopic topic, InteractionInstance i)
        {
            try
            {
                OccupationNames careerName = actor.Occupation.Guid;

                bool success = false;

                if (target.Occupation == null)
                {
                    Career career = CareerManager.GetStaticCareer(careerName);
                    if (career == null)
                    {
                        return;
                    }

                    string branch = actor.Occupation.CurLevelBranchName;

                    CareerLocation location = Career.FindClosestCareerLocation(target.SimDescription, careerName);
                    if (location == null)
                    {
                        return;
                    }

                    if (target.SimDescription.AcquireOccupation(new AcquireOccupationParameters(location, false, false)))
                    {
                        success = true;
                    }
                }
                else
                {
                    int level = 1;
                    if (target.Occupation.Guid == actor.Occupation.Guid)
                    {
                        Career actorCareer = actor.Occupation as Career;

                        CareerLevel curLevel = actorCareer.CurLevel;

                        while (curLevel.LastLevel != null)
                        {
                            curLevel = curLevel.LastLevel;
                            if (curLevel.NextLevels.Count > 1)
                            {
                                break;
                            }
                        }

                        if (curLevel != null)
                        {
                            level = curLevel.Level;
                        }
                    }

                    Career staticCareer = CareerManager.GetStaticCareer(careerName);
                    if ((target.Occupation != null) && (careerName != OccupationNames.Undefined) && (actor.Occupation.CurLevelBranchName != null) && (staticCareer != null))
                    {
                        target.Occupation.LeaveJob(Career.LeaveJobReason.kTransfered);

                        CareerLocation location = Career.FindClosestCareerLocation(target.SimDescription, staticCareer.Guid);
                        if (location != null)
                        {
                            CareerLevel careerLevel = null;
                            if (actor.Occupation.CurLevelBranchName != null)
                            {
                                Dictionary <int, CareerLevel> dictionary = null;
                                if (staticCareer.CareerLevels.TryGetValue(actor.Occupation.CurLevelBranchName, out dictionary))
                                {
                                    dictionary.TryGetValue(level, out careerLevel);
                                }
                            }

                            if (careerLevel == null)
                            {
                                foreach (Dictionary <int, CareerLevel> dictionary2 in staticCareer.CareerLevels.Values)
                                {
                                    if (dictionary2.TryGetValue(level, out careerLevel))
                                    {
                                        break;
                                    }
                                }
                            }

                            if (careerLevel != null)
                            {
                                Occupation staticOccupation = CareerManager.GetStaticOccupation(actor.Occupation.Guid);
                                if (staticOccupation != null)
                                {
                                    staticOccupation.DoTransferOfOccupation(target.SimDescription, careerLevel.BranchName, careerLevel.Level);
                                    success = true;
                                }
                            }
                        }
                    }
                }

                if (success)
                {
                    OmniCareer job = actor.Occupation as OmniCareer;
                    if (job != null)
                    {
                        job.AddToRecruits();
                    }
                }
            }
            catch (Exception e)
            {
                Common.Exception(actor, target, e);
            }
        }
Exemple #17
0
        public void OnWorldLoadFinished()
        {
            foreach (CareerBooterElement element in sCareers)
            {
                Career staticCareer = CareerManager.GetStaticCareer(element.mCareer);
                if (staticCareer == null) continue;

                string lotDesignator = null;

                ILotDesignator lotDesignatorClass = staticCareer as ILotDesignator;
                if (lotDesignatorClass != null)
                {
                    lotDesignator = lotDesignatorClass.LotDesignator;
                }

                foreach (RabbitHole hole in RabbitHole.GetRabbitHolesOfType(element.mType))
                {
                    if (!string.IsNullOrEmpty(lotDesignator))
                    {
                        if (hole.LotCurrent == null) continue;

                        if (!hole.LotCurrent.Name.Contains(lotDesignator)) continue;
                    }

                    CareerLocation location = new CareerLocation(hole, staticCareer);
                    if (!hole.CareerLocations.ContainsKey((ulong)staticCareer.Guid))
                    {
                        hole.CareerLocations.Add((ulong)staticCareer.Guid, location);
                    }
                }
            }
        }
Exemple #18
0
        protected static bool AcquireOccupation(CareerManager ths, AcquireOccupationParameters occupationParameters, bool prompt)
        {
            CareerLocation  location   = occupationParameters.Location;
            OccupationNames newJobGuid = occupationParameters.TargetJob;

            if ((ths.mJob != null) && (location != null) && (ths.mJob.Guid == location.Career.Guid) && (ths.mJob.CareerLoc != location))
            {
                Career mJob = ths.mJob as Career;
                return((mJob != null) && mJob.TransferBetweenCareerLocations(location, false));
            }

            Occupation occupation = null;

            if (!ths.TryGetNewCareer(newJobGuid, out occupation))
            {
                return(false);
            }

            if (occupation is Career)
            {
                if (location == null)
                {
                    return(false);
                }
            }

            Sim createdSim = ths.mSimDescription.CreatedSim;

            if (ths.mJob != null)
            {
                if (prompt)
                {
                    string newJobName = string.Empty;
                    if (!occupation.TryDisplayingGetHiredUi(location, ref occupationParameters, out newJobName))
                    {
                        return(false);
                    }

                    if (!Occupation.ShowYesNoCareerOptionDialog(Common.LocalizeEAString(ths.mSimDescription.IsFemale, "Gameplay/Careers/Career:ConfirmLeavingOldCareer", new object[] { ths.mSimDescription, occupation.CareerName, ths.mJob.CareerName })))
                    {
                        return(false);
                    }
                }

                if (createdSim != null)
                {
                    EventTracker.SendEvent(new TransferCareerEvent(createdSim, ths.mJob, occupation));
                }
                ths.mJob.LeaveJob(false, Career.LeaveJobReason.kTransfered);
            }

            if (newJobGuid == OccupationNames.AcademicCareer)
            {
                AcademicCareer.EnrollSimInAcademicCareer(ths.mSimDescription, ths.DegreeManager.EnrollmentAcademicDegreeName, ths.DegreeManager.EnrollmentCouseLoad);
            }
            else
            {
                EventTracker.SendEvent(EventTypeId.kCareerNewJob, createdSim);
                occupation.OwnerDescription        = ths.mSimDescription;
                occupation.mDateHired              = SimClock.CurrentTime();
                occupation.mAgeWhenJobFirstStarted = ths.mSimDescription.Age;

                occupation.SetAttributesForNewJob(location, occupationParameters.LotId, occupationParameters.CharacterImportRequest);

                EventTracker.SendEvent(new CareerEvent(EventTypeId.kEventCareerHired, occupation));
                EventTracker.SendEvent(new CareerEvent(EventTypeId.kEventCareerChanged, occupation));
                EventTracker.SendEvent(new CareerEvent(EventTypeId.kCareerDataChanged, occupation));
            }

            occupation.RefreshMapTagForOccupation();
            ths.UpdateCareerUI();

            if ((createdSim != null) && createdSim.IsActiveSim)
            {
                HudController.SetInfoState(InfoState.Career);
            }

            return(true);
        }
Exemple #19
0
        protected override bool PrivateUpdate(ScenarioFrame frame)
        {
            List <CareerLocation> schools = GetPotentials();

            if (schools.Count == 0)
            {
                IncStat("No Choice");
                return(false);
            }
            else
            {
                if ((Sim.CareerManager.School != null) &&
                    (schools.Contains(Sim.CareerManager.School.CareerLoc)))
                {
                    IncStat("Already Has");
                    return(false);
                }

                CareerLocation location = RandomUtil.GetRandomObjectFromList(schools);

                if ((Sim.CareerManager.School != null) &&
                    (location == Sim.CareerManager.School.CareerLoc))
                {
                    IncStat("Same");
                    return(false);
                }
                else
                {
                    Occupation job        = Sim.Occupation;
                    Occupation retiredJob = Sim.CareerManager.mRetiredCareer;

                    Sim.CareerManager.mJob           = null;
                    Sim.CareerManager.mRetiredCareer = null;

                    try
                    {
                        if (Sim.AcquireOccupation(new AcquireOccupationParameters(location, false, false)))
                        {
                            School school = Sim.CareerManager.School;
                            if (school != null)
                            {
                                school.mWhenCurLevelStarted = SimClock.Subtract(school.mWhenCurLevelStarted, TimeUnit.Days, 1);
                            }

                            return(true);
                        }
                        else
                        {
                            IncStat("Core Failure");
                            return(false);
                        }
                    }
                    catch (Exception e)
                    {
                        Common.DebugException(Sim, e);

                        IncStat("Exception Failure");
                        return(false);
                    }
                    finally
                    {
                        Sim.CareerManager.mJob           = job;
                        Sim.CareerManager.mRetiredCareer = retiredJob;
                    }
                }
            }
        }
Exemple #20
0
 public CareerItem(Occupation career, CareerLocation location)
 {
     mCareer   = career;
     mLocation = location;
 }
Exemple #21
0
 public static void FixCareer(Occupation job, bool allowDrop)
 {
     try{
         if (job == null)
         {
             return;
         }
         if (job.Coworkers != null)
         {
             for (int i = job.Coworkers.Count - 1; i >= 0; i--)
             {
                 SimDescription coworker = job.Coworkers[i];
                 if ((!IsValidCoworker(coworker, job is School)) || (coworker == job.OwnerDescription))
                 {
                     job.Coworkers.RemoveAt(i);
                 }
             }
         }
         if ((allowDrop) && (job is Career))
         {
             bool replace = (false);
             if (job.CareerLoc == null)
             {
                 replace = (true);
             }
             else
             {
                 RabbitHole hole = job.CareerLoc.Owner;
                 if (hole == null)
                 {
                     replace = (true);
                 }
                 else
                 {
                     RabbitHole proxy = hole.RabbitHoleProxy;
                     if (proxy == null)
                     {
                         replace = (true);
                     }
                     else
                     {
                         if ((proxy.EnterSlots == null) || (proxy.EnterSlots.Count == 0) ||
                             (proxy.ExitSlots == null) || (proxy.ExitSlots.Count == 0))
                         {
                             replace = (true);
                         }
                     }
                 }
             }
             if (replace)
             {
                 SimDescription me         = job.OwnerDescription;
                 Occupation     retiredJob = me.CareerManager.mRetiredCareer;
                 try{
                     CareerLocation location = Sims3.Gameplay.Careers.Career.FindClosestCareerLocation(me, job.Guid);
                     if (location != null)
                     {
                         if (job.CareerLoc != null)
                         {
                             job.CareerLoc.Workers.Remove(me);
                         }
                         job.CareerLoc = location;
                         location.Workers.Add(me);
                     }
                     else
                     {
                         job.LeaveJobNow(Career.LeaveJobReason.kJobBecameInvalid);
                     }
                 }finally{
                     me.CareerManager.mRetiredCareer = retiredJob;
                 }
             }
         }
     }catch (Exception exception) {
         //  Get stack trace for the exception. with source file information
         var st = new StackTrace(exception, true);
         //  Get the top stack frame
         var frame = st.GetFrame(0);
         //  Get the line number from the stack frame
         var line = frame.GetFileLineNumber();
         Alive.WriteLog(exception.Message + "\n\n" +
                        exception.StackTrace + "\n\n" +
                        exception.Source + "\n\n" +
                        line);
     }finally{
     }
 }
Exemple #22
0
        public void OnWorldLoadFinished()
        {
            try
            {
                Managers.ManagerCareer.RetiredLocation = null;

                Career staticCareer = CareerManager.GetStaticCareer(CareerGuid);
                if (staticCareer == null) return;

                foreach (RabbitHole hole in RabbitHole.GetRabbitHolesOfType(RabbitHoleType.CityHall))
                {
                    CareerLocation location = new CareerLocation(hole, staticCareer);
                    if (!hole.CareerLocations.ContainsKey((ulong)staticCareer.Guid))
                    {
                        hole.CareerLocations.Add((ulong)staticCareer.Guid, location);

                        if (location.Career != null)
                        {
                            Managers.ManagerCareer.RetiredLocation = location;
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                Common.Exception("Retired WorldLoadFinished", exception);
            }
        }
Exemple #23
0
        protected override List <CareerLocation> GetPotentials()
        {
            List <OccupationNames> careers = new List <OccupationNames>();
            bool dream = Careers.GetPotentialCareers(this, Sim, careers, false);

            List <CareerLocation> dreamSchools = new List <CareerLocation>();

            foreach (OccupationNames career in careers)
            {
                Career staticJob = CareerManager.GetStaticCareer(career);
                if (staticJob == null)
                {
                    continue;
                }

                CareerLocation jobLocation = FindClosestCareerLocation(Sim, staticJob.Guid);
                if (jobLocation == null)
                {
                    continue;
                }

                if (jobLocation.Owner == null)
                {
                    continue;
                }

                if (jobLocation.Owner.CareerLocations == null)
                {
                    continue;
                }

                foreach (CareerLocation schoolLoc in jobLocation.Owner.CareerLocations.Values)
                {
                    School staticSchool = schoolLoc.Career as School;
                    if (staticSchool == null)
                    {
                        continue;
                    }

                    if (HasValue <DisallowCareerOption, OccupationNames>(Sim, staticSchool.Guid))
                    {
                        continue;
                    }

                    if (HasValue <PublicAssignSchoolScenario.ConsiderPublicOption, OccupationNames>(staticSchool.Guid))
                    {
                        continue;
                    }

                    // Disallow home schooling at this point
                    if ((staticSchool.Level1 == null) || (staticSchool.Level1.DayLength == 0))
                    {
                        continue;
                    }

                    if (staticSchool is SchoolHigh)
                    {
                        if (career == OccupationNames.SchoolHigh)
                        {
                            continue;
                        }

                        if (!Sim.Teen)
                        {
                            continue;
                        }
                    }
                    else if (staticSchool is SchoolElementary)
                    {
                        if (career == OccupationNames.SchoolElementary)
                        {
                            continue;
                        }

                        if (!Sim.Child)
                        {
                            continue;
                        }
                    }
                    else
                    {
                        if (!staticJob.CareerAgeTest(Sim))
                        {
                            continue;
                        }
                    }

                    CareerLocation location = FindClosestCareerLocation(Sim, staticSchool.Guid);
                    if (location == null)
                    {
                        continue;
                    }

                    dreamSchools.Add(location);
                }
            }

            AddStat("Dream Schools", dreamSchools.Count);

            if ((GetValue <PromptToAssignSchoolOption, bool>()) && (Careers.MatchesAlertLevel(Sim)))
            {
                List <FindJobScenario.JobItem> items = new List <FindJobScenario.JobItem>();

                bool found = false;

                foreach (Career career in CareerManager.CareerList)
                {
                    if (career is SchoolHigh)
                    {
                        if (!Sim.Teen)
                        {
                            continue;
                        }

                        if (career.Guid != OccupationNames.SchoolHigh)
                        {
                            found = true;
                        }
                    }
                    else if (career is SchoolElementary)
                    {
                        if (!Sim.Child)
                        {
                            continue;
                        }

                        if (career.Guid != OccupationNames.SchoolElementary)
                        {
                            found = true;
                        }
                    }
                    else if (career is School)
                    {
                        if (!career.CareerAgeTest(Sim))
                        {
                            continue;
                        }

                        if ((career.Level1 != null) && (career.Level1.DayLength != 0))
                        {
                            found = true;
                        }
                    }
                    else
                    {
                        continue;
                    }

                    if (HasValue <DisallowCareerOption, OccupationNames>(Sim, career.Guid))
                    {
                        continue;
                    }

                    if (HasValue <PublicAssignSchoolScenario.ConsiderPublicOption, OccupationNames>(career.Guid))
                    {
                        continue;
                    }

                    CareerLocation location = FindClosestCareerLocation(Sim, career.Guid);
                    if (location == null)
                    {
                        continue;
                    }

                    items.Add(new FindJobScenario.JobItem(location.Career, dreamSchools.Contains(location)));
                }

                FindJobScenario.JobItem choice = null;
                if ((items.Count > 1) && (found))
                {
                    if (AcceptCancelDialog.Show(ManagerSim.GetPersonalInfo(Sim, Common.Localize("RichAssignSchool:Prompt", Sim.IsFemale))))
                    {
                        choice = new CommonSelection <FindJobScenario.JobItem>(Common.Localize("ChooseCareer:Header", Sim.IsFemale), Sim.FullName, items, new FindJobScenario.JobPreferenceColumn()).SelectSingle();
                    }
                }
                else if (items.Count == 1)
                {
                    Career career = items[0].Value as Career;

                    // Do not auto-enroll sims in home-schooling
                    if ((career.Level1 != null) && (career.Level1.DayLength != 0))
                    {
                        choice = items[0];
                    }
                }

                if (choice != null)
                {
                    SetValue <ManualSchoolOption, bool>(Sim, true);

                    dreamSchools.Clear();

                    CareerLocation location = FindClosestCareerLocation(Sim, choice.Value.Guid);
                    if (location != null)
                    {
                        dreamSchools.Add(location);
                    }
                }
            }

            if (dreamSchools.Count == 0)
            {
                IncStat("Random");

                foreach (Career career in CareerManager.CareerList)
                {
                    if (career is SchoolHigh)
                    {
                        if (!Sim.Teen)
                        {
                            continue;
                        }
                    }
                    else if (career is SchoolElementary)
                    {
                        if (!Sim.Child)
                        {
                            continue;
                        }
                    }
                    else
                    {
                        continue;
                    }

                    if (HasValue <DisallowCareerOption, OccupationNames>(Sim, career.Guid))
                    {
                        continue;
                    }

                    if (HasValue <PublicAssignSchoolScenario.ConsiderPublicOption, OccupationNames>(career.Guid))
                    {
                        continue;
                    }

                    CareerLocation location = FindClosestCareerLocation(Sim, career.Guid);
                    if (location == null)
                    {
                        continue;
                    }

                    if (location.Owner == null)
                    {
                        continue;
                    }

                    dreamSchools.Add(location);
                }

                /*
                 * if (dreamSchools.Count < 4)
                 * {
                 *  IncStat("Too Few");
                 *
                 *  dreamSchools.Clear();
                 * }*/
            }

            return(dreamSchools);
        }
Exemple #24
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);
        }
Exemple #25
0
 public Definition(string s, CareerLocation location)
 {
     mName     = new Pair <string, string>(s, s);
     mLocation = location;
 }
Exemple #26
0
        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);
            }
        }
Exemple #27
0
            protected static bool UpdateCareer(Career career, CareerLocation location)
            {
                if (location.Career == null) return false;

                if (location.Career.Guid != career.Guid) return false;

                career.CareerLoc = location;
                if (!location.Workers.Contains(career.OwnerDescription))
                {
                    location.Workers.Add(career.OwnerDescription);
                }

                return true;
            }
Exemple #28
0
 public Definition(Pair <string, string> s, CareerLocation location)
 {
     mName     = s;
     mLocation = location;
 }
Exemple #29
0
        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);
        }
Exemple #30
0
        public static void FixCareer(Occupation job, bool allowDrop, Logger log)
        {
            if (job == null)
            {
                return;
            }

            if (job.Coworkers != null)
            {
                for (int i = job.Coworkers.Count - 1; i >= 0; i--)
                {
                    SimDescription coworker = job.Coworkers[i];

                    if ((!IsValidCoworker(coworker, job is School)) || (coworker == job.OwnerDescription))
                    {
                        job.Coworkers.RemoveAt(i);

                        if (coworker == null)
                        {
                            if (log != null)
                            {
                                log(" Bad Coworker " + job.CareerName + " - <Invalid>");
                            }
                        }
                        else
                        {
                            if (log != null)
                            {
                                log(" Bad Coworker " + job.CareerName + " - " + coworker.FullName);
                            }
                        }
                    }
                }
            }

            if ((allowDrop) && (job is Career))
            {
                bool replace = false;

                if (job.CareerLoc == null)
                {
                    if (log != null)
                    {
                        log(" Bad Location " + job.CareerName + " - " + job.GetType().ToString());
                    }
                    replace = true;
                }
                else
                {
                    RabbitHole hole = job.CareerLoc.Owner;
                    if (hole == null)
                    {
                        if (log != null)
                        {
                            log(" Missing Rabbithole " + job.CareerName + " - " + job.GetType().ToString());
                        }
                        replace = true;
                    }
                    else
                    {
                        RabbitHole proxy = hole.RabbitHoleProxy;
                        if (proxy == null)
                        {
                            if (log != null)
                            {
                                log(" Missing Proxy " + job.CareerName + " - " + job.GetType().ToString());
                            }
                            replace = true;
                        }
                        else
                        {
                            if ((proxy.EnterSlots == null) || (proxy.EnterSlots.Count == 0) ||
                                (proxy.ExitSlots == null) || (proxy.ExitSlots.Count == 0))
                            {
                                if (log != null)
                                {
                                    log(" Missing Slots " + job.CareerName + " - " + job.GetType().ToString());
                                }
                                replace = true;
                            }
                        }
                    }
                }

                if (replace)
                {
                    SimDescription me = job.OwnerDescription;

                    Occupation retiredJob = me.CareerManager.mRetiredCareer;

                    try
                    {
                        CareerLocation location = Sims3.Gameplay.Careers.Career.FindClosestCareerLocation(me, job.Guid);
                        if (location != null)
                        {
                            if (log != null)
                            {
                                log(" Location Replaced " + me.FullName);
                            }

                            if (job.CareerLoc != null)
                            {
                                job.CareerLoc.Workers.Remove(me);
                            }

                            job.CareerLoc = location;

                            location.Workers.Add(me);
                        }
                        else
                        {
                            if (log != null)
                            {
                                log(" Career Dropped " + me.FullName);
                            }

                            job.LeaveJobNow(Career.LeaveJobReason.kJobBecameInvalid);
                        }
                    }
                    finally
                    {
                        me.CareerManager.mRetiredCareer = retiredJob;
                    }
                }
            }
        }