예제 #1
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);
            }
        }
예제 #2
0
            public void SetDefaults(OccupationNames name)
            {
                Career career = CareerManager.GetStaticCareer(name);

                if (career != null)
                {
                    foreach (string branch in career.CareerLevels.Keys)
                    {
                        if (branch != mBranch)
                        {
                            continue;
                        }

                        foreach (KeyValuePair <int, CareerLevel> level in career.CareerLevels[branch])
                        {
                            if (level.Key == mLevel)
                            {
                                CareerLevelSettings settings = new CareerLevelSettings();
                                settings.mBranch         = mBranch;
                                settings.mLevel          = mLevel;
                                settings.mPayPerHourBase = level.Value.PayPerHourBase;
                                settings.mCarpoolType    = level.Value.CarpoolType;

                                mDefaults = settings;
                            }
                        }
                    }
                }
            }
예제 #3
0
        // this could be further broken down into another class (IntegerSettingOption) but not right now
        protected override OptionResult Run(GameHitParameters <GameObject> parameters)
        {
            OptionResult result = base.Run(parameters);

            if (result != OptionResult.Failure)
            {
                foreach (OccupationNames name in base.mPicks)
                {
                    string defaultText = string.Empty;
                    if (name != OccupationNames.Any)
                    {
                        NRaas.CareerSpace.PersistedSettings.CareerSettings settings = NRaas.Careers.Settings.GetCareerSettings(name, true);

                        defaultText = settings.mMaxCoworkers.ToString();
                    }

                    string text = StringInputDialog.Show(Name, Common.Localize(GetTitlePrefix() + ":Prompt", false), defaultText);

                    if (string.IsNullOrEmpty(text))
                    {
                        return(OptionResult.Failure);
                    }

                    int value;
                    if (!int.TryParse(text, out value))
                    {
                        SimpleMessageDialog.Show(Name, Common.Localize("InputError:Numeric"));
                        return(OptionResult.Failure);
                    }

                    if (name == OccupationNames.Any)
                    {
                        foreach (Career career in CareerManager.CareerList)
                        {
                            PersistedSettings.CareerSettings settings = NRaas.Careers.Settings.GetCareerSettings(career.Guid, true);

                            settings.mMaxCoworkers = value;

                            NRaas.Careers.Settings.SetCareerData(settings);
                        }

                        Common.Notify(GetTitlePrefix() + " " + Common.Localize("Selection:All") + " " + value);
                    }
                    else
                    {
                        PersistedSettings.CareerSettings settings = NRaas.Careers.Settings.GetCareerSettings(name, true);
                        settings.mMaxCoworkers = value;

                        NRaas.Careers.Settings.SetCareerData(settings);

                        Common.Notify(GetTitlePrefix() + " " + CareerManager.GetStaticCareer(name).Name + " " + value);
                    }
                }

                Common.Notify(Common.Localize("Generic:Success"));
                return(OptionResult.SuccessLevelDown);
            }

            return(result);
        }
예제 #4
0
        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);
        }
예제 #5
0
파일: Unemployed.cs 프로젝트: yakoder/NRaas
        public override void OnStartup()
        {
            base.OnStartup();

            if (mOriginalLevelData == null)
            {
                Unemployed staticCareer = CareerManager.GetStaticCareer(Guid) as Unemployed;
                if (staticCareer != null)
                {
                    mOriginalLevelData = staticCareer.mOriginalLevelData;
                }
            }

            UpdateName(mName);
        }
예제 #6
0
            public void SetDefaults()
            {
                Career career = CareerManager.GetStaticCareer(mName);

                if (career != null)
                {
                    CareerSettings settings = new CareerSettings();
                    settings.mName = mName;

                    settings.mMinCoworkers = career.SharedData.MinCoworkers;
                    settings.mMaxCoworkers = career.SharedData.MaxCoworkers;

                    mDefaults = settings;
                }
            }
예제 #7
0
        public void SetCareerData(CareerSettings settings)
        {
            if (settings != null)
            {
                if (settings.mName == OccupationNames.Any)
                {
                    foreach (Career career in CareerManager.CareerList)
                    {
                        career.SharedData.MinCoworkers = settings.mMinCoworkers;
                        career.SharedData.MaxCoworkers = settings.mMaxCoworkers;
                    }
                }
                else
                {
                    Career career = CareerManager.GetStaticCareer(settings.mName);
                    if (career != null)
                    {
                        career.SharedData.MinCoworkers = settings.mMinCoworkers;
                        career.SharedData.MaxCoworkers = settings.mMaxCoworkers;

                        foreach (string branch in career.CareerLevels.Keys)
                        {
                            foreach (KeyValuePair <int, Sims3.Gameplay.Careers.CareerLevel> levelData in career.CareerLevels[branch])
                            {
                                CareerLevelSettings levelSettings = settings.GetSettingsForLevel(branch, levelData.Key, false);

                                if (levelSettings != null)
                                {
                                    levelData.Value.PayPerHourBase = levelSettings.mPayPerHourBase;
                                    levelData.Value.CarpoolType    = levelSettings.mCarpoolType;
                                }
                            }
                        }
                    }
                }

                foreach (Sim sim in LotManager.Actors)
                {
                    if (sim.Occupation != null)
                    {
                        sim.Occupation.RescheduleCarpool();
                    }
                }
            }
        }
예제 #8
0
        public override bool OnLoadFixup(bool isQuitCareer)
        {
            try
            {
                SchoolElementaryEx staticCareer = CareerManager.GetStaticCareer(Guid) as SchoolElementaryEx;
                if (staticCareer != null)
                {
                    mOther = staticCareer.mOther;
                }

                return(base.OnLoadFixup(isQuitCareer));
            }
            catch (Exception e)
            {
                Common.Exception(OwnerDescription, e);
                return(false);
            }
        }
예제 #9
0
            public void OnPreLoad()
            {
                try
                {
                    Career music = CareerManager.GetStaticCareer(OccupationNames.Music);
                    if (music == null)
                    {
                        return;
                    }

                    BooterLogger.AddTrace("Replace Metric Music Skill");

                    foreach (Dictionary <int, CareerLevel> value in music.CareerLevels.Values)
                    {
                        foreach (CareerLevel level in value.Values)
                        {
                            List <PerfMetric> metrics = new List <PerfMetric>(level.Metrics);
                            foreach (PerfMetric metric in metrics)
                            {
                                MetricSkillX skillMetric = metric as MetricSkillX;
                                if (skillMetric == null)
                                {
                                    continue;
                                }

                                if (skillMetric.SkillGuid == SkillNames.Guitar)
                                {
                                    BooterLogger.AddTrace("Metric Replaced: " + level.BranchName + " " + level.Level);

                                    level.Metrics.Remove(metric);

                                    level.Metrics.Add(new MetricMusicSkill(skillMetric));
                                }
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    Common.Exception("OnPreLoad", e);
                }
            }
예제 #10
0
            public void RevertToDefault()
            {
                if (mDefaults != null)
                {
                    Career career = CareerManager.GetStaticCareer(mName);
                    if (career != null)
                    {
                        career.SharedData.MinCoworkers = mDefaults.mMinCoworkers;
                        career.SharedData.MaxCoworkers = mDefaults.mMaxCoworkers;
                    }

                    foreach (KeyValuePair <string, Dictionary <int, CareerLevelSettings> > settings in mLevelSettings)
                    {
                        foreach (KeyValuePair <int, CareerLevelSettings> settings2 in settings.Value)
                        {
                            settings2.Value.RevertToDefaults(mName);
                        }
                    }
                }
            }
예제 #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);
                    }
                }
            }
        }
예제 #12
0
        protected override void Perform(BooterHelper.BootFile file, XmlDbRow row)
        {
            string toneName = row.GetString("ToneName");

            if (string.IsNullOrEmpty(toneName))
            {
                BooterLogger.AddError("Tone found with no name");
                return;
            }

            Type classType = row.GetClassType("FullClassName");

            if (classType == null)
            {
                BooterLogger.AddError("Tone: " + toneName + " FullClassName no match");
                return;
            }

            string guid = row.GetString("CareerGuid");

            OccupationNames careerGuid = OccupationNames.Undefined;

            ParserFunctions.TryParseEnum <OccupationNames>(guid, out careerGuid, OccupationNames.Undefined);

            if (careerGuid == OccupationNames.Undefined)
            {
                careerGuid = unchecked ((OccupationNames)ResourceUtils.HashString64(guid));
            }

            Career staticCareer = CareerManager.GetStaticCareer(careerGuid);

            if (staticCareer == null)
            {
                BooterLogger.AddError("Tone: " + toneName + " CareerGuid no match");
                return;
            }

            staticCareer.SharedData.ToneDefinitions.Add(new CareerBooterToneDefinition(row, classType));
        }
예제 #13
0
        public List <CareerLevelItem> GetLevelOptions(OccupationNames career)
        {
            List <CareerLevelItem> results = new List <CareerLevelItem>();

            Career career2 = CareerManager.GetStaticCareer(career);

            if (career2 == null)
            {
                return(results);
            }

            results.Add(new CareerLevelItem(new LevelData(career, string.Empty, -1), Common.Localize("Selection:All"), ThumbnailKey.kInvalidThumbnailKey));

            foreach (KeyValuePair <string, Dictionary <int, Sims3.Gameplay.Careers.CareerLevel> > staticData in career2.CareerLevels)
            {
                foreach (KeyValuePair <int, Sims3.Gameplay.Careers.CareerLevel> levelStaticData in staticData.Value)
                {
                    results.Add(new CareerLevelItem(new LevelData(career, staticData.Key, levelStaticData.Key), career2.Name + " - " + levelStaticData.Value.BranchName + " - " + Common.LocalizeEAString(false, levelStaticData.Value.mName) + " (" + EAText.GetNumberString(levelStaticData.Key) + ")", new ThumbnailKey(ResourceKey.CreatePNGKey(career2.CareerIconColored, ResourceUtils.ProductVersionToGroupId(ProductVersion.BaseGame)), ThumbnailSize.Medium)));
                }
            }

            return(results);
        }
예제 #14
0
 public void SetCareerData(CareerSettings settings)
 {
     if (settings != null)
     {
         if (settings.mName == OccupationNames.Any)
         {
             foreach (Career career in CareerManager.CareerList)
             {
                 career.SharedData.MinCoworkers = settings.minCoworkers;
                 career.SharedData.MaxCoworkers = settings.maxCoworkers;
             }
         }
         else
         {
             Career career = CareerManager.GetStaticCareer(settings.mName);
             if (career != null)
             {
                 career.SharedData.MinCoworkers = settings.minCoworkers;
                 career.SharedData.MaxCoworkers = settings.maxCoworkers;
             }
         }
     }
 }
예제 #15
0
            public void RevertToDefaults(OccupationNames name)
            {
                Career career = CareerManager.GetStaticCareer(name);

                if (career != null && mDefaults != null)
                {
                    foreach (string branch in career.CareerLevels.Keys)
                    {
                        if (branch != mBranch)
                        {
                            continue;
                        }

                        foreach (KeyValuePair <int, CareerLevel> level in career.CareerLevels[branch])
                        {
                            if (level.Key == mLevel)
                            {
                                level.Value.PayPerHourBase = mDefaults.mPayPerHourBase;
                                level.Value.CarpoolType    = mDefaults.mCarpoolType;
                            }
                        }
                    }
                }
            }
예제 #16
0
        // this could be further broken down into another class (IntegerSettingOption) but not right now
        protected override OptionResult Run(GameHitParameters <GameObject> parameters)
        {
            OptionResult result = base.Run(parameters);

            if (result != OptionResult.Failure)
            {
                string defaultPay = string.Empty;
                if (base.mPicks.Count == 1)
                {
                    CareerLevelSettingOption.LevelData data = base.mPicks[0];
                    if (data.mLevel != -1)
                    {
                        Career career = CareerManager.GetStaticCareer(data.mCareer);

                        if (career != null)
                        {
                            defaultPay = career.CareerLevels[data.mBranchName][data.mLevel].PayPerHourBase.ToString();
                        }
                    }
                }
                string text = StringInputDialog.Show(Name, Common.Localize(GetTitlePrefix() + ":Prompt", false), defaultPay); // def

                if (string.IsNullOrEmpty(text))
                {
                    return(OptionResult.Failure);
                }

                int value;
                if (!int.TryParse(text, out value))
                {
                    SimpleMessageDialog.Show(Name, Common.Localize("InputError:Numeric"));
                    return(OptionResult.Failure);
                }

                foreach (CareerLevelSettingOption.LevelData level in base.mPicks)
                {
                    if (level.mLevel == -1)
                    {
                        foreach (Career career in CareerManager.CareerList)
                        {
                            foreach (string branch in career.CareerLevels.Keys)
                            {
                                foreach (KeyValuePair <int, Sims3.Gameplay.Careers.CareerLevel> levelData in career.CareerLevels[branch])
                                {
                                    PersistedSettings.CareerSettings      settings      = NRaas.Careers.Settings.GetCareerSettings(level.mCareer, true);
                                    PersistedSettings.CareerLevelSettings levelSettings = settings.GetSettingsForLevel(level.mBranchName, level.mLevel, true);
                                    levelSettings.mPayPerHourBase = value;

                                    levelData.Value.PayPerHourBase = value;
                                }
                            }
                        }
                    }
                    else
                    {
                        PersistedSettings.CareerSettings      settings      = NRaas.Careers.Settings.GetCareerSettings(level.mCareer, true);
                        PersistedSettings.CareerLevelSettings levelSettings = settings.GetSettingsForLevel(level.mBranchName, level.mLevel, true);
                        levelSettings.mPayPerHourBase = value;

                        NRaas.Careers.Settings.SetCareerData(settings);
                    }
                }

                Common.Notify(Common.Localize("Generic:Success"));
                return(OptionResult.SuccessLevelDown);
            }

            return(result);
        }
예제 #17
0
            protected override bool Allow(OccupationNames value)
            {
                School school = CareerManager.GetStaticCareer(value) as School;

                return(school != null);
            }
예제 #18
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);
            }
        }
예제 #19
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);
            }
        }
예제 #20
0
            public void LoadCareer(BooterHelper.BootFile file, XmlDbRow row)
            {
                BooterHelper.DataBootFile dataFile = file as BooterHelper.DataBootFile;
                if (dataFile == null)
                {
                    return;
                }

                string careerName = row.GetString("CareerName");

                if (careerName == null)
                {
                    BooterLogger.AddError(file.ToString() + ": No CareerName");
                }
                else
                {
                    Type classType = row.GetClassType("FullClassName");
                    if (classType != null)
                    {
                        string key = row.GetString("TableName");

                        XmlDbTable levelTable = dataFile.GetTable(key);
                        if (levelTable != null)
                        {
                            foreach (XmlDbRow levelRow in levelTable.Rows)
                            {
                                XmlDbData.XmlDbRowFast level = levelRow as XmlDbData.XmlDbRowFast;
                                if (level == null)
                                {
                                    continue;
                                }

                                if (!level.Exists("DowntownWakeupTime"))
                                {
                                    level.mData.Add("DowntownWakeupTime", level.GetString("WakeupTime"));
                                }

                                if (!level.Exists("DowntownStartTime"))
                                {
                                    level.mData.Add("DowntownStartTime", level.GetString("StartTime"));
                                }

                                if (!level.Exists("DowntownDayLength"))
                                {
                                    level.mData.Add("DowntownDayLength", level.GetString("DayLength"));
                                }
                            }

                            Type[] types  = new Type[] { typeof(XmlDbRow), typeof(XmlDbTable), typeof(XmlDbTable) };
                            Career career = null;

                            try
                            {
                                career = classType.GetConstructor(types).Invoke(new object[] { row, levelTable, null }) as Career;
                            }
                            catch (Exception e)
                            {
                                BooterLogger.AddError(careerName + ": Constructor Fail " + row.GetString("FullClassName"));

                                Common.Exception(careerName + ": Constructor Fail " + row.GetString("FullClassName"), e);
                                return;
                            }

                            if (career != null)
                            {
                                if (mCareerEventsFile.IsValid)
                                {
                                    XmlDbTable table3 = mCareerEventsFile.GetTable(key);
                                    if (table3 != null)
                                    {
                                        LoadCareerEvents(career, mCareerEventsFile, table3);
                                    }
                                }

                                career.mCareerGuid = unchecked ((OccupationNames)ResourceUtils.HashString64(row.GetString("AltGuid")));

                                if (career.Guid == OccupationNames.Undefined)
                                {
                                    BooterLogger.AddError(careerName + ": No AltGuid");
                                }
                                else if (CareerManager.GetStaticCareer(career.mCareerGuid) != null)
                                {
                                    BooterLogger.AddError(careerName + ": Duplicate GUID");
                                }
                                else
                                {
                                    RabbitHoleType type = RabbitHoleType.None;
                                    ParserFunctions.TryParseEnum <RabbitHoleType>(row.GetString("RabbitholeType"), out type, RabbitHoleType.None);
                                    if (type != RabbitHoleType.None)
                                    {
                                        sCareers.Add(new CareerBooterElement(career.Guid, type));

                                        CareerManager.AddStaticOccupation(career);

                                        BooterLogger.AddTrace(careerName + ": Added to Rabbithole " + type);
                                    }
                                    else
                                    {
                                        BooterLogger.AddError(careerName + ": Unknown Rabbithole");
                                    }
                                }
                            }
                            else
                            {
                                BooterLogger.AddError(careerName + ": Constructor Fail " + row.GetString("FullClassName"));
                            }
                        }
                        else
                        {
                            BooterLogger.AddError(careerName + ": No TableName");
                        }
                    }
                    else
                    {
                        BooterLogger.AddError(careerName + ": Invalid FullClassName " + row.GetString("FullClassName"));
                    }
                }
            }
예제 #21
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);
        }