示例#1
0
        protected override OptionResult Run(GameHitParameters <Sim> parameters)
        {
            List <VectorBooter.Item> choices = VectorBooter.GetVectorItems(parameters.mTarget.SimDescription);

            CommonSelection <VectorBooter.Item> .Results items = new CommonSelection <VectorBooter.Item>(Name, choices).SelectMultiple();
            if ((items == null) || (items.Count == 0))
            {
                return(OptionResult.Failure);
            }

            string vectors = null;

            foreach (VectorBooter.Item item in items)
            {
                VectorControl.Inoculate(parameters.mTarget.SimDescription, item.Value, true, false);

                vectors += Common.NewLine + " " + item.Value.GetLocalizedName(parameters.mTarget.IsFemale);
            }

            if (!string.IsNullOrEmpty(vectors))
            {
                Common.Notify(parameters.mTarget, Common.Localize("Inoculate:Success", parameters.mTarget.IsFemale, new object[] { parameters.mTarget }) + vectors);
            }

            return(OptionResult.SuccessClose);
        }
示例#2
0
        public static bool Perform(SimDescription sim, bool promptStrength, bool random)
        {
            List <VectorBooter.Item> choices = VectorBooter.GetVectorItems(sim);

            int maxSelection = 0;

            if (!promptStrength)
            {
                maxSelection = 1;
            }

            List <VectorBooter.Item> selection = new List <VectorBooter.Item>();

            if (random)
            {
                if (choices.Count == 0)
                {
                    return(false);
                }

                selection.Add(RandomUtil.GetRandomObjectFromList(choices));
            }
            else
            {
                CommonSelection <VectorBooter.Item> .Results items = new CommonSelection <VectorBooter.Item>(Common.Localize("Infect:MenuName"), choices).SelectMultiple(maxSelection);
                if ((items == null) || (items.Count == 0))
                {
                    return(false);
                }

                selection.AddRange(items);
            }

            foreach (VectorBooter.Item item in selection)
            {
                DiseaseVector.Variant strain = Vector.Settings.GetCurrentStrain(item.Value);

                int strength = strain.Strength;

                if (promptStrength)
                {
                    string text = StringInputDialog.Show(Common.Localize("Infect:MenuName"), Common.Localize("Infect:Prompt", false, new object[] { item.Value.GetLocalizedName(false) }), strain.Strength.ToString());

                    if (!int.TryParse(text, out strength))
                    {
                        Common.Notify(Common.Localize("Numeric:Error"));
                    }
                }

                strain.Strength = strength;

                DiseaseVector disease = new DiseaseVector(item.Value, strain);

                disease.Infect(sim, true);
            }

            return(true);
        }
示例#3
0
        protected override OptionResult Run(GameHitParameters <GameObject> parameters)
        {
            List <VectorBooter.Item> choices = VectorBooter.GetVectorItems(null);

            CommonSelection <VectorBooter.Item> .Results items = new CommonSelection <VectorBooter.Item>(Name, choices).SelectMultiple();
            if ((items == null) || (items.Count == 0))
            {
                return(OptionResult.Failure);
            }

            foreach (VectorBooter.Item item in items)
            {
                OutbreakControl.StartOutbreak(item.Value, true);
            }

            return(OptionResult.SuccessRetain);
        }
示例#4
0
        public override List <ISettingOption> GetOptions()
        {
            List <ISettingOption> results = new List <ISettingOption>();

            results.Add(new EnabledSetting(mGuid));
            results.Add(new WatchesSetting(mGuid));
            results.Add(new MotiveAdjustmentRatioSetting(mGuid));

            VectorBooter.Data vector = VectorBooter.GetVector(mGuid);
            if (vector != null)
            {
                foreach (string setting in vector.CustomSettings)
                {
                    results.Add(new CustomSetting(setting));
                }
            }

            return(results);
        }
示例#5
0
        public override bool Run()
        {
            try
            {
                StandardEntry();

                try
                {
                    if (!Target.StartComputing(this, SurfaceHeight.Table, true))
                    {
                        return(false);
                    }

                    AnimateSim("GenericTyping");

                    List <VectorBooter.Item> choices = VectorBooter.GetVectorItems(null);

                    VectorBooter.Item item = new CommonSelection <VectorBooter.Item>(GetInteractionName(), choices, new StrainColumn()).SelectSingle();
                    if (item == null)
                    {
                        return(false);
                    }

                    Common.Notify(item.Value.GetResearch(Actor.IsFemale));

                    Target.StopComputing(this, Computer.StopComputingAction.TurnOff, false);
                    return(true);
                }
                finally
                {
                    StandardExit();
                }
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(Actor, Target, e);
                return(false);
            }
        }
示例#6
0
        public bool OnLoadFixup()
        {
            mNonPersistableData = VectorBooter.GetVector(Guid);
            if (mNonPersistableData == null)
            {
                return(false);
            }

            if (mStrain == null)
            {
                mStrain = new Variant(mNonPersistableData, Vector.Settings.GetCurrentStrain(mNonPersistableData));
            }

            if (mStage > mNonPersistableData.NumStages)
            {
                mStage = 0;
            }

            return(true);
        }
示例#7
0
        public static bool Inoculate(SimDescription sim, VectorBooter.Data vector, bool paid, bool testExisting)
        {
            DiseaseVector inoculate = new DiseaseVector(vector, Vector.Settings.GetCurrentStrain(vector));
            inoculate.Inoculate(vector.InoculationStrain, paid);

            return Inoculate(sim, inoculate, paid, testExisting);
        }
示例#8
0
 public InstigatorListener(EventTypeId id, VectorBooter.Data vector, InstigatorBooter.Data instigator)
     : base(id, null)
 {
     mVector = vector;
     mInstigator = instigator;
 }
示例#9
0
        public static void StartOutbreak(VectorBooter.Data vector, bool verbose)
        {
            DiseaseVector disease = new DiseaseVector(vector, Vector.Settings.GetNewStrain(vector));

            ScoringLog.sLog.IncStat(disease.UnlocalizedName + " Attempt Outbreak");

            List<Sim> sims = new List<Sim>(LotManager.Actors);

            if (sims.Count > 0)
            {
                int count = 0;
                while ((count < Vector.Settings.mNumPatientZero) && (sims.Count > 0))
                {
                    Sim choice = RandomUtil.GetRandomObjectFromList(sims);
                    sims.Remove(choice);

                    if (choice.SimDescription.ToddlerOrBelow) continue;

                    if (!Vector.Settings.mOutbreakAllowActive)
                    {
                        if (choice.Household == Household.ActiveHousehold) continue;
                    }

                    if (disease.Infect(choice.SimDescription, true))
                    {
                        count++;

                        if (verbose)
                        {
                            ShowNotice(choice.SimDescription, disease, Common.kDebugging ? "Outbreak" : "");
                        }

                        ScoringLog.sLog.IncStat(disease.UnlocalizedName + " Outbreak");
                    }
                }
            }
        }
示例#10
0
        protected DiseaseVector.Variant GetNewStrain(VectorBooter.Data vector, DiseaseVector.Variant strain, bool force)
        {
            DiseaseVector.Variant newStrain = new DiseaseVector.Variant(vector, strain);

            if ((force) || (strain.Mutated))
            {
                // Doing this stops the previous strain from reentering this process
                strain.Mutated = false;

                long id = 1;

                DiseaseVector.Variant oldStrain;
                if (mVariants.TryGetValue(vector.Guid, out oldStrain))
                {
                    if (oldStrain.Strain < strain.Strain)
                    {
                        oldStrain.Strain = strain.Strain;
                    }

                    id = oldStrain.Strain;
                }
                else
                {
                    oldStrain = null;
                }

                if ((oldStrain == null) || (oldStrain.Variation(vector) < newStrain.Variation(vector)))
                {
                    newStrain.Strain++;

                    oldStrain = new DiseaseVector.Variant(newStrain, id + 1);

                    mVariants.Remove(vector.Guid);
                    mVariants.Add(vector.Guid, oldStrain);

                    if (Common.kDebugging)
                    {
                        Common.DebugNotify("BETTER " + vector.Guid + " Strain:" + Common.NewLine + oldStrain);
                    }
                }
                else if (RandomUtil.RandomChance01(vector.StrainMutationRate * (force ? 2 : 1)))
                {
                    newStrain.Strain = id + 1;

                    if (force)
                    {
                        oldStrain.Strain = newStrain.Strain;

                        if (Common.kDebugging)
                        {
                            Common.DebugNotify("OUTBREAK " + vector.Guid + " Strain:" + Common.NewLine + newStrain);
                        }
                    }
                    else
                    {
                        if (Common.kDebugging)
                        {
                            Common.DebugNotify("RANDOM " + vector.Guid + " Strain:" + Common.NewLine + newStrain);
                        }
                    }
                }
            }

            return newStrain;
        }
示例#11
0
 public DiseaseVector.Variant GetNewStrain(VectorBooter.Data vector, DiseaseVector.Variant strain)
 {
     return GetNewStrain(vector, strain, false);
 }
示例#12
0
 public DiseaseVector.Variant GetNewStrain(VectorBooter.Data vector)
 {
     return GetNewStrain(vector, GetCurrentStrain(vector), true);
 }
示例#13
0
 public DiseaseVector.Variant GetCurrentStrain(VectorBooter.Data vector)
 {
     DiseaseVector.Variant strain;
     if (mVariants.TryGetValue(vector.Guid, out strain))
     {
         return strain;
     }
     else
     {
         return new DiseaseVector.Variant(vector);
     }
 }
示例#14
0
            public void Register(VectorBooter.Data vector)
            {
                Dictionary<EventTypeId, bool> events = new Dictionary<EventTypeId, bool>();
                GetEvents(events);

                foreach (EventTypeId e in events.Keys)
                {
                    new OutbreakControl.InstigatorListener(e, vector, this);
                }
            }
示例#15
0
            public Data(XmlDbRow row, VectorBooter.Test test)
            {
                mGuid = row.GetString("GUID");

                mStory = row.GetString("Story");

                mTest = test;
            }
示例#16
0
            public Data(XmlDbRow row, VectorBooter.Test test)
            {
                mGuid = row.GetString("GUID");

                mDelta = row.GetInt("Delta", 0);

                if (mDelta == 0)
                {
                    BooterLogger.AddError(mGuid + " Missing Delta");
                }

                mTest = test;
            }