public override bool Run() { if (Actor.IsSelectable) { PlumbBob.SelectActor(Actor); Camera.FocusOnSim(Actor, Pregnancy.kShowPregnancyCameraLerp.Zoom, Pregnancy.kShowPregnancyCameraLerp.Pitch, Pregnancy.kShowPregnancyCameraLerp.Time, true, false); Audio.StartSound("sting_alien_visit"); } Actor.SimDescription.ShowPregnancy(); Actor.BuffManager.AddElement(AlienUtilsEx.sXenogenesis, Origin.FromPregnancy); ActiveTopic.AddToSim(Actor, "Announce Pregnancy"); /* TODO------------------------------------------------ */ /* Set alarm to give leave at start of third trimester! */ /* ---------------------------------------------------- */ Tutorialette.TriggerLesson(Lessons.Pregnancy, Actor); Actor.PlaySoloAnimation("a_alien_pregnancy_inspectStomach"); /* TODO------------------------------ */ /* Will not remove jobs at this time! */ /* ---------------------------------- */ return(true); }
public override void OnDelayedWorldLoadFinished() { Overwatch.Log("FixActiveTopics"); Dictionary <ulong, SimDescription> sims = SimListing.GetResidents(false); foreach (SimDescription sim in sims.Values) { if (sim.CreatedSim == null) { continue; } if (sim.SkillManager == null) { continue; } foreach (Skill skill in sim.SkillManager.List) { if (skill.SkillLevel < 1) { continue; } switch (skill.Guid) { // Not sure why these don't work on their own, it may be the active // topic limit. Either way readding them should troop the limit and fix // them if they are truly broken case SkillNames.Bartending: ActiveTopic.AddToSim(sim.CreatedSim, "Bartending Skill"); Overwatch.Log("Readded Active Topic - Bartending Skill: " + sim.FullName); break; case SkillNames.Charisma: ActiveTopic.AddToSim(sim.CreatedSim, "Smooth Recovery"); Overwatch.Log("Readded Active Topic - Charisma Skill: " + sim.FullName); break; case SkillNames.Logic: if (skill.SkillLevel >= LogicSkill.kSkillLevelForSchoolTutor) { ActiveTopic.AddToSim(sim.CreatedSim, "Logic Skill"); Overwatch.Log("Readded Active Topic - Logic Skill: " + sim.FullName); } break; case SkillNames.MartialArts: ActiveTopic.AddToSim(sim.CreatedSim, "Martial Arts Skill"); Overwatch.Log("Readded Active Topic - Martial Arts Skill: " + sim.FullName); break; // hopelessly broken regardless case SkillNames.Science: ActiveTopic.AddToSim(sim.CreatedSim, "Science Skill"); Overwatch.Log("Readded Active Topic - Science Skill: " + sim.FullName); break; } } } }
protected void PrivateAddBandMember(RockBand ths, SimDescription otherSimDesc) { if (ths.mBandInfo == null) { ths.mBandInfo = new RockBandInfo(); ths.mBandInfo.AddBandMember(ths.SkillOwner.SimDescriptionId); Sim createdSim = ths.SkillOwner.CreatedSim; if (createdSim != null) { ActiveTopic.AddToSim(createdSim, "Rock Band"); } } //if (ths.mBandInfo.NumBandMembers < 0x4) { ths.mBandInfo.AddBandMember(otherSimDesc.SimDescriptionId); Sim sim = otherSimDesc.CreatedSim; if (sim != null) { ActiveTopic.AddToSim(sim, "Rock Band"); } SkillManager skillManager = otherSimDesc.SkillManager; RockBand skill = skillManager.GetSkill <RockBand>(SkillNames.RockBand); if (skill == null) { skillManager.AddAutomaticSkill(SkillNames.RockBand); skill = skillManager.GetSkill <RockBand>(SkillNames.RockBand); } skill.mBandInfo = ths.mBandInfo; skill.BandNameUpdate(ths.mBandInfo.BandName); } }
public void HourlyCallback() { if (GameUtils.IsOnVacation() || GameUtils.IsUniversityWorld()) { return; } Pregnancy.mHourOfPregnancy++; if (Pregnancy.mHourOfPregnancy >= Abductor.Settings.mHourToStartPregnantWalk) { ActiveTopic.AddToSim(Abductee, "Pregnant", Abductee.SimDescription); if (!Pregnancy.mHasRequestedWalkStyle) { Pregnancy.mHasRequestedWalkStyle = Abductee.RequestWalkStyle(Sim.WalkStyle.Pregnant); } } if (Pregnancy.mHourOfPregnancy == Abductor.Settings.mHourToStartLabor) { for (int i = 0; i < Pregnancy.kNumberOfPuddlesForWaterBreak; i++) { PuddleManager.AddPuddle(Abductee.PositionOnFloor); } if (Abductee.IsSelectable) { StyledNotification.Show(new StyledNotification.Format(Localization.LocalizeString("Gameplay/ActorSystems/Pregnancy:BabyIsComingTNS", new object[] { Abductee }), StyledNotification.NotificationStyle.kGameMessageNegative)); } //Abductee.BuffManager.RemoveElement(AbductionBuffs.sXenogenesis); Abductee.BuffManager.AddElement(BuffsAndTraits.sBabyIsComing, Origin.FromPregnancy); if (Pregnancy.mContractionBroadcast != null) { Pregnancy.mContractionBroadcast.Dispose(); } Pregnancy.mContractionBroadcast = new ReactionBroadcaster(Abductee, Pregnancy.kContractionBroadcasterParams, new ReactionBroadcaster.BroadcastCallback(StartReaction), new ReactionBroadcaster.BroadcastCallback(CancelReaction)); Abductee.AddInteraction(TakeToHospitalEx.Singleton); InteractionInstance interaction = Pregnancy.HaveContraction.Singleton.CreateInstance(Abductee, Abductee, new InteractionPriority(InteractionPriorityLevel.High, 10f), false, false); interaction.Hidden = true; Abductee.InteractionQueue.Add(interaction); Pregnancy.mContractionsAlarm = Abductee.AddAlarmRepeating(5f, TimeUnit.Minutes, new AlarmTimerCallback(Pregnancy.TriggerContraction), 5f, TimeUnit.Minutes, "Alien Pregnancy Trigger Contractions Alarm", AlarmType.AlwaysPersisted); EventTracker.SendEvent(EventTypeId.kPregnancyContractionsStarted, Abductee); } if (Pregnancy.mHourOfPregnancy == Abductor.Settings.mHoursOfPregnancy) { HaveTheBaby(); } SetPregnancyMorph(); }
public override bool Run() { Actor.SimDescription.Pregnancy.mHasShownPregnancy = true; if (Actor.IsSelectable) { PlumbBob.SelectActor(Actor); Camera.FocusOnSim(Actor, Pregnancy.kShowPregnancyCameraLerp.Zoom, Pregnancy.kShowPregnancyCameraLerp.Pitch, Pregnancy.kShowPregnancyCameraLerp.Time, true, false); Audio.StartSound("sting_alien_visit"); //Audio.StartObjectSound(Actor.ObjectId, "sting_alien_visit", false); } Actor.SimDescription.ShowPregnancy(); Actor.BuffManager.AddElement(BuffsAndTraits.sXenogenesis, Origin.FromPregnancy); if (Actor.BuffManager.HasElement(BuffNames.Nauseous)) { Actor.BuffManager.GetElement(BuffNames.Nauseous).mBuffOrigin = Origin.FromPregnancy; } ActiveTopic.AddToSim(Actor, "Announce Pregnancy"); Actor.SimDescription.Pregnancy.TryToGiveLeave(); Tutorialette.TriggerLesson(Lessons.Pregnancy, Actor); Actor.PlaySoloAnimation("a_alien_pregnancy_inspectStomach", true); if (Actor.Occupation != null) { Actor.Occupation.RemoveAllJobs(); } return(true); }
public override void HourlyCallback() { if (GameUtils.IsOnVacation() || GameUtils.IsUniversityWorld()) { Common.DebugNotify(mMom.FullName + Common.NewLine + "RobotPregnancy.HourlyCallback" + Common.NewLine + " - Pregnancy Paused"); return; } mHourOfPregnancy++; string msg = mMom.FullName + Common.NewLine + "RobotPregnancy.HourlyCallback" + Common.NewLine + " - Hour: " + mHourOfPregnancy + Common.NewLine; if (mMom.Household.IsTouristHousehold) { msg += " - Foreign Sim" + Common.NewLine; ForeignVisitorsSituation foreignVisitorsSituation = ForeignVisitorsSituation.TryGetForeignVisitorsSituation(mMom); if (mHourOfPregnancy == Woohooer.Settings.mForeignRobotDisplayTNS && foreignVisitorsSituation != null) { StyledNotification.Show(new StyledNotification.Format(Localization.LocalizeString("Gameplay/ActorSystems/Pregnancy:ForeignBabyIsComingTNS", new object[] { mMom }), StyledNotification.NotificationStyle.kGameMessagePositive), "glb_tns_baby_coming_r2"); } if (mHourOfPregnancy == Woohooer.Settings.mForeignRobotLeavesWorld) { if (foreignVisitorsSituation != null) { foreignVisitorsSituation.MakeGuestGoHome(mMom); } else if (mMom.SimDescription.AssignedRole != null) { mMom.SimDescription.AssignedRole.RemoveSimFromRole(); } } if (mHourOfPregnancy > Woohooer.Settings.mForeignRobotLeavesWorld) { Common.DebugNotify(msg); mHourOfPregnancy--; return; } } if (mHourOfPregnancy >= Woohooer.Settings.mRobotHourToStartWalkingPregnant) { ActiveTopic.AddToSim(mMom, "Pregnant", mMom.SimDescription); RequestPregnantWalkStyle(); } if (mHourOfPregnancy == Woohooer.Settings.mRobotHoursOfPregnancy) { msg += " - Having the Baby"; HaveTheBaby(); } Common.DebugNotify(msg); }
public void HaveTheBaby() { if (Pregnancy.mContractionBroadcast != null) { Pregnancy.mContractionBroadcast.Dispose(); } Abductee.RemoveAlarm(Pregnancy.PreggersAlarm); Abductee.RemoveAlarm(Pregnancy.mContractionsAlarm); bool flag = false; foreach (InteractionInstance current in Abductee.InteractionQueue.InteractionList) { HaveAlienBabyHospital haveBabyHospital = current as HaveAlienBabyHospital; if (haveBabyHospital != null) { haveBabyHospital.CancellableByPlayer = false; haveBabyHospital.BabyShouldBeBorn = true; flag = true; break; } } if (!flag) { List <RabbitHole> hospitals = RabbitHole.GetRabbitHolesOfType(RabbitHoleType.Hospital); float distanceToBirthplace = Abductee.LotHome.GetDistanceToObject(Abductee); RabbitHole hospital = null; foreach (RabbitHole current in hospitals) { float distanceToHospital = current.RabbitHoleProxy.GetDistanceToObject(Abductee); if (distanceToHospital < distanceToBirthplace) { distanceToBirthplace = distanceToHospital; hospital = current; } } InteractionInstance instance; if (hospital != null) { instance = HaveAlienBabyHospital.Singleton.CreateInstance(hospital, Abductee, new InteractionPriority(InteractionPriorityLevel.Pregnancy), false, false); (instance as HaveAlienBabyHospital).BabyShouldBeBorn = true; } else { instance = HaveAlienBabyHome.Singleton.CreateInstance(Abductee.LotHome, Abductee, new InteractionPriority(InteractionPriorityLevel.Pregnancy), false, false); } Abductee.InteractionQueue.Add(instance); ActiveTopic.AddToSim(Abductee, "Recently Had Baby"); } }
public override bool InRabbitHole() { try { LotManager.SetAutoGameSpeed(); bool succeeded = false; BeginCommodityUpdates(); // Custom if (IsAllowedToWork(mCareer) || mCareer.ShouldBeAtWork()) { DateAndTime previousDateAndTime = SimClock.CurrentTime(); float num2 = SimClock.HoursUntil(mCareer.CurLevel.FinishTime()) + mCareer.OvertimeHours; while (!Actor.WaitForExitReason(1f, ~(ExitReason.Replan | ExitReason.MidRoutePushRequested | ExitReason.ObjectStateChanged | ExitReason.PlayIdle | ExitReason.MaxSkillPointsReached)) && !mCareer.IsSpecialWorkTime) { if (mCareer.IsRegularWorkTime()) { break; } } if (Actor.HasExitReason(~(ExitReason.Replan | ExitReason.MidRoutePushRequested | ExitReason.ObjectStateChanged | ExitReason.PlayIdle | ExitReason.MaxSkillPointsReached))) { EndCommodityUpdates(false); return(false); } mCareer.StartWorking(); succeeded = DoLoop(~(ExitReason.Replan | ExitReason.MidRoutePushRequested | ExitReason.ObjectStateChanged | ExitReason.PlayIdle | ExitReason.MaxSkillPointsReached), new InteractionInstance.InsideLoopFunction(LoopDelegate), null); mCareer.FinishWorking(); if (!succeeded) { EventTracker.SendEvent(EventTypeId.kWorkCanceled, Actor); } float num3 = SimClock.ElapsedTime(TimeUnit.Hours, previousDateAndTime); if ((num3 > num2) || (Math.Abs((float)(num3 - num2)) <= kStayLateThreshold)) { EventTracker.SendEvent(EventTypeId.kCareerOpportunity_StayedLate, Actor); } } EndCommodityUpdates(succeeded); ActiveTopic.AddToSim(Actor, "After Work"); return(succeeded); } catch (ResetException) { throw; } catch (Exception e) { Common.Exception(Actor, Target, e); return(false); } }
public override void OnHappening() { foreach (Sim sim in base.Guests) { ActiveTopic.AddToSim(sim, "Funeral", mWhoDied); } foreach (Sim sim2 in base.OtherHosts) { ActiveTopic.AddToSim(sim2, "Funeral", mWhoDied); } ActiveTopic.AddToSim(base.Host, "Funeral", mWhoDied); }
private void OnStartedPartyFinishes() { if (!mbPartyFinishedCalled) { mbPartyFinishedCalled = true; Party.PartyOutcomes partyOutcome = GetPartyOutcome(); Party.SpecialPartyOutcome specialPartyOutcome = GetSpecialPartyOutcome(); bool flag = Host.HasTrait(TraitNames.LegendaryHost); switch (specialPartyOutcome) { case Party.SpecialPartyOutcome.kSpecialConditionsFailed: partyOutcome = Party.PartyOutcomes.kBadParty; break; } switch (partyOutcome) { case Party.PartyOutcomes.kBadParty: Host.BuffManager.AddElement(BuffNames.ThrewLameParty, Origin.FromUnhappyGuests); break; case Party.PartyOutcomes.kGoodParty: Host.BuffManager.AddElement(BuffNames.ThrewAGreatParty, Origin.FromHappyGuests); break; } Host.BuffManager.UnpauseBuff(BuffNames.TheLifeOfTheParty); Host.BuffManager.UnpauseBuff(BuffNames.AwesomeParty); Host.PartyAnimalWooList.Clear(); foreach (Sim sim in OtherHosts) { if (flag) { sim.BuffManager.AddElement(BuffNames.AwesomeParty, Origin.FromLegendaryHost); } sim.BuffManager.UnpauseBuff(BuffNames.TheLifeOfTheParty); sim.BuffManager.UnpauseBuff(BuffNames.AwesomeParty); sim.PartyAnimalWooList.Clear(); } ActiveTopic.AddToSim(Host, "Party Over"); EventTracker.SendEvent(new PartyEvent(EventTypeId.kPartyOver, Host, Host.SimDescription, this)); if (specialPartyOutcome == Party.SpecialPartyOutcome.kSpecialConditionsFailed) { ShowSpecialFailureTNS(); } else { ShowPartyEndTNS(partyOutcome); } } }
private new void OnDisplayCas() { try { Sim instanceActor = LinkedInteractionInstance.InstanceActor; if (instanceActor == null) { return; } bool flag = !Target.Repairable.Broken && (Target.Upgradable.Inkinization || !RandomUtil.RandomChance01(Tattooing.GetChanceOfFailure(Actor, instanceActor))); if (!flag) { Sim actor = instanceActor; ObjectGuid choice = ObjectGuid.InvalidObjectGuid; if (Actor.IsSelectable) { actor = Actor; choice = instanceActor.ObjectId; } if (instanceActor.IsSelectable || Actor.IsSelectable) { TattooChair.AddFailureTattoo(instanceActor); } actor.ShowTNSIfSelectable(TattooChair.LocalizeString("FailureTns" + RandomUtil.GetInt(0x2), new object[0x0]), StyledNotification.NotificationStyle.kSimTalking, Actor.ObjectId, choice); } else if ((Actor.IsSelectable || instanceActor.IsSelectable) && TryDeductFunds(Target, Actor, instanceActor)) { bool tookSemaphore = mTookSemaphore; DisplayCAS(instanceActor, ref tookSemaphore); mTookSemaphore = tookSemaphore; EventTracker.SendEvent(EventTypeId.kGotTattoo, instanceActor); } ActiveTopic.AddToSim(instanceActor, "Got a Tattoo"); (LinkedInteractionInstance as TattooChair.GetTattoo).IsSuccess = flag; } catch (ResetException) { throw; } catch (Exception e) { Common.Exception(Actor, Target, e); } }
public static bool GhostSpawn(Urnstone me, Lot lot) { if (me.DeadSimsDescription == null) { return(false); } if (!me.DeadSimsDescription.IsValidDescription) { me.DeadSimsDescription.Fixup(); } Vector3 position; if (me.DeadSimsDescription.ToddlerOrBelow) { position = lot.EntryPoint(); } else if (!me.InInventory) { position = me.Position; } else { position = Service.GetPositionInRandomLot(lot); } Household.NpcHousehold.Add(me.DeadSimsDescription); Sim sim = Instantiation.Perform(me.DeadSimsDescription, position, null, null); sim.SetOpacity(0f, 0f); ActiveTopic.AddToSim(sim, "Ghost"); me.GhostSetup(sim, true); if (!me.InInventory) { sim.GreetSimOnLot(me.LotCurrent); Audio.StartObjectSound(me.ObjectId, "sting_ghost_appear", false); } sim.FadeIn(); me.CreateAlarmReturnToGrave(false); return(true); }
public static bool AddSimToGraduationList(Annex ths, SimDescription simDesc, AcademicDegree degree) { if ((simDesc == null) || (degree == null)) { return(false); } if (IsAGraduationCeremonyInitializedAndIfNecessaryStartOne(ths)) { ths.mGraduatingSims.Add(simDesc, degree); if (simDesc.CreatedSim != null) { ActiveTopic.AddToSim(simDesc.CreatedSim, "University Graduation"); } } return(ths.mGraduationCeremonyInitialized); }
public override void Init(SimArrestSituationEx parent) { if (parent.SimToArrest.LotCurrent != parent.Lot) { if (parent.SimToArrest.Parent == Parent.CopCar) { OnArrestFinished(parent.Cop, 1); } else { Exit(); } } ActiveTopic.AddToSim(parent.Cop, "Policeman Arrest Burglar", null); RequestWalkStyle(parent.Cop, Sim.WalkStyle.Run); SituationSocial.Definition i = new SituationSocial.Definition("Policeman Arrest Burglar", new string[0x0], null, false); ForceSituationSpecificInteraction(parent.SimToArrest, parent.Cop, i, null, OnArrested, OnArrestFailed); }
public static Terrarium Create(InsectJig ths, Sim actor) { Terrarium terrarium = Terrarium.Create(ths.InsectType); if (Inventories.TryToMove(terrarium, actor)) { InsectData data; if (InsectData.sData.TryGetValue(ths.InsectType, out data)) { bool flag; bool flag2; (actor.SkillManager.AddElement(SkillNames.Collecting) as Collecting).Collected(ths.InsectType, actor, terrarium, out flag, out flag2); /* * string str = CatchInsect.GetLocalizedCatchSuccessTNS(this.InsectType, data.Rarity, terrarium.Value, actor); * string message = str; * if (flag) * { * string str3 = CatchInsect.LocalizeString(actor.IsFemale, "TNSScienceLab", new object[0]); * message = CatchInsect.LocalizeString(actor.IsFemale, "TNSFullPlusScienceLab", new object[] { str, str3 }); * } * actor.ShowTNSIfSelectable(message, StyledNotification.NotificationStyle.kGameMessagePositive, ObjectGuid.InvalidObjectGuid); * if (!flag2) * { * actor.Play3dStingIfSelectable("sting_collect_collection"); * } */ EventTracker.SendEvent(EventTypeId.kCaughtBug, actor, terrarium); ActiveTopic.AddToSim(actor, "Recently Collected Bugs"); } return(terrarium); } else { terrarium.Destroy(); return(null); } }
public override bool Run() { try { if (this.CheckForCancelAndCleanup()) { return(false); } if (!this.Target.RouteToOpen(this, true)) { return(false); } if (this.Target.InUse) { this.Actor.AddExitReason(ExitReason.RouteFailed); return(false); } this.mImpassableRegion.AddMember(this.Actor); this.mImpassableRegion.AddMember(this.Target); this.mImpassableRegion.UpdateFootprint(); base.StandardEntry(); if (this.Actor.SimDescription.TeenOrAbove && !this.ChosenRecipe.IsSnack) { this.Actor.SkillManager.AddElement(SkillNames.Cooking); } bool flag = true; List <Ingredient> ingredientsUsed = new List <Ingredient>(); if (AniRecipe.UseUpIngredientsFrom(this.ChosenRecipe, this.Actor, ref ingredientsUsed, this.Quantity, this.ChosenRecipe.IsSnack) || this.Actor.IsNPC) { //If the food is a snack, remove ingredient if (this.ChosenRecipe.IsSnack && !this.Actor.IsNPC) { Recipe snack = AniRecipe.ReturnSnackIngredientRecipe(this.Actor, this.ChosenRecipe); if (snack != null) { //Create new temp ingredient list foreach (var item in ingredientsUsed) { item.Destroy(); } ingredientsUsed.Clear(); } } //CommonMethods.PrintMessage("Snack: " + this.ChosenRecipe.IsSnack + " / " + ingredientsUsed.Count.ToString()); Fridge.EnterStateMachine(this); IRemovableFromFridgeAsInitialRecipeStep removableFromFridgeAsInitialRecipeStep = GlobalFunctions.CreateObjectOutOfWorld(this.ChosenRecipe.ObjectToCreateInFridge, this.ChosenRecipe.ModelCodeVersion) as IRemovableFromFridgeAsInitialRecipeStep; GameObject gameObject = removableFromFridgeAsInitialRecipeStep as GameObject; gameObject.AddToUseList(this.Actor); try { this.Target.PutOnFridgeShelf(gameObject); this.mThingToPrepareOrEat = (removableFromFridgeAsInitialRecipeStep as IPartOfCookingProcess); this.mThingToPrepareOrEat.CookingProcess = new CookingProcess(this.ChosenRecipe, ingredientsUsed, this.ObjectClickedOn, this.Target.LotCurrent, this.Destination, this.Quantity, this.Repetition, this.MenuText, this.MenuPath, removableFromFridgeAsInitialRecipeStep as IPartOfCookingProcess, this.Actor); removableFromFridgeAsInitialRecipeStep.InitializeForRecipe(this.ChosenRecipe, false); CookingProcess.MoveToNextStep(removableFromFridgeAsInitialRecipeStep as IPartOfCookingProcess, this.Actor); base.SetActor(removableFromFridgeAsInitialRecipeStep.ActorNameForFridge, gameObject); if (this.mbWasHaveSomething) { base.AnimateSim("Ponder"); } base.AnimateSim("Remove - " + removableFromFridgeAsInitialRecipeStep.ActorNameForFridge); this.TriggerWatchCookingReactionBroadcaster(); } catch (Exception ex) { if (ex == null) { } gameObject.Destroy(); throw; } CarrySystem.EnterWhileHolding(this.Actor, removableFromFridgeAsInitialRecipeStep, false); if (this.CheckForCancelAndCleanup()) { return(false); } if (this.Actor.HasTrait(TraitNames.NaturalCook)) { TraitTipsManager.ShowTraitTip(13271263770231522448uL, this.Actor, TraitTipsManager.TraitTipCounterIndex.NaturalCook, TraitTipsManager.kNaturalCookCountOfMealsCooked); } if (this.Actor.HasTrait(TraitNames.Vegetarian)) { TraitTipsManager.ShowTraitTip(13271263770231522928uL, this.Actor, TraitTipsManager.TraitTipCounterIndex.Vegetarian, TraitTipsManager.kVegetarianCountOfMealsCooked); } this.PushNextInteraction(removableFromFridgeAsInitialRecipeStep, gameObject); base.AnimateSim("Exit - Standing"); } else { flag = false; } base.StandardExit(); if (flag) { ActiveTopic.AddToSim(this.Actor, "Has Made Food"); } return(flag); } catch (Exception ex) { CommonMethods.PrintMessage("Fridge: " + ex.Message); return(false); } }
protected override bool Run(SimDescription me, bool singleSelection) { if (!ApplyAll) { mAdoptionParams = AdoptionDialog.Show(Common.Localize(GetTitlePrefix() + ":Prompt", me.IsFemale, new object[] { me })); if (mAdoptionParams.mCancelled) { return(false); } } List <SimDescription> residents = new List <SimDescription>(); foreach (SimDescription sim in SimListing.GetResidents(true).Values) { if (!sim.IsHuman) { continue; } residents.Add(sim); } SimDescription dad = RandomUtil.GetRandomObjectFromList(residents); SimDescription mom = RandomUtil.GetRandomObjectFromList(residents); SimDescription newKid = null; if ((dad != null) && (mom != null)) { if (dad.CelebrityManager == null) { dad.Fixup(); } if (mom.CelebrityManager == null) { mom.Fixup(); } newKid = Genetics.MakeDescendant(dad, mom, mAdoptionParams.mAge, mAdoptionParams.mIsFemale ? CASAgeGenderFlags.Female : CASAgeGenderFlags.Male, 100, new Random(), false, false, true); } else { SimUtils.SimCreationSpec spec = new SimUtils.SimCreationSpec(); spec.Gender = mAdoptionParams.mIsFemale ? CASAgeGenderFlags.Female : CASAgeGenderFlags.Male; spec.Age = mAdoptionParams.mAge; spec.Normalize(); newKid = spec.Instantiate(); } if (newKid == null) { Common.Notify(Common.Localize(GetTitlePrefix() + ":Failure")); return(false); } string genderName = null; if (newKid.IsFemale) { genderName = Common.Localize("BabyGender:Female"); } else { genderName = Common.Localize("BabyGender:Male"); } string name = StringInputDialog.Show(Name, Common.Localize("InstaBaby:NamePrompt", newKid.IsFemale, new object[0]), newKid.FirstName); if (!string.IsNullOrEmpty(name)) { newKid.FirstName = name; } newKid.LastName = me.LastName; me.Household.Add(newKid); newKid.WasAdopted = true; Sim adoptedChild = Instantiation.Perform(newKid, null); if (adoptedChild != null) { ResetSimTask.UpdateInterface(adoptedChild); SocialWorkerAdoptionSituation.InstantiateNewKid instantiateNewKid = new SocialWorkerAdoptionSituation.InstantiateNewKid(); instantiateNewKid.AssignTraits(adoptedChild); instantiateNewKid.GiveImaginaryFriendDoll(newKid); me.Genealogy.AddChild(newKid.Genealogy); if (me.CreatedSim != null) { ActiveTopic.AddToSim(me.CreatedSim, "Recently Had Baby"); EventTracker.SendEvent(EventTypeId.kAdoptedChild, me.CreatedSim, adoptedChild); EventTracker.SendEvent(EventTypeId.kNewOffspring, me.CreatedSim, adoptedChild); EventTracker.SendEvent(EventTypeId.kParentAdded, adoptedChild, me.CreatedSim); } MidlifeCrisisManager.OnHadChild(me); Genealogy spouse = me.Genealogy.Spouse; if (spouse != null) { spouse.AddChild(newKid.Genealogy); SimDescription spouseDesc = spouse.SimDescription; if (spouseDesc != null) { MidlifeCrisisManager.OnHadChild(spouseDesc); if (spouseDesc.CreatedSim != null) { ActiveTopic.AddToSim(spouseDesc.CreatedSim, "Recently Had Baby"); EventTracker.SendEvent(EventTypeId.kAdoptedChild, spouseDesc.CreatedSim, adoptedChild); EventTracker.SendEvent(EventTypeId.kNewOffspring, spouseDesc.CreatedSim, adoptedChild); EventTracker.SendEvent(EventTypeId.kParentAdded, adoptedChild, spouseDesc.CreatedSim); } } } EventTracker.SendEvent(EventTypeId.kChildBornOrAdopted, null, adoptedChild); } return(true); }
public static void SetPartner(SimDescription ths, SimDescription x) { Common.StringBuilder msg = new Common.StringBuilder(); try { if ((ths == null) || (x == null)) { return; } msg += "A"; if (ths.Partner != x) { if (x.IsMale) { ths.IncreaseGenderPreferenceMale(); } else { ths.IncreaseGenderPreferenceFemale(); } if (ths.IsMale) { x.IncreaseGenderPreferenceMale(); } else { x.IncreaseGenderPreferenceFemale(); } msg += "B"; if ((ths.Partner != null) && (ths.Partner != x)) { ths.Partner.ClearPartner(); } if ((x.Partner != null) && (x.Partner != ths)) { x.ClearPartner(); } msg += "C"; Relationship relationship = Relationship.Get(ths, x, true); if (relationship != null) { // Must be able to create a relationship to set the Partner ths.Partner = x; x.Partner = ths; msg += "D"; InformationLearnedAboutSim info = relationship.InformationAbout(x); if (info != null) { info.PartnerKnown = true; } info = relationship.InformationAbout(ths); if (info != null) { info.PartnerKnown = true; } } msg += "E"; if ((x.CreatedSim != null) && (x.TraitManager.HasElement(TraitNames.CommitmentIssues))) { ActiveTopic.AddToSim(x.CreatedSim, "Has Made Commitment"); } msg += "F"; if ((ths.CreatedSim != null) && (ths.TraitManager.HasElement(TraitNames.CommitmentIssues))) { ActiveTopic.AddToSim(ths.CreatedSim, "Has Made Commitment"); } msg += "G"; } } catch (Exception e) { Common.Exception(ths, x, msg, e); } }
public static void OnMarried(Sim actor, Sim target, string interaction, ActiveTopic topic, InteractionInstance i) { try { string failReason = null; if ((actor.Household == target.Household) || (!MovingSituation.MovingInProgress && ((Household.ActiveHousehold == null) || InWorldSubState.IsEditTownValid(Household.ActiveHousehold.LotHome, ref failReason)))) { Sim actorSim; Sim targetSim; BuffManager actorBuffManager = actor.BuffManager; BuffManager targetBuffManager = target.BuffManager; actorBuffManager.AddElement(BuffNames.JustMarried, Origin.FromSocialization); targetBuffManager.AddElement(BuffNames.JustMarried, Origin.FromSocialization); BuffJustMarried.BuffInstanceJustMarried element = actorBuffManager.GetElement(BuffNames.JustMarried) as BuffJustMarried.BuffInstanceJustMarried; if (element != null) { element.CreateGiftAlarm(actorBuffManager); } actorBuffManager.RemoveElement(BuffNames.NewlyEngaged); actorBuffManager.RemoveElement(BuffNames.ParentsBlessing); targetBuffManager.RemoveElement(BuffNames.NewlyEngaged); targetBuffManager.RemoveElement(BuffNames.ParentsBlessing); ActiveTopic.AddToSim(actor, "Wedding"); ActiveTopic.AddToSim(target, "Wedding"); Relationship relationship = Relationship.Get(actor, target, true); relationship.LTR.RemoveInteractionBit(LongTermRelationship.InteractionBits.Divorce); relationship.LTR.AddInteractionBit(LongTermRelationship.InteractionBits.Marry); if (actor.IsNPC && !target.IsNPC) { actorSim = target; targetSim = actor; } else if (!actor.IsNPC && target.IsNPC) { actorSim = actor; targetSim = target; } else { SimDescription proposerDesc = relationship.ProposerDesc; actorSim = (proposerDesc == null) ? null : proposerDesc.CreatedSim; if (actorSim == null) { if (RandomUtil.CoinFlip()) { actorSim = actor; } else { actorSim = target; } } targetSim = target; if (actorSim == target) { targetSim = actor; } } SocialCallback.GiveDaysOffIfRequired(actorSim, targetSim); MidlifeCrisisManager.OnBecameMarried(actor.SimDescription, target.SimDescription); relationship.SetMarriedInGame(); if (SeasonsManager.Enabled) { relationship.WeddingAnniversary = new WeddingAnniversary(SeasonsManager.CurrentSeason, (int)SeasonsManager.DaysElapsed); relationship.WeddingAnniversary.SimA = relationship.SimDescriptionA; relationship.WeddingAnniversary.SimB = relationship.SimDescriptionB; relationship.WeddingAnniversary.CreateAlarm(); } if (sStoryProgressionHandleMarriageName.Valid) { sStoryProgressionHandleMarriageName.Invoke <bool>(new object[] { actorSim.SimDescription, targetSim.SimDescription }); } else { targetSim.SimDescription.LastName = actorSim.SimDescription.LastName; foreach (Genealogy genealogy in targetSim.Genealogy.Children) { SimDescription simDescription = genealogy.SimDescription; if (((simDescription != null) && simDescription.TeenOrBelow) && (simDescription.CreatedSim != null)) { simDescription.LastName = actorSim.SimDescription.LastName; } } } actor.Genealogy.Marry(target.Genealogy); OnMoveInWith(actor, target, interaction, topic, i); SocialCallback.EndServiceForActor(actor); SocialCallback.EndServiceForActor(target); actorBuffManager.RemoveElement(BuffNames.MissedWedding); targetBuffManager.RemoveElement(BuffNames.MissedWedding); } } catch (ResetException) { throw; } catch (Exception e) { Common.Exception(actor, target, e); } }
public override bool Continue(Sim mom, bool momJustCreated) { if (mom == null) { return(false); } if (momJustCreated) { mHasRequestedWalkStyle = false; } mMom = mom; mDad = null; SimDescription simDescription; if (RobotDadDescriptionID != 0uL) { simDescription = SimDescription.Find(RobotDadDescriptionID); } else { simDescription = SimDescription.Find(DadDescriptionId); } if (simDescription != null && simDescription.IsMale && simDescription.TeenOrAbove) { mDad = simDescription.CreatedSim; } mTimeMoodSampled = SimClock.CurrentTime(); mMom.MoodManager.MoodChanged += new MoodManager.MoodChangedCallback(MoodManager_MoodChanged); ActiveTopic.AddToSim(mom, "Pregnancy"); if (momJustCreated) { PreggersAlarm = mom.AddAlarmRepeating(1f, TimeUnit.Hours, new AlarmTimerCallback(HourlyCallback), 1f, TimeUnit.Hours, "Hourly Robot Pregnancy Update Alarm", AlarmType.AlwaysPersisted); } mom.SimDescription.Pregnancy = this; int arg_C0_0 = mHourOfPregnancy; if (mHourOfPregnancy >= 0) { if (mHourOfPregnancy < Woohooer.Settings.mRobotHoursOfPregnancy) { mMom.BuffManager.AddElement(BuffNames.Pregnant, Origin.FromPregnancy); } ActiveTopic.AddToSim(mMom, "Announce Pregnancy"); if (mDad != null && !mDad.HasBeenDestroyed) { ActiveTopic.AddToSim(mDad, "Pregnant", mDad.SimDescription); } } if (mHourOfPregnancy >= Woohooer.Settings.mRobotHourToStartWalkingPregnant) { ActiveTopic.AddToSim(mMom, "Pregnant", mMom.SimDescription); RequestPregnantWalkStyle(); } // Robots will not have a labor stage. if (mHourOfPregnancy == Woohooer.Settings.mRobotHoursOfPregnancy) { mMom.AddAlarm(1f, TimeUnit.Minutes, new AlarmTimerCallback(HaveTheBaby), "Have the baby", AlarmType.AlwaysPersisted); } TryToGiveLeave(); return(true); }
public bool BumpToHighestState(Common.IStatGenerator stats, SimDescription a, SimDescription b) { while (BumpToHigherState(stats, a, b)) { ; } if ((!a.IsMarried) && (!b.IsMarried)) { IncStat("BumpUp: Not Married"); stats.IncStat("BumpUp: Not Married"); return(false); } if (a.CreatedSim != null) { a.CreatedSim.BuffManager.AddElement(BuffNames.JustMarried, Origin.FromSocialization); a.CreatedSim.BuffManager.RemoveElement(BuffNames.NewlyEngaged); ActiveTopic.AddToSim(a.CreatedSim, "Wedding"); } if (b.CreatedSim != null) { b.CreatedSim.BuffManager.AddElement(BuffNames.JustMarried, Origin.FromSocialization); b.CreatedSim.BuffManager.RemoveElement(BuffNames.NewlyEngaged); ActiveTopic.AddToSim(b.CreatedSim, "Wedding"); } if ((a.CreatedSim != null) && (b.CreatedSim != null)) { SocialCallback.GiveDaysOffIfRequired(a.CreatedSim, b.CreatedSim); } a.Genealogy.Marry(b.Genealogy); Relationship relationship = ManagerSim.GetRelationship(a, b); if (relationship != null) { MidlifeCrisisManager.OnBecameMarried(a, b); relationship.LTR.RemoveInteractionBit(LongTermRelationship.InteractionBits.Divorce); relationship.LTR.AddInteractionBit(LongTermRelationship.InteractionBits.Marry); relationship.SetMarriedInGame(); if (SeasonsManager.Enabled) { relationship.WeddingAnniversary = new WeddingAnniversary(SeasonsManager.CurrentSeason, (int)SeasonsManager.DaysElapsed); relationship.WeddingAnniversary.SimA = relationship.SimDescriptionA; relationship.WeddingAnniversary.SimB = relationship.SimDescriptionB; relationship.WeddingAnniversary.CreateAlarm(); } return(true); } else { IncStat("BumpUp: Relation Fail"); stats.IncStat("BumpUp: Relation Fail"); return(false); } }
public void motive_motive_distress(Sim sim, CommodityKind commodity) { if (commodity == (CommodityKind)0x44440444) { return; } SimDescription simd = sim.SimDescription; BuffManager buffManager = sim.BuffManager; Motives moves = sim.Motives; switch (commodity) { case CommodityKind.Bladder: { bool flag = true; InteractionDefinition interactionDefinition; switch (simd.Species) { case CASAgeGenderFlags.Horse: interactionDefinition = Sim.HorsePee.Singleton; break; case CASAgeGenderFlags.Dog: case CASAgeGenderFlags.LittleDog: interactionDefinition = (InteractionDefinition)Sim.DogPeeStart.Singleton; break; case CASAgeGenderFlags.Cat: interactionDefinition = (InteractionDefinition)Sim.CatPeeStart.Singleton; break; default: interactionDefinition = Sim.BladderFailure.Singleton; break; } foreach (InteractionInstance interaction in sim.InteractionQueue.InteractionList) { if (interaction is Sim.DogPee || interaction is Sim.CatPee || interaction.InteractionDefinition == interactionDefinition) { flag = false; break; } } if (flag) { SwimmingInPool swimmingInPool = sim.Posture as SwimmingInPool; if (swimmingInPool == null) { InteractionInstance interactionInstance = interactionDefinition.CreateInstance(sim, sim, new InteractionPriority(InteractionPriorityLevel.High), false, false); Sim.DogPeeStart dogPeeStart = interactionInstance as Sim.DogPeeStart; if (dogPeeStart != null) { dogPeeStart.DoNotRoute = true; } else { Sim.CatPeeStart catPeeStart = interactionInstance as Sim.CatPeeStart; if (catPeeStart != null) { catPeeStart.DoNotRoute = true; } } if (sim.InteractionQueue.AddNext(interactionInstance) && simd.IsRaccoon) { sim.AddExitReason(ExitReason.BuffFailureState); } else { BuffInstance buffOfSolveCommodity = buffManager.GetBuffOfSolveCommodity(commodity); if (buffOfSolveCommodity != null && buffOfSolveCommodity.EffectValue <= 0) { ThoughtBalloonManager.BalloonData balloonData = new ThoughtBalloonManager.BalloonData(buffOfSolveCommodity.ThumbString); if (balloonData.IsValid) { balloonData.BalloonType = ThoughtBalloonTypes.kScreamBalloon; balloonData.mCoolDown = ThoughtBalloonCooldown.None; sim.ThoughtBalloonManager.ShowBalloon(balloonData); } } moves.SetMax(CommodityKind.Bladder); if (!simd.IsPet) { PuddleManager.AddPuddle(sim.Position); moves.SetValue(CommodityKind.Hygiene, -100f); if (GlobalFunctions.AreOtherSimsNearby(sim, BuffEmbarrassed.DistanceForEmbarrassedBuff)) { buffManager.AddElement(BuffNames.Embarrassed, Origin.FromPeeingSelf); } ActiveTopic.AddToSim(sim, "Embarrassment"); } else { MetaAutonomyVenueType metaAutonomyVenueType = sim.LotCurrent.GetMetaAutonomyVenueType(); if ((!simd.IsADogSpecies || metaAutonomyVenueType != MetaAutonomyVenueType.DogPark) && World.GetTerrainType(sim.Position) == TerrainType.LotFloor) { PuddleManager.AddPuddle(sim.Position); } } EventTracker.SendEvent(EventTypeId.kBladderFailure, sim); } Motive motive = moves.GetMotive(CommodityKind.Bladder); if (motive != null) { motive.PotionBladderDecayOverride = false; } } else { swimmingInPool.ContainerPool.PeeInPool(sim); } } break; } case CommodityKind.Hunger: case CommodityKind.VampireThirst: if (simd.IsFrankenstein) { OccultFrankenstein.PushFrankensteinShortOut(sim); } else if (!simd.IsGhost && !simd.IsDead && !IsCheckKillSimInteraction(sim)) { if (sim.Posture.Satisfies(CommodityKind.ScubaDiving, null) && !simd.IsMermaid) { sim.Kill(SimDescription.DeathType.ScubaDrown); } else if (sim.Posture.Satisfies(CommodityKind.SwimmingInPool, null) && !simd.IsMermaid) { sim.Kill(SimDescription.DeathType.Drown); } else if (SimTemperature.HasFrozenSolidInteraction(sim)) { sim.Kill(SimDescription.DeathType.Freeze, null, false); } else if (OccultMermaid.IsDehydrated(sim)) { sim.Kill(SimDescription.DeathType.MermaidDehydrated, null, false); } else { sim.Kill(sim.SimDescription.IsVampire ? SimDescription.DeathType.Thirst : SimDescription.DeathType.Starve); } } break; case CommodityKind.Temperature: { float value = moves.GetValue(CommodityKind.Temperature); if (value > 0f) { SimTemperature.PushSpontaneouslyCombustInteraction(sim); } else { SimTemperature.PushFreezeInteraction(sim); } break; } case CommodityKind.MermaidDermalHydration: OccultMermaid.CollapseFromDehydration(sim); break; } }
public override void OnHappening() { ActiveTopic.AddToSim(Host, "Party Happening"); }
public override void HourlyCallback() { if (GameUtils.IsOnVacation() || GameUtils.IsUniversityWorld()) { Common.DebugNotify("AlienPregnancy.HourlyCallback - Pregnancy paused"); return; } mHourOfPregnancy++; string msg = mMom.FullName + Common.NewLine + "AlienPregnancy.HourlyCallback" + Common.NewLine + " - Hour: " + mHourOfPregnancy + Common.NewLine; if (mHourOfPregnancy == Aliens.Settings.mPregnancyShow) { msg += " - Showing Pregnancy"; InteractionInstance instance = ShowAlienPregnancy.Singleton.CreateInstance(mMom, mMom, new InteractionPriority(InteractionPriorityLevel.ESRB), false, false); instance.Hidden = true; mMom.InteractionQueue.AddNext(instance); Common.DebugNotify(msg); return; } if (mMom.Household.IsTouristHousehold) { msg += " - Mother is Tourist" + Common.NewLine; ForeignVisitorsSituation situation = ForeignVisitorsSituation.TryGetForeignVisitorsSituation(mMom); if (mHourOfPregnancy == Aliens.Settings.mForeignShowTNS && situation != null) { StyledNotification.Show(new StyledNotification.Format( Localization.LocalizeString("Gameplay/ActorSystems/Pregnancy:ForeignBabyIsComingTNS", new object[] { mMom }), StyledNotification.NotificationStyle.kGameMessagePositive)); } if (mHourOfPregnancy == Aliens.Settings.mForeignLeaves) { msg += " - Sending Pregnant Tourist Home"; if (situation != null) { situation.MakeGuestGoHome(mMom); } else if (mMom.SimDescription.AssignedRole != null) { mMom.SimDescription.AssignedRole.RemoveSimFromRole(); } Common.DebugNotify(msg); } if (mHourOfPregnancy > Aliens.Settings.mForeignLeaves) { msg += " - Walking Back 1 Hour"; mHourOfPregnancy--; Common.DebugNotify(msg); return; } } if (mHourOfPregnancy >= Aliens.Settings.mStartWalk) { ActiveTopic.AddToSim(mMom, "Pregnant", mMom.SimDescription); RequestPregnantWalkStyle(); } if (mHourOfPregnancy == Aliens.Settings.mStartLabor) { msg += " - Beginning Labor" + Common.NewLine; for (int i = 0; i < Aliens.Settings.mNumPuddles; i++) { PuddleManager.AddPuddle(mMom.PositionOnFloor); } if (mMom.IsSelectable) { StyledNotification.Show(new StyledNotification.Format(Localization.LocalizeString("Gameplay/ActorSystems/Pregnancy:BabyIsComingTNS", new object[] { mMom }), StyledNotification.NotificationStyle.kGameMessageNegative), "glb_tns_baby_coming_r2"); } mMom.BuffManager.RemoveElement(BuffsAndTraits.sXenogenesis); mMom.BuffManager.AddElement(BuffsAndTraits.sAlienBabyIsComing, Origin.FromPregnancy); if (mContractionBroadcast != null) { mContractionBroadcast.Dispose(); } mContractionBroadcast = new ReactionBroadcaster(mMom, kContractionBroadcasterParams, new ReactionBroadcaster.BroadcastCallback(StartReaction), new ReactionBroadcaster.BroadcastCallback(CancelReaction)); mMom.AddInteraction(TakeToHospitalEx.Singleton); InteractionInstance entry = HaveContraction.Singleton.CreateInstance(mMom, mMom, new InteractionPriority(InteractionPriorityLevel.High, 10f), false, false); mMom.InteractionQueue.Add(entry); mContractionsAlarm = mMom.AddAlarmRepeating(5f, TimeUnit.Minutes, new AlarmTimerCallback(TriggerContraction), 5f, TimeUnit.Minutes, "Trigger Contractions Alarm", AlarmType.AlwaysPersisted); EventTracker.SendEvent(EventTypeId.kPregnancyContractionsStarted, mMom); } if (mHourOfPregnancy >= Aliens.Settings.mPregnancyDuration) { msg += " - Delivering Baby" + Common.NewLine; HaveTheBaby(); } SetPregoBlendShape(); Common.DebugNotify(msg); }
public override void HaveTheBaby() { string msg = mMom.FullName + Common.NewLine + "AlienPregnancy.HaveTheBaby" + Common.NewLine + " - Initiating Birth Sequence" + Common.NewLine; if (mContractionBroadcast != null) { mContractionBroadcast.Dispose(); } mMom.RemoveAlarm(PreggersAlarm); mMom.RemoveAlarm(mContractionsAlarm); msg += " - Pregnancy Alarm Removed" + Common.NewLine + " - Contraction Alarm Removed" + Common.NewLine; if (mMom.InteractionQueue.HasInteractionOfType(HaveAlienBabyHome.Singleton)) { msg += " - Already Birthing at Home"; Common.DebugNotify(msg); return; } if (mMom.InteractionQueue.HasInteractionOfType(HaveAlienBabyHospital.Singleton)) { msg += " - Already Birthing at Hospital"; foreach (InteractionInstance current in mMom.InteractionQueue.InteractionList) { HaveAlienBabyHospital haveBabyHosptial = current as HaveAlienBabyHospital; if (haveBabyHosptial != null) { haveBabyHosptial.CancellableByPlayer = false; haveBabyHosptial.BabyShouldBeBorn = true; Common.DebugNotify(msg); return; } } } msg += " - Checking for Hospitals" + Common.NewLine; List <RabbitHole> rabbitHoles = RabbitHole.GetRabbitHolesOfType(RabbitHoleType.Hospital); float num = mMom.LotHome.GetDistanceToObject(mMom); RabbitHole rabbitHole = null; foreach (RabbitHole current2 in rabbitHoles) { float distanceToObject = current2.RabbitHoleProxy.GetDistanceToObject(mMom); if (distanceToObject < num) { num = distanceToObject; rabbitHole = current2; } } InteractionInstance instance; if (rabbitHole != null) { msg += " - Birthing at Hospital"; instance = HaveAlienBabyHospital.Singleton.CreateInstance(rabbitHole, mMom, new InteractionPriority(InteractionPriorityLevel.Pregnancy), false, false); ((HaveAlienBabyHospital)instance).BabyShouldBeBorn = true; } else { msg += " - Birthing at Home"; instance = HaveAlienBabyHome.Singleton.CreateInstance(mMom.LotHome, mMom, new InteractionPriority(InteractionPriorityLevel.Pregnancy), false, false); } mMom.InteractionQueue.Add(instance); ActiveTopic.AddToSim(mMom, "Recently Had Baby"); Common.DebugNotify(msg); }
public override void HourlyCallback() { if (GameUtils.IsOnVacation() || GameUtils.IsUniversityWorld()) { Common.DebugNotify(mMom.FullName + Common.NewLine + "HumanSurrogatePregnancy.HourlyCallback" + Common.NewLine + " - Pregnancy Paused"); return; } mHourOfPregnancy++; string msg = mMom.FullName + Common.NewLine + "HumanSurrogatePregnancy.HourlyCallback" + Common.NewLine + " - Hour: " + mHourOfPregnancy + Common.NewLine; if (mHourOfPregnancy == kHourToStartPregnantMotives) { mMom.BuffManager.AddElement(BuffNames.Nauseous, Origin.FromUnknown); } if (mHourOfPregnancy < kHourToShowPregnantBuff && mHourOfPregnancy > kHourToStartPregnantMotives) { mMom.BuffManager.AddElement(BuffNames.Nauseous, Origin.FromUnknown); } if (mMom.Household.IsTouristHousehold) { msg += " - Foreign Sim" + Common.NewLine; ForeignVisitorsSituation foreignVisitorsSituation = ForeignVisitorsSituation.TryGetForeignVisitorsSituation(mMom); if (mHourOfPregnancy == kForeignSimDisplaysTNS && foreignVisitorsSituation != null) { StyledNotification.Show(new StyledNotification.Format(Localization.LocalizeString("Gameplay/ActorSystems/Pregnancy:ForeignBabyIsComingTNS", new object[] { mMom }), StyledNotification.NotificationStyle.kGameMessagePositive), "glb_tns_baby_coming_r2"); } if (mHourOfPregnancy == kForeignSimLeavesWorld) { if (foreignVisitorsSituation != null) { foreignVisitorsSituation.MakeGuestGoHome(mMom); } else if (mMom.SimDescription.AssignedRole != null) { mMom.SimDescription.AssignedRole.RemoveSimFromRole(); } } if (mHourOfPregnancy > kForeignSimLeavesWorld) { Common.DebugNotify(msg); mHourOfPregnancy--; return; } } if (mHourOfPregnancy == kHourToShowPregnantBuff) { msg += " - Adding Pregnant Buff" + Common.NewLine; Common.DebugNotify(msg); InteractionInstance interactionInstance = ShowPregnancyEx.Singleton.CreateInstance(mMom, mMom, new InteractionPriority(InteractionPriorityLevel.ESRB), false, false); interactionInstance.Hidden = true; mMom.InteractionQueue.AddNext(interactionInstance); return; } if (mHourOfPregnancy >= kHourToStartWalkingPregnant) { ActiveTopic.AddToSim(mMom, "Pregnant", mMom.SimDescription); RequestPregnantWalkStyle(); } if (mHourOfPregnancy == kHourToStartContractions) { msg += " - Starting Labor" + Common.NewLine; for (int i = 0; i < kNumberOfPuddlesForWaterBreak; i++) { PuddleManager.AddPuddle(mMom.PositionOnFloor); } if (mMom.IsSelectable) { StyledNotification.Show(new StyledNotification.Format(Localization.LocalizeString("Gameplay/ActorSystems/Pregnancy:BabyIsComingTNS", new object[] { mMom }), StyledNotification.NotificationStyle.kGameMessageNegative), "glb_tns_baby_coming_r2"); } mMom.BuffManager.RemoveElement(BuffNames.Pregnant); mMom.BuffManager.AddElement(BuffNames.BabyIsComing, Origin.FromPregnancy); if (mContractionBroadcast != null) { mContractionBroadcast.Dispose(); } mContractionBroadcast = new ReactionBroadcaster(mMom, kContractionBroadcasterParams, new ReactionBroadcaster.BroadcastCallback(StartReaction), new ReactionBroadcaster.BroadcastCallback(CancelReaction)); mMom.AddInteraction(TakeToHospital.Singleton); InteractionInstance entry = HaveContraction.Singleton.CreateInstance(mMom, mMom, new InteractionPriority(InteractionPriorityLevel.High, 10f), false, false); mMom.InteractionQueue.Add(entry); mContractionsAlarm = mMom.AddAlarmRepeating(5f, TimeUnit.Minutes, new AlarmTimerCallback(TriggerContraction), 5f, TimeUnit.Minutes, "Trigger Contractions Alarm", AlarmType.AlwaysPersisted); EventTracker.SendEvent(EventTypeId.kPregnancyContractionsStarted, mMom); } if (mHourOfPregnancy == kHoursOfPregnancy) { msg += " - Having the Baby"; HaveTheBaby(); } SetPregoBlendShape(); Common.DebugNotify(msg); }
public override void OnPreparation() { ActiveTopic.AddToSim(Host, "Party Preparation"); }
protected void HandleHomework(Sim sim, bool fromRabbithole) { if (sim == null) { return; } if (sim.School == null) { return; } if ((SimTypes.IsSelectable(sim)) && (sim.School.OwnersHomework != null) && (sim.School.OwnersHomework.PercentComplete == 0f)) { Notify(sim, Common.Localize("HomeSchooling:HaveHomework", sim.IsFemale, new object[] { sim })); } else { bool bExistingHomework = false; if (sim.School.OwnersHomework != null) { float perfGain = NRaas.Careers.Settings.mPerformancePerHomework * ((sim.School.OwnersHomework.PercentComplete - 50f) / 100f); sim.School.AddPerformance(perfGain); if (sim.SimDescription.CareerManager != null) { sim.SimDescription.CareerManager.UpdatePerformanceUI(this); } sim.School.OwnersHomework.Dispose(); sim.School.OwnersHomework = null; bExistingHomework = true; } if (sim.School.OwnersHomework == null) { sim.School.OwnersHomework = GlobalFunctions.CreateObjectOutOfWorld("Homework") as Homework; sim.School.OwnersHomework.OwningSimDescription = sim.SimDescription; sim.Inventory.TryToAdd(sim.School.OwnersHomework, false); } sim.School.OwnersHomework.PercentComplete = 0f; sim.School.OwnersHomework.Cheated = false; mLastHomeworkDay = SimClock.ElapsedCalendarDays(); string suffix = null; if (fromRabbithole) { suffix = "Rabbithole"; } if (bExistingHomework) { Notify(sim, Common.Localize("HomeSchooling:ExistingHomework" + suffix, sim.IsFemale, new object[] { sim })); } else { Notify(sim, Common.Localize("HomeSchooling:NewHomework" + suffix, sim.IsFemale, new object[] { sim })); } if (SchoolTuning != null) { if (sim.School.Performance >= SchoolTuning.GradeThresholdA) { sim.School.mConsecutiveDaysWithA++; if (sim.School.mConsecutiveDaysWithA >= SchoolTuning.DaysWithAForHonorRoll) { sim.BuffManager.AddElement(BuffNames.HonorStudent, Origin.FromGoodGrades); } } else { ActiveTopic.AddToSim(sim, "Complain About School"); sim.School.mConsecutiveDaysWithA = 0; if (sim.School.Performance <= SchoolTuning.GradeThresholdF) { sim.BuffManager.AddElement(BuffNames.Failing, Origin.FromBadGrades); } } } EventTracker.SendEvent(EventTypeId.kFinishedSchool, sim); } }
public override bool Continue(Sim mom, bool momJustCreated) { if (mom == null) { return(false); } if (momJustCreated) { mHasRequestedWalkStyle = false; } mMom = mom; mDad = null; CheckForDad(); mTimeMoodSampled = SimClock.CurrentTime(); mMom.MoodManager.MoodChanged += new MoodManager.MoodChangedCallback(MoodManager_MoodChanged); ActiveTopic.AddToSim(mom, "Pregnancy"); if (momJustCreated) { PreggersAlarm = mom.AddAlarmRepeating(1f, TimeUnit.Hours, new AlarmTimerCallback(HourlyCallback), 1f, TimeUnit.Hours, "Hourly Alien Pregnancy Update Alarm", AlarmType.AlwaysPersisted); } mom.SimDescription.Pregnancy = this; int arg_C0_0 = mHourOfPregnancy; int arg_BF_0 = Aliens.Settings.mPregnancyShow; if (mHourOfPregnancy >= Aliens.Settings.mPregnancyShow) { if (mHourOfPregnancy < Aliens.Settings.mStartLabor) { mMom.BuffManager.AddElement(BuffsAndTraits.sXenogenesis, Origin.FromPregnancy); } ActiveTopic.AddToSim(mMom, "Announce Pregnancy"); } if (mHourOfPregnancy >= Aliens.Settings.mStartWalk) { ActiveTopic.AddToSim(mMom, "Pregnant", mMom.SimDescription); RequestPregnantWalkStyle(); } if (mHourOfPregnancy >= Aliens.Settings.mStartLabor) { mMom.BuffManager.AddElement(BuffsAndTraits.sAlienBabyIsComing, Origin.FromPregnancy); if (mContractionBroadcast != null) { mContractionBroadcast.Dispose(); } mContractionBroadcast = new ReactionBroadcaster(mMom, kContractionBroadcasterParams, new ReactionBroadcaster.BroadcastCallback(StartReaction), new ReactionBroadcaster.BroadcastCallback(CancelReaction)); mMom.AddInteraction(TakeToHospitalEx.Singleton); InteractionInstance entry = HaveContraction.Singleton.CreateInstance(mMom, mMom, new InteractionPriority(InteractionPriorityLevel.High, 10f), false, false); mMom.InteractionQueue.Add(entry); mContractionsAlarm = mMom.AddAlarmRepeating(5f, TimeUnit.Minutes, new AlarmTimerCallback(TriggerContraction), 5f, TimeUnit.Minutes, "Trigger Contractions Alarm", AlarmType.AlwaysPersisted); } if (mHourOfPregnancy == Aliens.Settings.mPregnancyDuration) { mMom.AddAlarm(1f, TimeUnit.Minutes, new AlarmTimerCallback(HaveTheBaby), "Re-have the baby.", AlarmType.AlwaysPersisted); } SetPregoBlendShape(); if (mMom.SimDescription.IsVisuallyPregnant) { TryToGiveLeave(); } return(true); }
public override bool Continue(Sim mom, bool momJustCreated) { if (mom == null) { return(false); } if (momJustCreated) { mHasRequestedWalkStyle = false; } mMom = mom; mDad = null; mTimeMoodSampled = SimClock.CurrentTime(); mMom.MoodManager.MoodChanged += new MoodManager.MoodChangedCallback(MoodManager_MoodChanged); ActiveTopic.AddToSim(mom, "Pregnancy"); if (momJustCreated) { PreggersAlarm = mom.AddAlarmRepeating(1f, TimeUnit.Hours, new AlarmTimerCallback(HourlyCallback), 1f, TimeUnit.Hours, "Hourly Human Surrogate Pregnancy Update Alarm", AlarmType.AlwaysPersisted); } mom.SimDescription.Pregnancy = this; int arg_C0_0 = mHourOfPregnancy; int arg_BF_0 = kHourToShowPregnantBuff; if (mHourOfPregnancy >= kHourToShowPregnantBuff) { if (mHourOfPregnancy < kHourToStartContractions) { mMom.BuffManager.AddElement(BuffNames.Pregnant, Origin.FromPregnancy); } ActiveTopic.AddToSim(mMom, "Announce Pregnancy"); } if (mHourOfPregnancy >= kHourToStartWalkingPregnant) { ActiveTopic.AddToSim(mMom, "Pregnant", mMom.SimDescription); RequestPregnantWalkStyle(); } if (mHourOfPregnancy >= kHourToStartContractions) { // Add BabyIsComing moodlet here! if (mContractionBroadcast != null) { mContractionBroadcast.Dispose(); } mContractionBroadcast = new ReactionBroadcaster(mMom, kContractionBroadcasterParams, new ReactionBroadcaster.BroadcastCallback(StartReaction), new ReactionBroadcaster.BroadcastCallback(CancelReaction)); // Add TakeToHospital interaction here! InteractionInstance entry = HaveContraction.Singleton.CreateInstance(mMom, mMom, new InteractionPriority(InteractionPriorityLevel.High, 10f), false, false); mMom.InteractionQueue.Add(entry); mContractionsAlarm = mMom.AddAlarmRepeating(5f, TimeUnit.Minutes, new AlarmTimerCallback(TriggerContraction), 5f, TimeUnit.Minutes, "Trigger Contractions Alarm", AlarmType.AlwaysPersisted); } if (mHourOfPregnancy == kHoursOfPregnancy) { mMom.AddAlarm(1f, TimeUnit.Minutes, new AlarmTimerCallback(HaveTheBaby), "Re-have the baby", AlarmType.AlwaysPersisted); } SetPregoBlendShape(); if (mMom.SimDescription.IsVisuallyPregnant) { TryToGiveLeave(); } return(true); }