protected override bool PrivateUpdate(ScenarioFrame frame) { // Doing so stops the Allow() from stopping the engagement SetValue <ArrangedMarriageOption, ulong>(Sim, 0); SetValue <ArrangedMarriageOption, ulong>(Target, 0); if ((Sim.IsMarried) || (Target.IsMarried)) { IncStat("Married Flagged"); return(false); } Relationship relationship = Relationship.Get(Sim, Target, true); if (relationship != null) { relationship.MakeAcquaintances(); if (!relationship.AreRomantic()) { // Bump to Romantic Interest Romances.BumpToHigherState(this, Sim, Target); } } Add(frame, new PartneringScenario(Sim, Target, false, true), ScenarioResult.Start); return(base.PrivateUpdate(frame)); }
protected override bool TargetAllow(SimDescription target) { if (!Romances.Allow(this, Sim, target)) { return(false); } if (MarriageBaseScenario.TestForChildBlock(Sim, target)) { IncStat("Child Are Married"); return(false); } else { SimData targetData = GetData(target); if (targetData.HasAnyValue <ArrangedMarriageCasteOption, CasteOptions>()) { if (!targetData.Contains <ArrangedMarriageCasteOption>(GetData(Sim).Castes)) { IncStat("Target Caste Fail"); return(false); } } } return(base.TargetAllow(target)); }
protected override bool PrivateUpdate(ScenarioFrame frame) { if (mRequirement.mMate.IsMale) { Target.IncreaseGenderPreferenceMale(); } else { Target.IncreaseGenderPreferenceFemale(); } Relationship relationship = Relationship.Get(Sim, Target, true); relationship.LTR.SetLiking(75f); Romances.BumpToHigherState(this, Sim, Target); if (!base.PrivateUpdate(frame)) { return(false); } mImmigrants.Remove(Target); Add(frame, new ImmigrantCareerScenario(Target, mRequirement), ScenarioResult.Start); return(false); }
protected override bool CommonAllow(SimDescription sim) { if (SimTypes.IsDead(sim)) { IncStat("Dead"); return(false); } else if (!Romances.AllowMarriage(this, sim, Managers.Manager.AllowCheck.Active)) { IncStat("User Denied"); return(false); } else if (sim.IsMarried) { IncStat("Already Married"); return(false); } else if (sim.ChildOrBelow) { IncStat("Too Young"); return(false); } return(base.CommonAllow(sim)); }
protected override bool CommonAllow(SimDescription sim) { if (!Romances.Allow(this, sim)) { return(false); } return(base.CommonAllow(sim)); }
protected override bool CommonAllow(SimDescription sim) { if (!Romances.AllowMarriage(this, sim, Managers.Manager.AllowCheck.Active)) { IncStat("Marriage Denied"); return(false); } return(base.CommonAllow(sim)); }
protected override bool TargetAllow(SimDescription sim) { if ((TestPartnered) && (sim.Partner != Sim)) { IncStat("Not Partner"); return(false); } else if (!Romances.Allow(this, Sim, sim)) { return(false); } return(base.TargetAllow(sim)); }
public List <SimDescription> FindPartneredFor(SimDescription sim) { if ((sim == null) || (sim.Household == null)) { IncStat("Taken: Invalid Sim"); return(null); } List <SimDescription> choices = new List <SimDescription>(); foreach (SimDescription potential in Sims.All) { if (sim == potential) { //IncStat("Taken: Myself"); } else if (!Romances.Allow(this, sim, potential)) { IncStat("Taken: User Denied"); } else if (Situations.IsBusy(this, potential, true)) { IncStat("Taken: Busy"); } else if (!potential.Marryable) { IncStat("Taken: Not Marryable"); } else if (potential.Partner == null) { IncStat("Taken: No Partner"); } else if (sim.Teen != potential.Teen) { IncStat("Taken: Wrong Age"); } else if (potential.Household == null) { IncStat("Taken: Invalid Sim"); } else { choices.Add(potential); } Main.Sleep("ManagerRomance:FindPartneredFor"); } return(choices); }
protected override bool CommonAllow(SimDescription sim) { if (!Romances.Allow(this, sim)) { IncStat("User Denied"); return(false); } else if (SimTypes.IsDead(sim)) { IncStat("Dead"); return(false); } return(base.CommonAllow(sim)); }
protected override bool PrivateUpdate(ScenarioFrame frame) { bool breakup = false; Relationship relation = ManagerSim.GetRelationship(Sim, Target); if ((relation != null) && (relation.CurrentLTRLiking <= GetValue <MaximumForceBreakupOption, int>())) { breakup = true; } else { int scoreA = AddScoring("Breakup", Target, Sim); int scoreB = AddScoring("Breakup", Sim, Target); if ((scoreA > 0) && (scoreB > 0)) { breakup = true; } else if ((scoreA > 0) || (scoreB > 0)) { if ((GetValue <SplitOpposingClanOption, bool>()) && (!Romances.Allow(this, Sim, Target))) { breakup = true; mOpposingClan = true; } else { int chance = (scoreA + scoreB); if ((chance > 0) && (RandomUtil.RandomChance(AddScoring("Chance", chance)))) { breakup = true; } else { Add(frame, new ExistingEnemyManualScenario(Sim, Target, -25, 0), ScenarioResult.Start); } } } } if (breakup) { return(base.PrivateUpdate(frame)); } return(false); }
protected override bool PrivateUpdate(ScenarioFrame frame) { if (!base.PrivateUpdate(frame)) { return(false); } Romances.AddWoohooerNotches(Sim, Target, false, true); Add(frame, new ExpectedMarriageScenario(Sim, Target), ScenarioResult.Start); Add(frame, new SuccessScenario(), ScenarioResult.Start); mNumberOfKidsBetween = NumberOfKidsBetween(Sim, Target); AddStat("Preferred Baby Count", (ScoringLookup.GetScore("PreferredBabyCount", Sim) + ScoringLookup.GetScore("PreferredBabyCount", Target)) / 2); return(true); }
protected override void PrivateUpdate(bool fullUpdate, bool initialPass) { if ((ProgressionEnabled) && (fullUpdate)) { mPartneredSims.Clear(); foreach (SimDescription sim in Sims.All) { if (!sim.TeenOrAbove) { continue; } if (SimTypes.IsDead(sim)) { continue; } if (!Romances.Allow(this, sim)) { continue; } if (!sim.Marryable) { continue; } if (sim.Household == null) { continue; } if (sim.Partner == null) { continue; } mPartneredSims.Add(sim); } } base.PrivateUpdate(fullUpdate, initialPass); }
protected override bool PrivateUpdate(ScenarioFrame frame) { if (!Romances.BumpToEngagement(this, Sim, Target)) { IncStat("Bump Failure"); return(false); } else { SetElapsedTime <DayOfLastEngagementOption>(Sim); SetElapsedTime <DayOfLastEngagementOption>(Target); if (OnGatheringScenario != null) { OnGatheringScenario(this, frame); } return(true); } }
protected override bool PrivateUpdate(ScenarioFrame frame) { int scoreA = 0; int scoreB = 0; if (mChance == -1) { scoreA = AddScoring("UnexpectedPregnancy", GetValue <ChanceOfUnexpectedPregnancyOption, int>(Sim), ScoringLookup.OptionType.Chance, Sim); scoreB = AddScoring("UnexpectedPregnancy", GetValue <ChanceOfUnexpectedPregnancyOption, int>(Target), ScoringLookup.OptionType.Chance, Target); } else { scoreA = AddScoring("UnexpectedPregnancy", mChance, ScoringLookup.OptionType.Chance, Sim); scoreB = AddScoring("UnexpectedPregnancy", mChance, ScoringLookup.OptionType.Chance, Target); } if ((scoreA <= 0) && (scoreB <= 0)) { Romances.AddWoohooerNotches(Sim, Target, false, false); IncStat("Scoring Fail"); return(false); } if ((Sim.LotHome == null) || (Target.LotHome == null)) { // Required to get mother off streets before pregnancy Add(frame, new SettleDownScenario(Sim, Target), ScenarioResult.Start); } mPhaseTwoComplete = false; Romances.AddWoohooerNotches(Sim, Target, true, false); Add(frame, new HaveBabyScenario(Sim, Target), ScenarioResult.Start); Add(frame, new PhaseTwoScenario(Sim, Target, this), ScenarioResult.Success); Add(frame, new HaveBabyScenario(Target, Sim), ScenarioResult.Failure); Add(frame, new PhaseTwoScenario(Sim, Target, this), ScenarioResult.Success); return(false); }
protected override bool TestAffair(SimDescription sim, SimDescription target) { if (!Filter.AllowAffair) { return(false); } if (!TargetFilter.AllowAffair) { return(false); } Managers.Manager.AllowCheck check = Managers.Manager.AllowCheck.None; if (!Romances.AllowAdultery(this, sim, check)) { return(false); } if (target.Partner != null) { if (!Romances.AllowLiaison(this, sim, check)) { return(false); } } if (!Romances.AllowAdultery(this, target, check)) { return(false); } if (sim.Partner != null) { if (!Romances.AllowLiaison(this, target, check)) { return(false); } } return(true); }
protected override bool CommonAllow(SimDescription sim) { if (!Romances.Allow(this, sim)) { IncStat("User Denied"); return(false); } else if (!Romances.AllowBreakup(this, sim, Managers.Manager.AllowCheck.None)) { IncStat("User Denied"); return(false); } else if (AddScoring("Breakup Cooldown", GetElapsedTime <DayOfLastRomanceOption>(sim) - MinTimeFromRomanceToBreakup) < 0) { AddStat("Too Early", GetElapsedTime <DayOfLastRomanceOption>(sim)); return(false); } return(base.CommonAllow(sim)); }
protected override bool TargetAllow(SimDescription target) { if (!Score()) { IncStat("Scoring Failure"); return(false); } else if (TestForChildBlock(Sim, target)) { IncStat("Child Are Married"); return(false); } else if (!Romances.Allow(this, Sim, target)) { //IncStat("Mixed Age Denied"); return(false); } return(base.TargetAllow(target)); }
protected bool AllowSteady(SimDescription sim, SimDescription target) { if ((sim.IsMarried) || (target.IsMarried)) { return(true); } if (!Romances.AllowMarriage(this, sim, Managers.Manager.AllowCheck.Active)) { return(true); } if (!Romances.AllowMarriage(this, target, Managers.Manager.AllowCheck.Active)) { return(true); } int minimumElapsed = GetValue <EngagementScenario.MinTimeFromPartnerToEngagementOption, int>() + GetValue <CooldownMarriageScenario.MinTimeFromEngagementToMarriageOption, int>(); if (GetElapsedTime <DayOfLastRomanceOption>(sim) < minimumElapsed) { IncStat("Elapsed Denied"); return(false); } if (GetElapsedTime <DayOfLastRomanceOption>(target) < minimumElapsed) { IncStat("Elapsed Denied"); return(false); } if (AddScoring("Marriage", sim, target) <= 0) { return(true); } if (AddScoring("Marriage", target, sim) <= 0) { return(true); } return(false); }
protected override bool TargetAllow(SimDescription sim) { Relationship relationship = ManagerSim.GetRelationship(Sim, Target); if (relationship == null) { IncStat("Bad Relation"); return(false); } else if (!relationship.AreRomantic()) { IncStat("Not Romantic"); return(false); } LongTermRelationship LTR = relationship.LTR; if (LTR == null) { IncStat("Bad LTR"); return(false); } else if (LTR.Liking <= Sims3.Gameplay.Actors.Sim.kRomanceUseLikingGate) { IncStat("Too Low"); return(false); } if (mAffairStory == ManagerRomance.AffairStory.None) { if (!Romances.AllowAffair(this, Sim, Target, Managers.Manager.AllowCheck.None)) { IncStat("Affair Denied"); return(false); } } return(base.TargetAllow(sim)); }
protected override bool PrivateUpdate(ScenarioFrame frame) { Relationship relationship = ManagerSim.GetRelationship(Sim, Target); if (relationship == null) { return(false); } LongTermRelationship LTR = relationship.LTR; if (LTR == null) { return(false); } Sim.SetFirstKiss(Target); Sim.SetFirstRomance(Target); SetElapsedTime <DayOfLastFlirtOption>(Sim); SetElapsedTime <DayOfLastFlirtOption>(Target); if ((Sim.CreatedSim != null) && (Target.CreatedSim != null)) { EventTracker.SendEvent(new AskOnDateEvent(Sim.CreatedSim, Target.CreatedSim, true)); } Romances.BumpToHigherState(this, Sim, Target); IncStat(LTR.CurrentLTR.ToString()); if (SimID.Matches(Flirts.PreviousLoveLoss, Sim)) { Flirts.PreviousLoveLoss = null; } return(true); }
protected override bool PrivateUpdate(ScenarioFrame frame) { if (!Romances.BumpToHighestState(this, Sim, Target)) { IncStat("Bump Failure"); return(false); } else { SetElapsedTime <DayOfLastPartnerOption>(Sim); SetElapsedTime <DayOfLastPartnerOption>(Target); SetElapsedTime <DayOfLastRomanceOption>(Sim); SetElapsedTime <DayOfLastRomanceOption>(Target); Romances.HandleMarriageName(Sim, Target, false); if (OnGatheringScenario != null) { OnGatheringScenario(this, frame); } return(true); } }
protected override bool PrivateUpdate(ScenarioFrame frame) { bool wasMarried = Sim.IsMarried; if (!Romances.BumpToLowerState(this, Sim, Target, false)) { IncStat("Bump Fail"); return(false); } if (wasMarried) { if (GetValue <RenameDivorceeOption, bool>()) { RenameDivorcee(Sim); RenameDivorcee(Target); } } if (Sim.Household == Target.Household) { SimDescription go = Sim; SimDescription stay = Target; SimDescription head = SimTypes.HeadOfFamily(Sim.Household); if (head != null) { if (Relationships.IsCloselyRelated(Target, head, false)) { stay = Target; go = Sim; } else if (Relationships.IsCloselyRelated(Sim, head, false)) { stay = Sim; go = Target; } else if (RandomUtil.CoinFlip()) { stay = Sim; go = Target; } } HouseholdBreakdown.ChildrenMove goScore = HouseholdBreakdown.ChildrenMove.Scoring; HouseholdBreakdown.ChildrenMove stayScore = HouseholdBreakdown.ChildrenMove.Scoring; if (mAffair) { // Sim is cheater, so keep children with other parent if (go == Sim) { if (mRelatedStay) { goScore = HouseholdBreakdown.ChildrenMove.RelatedStay; stayScore = HouseholdBreakdown.ChildrenMove.RelatedGo; } else { goScore = HouseholdBreakdown.ChildrenMove.Stay; stayScore = HouseholdBreakdown.ChildrenMove.Go; } } else { if (mRelatedStay) { goScore = HouseholdBreakdown.ChildrenMove.RelatedGo; stayScore = HouseholdBreakdown.ChildrenMove.RelatedStay; } else { goScore = HouseholdBreakdown.ChildrenMove.Go; stayScore = HouseholdBreakdown.ChildrenMove.Stay; } } } Add(frame, new BreakupMoveOutScenario(go, stay, goScore), ScenarioResult.Failure); Add(frame, new BreakupMoveOutScenario(stay, go, stayScore), ScenarioResult.Failure); } return(true); }
protected override bool PrivateUpdate(ScenarioFrame frame) { if (mCheckRequired) { if (!mRequirement.mRequired) { return(false); } } List <CASAgeGenderFlags> ageGenderRequirements = new List <CASAgeGenderFlags>(); if ((!mRequirement.mNeedMale) && (!mRequirement.mNeedFemale)) { if (BabyGenderScenario.GetGenderByFirstBorn(Manager, GetValue <GenderOption, BabyGenderScenario.FirstBornGender>(), false) == CASAgeGenderFlags.Male) { mRequirement.mNeedMale = true; } else { mRequirement.mNeedFemale = true; } } bool teenMoveIn = false; if (mRequirement.mMate == null) { if (RandomUtil.RandomChance(GetValue <TeenChanceOption, int>())) { teenMoveIn = true; } } else if (mRequirement.mMate.Teen) { teenMoveIn = true; } if (mRequirement.mNeedMale) { CASAgeGenderFlags age = CASAgeGenderFlags.Male | CASAgeGenderFlags.Human; if (teenMoveIn) { age |= CASAgeGenderFlags.Teen; } else //if ((mRequirement.CareerLevel != null) && (mRequirement.CareerLevel.Level > 5)) { age |= CASAgeGenderFlags.YoungAdult; age |= CASAgeGenderFlags.Adult; } ageGenderRequirements.Add(age); } if (mRequirement.mNeedFemale) { CASAgeGenderFlags age = CASAgeGenderFlags.Female | CASAgeGenderFlags.Human; if (teenMoveIn) { age |= CASAgeGenderFlags.Teen; } else if (mRequirement.mFertile) { age |= CASAgeGenderFlags.YoungAdult; } else //((mRequirement.CareerLevel != null) && (mRequirement.CareerLevel.Level > 5) && ) { age |= CASAgeGenderFlags.YoungAdult; age |= CASAgeGenderFlags.Adult; } ageGenderRequirements.Add(age); } bool singleParent = false; Lot familyLot = null; if (((mRequirement.mMate == null) || (!mCheckRequired)) && (GetValue <WholeFamilyOption, int>() > 0) && (!RandomUtil.RandomChance(GetValue <SingleSimOption, int>()))) { IncStat("WholeFamily"); familyLot = Lots.FindLot(this, null, 0, ManagerLot.FindLotFlags.CheapestHome | ManagerLot.FindLotFlags.Inspect, OnLotPriceCheck); if (familyLot == null) { return(false); } if (RandomUtil.RandomChance(GetValue <ChanceOfSingleOption, int>())) { IncStat("Single Parent"); singleParent = true; } else if (familyLot.CountObjects <IBedDouble>() == 0) { if (familyLot.CountObjects <IBedSingle>() > 1) { IncStat("Single Parent"); singleParent = true; } else { IncStat("No Double Bed"); familyLot = null; } } } using (SimFromBin <ManagerLot> simBin = new SimFromBin <ManagerLot>(this, Lots)) { List <SimDescription> sims = new List <SimDescription>(); CASAgeGenderFlags genders = CASAgeGenderFlags.Male | CASAgeGenderFlags.Female; if (familyLot != null) { BabyGenderScenario.FirstBornGender genderPref = GetValue <GenderOption, BabyGenderScenario.FirstBornGender>(); bool bothGenders = true; if ((genderPref == BabyGenderScenario.FirstBornGender.Male) || (genderPref == BabyGenderScenario.FirstBornGender.Female)) { bothGenders = false; } else if (RandomUtil.RandomChance(GetValue <ManagerFlirt.ChanceOfGaySim, int>())) { bothGenders = false; } if (ageGenderRequirements.Count == 1) { if (bothGenders) { if ((ageGenderRequirements[0] & CASAgeGenderFlags.Male) == CASAgeGenderFlags.Male) { ageGenderRequirements.Add(CASAgeGenderFlags.Female | (ageGenderRequirements[0] & CASAgeGenderFlags.AgeMask)); } else { ageGenderRequirements.Add(CASAgeGenderFlags.Male | (ageGenderRequirements[0] & CASAgeGenderFlags.AgeMask)); } } else { genders = ageGenderRequirements[0] & CASAgeGenderFlags.GenderMask; ageGenderRequirements.Add(ageGenderRequirements[0]); } } } foreach (CASAgeGenderFlags ageGender in ageGenderRequirements) { SimDescription sim = simBin.CreateNewSim(ageGender & CASAgeGenderFlags.AgeMask, ageGender & CASAgeGenderFlags.GenderMask, CASAgeGenderFlags.Human); if (sim == null) { IncStat("Creation Failure"); } else { sims.Add(sim); } } if (familyLot == null) { if (sims.Count > 0) { Add(frame, new ImmigrantMailOrderScenario(mRequirement, sims), ScenarioResult.Start); } } else { bool createChildren = true; SimDescription otherParent = null; List <SimDescription> parents = new List <SimDescription>(sims); if (parents.Count > 1) { otherParent = parents[1]; if (parents[1].IsMale) { parents[0].InternalIncreaseGenderPreferenceMale(); } else { parents[0].InternalIncreaseGenderPreferenceFemale(); } if (parents[0].IsMale) { parents[1].InternalIncreaseGenderPreferenceMale(); } else { parents[1].InternalIncreaseGenderPreferenceFemale(); } Relationship relation = Relationship.Get(parents[0], parents[1], true); if (relation != null) { relation.MakeAcquaintances(); } if (GameUtils.IsUniversityWorld()) { createChildren = true; IncStat("Immigrant Friends"); } else if (!RandomUtil.RandomChance(GetValue <ChanceOfFriendsOption, int>())) { Dictionary <string, List <News.NewsTuning.ArticleTuning> > namedArticles = News.sNewsTuning.mNamedArticles; try { // Doing so stops Marriage notices of imported sims from appearing in the newspaper News.sNewsTuning.mNamedArticles = new Dictionary <string, List <News.NewsTuning.ArticleTuning> >(); if (RandomUtil.RandomChance(GetValue <ChanceOfPartnerOption, int>())) { IncStat("Immigrant Partners"); while (relation.CurrentLTR != LongTermRelationshipTypes.Partner) { if (!Romances.BumpToHigherState(this, parents[0], parents[1])) { break; } } } else { if (!Romances.BumpToHighestState(this, parents[0], parents[1])) { IncStat("Unmarriable"); createChildren = false; } else { parents[1].LastName = parents[0].LastName; } } } finally { News.sNewsTuning.mNamedArticles = namedArticles; } } else { createChildren = false; IncStat("Immigrant Friends"); } } if (createChildren) { Lot.LotMetrics metrics = new Lot.LotMetrics(); familyLot.GetLotMetrics(ref metrics); int totalChildren = GetValue <WholeFamilyOption, int>(); if (totalChildren > Options.GetValue <MaximumSizeOption, int>()) { totalChildren = Options.GetValue <MaximumSizeOption, int>(); } totalChildren -= parents.Count; totalChildren = RandomUtil.GetInt(totalChildren - 1) + 1; AddStat("Allowed Children", totalChildren); int totalBeds = metrics.BedCount - parents.Count; if (totalBeds > totalChildren) { totalBeds = totalChildren; } AddStat("Available Beds", totalBeds); if (!GameUtils.IsUniversityWorld()) { int numCribs = RandomUtil.GetInt((int)familyLot.CountObjects <Sims3.Gameplay.Objects.Beds.Crib>()); // Create the children if (numCribs > 2) { numCribs = 2; } if (numCribs > totalChildren) { numCribs = totalChildren; } AddStat("Available Cribs", numCribs); for (int i = 0; i < numCribs; i++) { SimDescription sim = simBin.CreateNewSim(parents[0], otherParent, CASAgeGenderFlags.Toddler, genders, parents[0].Species, true); if (sim == null) { IncStat("Creation Failure"); } else { sims.Add(sim); totalBeds--; } } if ((!parents[0].Teen) && ((otherParent == null) || (!otherParent.Teen))) { for (int i = 0; i < totalBeds; i++) { SimDescription sim = simBin.CreateNewSim(parents[0], otherParent, CASAgeGenderFlags.Child | CASAgeGenderFlags.Teen, genders, parents[0].Species, true); if (sim == null) { IncStat("Creation Failure"); } else { sims.Add(sim); } } } } else { for (int i = 0; i < totalBeds; i++) { SimDescription sim = simBin.CreateNewSim(CASAgeGenderFlags.YoungAdult | CASAgeGenderFlags.Adult, genders, parents[0].Species); if (sim == null) { IncStat("Creation Failure"); } else { sims.Add(sim); } } } if ((singleParent) && (otherParent != null)) { sims.Remove(otherParent); parents.Remove(otherParent); if (otherParent.Partner != null) { otherParent.Partner.Partner = null; otherParent.Partner = null; } otherParent.Dispose(true, false, true); } } } if ((GameUtils.IsInstalled(ProductVersion.EP5)) && (RandomUtil.RandomChance(GetValue <PetChanceOption, int>()))) { List <CASAgeGenderFlags> choices = new List <CASAgeGenderFlags>(); foreach (SimDescription sim in sims) { PetAdoptionBaseScenario.GetPossibleSpecies(this, familyLot, sim, false, choices); } AddStat("Pet Choices", choices.Count); if (choices.Count > 0) { int numberPets = RandomUtil.GetInt(1, GetValue <MaximumPetsOption, int>() - 1); AddStat("Pet Immigrants", numberPets); for (int i = 0; i < numberPets; i++) { CASAgeGenderFlags species = RandomUtil.GetRandomObjectFromList(choices); if (Sims.HasEnough(this, species)) { continue; } SimDescription pet = simBin.CreateNewSim(CASAgeGenderFlags.Child | CASAgeGenderFlags.Adult | CASAgeGenderFlags.Elder, CASAgeGenderFlags.Male | CASAgeGenderFlags.Female, species); if (pet != null) { pet.LastName = sims[0].LastName; sims.Add(pet); } else { IncStat("Pet Creation Fail"); } } } } Add(frame, new ImmigrantMoveInScenario(sims), ScenarioResult.Start); Add(frame, new NewImmigrantScenario(sims, mRequirement), ScenarioResult.Success); } return(true); }
protected override void PrivateUpdate(bool fullUpdate, bool initialPass) { if (initialPass) { UpdateEAFlag(); } if ((ProgressionEnabled) && (fullUpdate)) { mFlirtPool.Clear(); mFlirtySims.Clear(); float gaySims = 0; float straightSims = 0; CalculateGayRatio(ref gaySims, ref straightSims); int maximumGayRatio = GetValue <MaximumGayRatioOption, int>(); foreach (SimDescription sim in Sims.All) { if (sim.TeenOrAbove) { if (sim.Household == null) { continue; } bool allowGay = ((gaySims / straightSims) * 100) < maximumGayRatio; SetGenderPreference(sim, allowGay); DetermineGayRatio(sim, ref gaySims, ref straightSims); if (!Allow(this, sim)) { continue; } if (!sim.Marryable) { continue; } int score = 0; if (Romances.AllowAdultery(this, sim, AllowCheck.None)) { score = AddScoring("FlirtyPartner", sim); } bool bAddedToPool = false; if ((AddScoring("FlirtySingle", sim) > 0) && ((sim.Partner == null) || (score > 0))) { mFlirtySims.Add(sim); mFlirtPool.Add(sim); bAddedToPool = true; } if ((sim.Partner == null) && (!bAddedToPool)) { mFlirtPool.Add(sim); } } } AddStat("Flirty Sims", mFlirtySims.Count); AddStat("Flirt Pool", mFlirtPool.Count); mPreviousLoveLoss = null; } base.PrivateUpdate(fullUpdate, initialPass); }
protected virtual bool TestAffair(SimDescription sim, SimDescription target) { return(Romances.AllowAffair(this, sim, target, Managers.Manager.AllowCheck.None)); }
protected override bool PrivateUpdate(ScenarioFrame frame) { return(Romances.BumpToHigherState(this, Sim, Target)); }
protected override bool TargetAllow(SimDescription sim) { Relationship relation = ManagerSim.GetRelationship(Sim, Target); if (relation == null) { return(false); } if ((!mForce) && (relation.LTR.Liking <= Sims3.Gameplay.Actors.Sim.kRomanceUseLikingGate)) { IncStat("Under Gate"); return(false); } else if ((!AllowAffair) && (ManagerRomance.IsAffair(Sim, Target))) { IncStat("Affair"); return(false); } if (Sim.Partner == Target) { IncStat("Already Partner"); return(false); } else if (!Romances.Allow(this, Sim, Target)) { return(false); } if (!mForce) { if (relation.LTR.Liking < GetValue <PartnerLikingGateOption, int>()) { AddStat("No Like", relation.LTR.Liking); return(false); } else if (!relation.AreRomantic()) { IncStat("Not Romantic"); return(false); } else if (GetElapsedTime <DayOfLastPartnerOption>(Sim) < GetValue <MinTimeFromBreakupToPartnerOption, int>()) { AddStat("Too Early", GetElapsedTime <DayOfLastPartnerOption>(Sim)); return(false); } else if (GetElapsedTime <DayOfLastPartnerOption>(Target) < GetValue <MinTimeFromBreakupToPartnerOption, int>()) { AddStat("Too Early", GetElapsedTime <DayOfLastPartnerOption>(Target)); return(false); } else if ((AddScoring("SettleDown", Target, Sim) <= 0) && (AddScoring("SettleDown", Sim, Target) <= 0)) { IncStat("Score Fail"); return(false); } } return(base.TargetAllow(sim)); }
protected override bool PrivateUpdate(ScenarioFrame frame) { Relationship relationship = ManagerSim.GetRelationship(Sim, Target); if (relationship == null) { return(false); } LongTermRelationship LTR = relationship.LTR; if (LTR == null) { return(false); } if (Sim.TraitManager.HasElement(TraitNames.GreatKisser) || Target.TraitManager.HasElement(TraitNames.GreatKisser)) { if (Sim.CreatedSim != null) { ManagerSim.AddBuff(this, Sim, BuffNames.GreatKisser, Origin.FromSocialization); } if (Target.CreatedSim != null) { ManagerSim.AddBuff(this, Target, BuffNames.GreatKisser, Origin.FromSocialization); } } if (SimID.Matches(Flirts.PreviousLoveLoss, Sim)) { Flirts.PreviousLoveLoss = null; } if (LTR.Liking > Sims3.Gameplay.Actors.Sim.kWooHooUseLikingGate) { if (!Sim.HadFirstWooHoo) { Sim.SetFirstWooHoo(); if ((Sim.CreatedSim != null) && (Target.CreatedSim != null)) { EventTracker.SendEvent(EventTypeId.kHadFirstWoohoo, Sim.CreatedSim, Target.CreatedSim); } } if (!Target.HadFirstWooHoo) { Target.SetFirstWooHoo(); if ((Sim.CreatedSim != null) && (Target.CreatedSim != null)) { EventTracker.SendEvent(EventTypeId.kHadFirstWoohoo, Target.CreatedSim, Sim.CreatedSim); } } LTR.AddInteractionBit(LongTermRelationship.InteractionBits.Kissed); LTR.AddInteractionBit(LongTermRelationship.InteractionBits.WooHoo); if (Sim.IsHuman) { Sim.SetFirstKiss(Target); Target.SetFirstKiss(Sim); } else { if ((Sim.CreatedSim != null) && (Target.CreatedSim != null)) { EventTracker.SendEvent(EventTypeId.kPetWooHooed, Sim.CreatedSim, Target.CreatedSim); EventTracker.SendEvent(EventTypeId.kPetWooHooed, Target.CreatedSim, Sim.CreatedSim); } } if (mPregnancyChance != 0) { Add(frame, new UnexpectedPregnancyScenario(Sim, Target, mPregnancyChance), ScenarioResult.Start); } else { Romances.AddWoohooerNotches(Sim, Target, false, false); } } if (OnRomanceAffairScenario != null) { OnRomanceAffairScenario(this, frame); } return(false); }
protected override bool PrivateUpdate(ScenarioFrame frame) { if (Sim.CreatedSim == null) { Sims.Instantiate(Sim, Sim.LotHome, false); } if (Target.CreatedSim == null) { Sims.Instantiate(Target, Target.LotHome, false); } if ((Sim.CreatedSim == null) || (Target.CreatedSim == null)) { IncStat("Uninstantiated"); return(false); } else { if (Sim.IsRobot) { if ((Sim.LotHome == null) || ((Sim.LotHome.CountObjects <BotMakingStation> () + Sim.LotHome.CountObjects <InventionWorkbench>()) == 0)) { IncStat("No Workbench"); return(false); } SimDescription child = null; if (Sim.IsFrankenstein) { bool reward = Sim.OccultManager.mIsLifetimeReward; if ((Target.IsFrankenstein) && (RandomUtil.CoinFlip())) { reward = Target.OccultManager.mIsLifetimeReward; } Sim childSim = OccultFrankenstein.CreateFrankenStein(Sim.CreatedSim, CASAgeGenderFlags.None, reward); if (childSim == null) { IncStat("Creation Fail"); return(false); } child = childSim.SimDescription; } else { child = OccultRobot.MakeRobot(CASAgeGenderFlags.Adult, CASAgeGenderFlags.None, RobotForms.MaxType); if (child == null) { IncStat("Creation Fail"); return(false); } CASRobotData supernaturalData = child.SupernaturalData as CASRobotData; if (supernaturalData != null) { supernaturalData.CreatorSim = Sim.SimDescriptionId; int quality = 0; int count = 0; CASRobotData parentData = Sim.SupernaturalData as CASRobotData; if (parentData != null) { quality = parentData.BotQualityLevel; count++; } parentData = Target.SupernaturalData as CASRobotData; if (parentData != null) { quality += parentData.BotQualityLevel; count++; } if (count == 2) { quality /= count; } supernaturalData.BotQualityLevel = quality; } } if (child.Genealogy.Parents.Count == 0) { Sim.Genealogy.AddChild(child.Genealogy); } Target.Genealogy.AddChild(child.Genealogy); if (!Households.MoveSim(child, Sim.Household)) { IncStat("Move Fail"); Deaths.CleansingKill(child, true); return(false); } return(true); } else if (Target.IsRobot) { IncStat("Simbot Partner"); return(false); } else { if (CommonSpace.Helpers.Pregnancies.Start(Sim.CreatedSim, Target, false) != null) { ManagerSim.ForceRecount(); if (Sim.IsHuman) { if (OnGatheringScenario != null) { OnGatheringScenario(this, frame); } } if ((!Sim.IsHuman) && (Sim.Partner != Target)) { if ((GetValue <AllowMarriageOption, bool>(Sim)) && (GetValue <AllowMarriageOption, bool>(Target))) { if ((Romances.AllowBreakup(this, Sim, Managers.Manager.AllowCheck.None)) && (Romances.AllowBreakup(this, Target, Managers.Manager.AllowCheck.None))) { RemoveAllPetMateFlags(Sim); RemoveAllPetMateFlags(Target); Relationship.Get(Sim, Target, false).LTR.AddInteractionBit(LongTermRelationship.InteractionBits.Marry); } } } } return(true); } } }