コード例 #1
0
        public static bool Perform()
        {
            try
            {
                if (!GameUtils.IsInstalled(ProductVersion.EP2))
                {
                    return(true);
                }

                if (EventTracker.Instance == null)
                {
                    return(false);
                }

                if (EventTracker.Instance.mListeners == null)
                {
                    return(false);
                }

                // Required to stop a hang when an inactive firefighter reaches level 10

                Dictionary <ulong, List <EventListener> > dictionary;
                if (!EventTracker.Instance.mListeners.TryGetValue((ulong)EventTypeId.kActiveCareerAdvanceLevel, out dictionary))
                {
                    return(false);
                }

                foreach (List <EventListener> list in dictionary.Values)
                {
                    if (list == null)
                    {
                        continue;
                    }

                    foreach (EventListener listener in list)
                    {
                        if (listener == null)
                        {
                            continue;
                        }

                        DelegateListener delListener = listener as DelegateListener;
                        if (delListener != null)
                        {
                            RewardsManager.OccupationRewardInfo target = delListener.mProcessEvent.Target as RewardsManager.OccupationRewardInfo;
                            if ((target != null) && (delListener.mProcessEvent != null))
                            {
                                delListener.mProcessEvent = new Middleman(delListener.mProcessEvent).OnEvent;
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Common.Exception("DisableRewardCeremonies", e);
            }

            return(true);
        }
コード例 #2
0
ファイル: ChangeCareerLevel.cs プロジェクト: yakoder/NRaas
        protected override bool Run(SimDescription me, bool singleSelection)
        {
            Sims3.Gameplay.Careers.Career career = me.Occupation as Sims3.Gameplay.Careers.Career;
            if (career != null)
            {
                List <CareerLevel> levels = AllLevels(career);
                if ((levels == null) || (levels.Count == 0))
                {
                    return(false);
                }

                List <Item> allOptions = new List <Item>();
                foreach (CareerLevel level in levels)
                {
                    allOptions.Add(new Item(me, level));
                }

                Item choice = new CommonSelection <Item>(Name, me.FullName, allOptions).SelectSingle();
                if (choice == null)
                {
                    return(false);
                }

                List <CareerLevel> order = null;
                if (choice.mLevel.Level < me.Occupation.CareerLevel)
                {
                    order = LevelsBetween(choice.mLevel, career.CurLevel, true);
                }
                else
                {
                    order = LevelsBetween(career.CurLevel, choice.mLevel, false);
                }

                if (order.Count == 0)
                {
                    List <CareerLevel> oldBranches = AllBranches(career.CurLevel);
                    List <CareerLevel> newBranches = AllBranches(choice.mLevel);

                    CareerLevel common = null;
                    foreach (CareerLevel branch in newBranches)
                    {
                        if (oldBranches.Contains(branch))
                        {
                            common = branch;
                            break;
                        }
                    }

                    if (common != null)
                    {
                        order.AddRange(LevelsBetween(common, career.CurLevel, true));
                        order.AddRange(LevelsBetween(common, choice.mLevel, false));
                    }
                }

                foreach (CareerLevel level in order)
                {
                    if (career.CurLevel == level)
                    {
                        continue;
                    }

                    if (career.CurLevel.LastLevel == level)
                    {
                        career.DemoteSim();
                    }
                    else
                    {
                        Promote(career, level);
                    }
                }
                return(true);
            }
            else
            {
                XpBasedCareer xpCareer = me.Occupation as XpBasedCareer;
                if (xpCareer != null)
                {
                    List <Item> allOptions = new List <Item>();
                    for (int level = 1; level <= xpCareer.HighestLevel; level++)
                    {
                        allOptions.Add(new Item(xpCareer.LevelJobTitle(level), level));
                    }

                    Item choice = new CommonSelection <Item>(Name, me.FullName, allOptions).SelectSingle();
                    if (choice == null)
                    {
                        return(false);
                    }

                    if (choice.mXPLevel < me.Occupation.CareerLevel)
                    {
                        xpCareer.mLevel = choice.mXPLevel;
                        xpCareer.mXp    = 0;
                    }
                    else
                    {
                        Dictionary <DelegateListener, ProcessEventDelegate> retain = new Dictionary <DelegateListener, ProcessEventDelegate>();

                        Dictionary <ulong, List <EventListener> > dictionary;
                        EventTracker.Instance.mListeners.TryGetValue((ulong)EventTypeId.kActiveCareerAdvanceLevel, out dictionary);

                        // Required to stop a hang when an inactive firefighter is promoted to level 10

                        if (me.Household != Household.ActiveHousehold)
                        {
                            foreach (List <EventListener> list in dictionary.Values)
                            {
                                foreach (EventListener listener in list)
                                {
                                    DelegateListener delListener = listener as DelegateListener;
                                    if (delListener != null)
                                    {
                                        RewardsManager.OccupationRewardInfo target = delListener.mProcessEvent.Target as RewardsManager.OccupationRewardInfo;
                                        if (target != null)
                                        {
                                            retain.Add(delListener, delListener.mProcessEvent);

                                            delListener.mProcessEvent = OnStub;
                                        }
                                    }
                                }
                            }
                        }

                        xpCareer.ForcePromoteToLevel(choice.mXPLevel);

                        if (me.Household != Household.ActiveHousehold)
                        {
                            foreach (List <EventListener> list in dictionary.Values)
                            {
                                foreach (EventListener listener in list)
                                {
                                    DelegateListener delListener = listener as DelegateListener;
                                    if (delListener != null)
                                    {
                                        RewardsManager.OccupationRewardInfo target = delListener.mProcessEvent.Target as RewardsManager.OccupationRewardInfo;
                                        if (target != null)
                                        {
                                            delListener.mProcessEvent = retain[delListener];
                                        }
                                    }
                                }
                            }
                        }
                    }

                    return(true);
                }
            }
            return(false);
        }