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);
        }
        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);
        }