public Item(AfterschoolActivity value, int count) { mActivity = value; SetValue(value.CurrentActivityType, value.CurrentActivityType); mCount = count; }
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); } }
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); }
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 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); } } } } }
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); } }
public static InteractionInstance.InsideLoopFunction PerformAfterschoolLoop(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity) { AfterschoolActivityData data = AfterschoolActivityBooter.GetActivity(activity.CurrentActivityType); return data.LoopDelegate(interaction, activity); }
// 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 GeologyLoop(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity) : base(interaction, activity) { }
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); } }
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); } }
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); }
public ExplorerLoop(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity) : base(interaction, activity) { }
public static InteractionInstance.InsideLoopFunction PerformLoopExplorerClub(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity) { return new ExplorerLoop(interaction, activity).Perform; }
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); } }
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); } }
// 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); } }
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); } }
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; }
public static InteractionInstance.InsideLoopFunction PerformLoopExplorerClub(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity) { return(new ExplorerLoop(interaction, activity).Perform); }
public LoopProxy(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity) { mInteraction = interaction; mActivity = activity; }
// 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 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; } }
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); } }
public static bool PerformAfterschoolPostLoop(GoToSchoolInRabbitHole interaction, AfterschoolActivity activity) { AfterschoolActivityData data = AfterschoolActivityBooter.GetActivity(activity.CurrentActivityType); data.PerformPostLoop(interaction, activity); return true; }
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); } }
public static bool HasCompletedRecitalForType(School school, AfterschoolActivityType activityType) { return(AfterschoolActivity.HasCompletedRecitalForType(school, activityType)); }
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); }
public override void SetValue(AfterschoolActivityType value, AfterschoolActivityType storeType) { mValue = value; mName = AfterschoolActivity.LocalizeString(false, value.ToString(), new object[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); } }
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); } }
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); }
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); }