예제 #1
0
        public bool Parse(XmlDbRow row, StoryProgressionObject manager, IUpdateManager updater, string prefix, ref string error)
        {
            if ((!string.IsNullOrEmpty(prefix)) && (!Parse(row, manager, updater, null, ref error)))
            {
                return false;
            }

            if (row.Exists(prefix + "RecruitAllowSteal"))
            {
                mAllowSteal = row.GetBool(prefix + "RecruitAllowSteal");
            }

            if (mActorRecruit == null)
            {
                mActorRecruit = new SimScenarioFilter();
            }

            if (!mActorRecruit.Parse(row, manager, updater, prefix + "RecruitActor", false, ref error))
            {
                return false;
            }

            if (mTargetRecruit == null)
            {
                mTargetRecruit = new SimScenarioFilter();
            }

            if (!mTargetRecruit.Parse(row, manager, updater, prefix + "RecruitTarget", false, ref error))
            {
                return false;
            }

            return true;
        }
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (manager == null)
            {
                manager = Manager;
            }

            return base.PrintStory(manager, name, parameters, extended, logging);
        }
예제 #3
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if ((mAffairStory & ManagerRomance.AffairStory.Partner) == ManagerRomance.AffairStory.Partner)
            {
                if ((Sim.IsMarried) && (Target.IsMarried))
                {
                    name = "Married" + name;
                }
                else
                {
                    name = "Steady" + name;
                }
            }

            if ((Sim.Partner != null) && (Target.Partner != null))
            {
                if ((mAffairStory & ManagerRomance.AffairStory.Duo) == ManagerRomance.AffairStory.Duo)
                {
                    name += "Duo";
                }
                else if ((mAffairStory & ManagerRomance.AffairStory.Target) == ManagerRomance.AffairStory.Target)
                {
                    name += "Second";
                }
                else if ((mAffairStory & ManagerRomance.AffairStory.Actor) != ManagerRomance.AffairStory.Actor)
                {
                    // No story
                    return(null);
                }
            }
            else if (Target.Partner != null)
            {
                if ((mAffairStory & ManagerRomance.AffairStory.Target) == ManagerRomance.AffairStory.Target)
                {
                    name += "Second";
                }
                else if ((mAffairStory & ManagerRomance.AffairStory.Actor) != ManagerRomance.AffairStory.Actor)
                {
                    // No story
                    return(null);
                }
            }
            else
            {
                if ((mAffairStory & ManagerRomance.AffairStory.Actor) != ManagerRomance.AffairStory.Actor)
                {
                    // No story
                    return(null);
                }
            }

            return(base.PrintStory(manager, name, parameters, extended, logging));
        }
예제 #4
0
        public static bool PushForRepairman(IScoringGenerator stats, StoryProgressionObject manager, Household house)
        {
            List <SimDescription> choices = manager.Situations.GetFree(stats, new SimScoringList(stats, "Handiness", manager.Sims.TeensAndAdults, false).GetBestByMinScore(1), true);

            Dictionary <Household, List <GameObject> > repairs = new Dictionary <Household, List <GameObject> >();

            foreach (Lot lot in ManagerLot.GetOwnedLots(house))
            {
                GetRepairs(manager, lot.GetObjects <GameObject>(), repairs);
            }

            stats.AddStat("Residents", choices.Count);

            while (choices.Count > 0)
            {
                SimDescription choice = RandomUtil.GetRandomObjectFromList(choices);
                choices.Remove(choice);

                if (choice.CreatedSim == null)
                {
                    continue;
                }

                List <GameObject> repairWork = null;
                if (repairs.TryGetValue(house, out repairWork))
                {
                    if (PushInteractions(manager, choice, repairWork))
                    {
                        stats.IncStat("Resident Repairman");
                        return(true);
                    }
                    else
                    {
                        stats.IncStat("Push Fail");
                    }
                }
                else
                {
                    stats.IncStat("No Repairs Fonud");
                }
            }

            stats.IncStat("Service Repairman");

            Repairman instance = Repairman.Instance;

            if (instance != null)
            {
                instance.MakeServiceRequest(house.LotHome, true, ObjectGuid.InvalidObjectGuid);
            }
            return(true);
        }
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (mWasMarried)
            {
                name = "Married" + name;
            }
            else
            {
                name = "Steady" + name;
            }

            return base.PrintStory(manager, name, parameters, extended, logging);
        }
예제 #6
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            ManagerStory.Story story = base.PrintStory(manager, name, parameters, extended, logging);
            if (story == null)
            {
                return(null);
            }

            story.mID2 = story.mID1;
            story.mID1 = new ManagerStory.Story.Element(Object.ObjectId);

            return(story);
        }
예제 #7
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (mWasMarried)
            {
                name = "Married" + name;
            }
            else
            {
                name = "Steady" + name;
            }

            return(base.PrintStory(manager, name, parameters, extended, logging));
        }
예제 #8
0
 protected Scenario(Scenario scenario)
     : base(scenario.Main)
 {
     mManager = scenario.mManager;
     mID      = scenario.mID;
     //mRescheduled = scenario.mRescheduled;
     mPushChance           = scenario.mPushChance;
     mShouldPush           = scenario.mShouldPush;
     mInitialReportChance  = scenario.mInitialReportChance;
     mContinueReportChance = scenario.mContinueReportChance;
     mUpdaters             = scenario.mUpdaters;
     //mFirst = scenario.mFirst;
 }
예제 #9
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (manager == null)
            {
                manager = Situations;
            }

            if (parameters == null)
            {
                parameters = new object[] { Sim, SimClock.CurrentTime() };
            }

            return(base.PrintStory(manager, name, parameters, extended, logging));
        }
예제 #10
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (manager == null)
            {
                manager = Pregnancies;
            }

            if (parameters == null)
            {
                parameters = new object[] { Sim, Target, mNumberOfKidsBetween };
            }

            return(base.PrintStory(manager, name, parameters, extended, logging));
        }
예제 #11
0
        protected override ManagerStory.Story PrintFormattedStory(StoryProgressionObject manager, string text, string summaryKey, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (parameters == null)
            {
                if (Sim == null)
                {
                    return(null);
                }

                parameters = new object[] { Sim };
            }

            return(base.PrintFormattedStory(manager, text, summaryKey, parameters, extended, logging));
        }
예제 #12
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (parameters == null)
            {
                if (Sim == null)
                {
                    return(null);
                }

                parameters = new object[] { Sim };
            }

            return(base.PrintStory(manager, name, parameters, extended, logging));
        }
예제 #13
0
            protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
            {
                if (manager == null)
                {
                    manager = Money;
                }

                if (parameters == null)
                {
                    parameters = new object[] { Sim, mTotalFunds };
                }

                return(base.PrintStory(manager, name, parameters, extended, logging));
            }
예제 #14
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (parameters == null)
            {
                parameters = new object[] { Sim, mFunds };
            }

            if (extended == null)
            {
                extended = new string[] { EAText.GetNumberString(mFunds) };
            }

            return(base.PrintStory(manager, name, parameters, extended, logging));
        }
예제 #15
0
        protected override ManagerStory.Story PrintFormattedStory(StoryProgressionObject manager, string text, string summaryKey, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (manager == null)
            {
                manager = Careers;
            }

            if ((mTone != null) && (DebuggingEnabled))
            {
                text = "(D)" + UnlocalizedName + ": " + mTone;
            }

            return(base.PrintFormattedStory(manager, text, summaryKey, parameters, extended, logging));
        }
예제 #16
0
        public void Add(StoryProgressionObject manager, Scenario scenario, ScenarioResult precondition)
        {
            if (scenario == null)
            {
                return;
            }

            if (manager == null)
            {
                return;
            }

            Add(new Scenario.ScenarioRun(scenario, manager, precondition));
        }
예제 #17
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (manager == null)
            {
                manager = Situations;
            }

            if ((parameters == null) && (mReason != null))
            {
                parameters = new object[] { Sim, mReason.CatalogName };
            }

            return(base.PrintStory(manager, name, parameters, extended, logging));
        }
예제 #18
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (manager == null)
            {
                manager = Romances;
            }

            if (parameters == null)
            {
                parameters = new object[] { Sim, Sim.Partner, Lot };
            }

            return(base.PrintStory(manager, name, parameters, extended, logging));
        }
예제 #19
0
        public void Add(StoryProgressionObject manager, Scenario scenario, int chance)
        {
            if (scenario == null)
            {
                return;
            }

            if (manager == null)
            {
                return;
            }

            Add(new Scenario.ScenarioRun(scenario, manager, chance));
        }
예제 #20
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (parameters == null)
            {
                if (mSteal > 0)
                {
                    name += "AndSteal";
                }

                parameters = new object[] { Sim, Target, Funds + mSteal, mSteal };
            }

            return(base.PrintStory(manager, name, parameters, extended, logging));
        }
예제 #21
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (parameters == null)
            {
                parameters = new object[] { Sim, Target, mTrait };
            }

            if (extended == null)
            {
                extended = new string[] { mTrait };
            }

            return(base.PrintStory(manager, name, parameters, extended, logging));
        }
예제 #22
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (parameters == null)
            {
                SimDescription target = SimTypes.HeadOfFamily(mLot.Household);
                if (target == null)
                {
                    return(null);
                }

                parameters = new object[] { Sim, target };
            }

            return(base.PrintStory(manager, name, parameters, extended, logging));
        }
예제 #23
0
        public static List <Lot> GetPurchaseableLots(StoryProgressionObject manager, Household buyer)
        {
            Dictionary <ulong, bool> owned = new Dictionary <ulong, bool>();

            foreach (PropertyData data in RealEstateManager.AllPropertiesFromAllHouseholds())
            {
                owned[data.LotId] = true;
            }

            List <Lot> list = new List <Lot>();

            foreach (Lot lot in LotManager.AllLots)
            {
                if (lot.IsWorldLot)
                {
                    continue;
                }

                if (lot.Household == buyer)
                {
                    continue;
                }

                if (lot.LotType != LotType.Residential)
                {
                    continue;
                }

                if (!IsRentable(manager, lot))
                {
                    continue;
                }

                if (owned.ContainsKey(lot.LotId))
                {
                    continue;
                }

                if (buyer.FamilyFunds < GetPurchaseLotCost(lot))
                {
                    continue;
                }

                list.Add(lot);
            }

            return(list);
        }
예제 #24
0
        public void UpdateManager(StoryProgressionObject manager)
        {
            mManager = manager;

            mAgeGenderOptions = new List <AgeGenderOption>();

            foreach (string name in mUserAgeGenders)
            {
                AgeGenderOption option = manager.GetOption <AgeGenderOption>(name);
                if (option == null)
                {
                    continue;
                }

                mAgeGenderOptions.Add(option);
            }

            StoryProgressionObject valueTestManager = manager;

            if (!string.IsNullOrEmpty(mClan))
            {
                valueTestManager = manager.Personalities.GetPersonality(mClan);
            }

            List <IValueTestOption> values = new List <IValueTestOption>();

            if (valueTestManager != null)
            {
                foreach (ValueTestLoadStore store in mValueTestLoads)
                {
                    IntegerOption intOption = manager.GetOption <IntegerOption>(store.mName);
                    if (intOption != null)
                    {
                        values.Add(new IntegerOption.ValueTest(intOption, store.mMinimum, store.mMaximum));
                    }
                    else
                    {
                        BooleanOption boolOption = manager.GetOption <BooleanOption>(store.mName);
                        if (boolOption != null)
                        {
                            values.Add(new BooleanOption.ValueTest(boolOption, store.mMatch));
                        }
                    }
                }
            }

            mValueTestOptions = values;
        }
예제 #25
0
            protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
            {
                if (manager == null)
                {
                    if (mHomeless)
                    {
                        manager = Pregnancies;
                    }
                    else
                    {
                        manager = Flirts;
                    }
                }

                return(base.PrintStory(manager, name, parameters, extended, logging));
            }
예제 #26
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (parameters == null)
            {
                if (mRabbitHole != null)
                {
                    parameters = new object[] { Sim, mRabbitHole.CatalogName };
                }
                else if (mLot != null)
                {
                    parameters = new object[] { Sim, mLot.Name };
                }
            }

            return(base.PrintStory(manager, name, parameters, extended, logging));
        }
예제 #27
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (parameters == null)
            {
                if (Sim == mBirthdaySim)
                {
                    name += "SelfHost";
                }
                else
                {
                    parameters = new object[] { Sim, mBirthdaySim, Lot };
                }
            }

            return(base.PrintStory(manager, name, parameters, extended, logging));
        }
예제 #28
0
        protected override ManagerStory.Story PrintFormattedStory(StoryProgressionObject manager, string text, string summaryKey, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (manager == null)
            {
                manager = Careers;
            }

            if (Event.Career is School)
            {
                return(null);
            }

            text = Common.LocalizeEAString(Sim.IsFemale, "Gameplay/Careers/Career:FiredText", new object[] { Sim });

            return(base.PrintFormattedStory(manager, text, summaryKey, parameters, extended, logging));
        }
예제 #29
0
        public bool Parse(XmlDbRow row, StoryProgressionObject manager, IUpdateManager updater, ref string error)
        {
            mFightScoring = row.GetString("FightScoring");

            if (!row.Exists("AllowGoToJail"))
            {
                error = "AllowGoToJail missing";
                return(false);
            }

            mAllowGoToJail = row.GetBool("AllowGoToJail");

            mActorAllowInjury  = row.GetBool("AllowInjury") || row.GetBool("ActorAllowInjury");
            mTargetAllowInjury = row.GetBool("AllowInjury") || row.GetBool("TargetAllowInjury");

            mChanceOfDeath = new IntegerOption.OptionValue(-1);

            if (row.Exists("ChanceOfDeath"))
            {
                if (!mChanceOfDeath.Parse(row, "ChanceOfDeath", manager, updater, ref error))
                {
                    return(false);
                }
            }

            mBail = row.GetInt("Bail");

            mSuccess = new WeightScenarioHelper(mOrigin);
            if (!mSuccess.Parse(row, manager, updater, "Success", ref error))
            {
                return(false);
            }

            mFailure = new WeightScenarioHelper(mOrigin);
            if (!mFailure.Parse(row, manager, updater, "Failure", ref error))
            {
                return(false);
            }

            mExtremeFailure = new WeightScenarioHelper(mOrigin);
            if (!mExtremeFailure.Parse(row, manager, updater, "ExtremeFailure", ref error))
            {
                return(false);
            }

            return(true);
        }
예제 #30
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (mMovers.Count != 1)
            {
                return(null);
            }

            if (manager == null)
            {
                if (Manager is SimPersonality)
                {
                    manager = Households;
                }
            }

            return(base.PrintStory(manager, name, new object[] { mMovers[0], mMoveInWith }, extended, logging));
        }
예제 #31
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (manager == null)
            {
                manager = Romances;
            }

            if (HandleAdultSeperately)
            {
                if ((!Sim.Teen) && (!Target.Teen))
                {
                    name += "Adult";
                }
            }

            return(base.PrintStory(manager, name, parameters, extended, logging));
        }
예제 #32
0
            protected override ManagerStory.Story PrintFormattedStory(StoryProgressionObject manager, string text, string summaryKey, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
            {
                if (manager == null)
                {
                    manager = Skills;
                }

                Skill skill = Sim.SkillManager.GetElement(mSkill);

                if (skill == null)
                {
                    return(null);
                }

                if (extended == null)
                {
                    extended = new string[] { skill.Name, EAText.GetNumberString(mLevel) };
                }

                if (mLevel == 0)
                {
                    text = skill.Description;
                }
                else
                {
                    string entryKey = skill.LevelUpStrings[mLevel];
                    if (!string.IsNullOrEmpty(entryKey))
                    {
                        text = Common.LocalizeEAString(skill.SkillOwner.IsFemale, "Gameplay/Skills/Skill:SkillLevelIncreasedDialogText", new object[] { skill.SkillOwner, skill.Name, mLevel }) + Common.NewLine + Common.NewLine + Common.LocalizeEAString(skill.SkillOwner.IsFemale, entryKey, new object[] { skill.SkillOwner });
                    }
                    else
                    {
                        text = Common.LocalizeEAString(skill.SkillOwner.IsFemale, "Gameplay/Skills/Skill:SkillLevelIncreasedDialogText", new object[] { skill.SkillOwner, skill.Name, mLevel });
                    }
                }

                ManagerStory.Story story = base.PrintFormattedStory(manager, text, summaryKey, parameters, extended, logging);

                if (story != null)
                {
                    story.mOverrideImage   = skill.NonPersistableData.DreamsAndPromisesIcon;
                    story.mOverrideVersion = skill.NonPersistableData.SkillProductVersion;
                }

                return(story);
            }
예제 #33
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (manager == null)
            {
                manager = Careers;
            }

            if (parameters == null)
            {
                if ((Sim.Occupation != null) && (Sim.Occupation.Boss != null))
                {
                    parameters = new object[] { Sim, Sim.Occupation.Boss };
                }
            }

            return(base.PrintStory(manager, name, parameters, extended, logging));
        }
예제 #34
0
        public bool Parse(XmlDbRow row, StoryProgressionObject manager, IUpdateManager updater, ref string error)
        {
            mStoryName = row.GetString("InvestigateStoryName");

            mMinimum = new IntegerOption.OptionValue();
            if (!mMinimum.Parse(row, "InvestigateMinimum", manager, updater, ref error))
            {
                mMinimum = null;

                error = null;
                //return false;
            }

            mMaximum = new IntegerOption.OptionValue();
            if (!mMaximum.Parse(row, "InvestigateMaximum", manager, updater, ref error))
            {
                mMaximum = null;

                error = null;
                //return false;
            }

            return true;
        }
예제 #35
0
            public bool Parse(XmlDbRow row, string name, StoryProgressionObject manager, IUpdateManager updater, ref string error)
            {
                string value = row.GetString(name);

                if (string.IsNullOrEmpty(value))
                {
                    error = "BooleanOption " + name + " missing";
                    return false;
                }

                if (!bool.TryParse(value, out mValue))
                {
                    mOption = manager.GetOption<BooleanOption>(value);

                    if (mOption == null)
                    {
                        error = "BooleanOption" + value + " invalid";
                        return false;
                    }
                }

                updater.AddUpdater(this);
                return true;
            }
예제 #36
0
        public bool Parse(XmlDbRow row, StoryProgressionObject manager, IUpdateManager updater, string prefix, bool errorIfNone, ref string error)
        {
            mDisallowRelated = row.GetBool(prefix + "DisallowRelated");

            if (row.Exists(prefix + "StandardFilter"))
            {
                mEnabled = true;

                if (!ParserFunctions.TryParseEnum<StandardFilter>(row.GetString(prefix + "StandardFilter"), out mStandardFilter, StandardFilter.None))
                {
                    error = prefix + "StandardFilter invalid";
                    return false;
                }
            }

            string customTest = row.GetString(prefix + "CustomTest");

            mCustomTest = new Common.MethodStore(customTest, new Type[] { typeof(Parameters), typeof(SimDescription), typeof(SimDescription) });
            if ((mCustomTest == null) && (!string.IsNullOrEmpty(customTest)))
            {
                error = prefix + "CustomTest Invalid";
                return false;
            }

            switch (mStandardFilter)
            {
                case StandardFilter.ExistingFriend:
                case StandardFilter.ExistingEnemy:
                case StandardFilter.Nemesis:
                    if (!row.Exists(prefix + "StandardIgnoreBusy"))
                    {
                        error = prefix + "StandardIgnoreBusy missing";
                        return false;
                    }

                    mStandardIgnoreBusy = row.GetBool(prefix + "StandardIgnoreBusy");
                    break;
            }

            switch (mStandardFilter)
            {
                case StandardFilter.ExistingFriend:
                case StandardFilter.ExistingEnemy:
                    RelationshipLevel standardLevel;
                    if (ParserFunctions.TryParseEnum<RelationshipLevel>(row.GetString(prefix + "StandardGate"), out standardLevel, RelationshipLevel.Neutral))
                    {
                        mStandardGate = (int)standardLevel;
                    }
                    else
                    {
                        RelationshipLevel defGate = RelationshipLevel.Neutral;
                        if (mStandardFilter == StandardFilter.ExistingFriend)
                        {
                            defGate = RelationshipLevel.Friend;
                        }
                        else
                        {
                            defGate = RelationshipLevel.Enemy;
                        }
                        mStandardGate = row.GetInt(prefix + "StandardGate", (int)defGate);
                    }

                    break;
                case StandardFilter.ExistingFlirt:
                case StandardFilter.ExistingOrAnyFlirt:
                    if (!row.Exists(prefix + "StandardDisallowPartner"))
                    {
                        error = prefix + "StandardDisallowPartner missing";
                        return false;
                    }

                    break;
            }

            // The default for DisallowPartner can be altered by the calling system, don't overwrite it
            if (row.Exists(prefix + "StandardDisallowPartner"))
            {
                mStandardDisallowPartner = row.GetBool(prefix + "StandardDisallowPartner");
            }

            switch (mStandardFilter)
            {
                case StandardFilter.AnyFlirt:
                case StandardFilter.ExistingOrAnyFlirt:
                    if (!row.Exists(prefix + "AllowAffair"))
                    {
                        error = prefix + "AllowAffair missing";
                        return false;
                    }

                    break;
            }

            if (row.Exists(prefix + "AllowOpposing"))
            {
                mAllowOpposing = row.GetBool(prefix + "AllowOpposing");
            }
            else
            {
                mAllowOpposing = true;
            }

            if (row.Exists("AllowAffair"))
            {
                error = prefix + "AllowAffair misdefined";
                return false;
            }
            else if (row.Exists(prefix + "AllowAffair"))
            {
                mAllowAffair = row.GetBool(prefix + "AllowAffair");
            }
            else
            {
                mAllowAffair = false;
            }

            if (row.Exists(prefix + "ThirdPartyFilter"))
            {
                mEnabled = true;

                if (!ParserFunctions.TryParseEnum<ThirdPartyFilter>(row.GetString(prefix + "ThirdPartyFilter"), out mThirdPartyFilter, ThirdPartyFilter.None))
                {
                    error = prefix + "ThirdPartyFilter invalid";
                    return false;
                }
            }

            mScoring = row.GetString(prefix + "Scoring");

            if (!string.IsNullOrEmpty(mScoring))
            {
                mEnabled = true;

                if (ScoringLookup.GetScoring(mScoring) == null)
                {
                    error = mScoring + " missing";
                    return false;
                }

                if ((!row.Exists(prefix + "ScoringMinimum")) && (!row.Exists(prefix + "ScoringMaximum")))
                {
                    error = prefix + "ScoringMinimum missing";
                    return false;
                }
            }

            mScoringMaximum = row.GetInt(prefix + "ScoringMaximum", int.MaxValue);
            mScoringMinimum = row.GetInt(prefix + "ScoringMinimum", int.MinValue);

            if (mScoringMinimum > mScoringMaximum)
            {
                int scoring = mScoringMinimum;
                mScoringMinimum = mScoringMaximum;
                mScoringMaximum = scoring;
            }

            if ((row.Exists(prefix + "RelationshipMinimum")) || (row.Exists(prefix + "RelationshipMaximum")))
            {
                mEnabled = true;
            }

            RelationshipLevel relationLevel;
            if (ParserFunctions.TryParseEnum<RelationshipLevel>(row.GetString(prefix + "RelationshipMaximum"), out relationLevel, RelationshipLevel.Neutral))
            {
                mRelationshipMaximum = (int)relationLevel;
            }
            else
            {
                mRelationshipMaximum = row.GetInt(prefix + "RelationshipMaximum", 101);
            }

            if (ParserFunctions.TryParseEnum<RelationshipLevel>(row.GetString(prefix + "RelationshipMinimum"), out relationLevel, RelationshipLevel.Neutral))
            {
                mRelationshipMinimum = (int)relationLevel;
            }
            else
            {
                mRelationshipMinimum = row.GetInt(prefix + "RelationshipMinimum", -101);
            }

            if (mRelationshipMinimum > mRelationshipMaximum)
            {
                int scoring = mRelationshipMinimum;
                mRelationshipMinimum = mRelationshipMaximum;
                mRelationshipMaximum = scoring;
            }

            mClan = row.GetString(prefix + "Clan");
            if (!string.IsNullOrEmpty(mClan))
            {
                mEnabled = true;
            }

            if (row.Exists(prefix + "ClanLeader"))
            {
                mEnabled = true;
            }

            mClanLeader = row.GetBool(prefix + "ClanLeader");

            if (row.Exists(prefix + "ClanMembers"))
            {
                mEnabled = true;
            }

            mClanMembers = row.GetBool(prefix + "ClanMembers");

            string ageGender = row.GetString(prefix + "AgeGender");
            if (!string.IsNullOrEmpty(ageGender))
            {
                mEnabled = true;

                if (!ParserFunctions.TryParseEnum<CASAgeGenderFlags>(ageGender, out mAgeGender, CASAgeGenderFlags.None))
                {
                    error = "Unknown AgeGender " + ageGender;
                    return false;
                }
            }

            StringToSpeciesList converter = new StringToSpeciesList();
            mSpecies = converter.Convert(row.GetString(prefix + "Species"));
            if (mSpecies == null)
            {
                error = converter.mError;
                return false;
            }

            if (mSpecies.Count == 0)
            {
                mSpecies.Add(CASAgeGenderFlags.Human);
            }

            for (int i = 0; i < 10; i++)
            {
                string key = prefix + "UserAgeGender" + i;
                if (!row.Exists(key)) break;

                mEnabled = true;

                string name = row.GetString(key);

                AgeGenderOption option = manager.GetOption<AgeGenderOption>(name);
                if (option == null)
                {
                    error = prefix + "UserAgeGender" + i + " " + name + " missing";
                    return false;
                }

                mUserAgeGenders.Add(name);
            }

            for (int i = 0; i < 10; i++)
            {
                string key = prefix + "ValueTest" + i;
                if (!row.Exists(key)) break;

                mEnabled = true;

                string name = row.GetString(key);

                int min = row.GetInt(key + "Minimum", int.MinValue);
                int max = row.GetInt(key + "Maximum", int.MaxValue);

                bool match = true;
                if (row.Exists(key + "Match"))
                {
                    match = row.GetBool(key + "Match");
                }

                mValueTestLoads.Add(new ValueTestLoadStore(name, min, max, match));
            }

            if ((!mEnabled) && (errorIfNone))
            {
                error = prefix + " Filter missing";
                return false;
            }

            updater.AddUpdater(this);
            return true;
        }
예제 #37
0
        public void UpdateManager(StoryProgressionObject manager)
        {
            mManager = manager;

            mAgeGenderOptions = new List<AgeGenderOption>();

            foreach (string name in mUserAgeGenders)
            {
                AgeGenderOption option = manager.GetOption<AgeGenderOption>(name);
                if (option == null) continue;

                mAgeGenderOptions.Add(option);
            }

            StoryProgressionObject valueTestManager = manager;

            if (!string.IsNullOrEmpty(mClan))
            {
                valueTestManager = manager.Personalities.GetPersonality(mClan);
            }

            List<IValueTestOption> values = new List<IValueTestOption>();

            if (valueTestManager != null)
            {
                foreach(ValueTestLoadStore store in mValueTestLoads)
                {
                    IntegerOption intOption = manager.GetOption<IntegerOption>(store.mName);
                    if (intOption != null)
                    {
                        values.Add(new IntegerOption.ValueTest(intOption, store.mMinimum, store.mMaximum));
                    }
                    else
                    {
                        BooleanOption boolOption = manager.GetOption<BooleanOption>(store.mName);
                        if (boolOption != null)
                        {
                            values.Add(new BooleanOption.ValueTest(boolOption, store.mMatch));
                        }
                    }
                }
            }

            mValueTestOptions = values;
        }
예제 #38
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (parameters == null)
            {
                SimDescription target = SimTypes.HeadOfFamily(mLot.Household);
                if (target == null) return null;

                parameters = new object[] { Sim, target };
            }

            return base.PrintStory(manager, name, parameters, extended, logging);
        }
예제 #39
0
        public override bool ManualSetup(StoryProgressionObject manager)
        {
            if (!base.ManualSetup(manager)) return false;

            int originalID = Scenarios.TrackingID;
            Scenarios.TrackingID = ID;

            SimSelection sim = new SimSelection(this);
            try
            {
                if (!sim.Perform())
                {
                    if (!AcceptCancelDialog.Show(Common.Localize("FireScenario:ApplyAll")))
                    {
                        return false;
                    }
                }

                Scenarios.WriteTrack(false);
            }
            finally
            {
                Scenarios.TrackingID = originalID;
            }

            Sim = sim.SimDescription;
            return true;
        }
예제 #40
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (parameters == null)
            {
                if (Sim == null) return null;

                parameters = new object[] { Sim };
            }

            return base.PrintStory(manager, name, parameters, extended, logging);
        }
예제 #41
0
        public static void GetRepairs(StoryProgressionObject manager, GameObject[] choices, Dictionary<Household,List<GameObject>> allRepairs)
        {
            foreach (GameObject obj in choices)
            {
                if (obj == null) continue;

                if (obj is Sim)
                {
                    Sim sim = obj as Sim;

                    if (!sim.SimDescription.IsFrankenstein) continue;

                    if (!sim.BuffManager.HasElement(BuffNames.ShortOut)) continue;
                }
                else
                {
                    if (obj.InUse) continue;

                    if (!obj.InWorld) continue;

                    if (!obj.IsRepairable) continue;

                    RepairableComponent component = obj.Repairable;
                    if (component == null) continue;

                    if (!component.Broken) continue;
                }

                if (obj.LotCurrent == null) continue;

                Household household = obj.LotCurrent.Household;
                if (household == null) continue;

                if (household == Household.ActiveHousehold) continue;

                foreach (SimDescription member in HouseholdsEx.All(household))
                {
                    if (manager.GetValue<InStasisOption, bool>(member)) continue;
                }

                List<GameObject> repairs;
                if (!allRepairs.TryGetValue(household, out repairs))
                {
                    repairs = new List<GameObject>();
                    allRepairs.Add(household, repairs);
                }

                repairs.Add(obj);
            }
        }
예제 #42
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (parameters == null)
            {
                parameters = new object[] { Sim, Target, mSkillName };
            }

            if (extended == null)
            {
                extended = new string[] { mSkillName };
            }

            return base.PrintStory(manager, name, parameters, extended, logging);
        }
예제 #43
0
 public ManagerScoringParameters(StoryProgressionObject manager, SimDescription scoreAgainst, SimDescription other, bool absolute)
     : base(scoreAgainst, other, absolute)
 {
     mManager = manager;
 }
예제 #44
0
        protected override ManagerStory.Story PrintFormattedStory(StoryProgressionObject manager, string text, string summaryKey, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (!ShouldReport) return null;

            if (manager == null)
            {
                manager = Lots;
            }

            ManagerStory.Story story = base.PrintFormattedStory(manager, mStory, summaryKey, parameters, extended, logging);

            if (story != null)
            {
                story.mShowNoImage = true;
            }

            return story;
        }
예제 #45
0
        protected override ManagerStory.Story PrintFormattedStory(StoryProgressionObject manager, string text, string summaryKey, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (parameters == null)
            {
                if (Sim == null) return null;

                if (Target == null) return null;

                parameters = new object[] { Sim, Target };
            }

            return base.PrintFormattedStory(manager, text, summaryKey, parameters, extended, logging);
        }
예제 #46
0
        protected override ManagerStory.Story PrintFormattedStory(StoryProgressionObject manager, string text, string summaryKey, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (mMovers.Count == 1) return null;

            if (manager == null)
            {
                if (Manager is SimPersonality)
                {
                    manager = Households;
                }
            }

            if (text == null)
            {
                text = GetTitlePrefix(PrefixType.Summary);
            }

            return Stories.PrintFormattedSummary(Households, text, summaryKey, mMoveInWith, mMovers, extended, logging);
        }
예제 #47
0
            public void UpdateManager(StoryProgressionObject manager)
            {
                if (mOption == null) return;

                mOption = manager.GetOption<AgeGenderOption>(mOption.GetTitlePrefix());
            }
예제 #48
0
            protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
            {
                if (manager == null)
                {
                    manager = Deaths;
                }

                GetData<ManagerDeath.DyingSimData>(Sim).Notified = true;

                return base.PrintStory(manager, name, parameters, extended, logging);
            }
 public PropagateClanDelightScenario(SimDescription center, StoryProgressionObject clan, Origin origin)
     : base(center, BuffNames.Delighted, origin)
 {
     mClan = clan as SimPersonality;
 }
예제 #50
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (manager == null)
            {
                manager = Lots;
            }

            if (parameters == null)
            {
                if (Sim.Household == null) return null;

                return Stories.PrintStory(manager, name, Sim.Household, extended, logging);
            }
            else
            {
                return base.PrintStory(manager, name, parameters, extended, logging);
            }
        }
예제 #51
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (manager == null)
            {
                manager = Situations;
            }

            if (parameters == null)
            {
                parameters = new object[] { Sim, SimClock.CurrentTime() };
            }

            return base.PrintStory(manager, name, parameters, extended, logging);
        }
예제 #52
0
        public static bool PushInteractions(StoryProgressionObject manager, SimDescription sim, List<GameObject> repair)
        {
            if (sim.CreatedSim == null) return false;

            if (sim.Household == null) return false;

            List<Pair<GameObject, InteractionDefinition>> electronics = new List<Pair<GameObject, InteractionDefinition>>();

            bool bSuccess = false;

            foreach (GameObject obj in repair)
            {
                InteractionDefinition interaction = null;

                bool electric = false;
                if (obj is Dishwasher)
                {
                    interaction = Dishwasher.RepairDishwasher.Singleton;
                    electric = true;
                }
                else if (obj is Computer)
                {
                    interaction = Computer.RepairComputer.Singleton;
                    electric = true;
                }
                else if (obj is Stereo)
                {
                    interaction = Stereo.RepairStereo.Singleton;
                    electric = true;
                }
                else if (obj is TV)
                {
                    interaction = TV.RepairTV.Singleton;
                    electric = true;
                }
                else if (obj is TrashCompactor)
                {
                    interaction = TrashCompactor.Repair.Singleton;
                    electric = true;
                }
                else if (obj is Bathtub)
                {
                    interaction = Bathtub.RepairBathtub.Singleton;
                }
                else if (obj is Shower)
                {
                    interaction = Shower.RepairShower.Singleton;
                }
                else if (obj is Sink)
                {
                    interaction = Sink.RepairSink.Singleton;
                }
                else if (obj is Toilet)
                {
                    interaction = Toilet.Repair.Singleton;
                }
                else if (obj is NectarMaker)
                {
                    interaction = NectarMaker.Repair.Singleton;
                    electric = true;
                }
                else if (obj is WashingMachine)
                {
                    interaction = WashingMachine.Repair.Singleton;
                    electric = true;
                }
                else if (obj is Sim)
                {
                    interaction = OccultFrankenstein.RepairFrankenstein.Singleton;
                }
                else if (obj is HotTubBase)
                {
                    interaction = HotTubBase.RepairHotTub.Singleton;
                }
                else if (obj is TimeMachine)
                {
                    interaction = TimeMachine.Repair.Singleton;
                    electric = true;
                }

                if (interaction == null) continue;

                if (electric)
                {
                    electronics.Add(new Pair<GameObject, InteractionDefinition>(obj, interaction));
                }
                else
                {
                    sim.Household.AddGreetedLotToHousehold(obj.LotCurrent, sim.CreatedSim.ObjectId);

                    if (!manager.Situations.PushInteraction(manager, sim, obj, interaction))
                    {
                        break;
                    }
                    else
                    {
                        bSuccess = true;
                    }
                }
            }

            if (electronics.Count > 0)
            {
                Pair<GameObject, InteractionDefinition> item = RandomUtil.GetRandomObjectFromList(electronics);

                sim.Household.AddGreetedLotToHousehold(item.First.LotCurrent, sim.CreatedSim.ObjectId);

                if (manager.Situations.PushInteraction(manager, sim, item.First, item.Second))
                {
                    bSuccess = true;
                }
            }

            return bSuccess;
        }
예제 #53
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (mNemesis)
            {
                SimPersonality clan = Manager as SimPersonality;
                if (clan != null)
                {
                    if (clan.Me != Sim) return null;
                }

                name = "Nemesis";
            }

            return base.PrintStory(manager, name, parameters, extended, logging);
        }
예제 #54
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (manager == null)
            {
                manager = Friends;
            }

            if (!Sim.IsHuman)
            {
                if (string.IsNullOrEmpty(name)) return null;

                name += "Pet";
            }
            else if (mNemesis)
            {
                SimPersonality clan = Manager as SimPersonality;
                if (clan != null)
                {
                    if (clan.Me != Sim) return null;
                }

                name = "Nemesis";
            }
            else if (Sim.Partner == Target)
            {
                if (string.IsNullOrEmpty(name)) return null;

                name += "Partner";
            }

            return base.PrintStory(manager, name, parameters, extended, logging);
        }
예제 #55
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (parameters == null)
            {
                parameters = new object[] { Sim, mFunds };
            }

            if (extended == null)
            {
                extended = new string[] { EAText.GetMoneyString(mFunds) };
            }

            return base.PrintStory(manager, name, parameters, extended, logging);
        }
예제 #56
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (mMovers.Count != 1) return null;

            if (manager == null)
            {
                if (Manager is SimPersonality)
                {
                    manager = Households;
                }
            }

            return base.PrintStory(manager, name, new object[] { mMovers[0], mMoveInWith }, extended, logging);
        }
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (manager == null)
            {
                manager = Pregnancies;
            }

            if (parameters == null)
            {
                parameters = new object[] { Sim, Target, mNumberOfKidsBetween };
            }

            return base.PrintStory(manager, name, parameters, extended, logging);
        }
예제 #58
0
        protected override ManagerStory.Story PrintFormattedStory(StoryProgressionObject manager, string text, string summaryKey, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (manager == null)
            {
                manager = Careers;
            }

            if (extended == null)
            {
                if (Event.Career is School)
                {
                    extended = new string[] { Event.Career.GetLocalizedCareerName(Sim.IsFemale) };
                }
                else
                {
                    extended = new string[] { Event.Career.GetLocalizedCareerName(Sim.IsFemale), EAText.GetNumberString(Event.Career.Level) };
                }
            }

            ManagerStory.Story story = base.PrintFormattedStory(manager, mText, summaryKey, parameters, extended, logging);

            if (story != null)
            {
                story.mOverrideImage = Event.Career.CareerIconColored;
            }

            return story;
        }
예제 #59
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (parameters == null)
            {
                if (Sim == null) return null;

                if (Target == null) return null;

                if (!AllowStorySpecies(Sim, Target))
                {
                    return null;
                }

                parameters = new object[] { Sim, Target };
            }

            return base.PrintStory(manager, name, parameters, extended, logging);
        }
예제 #60
0
        protected override ManagerStory.Story PrintStory(StoryProgressionObject manager, string name, object[] parameters, string[] extended, ManagerStory.StoryLogging logging)
        {
            if (manager == null)
            {
                manager = Situations;
            }

            if ((parameters == null) && (mReason != null))
            {
                parameters = new object[] { Sim, mReason.CatalogName };
            }

            return base.PrintStory(manager, name, parameters, extended, logging);
        }