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));
        }
Example #2
0
        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);
        }
Example #4
0
        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));
        }
Example #5
0
        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));
        }
Example #7
0
        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));
        }
Example #8
0
        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);
        }
Example #9
0
        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));
        }
Example #10
0
        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);
        }
Example #12
0
        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);
        }
Example #13
0
        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);
        }
Example #15
0
        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);
        }
Example #16
0
        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));
        }
Example #17
0
        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));
        }
Example #18
0
        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);
        }
Example #19
0
        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));
        }
Example #20
0
        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);
        }
Example #21
0
        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);
            }
        }
Example #22
0
        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);
        }
Example #23
0
        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);
        }
Example #24
0
        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);
        }
Example #25
0
 protected virtual bool TestAffair(SimDescription sim, SimDescription target)
 {
     return(Romances.AllowAffair(this, sim, target, Managers.Manager.AllowCheck.None));
 }
Example #26
0
 protected override bool PrivateUpdate(ScenarioFrame frame)
 {
     return(Romances.BumpToHigherState(this, Sim, Target));
 }
Example #27
0
        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));
        }
Example #28
0
        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);
        }
Example #29
0
        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);
                }
            }
        }