Esempio n. 1
0
            public Item(AfterschoolActivity value, int count)
            {
                mActivity = value;

                SetValue(value.CurrentActivityType, value.CurrentActivityType);

                mCount = count;
            }
Esempio n. 2
0
            public override bool InRabbitHole()
            {
                try
                {
                    if (!GoToSchoolInRabbitHoleHelper.PreInRabbitholeLoop(this, true))
                    {
                        return(false);
                    }

                    bool succeeded = DoLoop(ExitReason.StageComplete, LoopDelegate, null);

                    AfterschoolActivity activity = null;
                    bool hasAfterschoolActivity  = false;

                    bool detention = false;
                    bool fieldTrip = false;

                    GoToSchoolInRabbitHoleHelper.PostInRabbitHoleLoop(this, ref succeeded, ref detention, ref fieldTrip, ref activity, ref hasAfterschoolActivity);

                    if (detention && !fieldTrip)
                    {
                        succeeded = DoLoop(ExitReason.StageComplete, LoopDelegate, null);
                    }

                    InteractionInstance.InsideLoopFunction afterSchoolLoop = null;
                    GoToSchoolInRabbitHoleHelper.PostDetentionLoop(this, succeeded, detention, fieldTrip, activity, hasAfterschoolActivity, ref afterSchoolLoop);

                    if (afterSchoolLoop != null)
                    {
                        succeeded = DoLoop(ExitReason.StageComplete, afterSchoolLoop, mCurrentStateMachine);
                    }
                    else
                    {
                        succeeded = DoLoop(ExitReason.StageComplete);
                    }

                    GoToSchoolInRabbitHoleHelper.PostAfterSchoolLoop(this, succeeded, activity, afterSchoolLoop);

                    return(succeeded);
                }
                catch (ResetException)
                {
                    throw;
                }
                catch (Exception e)
                {
                    Common.Exception(Actor, Target, e);
                    return(false);
                }
            }
Esempio n. 3
0
        protected override bool OnPerform()
        {
            CareerPanel panel = CareerPanel.sInstance;

            if (panel == null)
            {
                return(true);
            }

            Sim activeSim = Sim.ActiveActor;

            if (activeSim == null)
            {
                return(true);
            }

            if (panel.mPanelCategory == CareerPanelCategory.kAfterschoolActivity)
            {
                if ((panel.mCareerInfoWindow != null) && (panel.mCareerInfoWindow.Visible))
                {
                    if (activeSim.SimDescription.Child)
                    {
                        School school = activeSim.School;
                        if (school != null)
                        {
                            List <AfterschoolActivity> activities = school.AfterschoolActivities;
                            if ((activities != null) && (activities.Count == 1))
                            {
                                switch (activities[0].CurrentActivityType)
                                {
                                case AfterschoolActivityType.Ballet:
                                case AfterschoolActivityType.Scouts:
                                    break;

                                default:
                                    panel.mCurrentJobText.Caption     = AfterschoolActivity.LocalizeString(activeSim.IsFemale, activities[0].CurrentActivityType.ToString(), new object[0]);
                                    panel.mCurrentJobText.TooltipText = AfterschoolActivity.LocalizeString(activeSim.IsFemale, activities[0].CurrentActivityType.ToString() + "Description", new object[0]);
                                    break;
                                }
                            }
                        }
                    }
                }
            }

            return(true);
        }
Esempio n. 4
0
 public void PerformPreLoop(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
 {
     try
     {
         if (mPreLoop != null)
         {
             mPreLoop.Invoke(null, new object[] { interaction, activity });
         }
     }
     catch (ResetException)
     {
         throw;
     }
     catch (Exception e)
     {
         Common.Exception(interaction.Actor, interaction.Target, e);
     }
 }
 public void PerformPreLoop(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
 {
     try
     {
         if (mPreLoop != null)
         {
             mPreLoop.Invoke(null, new object[] { interaction, activity });
         }
     }
     catch (ResetException)
     {
         throw;
     }
     catch (Exception e)
     {
         Common.Exception(interaction.Actor, interaction.Target, e);
     }
 }
Esempio n. 6
0
            public void OnWorldLoadFinished()
            {
                foreach (SimDescription sim in Household.AllSimsLivingInWorld())
                {
                    if (sim.CareerManager == null)
                    {
                        continue;
                    }

                    School school = sim.CareerManager.School;
                    if (school == null)
                    {
                        continue;
                    }

                    if (school.AfterschoolActivities == null)
                    {
                        continue;
                    }

                    for (int i = school.AfterschoolActivities.Count - 1; i >= 0; i--)
                    {
                        AfterschoolActivity activity = school.AfterschoolActivities[i];
                        if (activity == null)
                        {
                            school.AfterschoolActivities.RemoveAt(i);
                        }
                        else
                        {
                            AfterschoolActivityData staticActivity = GetActivity(activity.CurrentActivityType);
                            if ((staticActivity == null) || (staticActivity.mActivity == null))
                            {
                                school.AfterschoolActivities.RemoveAt(i);
                            }
                            else
                            {
                                activity.ActivitySkillNameList = new List <SkillNames>(staticActivity.mActivity.ActivitySkillNameList);
                            }
                        }
                    }
                }
            }
Esempio n. 7
0
        public static void PerformPreLoopStudyClub(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
        {
            try
            {
                School school = interaction.Actor.School;

                school.AddHomeworkToStudent(false);
                interaction.mHomework = school.OwnersHomework;
                if (interaction.mHomework != null)
                {
                    school.DidHomeworkInStudyClubToday = true;
                    interaction.mHomework.PercentComplete = 0f;
                    interaction.mHomeworkCompletionRate = interaction.mHomework.GetCompletionRate(interaction.Actor, false, true);
                }
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(interaction.Actor, interaction.Target, e);
            }
        }
Esempio n. 8
0
        public static InteractionInstance.InsideLoopFunction PerformAfterschoolLoop(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
        {
            AfterschoolActivityData data = AfterschoolActivityBooter.GetActivity(activity.CurrentActivityType);

            return data.LoopDelegate(interaction, activity);
        }
Esempio n. 9
0
 // Externalized to MasterController and StoryProgression
 public static InteractionInstance.InsideLoopFunction PerformAfterschoolLoop(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
 {
     try
     {
         return AfterschoolActivityEx.PerformAfterschoolLoop(interaction, activity);
     }
     catch (Exception e)
     {
         Common.Exception("GetAfterSchoolDelegate", e);
         return null;
     }
 }
Esempio n. 10
0
 public GeologyLoop(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
     : base(interaction, activity)
 {
 }
Esempio n. 11
0
 public static void PerformPostLoopChessClub(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
 {
     try
     {
         Chess skill = interaction.Actor.SkillManager.GetSkill <Chess>(SkillNames.Chess);
         if (skill != null)
         {
             if (RandomUtil.CoinFlip())
             {
                 skill.NumberOfWins++;
             }
             else
             {
                 skill.NumberOfLosses++;
             }
         }
     }
     catch (ResetException)
     {
         throw;
     }
     catch (Exception e)
     {
         Common.Exception(interaction.Actor, interaction.Target, e);
     }
 }
Esempio n. 12
0
        public static void PerformPreLoopStudyClub(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
        {
            try
            {
                School school = interaction.Actor.School;

                school.AddHomeworkToStudent(false);
                interaction.mHomework = school.OwnersHomework;
                if (interaction.mHomework != null)
                {
                    school.DidHomeworkInStudyClubToday    = true;
                    interaction.mHomework.PercentComplete = 0f;
                    interaction.mHomeworkCompletionRate   = interaction.mHomework.GetCompletionRate(interaction.Actor, false, true);
                }
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(interaction.Actor, interaction.Target, e);
            }
        }
Esempio n. 13
0
        public static InteractionInstance.InsideLoopFunction PerformAfterschoolLoop(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
        {
            AfterschoolActivityData data = AfterschoolActivityBooter.GetActivity(activity.CurrentActivityType);

            return(data.LoopDelegate(interaction, activity));
        }
        public static void PostInRabbitHoleLoop(GoToSchoolInRabbitHole ths, ref bool succeeded, ref bool detention, ref bool fieldTrip, ref AfterschoolActivity activity, ref bool hasAfterschoolActivity)
        {
            try
            {
                School school = ths.Actor.School;

                ISchoolRabbitHole target = GetTarget(ths);

                activity = ths.GetAfterschoolActivity(ths.Actor, school, target, ref hasAfterschoolActivity);

                fieldTrip = FieldTripSituation.GetFieldTripSituation(ths.Actor) != null;
                detention = school.CurentDetentionStatus == School.DetentionStatus.HasDetention;

                if (detention && !fieldTrip)
                {
                    school.CurentDetentionStatus = School.DetentionStatus.InDetention;
                    float          maxDurationInHours = (school.DayLength + Career.kNumHoursEarlyCanShowUpForWork) + school.SchoolTuning.DetentionLengthInHours;
                    TimeOfDayStage stage = new TimeOfDayStage(Localization.LocalizeString(ths.Actor.IsFemale, "Gameplay/Careers/WorkInRabbitHole:SchoolDetention", new object[0x0]), school.CurLevel.FinishTime() + school.SchoolTuning.DetentionLengthInHours, maxDurationInHours);
                    ths.Stages      = new List <Stage>(new Stage[] { stage });
                    ths.ActiveStage = stage;
                    school.SetTones(ths);
                    ths.Actor.RemoveExitReason(ExitReason.StageComplete);
                    ths.Actor.BuffManager.AddElement(BuffNames.Detention, Origin.FromSchool);
                }
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(ths.Actor, ths.Target, e);
            }
        }
Esempio n. 15
0
        protected override bool Run(SimDescription me, bool singleSelection)
        {
            if (!ApplyAll)
            {
                List <AfterSchoolActivityCriteria.Item> choices = new List <AfterSchoolActivityCriteria.Item>();

                List <AfterschoolActivity> customTypes = sCareerAfterschoolActivityList.Invoke <List <AfterschoolActivity> >(new object[] { me });

                if (customTypes != null)
                {
                    foreach (AfterschoolActivity type in customTypes)
                    {
                        choices.Add(new AfterSchoolActivityCriteria.Item(type, AfterSchoolActivityCriteria.HasActivity(me, type.CurrentActivityType) ? 1 : 0));
                    }
                }
                else
                {
                    foreach (AfterschoolActivityType type in Enum.GetValues(typeof(AfterschoolActivityType)))
                    {
                        if ((me.Child) && (AfterschoolActivity.IsChildActivity(type)))
                        {
                            choices.Add(new AfterSchoolActivityCriteria.Item(type, AfterSchoolActivityCriteria.HasActivity(me, type) ? 1 : 0));
                        }
                        else if (me.Teen && AfterschoolActivity.IsTeenActivity(type))
                        {
                            choices.Add(new AfterSchoolActivityCriteria.Item(type, AfterSchoolActivityCriteria.HasActivity(me, type) ? 1 : 0));
                        }
                    }
                }

                if (choices.Count == 0)
                {
                    SimpleMessageDialog.Show(Name, Common.Localize(GetTitlePrefix() + ":NoChoices", me.IsFemale, new object[] { me }));
                    return(false);
                }

                CommonSelection <AfterSchoolActivityCriteria.Item> .Results selection = new CommonSelection <AfterSchoolActivityCriteria.Item>(Name, choices).SelectMultiple();
                if ((selection == null) || (selection.Count == 0))
                {
                    return(false);
                }

                mSelection = selection;
            }

            foreach (AfterSchoolActivityCriteria.Item item in mSelection)
            {
                School school = me.CareerManager.School;
                if (school.AfterschoolActivities == null)
                {
                    school.AfterschoolActivities = new List <AfterschoolActivity>();
                }

                if (AfterSchoolActivityCriteria.HasActivity(me, item.Value))
                {
                    for (int i = school.AfterschoolActivities.Count - 1; i >= 0; i--)
                    {
                        if (school.AfterschoolActivities[i].CurrentActivityType == item.Value)
                        {
                            school.AfterschoolActivities.RemoveAt(i);
                        }
                    }
                }
                else
                {
                    AfterschoolActivity newActivity = new AfterschoolActivity(item.Value);

                    AfterschoolActivity oldActivity = item.Activity;
                    if (oldActivity != null)
                    {
                        newActivity.ActivitySkillNameList = new List <Sims3.Gameplay.Skills.SkillNames>(oldActivity.ActivitySkillNameList);
                        newActivity.mDaysForActivity      = oldActivity.mDaysForActivity;
                    }

                    school.AfterschoolActivities.Add(newActivity);
                }

                me.CareerManager.UpdateCareerUI();
            }

            return(true);
        }
Esempio n. 16
0
 public ExplorerLoop(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
     : base(interaction, activity)
 { }
Esempio n. 17
0
 public GeologyLoop(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
     : base(interaction, activity)
 { }
Esempio n. 18
0
 public static InteractionInstance.InsideLoopFunction PerformLoopExplorerClub(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
 {
     return new ExplorerLoop(interaction, activity).Perform;
 }
Esempio n. 19
0
 public static void PerformPostLoopChessClub(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
 {
     try
     {
         Chess skill = interaction.Actor.SkillManager.GetSkill<Chess>(SkillNames.Chess);
         if (skill != null)
         {
             if (RandomUtil.CoinFlip())
             {
                 skill.NumberOfWins++;
             }
             else
             {
                 skill.NumberOfLosses++;
             }
         }
     }
     catch (ResetException)
     {
         throw;
     }
     catch (Exception e)
     {
         Common.Exception(interaction.Actor, interaction.Target, e);
     }
 }
Esempio n. 20
0
 public static void PerformPostLoopArtClub(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
 {
     try
     {
         activity.CheckForNewPainting(interaction.Actor);
     }
     catch (ResetException)
     {
         throw;
     }
     catch (Exception e)
     {
         Common.Exception(interaction.Actor, interaction.Target, e);
     }
 }
Esempio n. 21
0
 // Externalized to MasterController and StoryProgression
 public static bool PerformAfterschoolPostLoop(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
 {
     try
     {
         return(AfterschoolActivityEx.PerformAfterschoolPostLoop(interaction, activity));
     }
     catch (Exception e)
     {
         Common.Exception("GetAfterSchoolDelegate", e);
         return(false);
     }
 }
        public static void PostAfterSchoolLoop(GoToSchoolInRabbitHole ths, bool succeeded, AfterschoolActivity activity, InteractionInstance.InsideLoopFunction afterSchoolLoop)
        {
            try
            {
                if (afterSchoolLoop != null)
                {
                    ths.Target.ClearAmbientSounds(ths.Target);
                    ths.Target.AddAmbientSound("rhole_school_oneshot");

                    foreach (SkillNames names in activity.ActivitySkillNameList)
                    {
                        ths.Actor.SkillManager.StopSkillGain(names);
                    }

                    if (!sCareerPerformAfterschoolPostLoop.Invoke<bool>(new object[] { ths, activity }))
                    {
                        if (activity.CurrentActivityType == AfterschoolActivityType.ArtClub)
                        {
                            activity.CheckForNewPainting(ths.Actor);
                        }
                    }

                    ISchoolRabbitHole target = GetTarget(ths);

                    target.HasAfterschoolActivityToday = false;
                }

                ths.Actor.School.FinishWorking();
                
                ths.EndCommodityUpdates(succeeded);
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(ths.Actor, ths.Target, e);
            }
        }
        public static void PostDetentionLoop(GoToSchoolInRabbitHole ths, bool succeeded, bool detention, bool fieldTrip, AfterschoolActivity activity, bool hasAfterschoolActivity, ref InteractionInstance.InsideLoopFunction afterSchoolLoop)
        {
            try
            {
                School school = ths.Actor.School;

                ISchoolRabbitHole target = GetTarget(ths);

                bool flag5 = false;
                bool flag6 = false;
                if (!fieldTrip && !detention)
                {
                    if (hasAfterschoolActivity)
                    {
                        flag5 = true;
                    }
                    else if (!ths.Actor.IsInActiveHousehold && target.HasAfterschoolActivityToday)
                    {
                        flag5 = RandomUtil.CoinFlip();
                        flag6 = true;
                    }
                }

                if (!flag5)
                {
                    school.FinishWorking();

                    ths.EndCommodityUpdates(succeeded);
                    return;
                }

                CommodityChange fun = new CommodityChange(CommodityKind.Fun, 50, false, 25, OutputUpdateType.ContinuousFlow, false, false, UpdateAboveAndBelowZeroType.Either);

                ths.BeginCommodityUpdate(fun, 1);

                ths.mParticipatedInAfterschoolActivity = true;
                string str  = flag6 ? AfterschoolActivityType.ArtClub.ToString() : activity.CurrentActivityType.ToString();
                float  num3 = (school.DayLength + Career.kNumHoursEarlyCanShowUpForWork) + AfterschoolActivity.kAfterschoolActivityLength;

                string name = null;
                if (Localization.HasLocalizationString("Gameplay/Careers/AfterschoolActivity:" + str))
                {
                    name = Common.LocalizeEAString(ths.Actor.IsFemale, "Gameplay/Careers/AfterschoolActivity:" + str);
                }
                else
                {
                    name = Common.LocalizeEAString(ths.Actor.IsFemale, "Gameplay/Abstracts/Careers/AfterschoolActivity:" + str);
                }

                TimeOfDayStage stage2 = new TimeOfDayStage(name, school.CurLevel.FinishTime() + AfterschoolActivity.kAfterschoolActivityLength, num3);
                ths.Stages      = new List <Stage>(new Stage[] { stage2 });
                ths.ActiveStage = stage2;
                ths.SetAvailableTones(null);
                ths.Actor.RemoveExitReason(ExitReason.StageComplete);

                if (!flag6)
                {
                    activity.StartSkillGainForActivity(ths.Actor);

                    activity.StartAmbientSounds(ths.Actor, ths.Target);

                    if (!sCareerPerformAfterschoolPreLoop.Invoke <bool>(new object[] { ths, activity }))
                    {
                        if (activity.CurrentActivityType == AfterschoolActivityType.StudyClub)
                        {
                            school.AddHomeworkToStudent(false);
                            ths.mHomework = school.OwnersHomework;
                            if (ths.mHomework != null)
                            {
                                school.DidHomeworkInStudyClubToday = true;
                                ths.mHomework.PercentComplete      = 0f;
                                ths.mHomeworkCompletionRate        = ths.mHomework.GetCompletionRate(ths.Actor, false, true);
                            }
                        }
                    }

                    ths.mLastLTRUpdateDateAndTime = SimClock.CurrentTime();

                    afterSchoolLoop = sCareerPerformAfterschoolLoop.Invoke <InteractionInstance.InsideLoopFunction>(new object[] { ths, activity });
                    if (afterSchoolLoop == null)
                    {
                        afterSchoolLoop = ths.AfterschoolActivityLoopDelegate;
                    }
                }
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(ths.Actor, ths.Target, e);
            }
        }
Esempio n. 24
0
        public static bool PerformAfterschoolPostLoop(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
        {
            AfterschoolActivityData data = AfterschoolActivityBooter.GetActivity(activity.CurrentActivityType);

            data.PerformPostLoop(interaction, activity);
            return(true);
        }
        public static void PostAfterSchoolLoop(GoToSchoolInRabbitHole ths, bool succeeded, AfterschoolActivity activity, InteractionInstance.InsideLoopFunction afterSchoolLoop)
        {
            try
            {
                if (afterSchoolLoop != null)
                {
                    ths.Target.ClearAmbientSounds(ths.Target);
                    ths.Target.AddAmbientSound("rhole_school_oneshot");

                    foreach (SkillNames names in activity.ActivitySkillNameList)
                    {
                        ths.Actor.SkillManager.StopSkillGain(names);
                    }

                    if (!sCareerPerformAfterschoolPostLoop.Invoke <bool>(new object[] { ths, activity }))
                    {
                        if (activity.CurrentActivityType == AfterschoolActivityType.ArtClub)
                        {
                            activity.CheckForNewPainting(ths.Actor);
                        }
                    }

                    ISchoolRabbitHole target = GetTarget(ths);

                    target.HasAfterschoolActivityToday = false;
                }

                ths.Actor.School.FinishWorking();

                ths.EndCommodityUpdates(succeeded);
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(ths.Actor, ths.Target, e);
            }
        }
Esempio n. 26
0
 public static void PerformPostLoopArtClub(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
 {
     try
     {
         activity.CheckForNewPainting(interaction.Actor);
     }
     catch (ResetException)
     {
         throw;
     }
     catch (Exception e)
     {
         Common.Exception(interaction.Actor, interaction.Target, e);
     }
 }
Esempio n. 27
0
        protected override bool Run(SimDescription me, bool singleSelection)
        {
            if (!ApplyAll)
            {
                List<AfterSchoolActivityCriteria.Item> choices = new List<AfterSchoolActivityCriteria.Item>();

                List<AfterschoolActivity> customTypes = sCareerAfterschoolActivityList.Invoke<List<AfterschoolActivity>>(new object[] { me });

                if (customTypes != null)
                {
                    foreach (AfterschoolActivity type in customTypes)
                    {
                        choices.Add(new AfterSchoolActivityCriteria.Item(type, AfterSchoolActivityCriteria.HasActivity(me, type.CurrentActivityType) ? 1 : 0));
                    }
                }
                else
                {
                    foreach (AfterschoolActivityType type in Enum.GetValues(typeof(AfterschoolActivityType)))
                    {
                        if ((me.Child) && (AfterschoolActivity.IsChildActivity(type)))
                        {
                            choices.Add(new AfterSchoolActivityCriteria.Item(type, AfterSchoolActivityCriteria.HasActivity(me, type) ? 1 : 0));
                        }
                        else if (me.Teen && AfterschoolActivity.IsTeenActivity(type))
                        {
                            choices.Add(new AfterSchoolActivityCriteria.Item(type, AfterSchoolActivityCriteria.HasActivity(me, type) ? 1 : 0));
                        }
                    }
                }

                if (choices.Count == 0)
                {
                    SimpleMessageDialog.Show(Name, Common.Localize(GetTitlePrefix() + ":NoChoices", me.IsFemale, new object[] { me }));
                    return false;
                }

                CommonSelection<AfterSchoolActivityCriteria.Item>.Results selection = new CommonSelection<AfterSchoolActivityCriteria.Item>(Name, choices).SelectMultiple();
                if ((selection == null) || (selection.Count == 0)) return false;

                mSelection = selection;
            }

            foreach (AfterSchoolActivityCriteria.Item item in mSelection)
            {
                School school = me.CareerManager.School;
                if (school.AfterschoolActivities == null)
                {
                    school.AfterschoolActivities = new List<AfterschoolActivity>();
                }

                if (AfterSchoolActivityCriteria.HasActivity(me, item.Value))
                {
                    for (int i = school.AfterschoolActivities.Count - 1; i >= 0; i--)
                    {
                        if (school.AfterschoolActivities[i].CurrentActivityType == item.Value)
                        {
                            school.AfterschoolActivities.RemoveAt(i);
                        }
                    }
                }
                else
                {
                    AfterschoolActivity newActivity = new AfterschoolActivity(item.Value);

                    AfterschoolActivity oldActivity = item.Activity;
                    if (oldActivity != null)
                    {
                        newActivity.ActivitySkillNameList = new List<Sims3.Gameplay.Skills.SkillNames>(oldActivity.ActivitySkillNameList);
                        newActivity.mDaysForActivity = oldActivity.mDaysForActivity;
                    }

                    school.AfterschoolActivities.Add(newActivity);
                }

                me.CareerManager.UpdateCareerUI();
            }

            return true;
        }
Esempio n. 28
0
 public static InteractionInstance.InsideLoopFunction PerformLoopExplorerClub(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
 {
     return(new ExplorerLoop(interaction, activity).Perform);
 }
Esempio n. 29
0
 public LoopProxy(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
 {
     mInteraction = interaction;
     mActivity    = activity;
 }
Esempio n. 30
0
 public ExplorerLoop(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
     : base(interaction, activity)
 {
 }
Esempio n. 31
0
 public LoopProxy(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
 {
     mInteraction = interaction;
     mActivity = activity;
 }
Esempio n. 32
0
 // Externalized to MasterController and StoryProgression
 public static bool PerformAfterschoolPostLoop(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
 {
     try
     {
         return AfterschoolActivityEx.PerformAfterschoolPostLoop(interaction, activity);
     }
     catch (Exception e)
     {
         Common.Exception("GetAfterSchoolDelegate", e);
         return false;
     }
 }
Esempio n. 33
0
        public InteractionInstance.InsideLoopFunction LoopDelegate(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
        {
            try
            {
                if (mLoop != null)
                {
                    InteractionInstance.InsideLoopFunction del = (InteractionInstance.InsideLoopFunction)mLoop.Invoke(null, new object[] { interaction, activity });
                    if (del != null)
                    {
                        return del;
                    }
                }

                return interaction.AfterschoolActivityLoopDelegate;
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(interaction.Actor, interaction.Target, e);
                return null;
            }
        }
Esempio n. 34
0
            public override bool Test(Sim a, RabbitHole target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
            {
                try
                {
                    if (a.SimDescription.IsEnrolledInBoardingSchool())
                    {
                        greyedOutTooltipCallback = Common.DebugTooltip("Boarding School");
                        return(false);
                    }

                    if (GameUtils.GetCurrentWorldType() == WorldType.Vacation)
                    {
                        greyedOutTooltipCallback = Common.DebugTooltip("On Vacation");
                        return(false);
                    }

                    if (a.SimDescription.ToddlerOrBelow)
                    {
                        greyedOutTooltipCallback = Common.DebugTooltip("ToddlerOrBelow");
                        return(false);
                    }

                    if (mLocation == null)
                    {
                        return(true);
                    }
                    else if (mLocation.Career is SchoolElementary)
                    {
                        if (!a.SimDescription.Child)
                        {
                            greyedOutTooltipCallback = Common.DebugTooltip("Elementary Not Child");
                            return(false);
                        }
                    }
                    else if (mLocation.Career is SchoolHigh)
                    {
                        if (!a.SimDescription.Teen)
                        {
                            greyedOutTooltipCallback = Common.DebugTooltip("High Not Teen");
                            return(false);
                        }
                    }
                    else if (mLocation.Career is School)
                    {
                        if ((!a.SimDescription.Child) && (!a.SimDescription.Teen))
                        {
                            greyedOutTooltipCallback = Common.DebugTooltip("School Not Child Or Teen");
                            return(false);
                        }
                    }
                    else if (a.School != null)
                    {
                        if (a.SimDescription.Teen && AfterschoolActivity.DoesJobConflictWithActivities(a, mLocation.Career))
                        {
                            greyedOutTooltipCallback = Common.DebugTooltip("DoesJobConflictWithActivities");
                            return(false);
                        }
                    }

                    if (!mLocation.Career.CareerAgeTest(a.SimDescription))
                    {
                        greyedOutTooltipCallback = Common.DebugTooltip("CareerAgeTest");
                        return(false);
                    }

                    Career occupationAsCareer = a.OccupationAsCareer;
                    if ((occupationAsCareer != null) && (occupationAsCareer.Guid == mLocation.Career.Guid))
                    {
                        if (occupationAsCareer.CareerLoc == mLocation)
                        {
                            greyedOutTooltipCallback = Common.DebugTooltip("Already Working There");
                            return(false);
                        }
                    }
                    else if (!mLocation.Career.CanAcceptCareer(a.ObjectId, ref greyedOutTooltipCallback))
                    {
                        return(false);
                    }

                    return(true);
                }
                catch (Exception e)
                {
                    Common.Exception(a, target, e);
                    return(false);
                }
            }
Esempio n. 35
0
        public static bool PerformAfterschoolPostLoop(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
        {
            AfterschoolActivityData data = AfterschoolActivityBooter.GetActivity(activity.CurrentActivityType);

            data.PerformPostLoop(interaction, activity);
            return true;
        }
Esempio n. 36
0
        public InteractionInstance.InsideLoopFunction LoopDelegate(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
        {
            try
            {
                if (mLoop != null)
                {
                    InteractionInstance.InsideLoopFunction del = (InteractionInstance.InsideLoopFunction)mLoop.Invoke(null, new object[] { interaction, activity });
                    if (del != null)
                    {
                        return(del);
                    }
                }

                return(interaction.AfterschoolActivityLoopDelegate);
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(interaction.Actor, interaction.Target, e);
                return(null);
            }
        }
Esempio n. 37
0
 public static bool HasCompletedRecitalForType(School school, AfterschoolActivityType activityType)
 {
     return(AfterschoolActivity.HasCompletedRecitalForType(school, activityType));
 }
Esempio n. 38
0
        protected override bool PrivateUpdate(ScenarioFrame frame)
        {
            List <AfterschoolActivity> allChoices = sCareerGetAfterSchoolActivityList.Invoke <List <AfterschoolActivity> >(new object[] { Sim });

            if (allChoices == null)
            {
                allChoices = new List <AfterschoolActivity>();

                foreach (AfterschoolActivityType type in Enum.GetValues(typeof(AfterschoolActivityType)))
                {
                    if ((Sim.Child) && (!AfterschoolActivity.IsChildActivity(type)))
                    {
                        continue;
                    }

                    if ((Sim.Teen) && (!AfterschoolActivity.IsTeenActivity(type)))
                    {
                        continue;
                    }

                    GreyedOutTooltipCallback greyedOutTooltipCallback = null;
                    if (!AfterschoolActivity.MeetsCommonAfterschoolActivityRequirements(Sim.CreatedSim, type, ref greyedOutTooltipCallback))
                    {
                        continue;
                    }

                    allChoices.Add(new AfterschoolActivity(type));
                }
            }

            List <WeightedChoice> choices = new List <WeightedChoice>();

            foreach (AfterschoolActivity activity in allChoices)
            {
                float weight = 0;
                int   count  = 0;

                foreach (SkillNames actualSkill in activity.ActivitySkillNameList)
                {
                    SkillNames skill = actualSkill;
                    switch (skill)
                    {
                    case SkillNames.BassGuitar:
                    case SkillNames.Piano:
                    case SkillNames.Drums:
                        skill = SkillNames.Guitar;
                        break;
                    }

                    if (ScoringLookup.HasScoring(skill.ToString()))
                    {
                        weight += AddScoring(skill.ToString(), Sim);
                    }
                    else
                    {
                        Common.DebugNotify("AfterschoolActivity Missing " + skill.ToString());

                        weight += AddScoring("AfterschoolActivity", Sim);
                    }

                    count++;
                }

                if (weight < 0)
                {
                    continue;
                }

                if (count == 0)
                {
                    count = 1;
                }

                choices.Add(new WeightedChoice(activity.CurrentActivityType, weight / count));
            }

            if (choices.Count == 0)
            {
                IncStat("No Choices");
                return(false);
            }

            WeightedChoice choice = RandomUtil.GetWeightedRandomObjectFromList(choices);

            AfterschoolActivity.AddNewActivity(Sim.CreatedSim, choice.mType);
            return(true);
        }
Esempio n. 39
0
            public override void SetValue(AfterschoolActivityType value, AfterschoolActivityType storeType)
            {
                mValue = value;

                mName = AfterschoolActivity.LocalizeString(false, value.ToString(), new object[0]);
            }
Esempio n. 40
0
 // Externalized to MasterController and StoryProgression
 public static InteractionInstance.InsideLoopFunction PerformAfterschoolLoop(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity)
 {
     try
     {
         return(AfterschoolActivityEx.PerformAfterschoolLoop(interaction, activity));
     }
     catch (Exception e)
     {
         Common.Exception("GetAfterSchoolDelegate", e);
         return(null);
     }
 }
        public static void PostInRabbitHoleLoop(GoToSchoolInRabbitHole ths, ref bool succeeded, ref bool detention, ref bool fieldTrip, ref AfterschoolActivity activity, ref bool hasAfterschoolActivity)
        {
            try
            {
                School school = ths.Actor.School;

                ISchoolRabbitHole target = GetTarget(ths);

                activity = ths.GetAfterschoolActivity(ths.Actor, school, target, ref hasAfterschoolActivity);

                fieldTrip = FieldTripSituation.GetFieldTripSituation(ths.Actor) != null;
                detention = school.CurentDetentionStatus == School.DetentionStatus.HasDetention;

                if (detention && !fieldTrip)
                {
                    school.CurentDetentionStatus = School.DetentionStatus.InDetention;
                    float maxDurationInHours = (school.DayLength + Career.kNumHoursEarlyCanShowUpForWork) + school.SchoolTuning.DetentionLengthInHours;
                    TimeOfDayStage stage = new TimeOfDayStage(Localization.LocalizeString(ths.Actor.IsFemale, "Gameplay/Careers/WorkInRabbitHole:SchoolDetention", new object[0x0]), school.CurLevel.FinishTime() + school.SchoolTuning.DetentionLengthInHours, maxDurationInHours);
                    ths.Stages = new List<Stage>(new Stage[] { stage });
                    ths.ActiveStage = stage;
                    school.SetTones(ths);
                    ths.Actor.RemoveExitReason(ExitReason.StageComplete);
                    ths.Actor.BuffManager.AddElement(BuffNames.Detention, Origin.FromSchool);
                }
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(ths.Actor, ths.Target, e);
            }
        }
Esempio n. 42
0
        public static bool AddNewActivity(SimDescription actor, AfterschoolActivityType activityType)
        {
            School school = actor.CareerManager.School;

            if (school.AfterschoolActivities == null)
            {
                school.AfterschoolActivities = new List <AfterschoolActivity>();
            }
            else if (AlreadyHasChildActivity(actor) || HasAfterschoolActivityOfType(actor, activityType))
            {
                return(false);
            }

            // Custom
            school.AfterschoolActivities.Add(AfterschoolActivityBooter.GetActivity(activityType).mActivity);

            string name = activityType.ToString();

            if (actor.CreatedSim != null)
            {
                actor.CreatedSim.ShowTNSIfSelectable(TNSNames.SignUpForAfterschoolActivityTNS, actor, null, null, actor.IsFemale, actor.IsFemale, new object[] { actor, AfterschoolActivity.LocalizeString(actor.IsFemale, name, new object[0x0]), AfterschoolActivity.LocalizeString(actor.IsFemale, name + "Description", new object[0x0]) });
                actor.CareerManager.UpdateCareerUI();
            }
            return(true);
        }
        public static void PostDetentionLoop(GoToSchoolInRabbitHole ths, bool succeeded, bool detention, bool fieldTrip, AfterschoolActivity activity, bool hasAfterschoolActivity, ref InteractionInstance.InsideLoopFunction afterSchoolLoop)
        {
            try
            {
                School school = ths.Actor.School;

                ISchoolRabbitHole target = GetTarget(ths);

                bool flag5 = false;
                bool flag6 = false;
                if (!fieldTrip && !detention)
                {
                    if (hasAfterschoolActivity)
                    {
                        flag5 = true;
                    }
                    else if (!ths.Actor.IsInActiveHousehold && target.HasAfterschoolActivityToday)
                    {
                        flag5 = RandomUtil.CoinFlip();
                        flag6 = true;
                    }
                }

                if (!flag5)
                {
                    school.FinishWorking();

                    ths.EndCommodityUpdates(succeeded);
                    return;
                }

                CommodityChange fun = new CommodityChange(CommodityKind.Fun, 50, false, 25, OutputUpdateType.ContinuousFlow, false, false, UpdateAboveAndBelowZeroType.Either);

                ths.BeginCommodityUpdate(fun, 1);

                ths.mParticipatedInAfterschoolActivity = true;
                string str = flag6 ? AfterschoolActivityType.ArtClub.ToString() : activity.CurrentActivityType.ToString();
                float num3 = (school.DayLength + Career.kNumHoursEarlyCanShowUpForWork) + AfterschoolActivity.kAfterschoolActivityLength;

                string name = null;
                if (Localization.HasLocalizationString("Gameplay/Careers/AfterschoolActivity:" + str))
                {
                    name = Common.LocalizeEAString(ths.Actor.IsFemale, "Gameplay/Careers/AfterschoolActivity:" + str);
                }
                else
                {
                    name = Common.LocalizeEAString(ths.Actor.IsFemale, "Gameplay/Abstracts/Careers/AfterschoolActivity:" + str);
                }

                TimeOfDayStage stage2 = new TimeOfDayStage(name, school.CurLevel.FinishTime() + AfterschoolActivity.kAfterschoolActivityLength, num3);
                ths.Stages = new List<Stage>(new Stage[] { stage2 });
                ths.ActiveStage = stage2;
                ths.SetAvailableTones(null);
                ths.Actor.RemoveExitReason(ExitReason.StageComplete);

                if (!flag6)
                {
                    activity.StartSkillGainForActivity(ths.Actor);

                    activity.StartAmbientSounds(ths.Actor, ths.Target);

                    if (!sCareerPerformAfterschoolPreLoop.Invoke<bool>(new object[] { ths, activity }))
                    {
                        if (activity.CurrentActivityType == AfterschoolActivityType.StudyClub)
                        {
                            school.AddHomeworkToStudent(false);
                            ths.mHomework = school.OwnersHomework;
                            if (ths.mHomework != null)
                            {
                                school.DidHomeworkInStudyClubToday = true;
                                ths.mHomework.PercentComplete = 0f;
                                ths.mHomeworkCompletionRate = ths.mHomework.GetCompletionRate(ths.Actor, false, true);
                            }
                        }
                    }

                    ths.mLastLTRUpdateDateAndTime = SimClock.CurrentTime();

                    afterSchoolLoop = sCareerPerformAfterschoolLoop.Invoke<InteractionInstance.InsideLoopFunction>(new object[] { ths, activity });
                    if (afterSchoolLoop == null)
                    {
                        afterSchoolLoop = ths.AfterschoolActivityLoopDelegate;
                    }
                }
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(ths.Actor, ths.Target, e);
            }
        }
Esempio n. 44
0
        public static bool MeetsCommonAfterschoolActivityRequirements(SimDescription actor, AfterschoolActivityType activityToCheck, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
        {
            bool teen = actor.Teen;

            if (!actor.Child && !teen)
            {
                return(false);
            }

            School school = actor.CareerManager.School;

            if (school == null)
            {
                return(false);
            }
            else if (actor.IsEnrolledInBoardingSchool())
            {
                return(false);
            }

            /*
             * else if (!AfterschoolActivity.WorldHasSchoolRabbitHole())
             * {
             *  return false;
             * }
             */
            else if (HasAfterschoolActivityOfType(actor, activityToCheck))
            {
                return(false);
            }
            else if (HasAfterschoolActivityOnDays(actor, GetDaysForActivityType(activityToCheck)))
            {
                greyedOutTooltipCallback = InteractionInstance.CreateTooltipCallback(AfterschoolActivity.LocalizeString(actor.IsFemale, "DayConflict", new object[0x0]));
                return(false);
            }
            else if (DoesActivityConflictWithJob(actor, activityToCheck))
            {
                return(false);
            }
            else if (teen && school.HasCompletedTeenAfterschoolActivityRecital)
            {
                return(false);
            }
            else if (HasCompletedRecitalForType(school, activityToCheck))
            {
                return(false);
            }
            else if (IsChildActivity(activityToCheck) && AlreadyHasChildActivity(actor))
            {
                return(false);
            }

            AgingManager singleton = AgingManager.Singleton;
            float        num       = singleton.AgingYearsToSimDays(singleton.GetCurrentAgingStageLength(actor));
            float        num2      = singleton.AgingYearsToSimDays(actor.AgingYearsSinceLastAgeTransition);
            float        num3      = num - num2;

            if (num3 <= AfterschoolActivity.kDaysBeforeAgingTrigger)
            {
                greyedOutTooltipCallback = InteractionInstance.CreateTooltipCallback(AfterschoolActivity.LocalizeString(actor.IsFemale, "AboutToAgeUp", new object[] { actor }));
                return(false);
            }

            return(true);
        }
Esempio n. 45
0
        protected static string GetSchool(SimDescription me)
        {
            string msg = null;

            if ((me.CareerManager != null) && (me.CareerManager.School != null))
            {
                School school = me.CareerManager.School;

                msg += Common.Localize("Status:School", me.IsFemale, new object[] { school.Name });

                if (school.CurLevel != null)
                {
                    msg += Common.Localize("Status:CareerLevel", me.IsFemale, new object[] { me.CareerManager.School.CurLevel.GetLocalizedName(me), school.CareerLevel });

                    msg += Common.Localize("Status:CareerExtra", me.IsFemale, new object[] { school.CurLevel.PayPerHourBase, school.mPayPerHourExtra, school.AverageTimeToReachWork });
                }

                if (school.Performance != 0f)
                {
                    msg += Common.Localize("Status:Performance", me.IsFemale, new object[] { (int)school.Performance });
                }

                if (school.Coworkers != null)
                {
                    msg += Common.Localize("Status:Coworkers", me.IsFemale, new object[] { school.Coworkers.Count });
                    foreach (SimDescription sim in school.Coworkers)
                    {
                        msg += Common.NewLine + sim.FullName;
                    }
                }

                if ((school.AfterschoolActivities != null) && (school.AfterschoolActivities.Count > 0))
                {
                    msg += Common.Localize("Status:AfterSchoolActivities", me.IsFemale, new object[] { school.AfterschoolActivities.Count });

                    foreach (AfterschoolActivity activity in school.AfterschoolActivities)
                    {
                        msg += Common.Localize("Status:AfterSchoolActivityElement", me.IsFemale, new object[] { AfterschoolActivity.LocalizeString(me.IsFemale, activity.CurrentActivityType.ToString(), new object[0]), DaysToString(activity.DaysForActivity) });
                    }
                }
            }
            else if ((me.Child) || (me.Teen))
            {
                bool found = false;
                if (me.BoardingSchool != null)
                {
                    BoardingSchool.BoardingSchoolData data;
                    if (BoardingSchool.BoardingSchoolData.sBoardingSchoolDataList.TryGetValue(me.BoardingSchool.CurrentSchoolType, out data))
                    {
                        msg  += Common.Localize("Status:School", me.IsFemale, new object[] { Common.LocalizeEAString(data.SchoolNameKey) });
                        found = true;
                    }
                }

                if (!found)
                {
                    msg += Common.Localize("Status:School", me.IsFemale, new object[] { Common.Localize("Status:NoSchool") });
                }
            }
            else if (me.YoungAdultOrAbove)
            {
                msg += Common.Localize("Status:AlmaMater", me.IsFemale, new object[] { me.AlmaMaterName });
            }

            return(msg);
        }