示例#1
0
 protected void Init(Notices notices)
 {
     mResistance = 0;
     mNotices    = notices;
     mStage      = 0;
     mStageType  = VectorControl.StageType.None;
 }
示例#2
0
        public bool Inoculate(long strain, bool paid)
        {
            Init(Notices.Identified);
            mStageType = VectorControl.StageType.Inoculated;

            bool newInoculate = false;

            if (mInoculationStrain < strain)
            {
                mInoculationStrain = strain;
                newInoculate       = true;
            }

            if (paid)
            {
                mNotices |= Notices.PaidInnoculaion;
            }

            return(newInoculate);
        }
示例#3
0
            public VectorControl.StageType AdjustStage(DiseaseVector vector, SimDescription sim, out int stage, out int nextCheck)
            {
                stage = mStages[vector.Stage].GetNextStage(sim, vector);

                VectorControl.StageType result = VectorControl.StageType.Resisted;
                if ((stage < 0) || (stage >= mStages.Count))
                {
                    nextCheck = 0;
                }
                else
                {
                    result = RunStage(vector, stage, out nextCheck);
                }

                int localStage = stage;

                if (Common.kDebugging)
                {
                    Common.DebugNotify(vector.IsIgnored ? "" : vector.UnlocalizedName + Common.NewLine + "Stage: " + GetStageName(localStage) + Common.NewLine + sim.FullName, sim.CreatedSim);
                }

                return(result);
            }
示例#4
0
        public bool Process(SimDescription sim)
        {
            if (!mNonPersistableData.IsEnabled)
            {
                return(false);
            }

            if (mProtected > 0)
            {
                mProtected--;
            }
            else if (mProtected <= 0)
            {
                mVirulence = 1f;
            }

            if ((RawStrength <= 0) || (SimTypes.IsDead(sim)))
            {
                mStageType = VectorControl.StageType.Resisted;
                return(false);
            }

            if ((IsInoculated) || (IsResisted))
            {
                return(false);
            }

            bool noticeShown = false;

            if (mNextCheck > 0)
            {
                mNextCheck--;
            }
            else
            {
                if (InRemission)
                {
                    mResistance = 0;
                    mNotices   &= ~Notices.FirstSign;
                }

                mStageType = mNonPersistableData.AdjustStage(this, sim, out mStage, out mNextCheck);

                mNextCheck = (int)(mNextCheck * (Vector.Settings.mStageRatio / 100f));

                string key = mNonPersistableData.GetStory(mStage, IsIdentified);

                if (!string.IsNullOrEmpty(key))
                {
                    if ((SimTypes.IsSelectable(sim)) || (!IsIgnored))
                    {
                        Common.Notify(sim.CreatedSim, Common.Localize("Story:" + key, sim.IsFemale, new object[] { sim, GetLocalizedName(sim.IsFemale) }));
                        noticeShown = true;
                    }
                }
                else if ((!ShowingSigns) && (HadFirstSign))
                {
                    if (SimTypes.IsSelectable(sim))
                    {
                        if (IsIdentified)
                        {
                            Common.Notify(sim.CreatedSim, Common.Localize("Vector:Better", sim.IsFemale, new object[] { sim, GetLocalizedName(sim.IsFemale) }));
                        }
                        else
                        {
                            Common.Notify(sim.CreatedSim, Common.Localize("Vector:BetterUnknown", sim.IsFemale, new object[] { sim }));
                        }
                    }

                    mNotices &= ~Notices.FirstSign;
                }

                if (IsResisted)
                {
                    return(false);
                }
            }

            if (ShowingSigns)
            {
                if (!HadFirstSign)
                {
                    mNotices |= Notices.FirstSign;

                    if (!noticeShown)
                    {
                        if (SimTypes.IsSelectable(sim))
                        {
                            Common.Notify(sim.CreatedSim, Common.Localize("Vector:FirstSign", sim.IsFemale, new object[] { sim }));
                        }
                        else if (!IsIgnored)
                        {
                            OutbreakControl.ShowNotice(sim, this, Common.kDebugging ? "Showing: " : "");
                        }
                    }
                }

                if (sim.CreatedSim != null)
                {
                    BuffGermy.BuffInstanceGermy germy = sim.CreatedSim.BuffManager.GetElement(BuffNames.Germy) as BuffGermy.BuffInstanceGermy;
                    if (germy == null)
                    {
                        OccultTypes currentOccultTypes = sim.OccultManager.mCurrentOccultTypes;

                        try
                        {
                            sim.OccultManager.mCurrentOccultTypes = OccultTypes.None;

                            if (sim.CreatedSim.BuffManager.AddElement(BuffNames.Germy, sFromInfectionOrigin))
                            {
                                germy = sim.CreatedSim.BuffManager.GetElement(BuffNames.Germy) as BuffGermy.BuffInstanceGermy;
                            }
                        }
                        finally
                        {
                            sim.OccultManager.mCurrentOccultTypes = currentOccultTypes;
                        }
                    }

                    if (germy != null)
                    {
                        if (germy.GermyContagionBroadcaster != null)
                        {
                            germy.GermyContagionBroadcaster.Dispose();
                            germy.GermyContagionBroadcaster = null;
                        }

                        germy.mCurrentTotalDurationIncrease = 0;
                        germy.ModifyDuration(30);
                    }
                }

                mNonPersistableData.Symptomize(sim.CreatedSim, this);
            }

            if (IsMutating)
            {
                Mutate();
            }

            PurchaseControl.AddCheck(sim.Household);

            return(true);
        }
示例#5
0
 protected void Start(Notices notices)
 {
     Init(notices);
     mStageType = mNonPersistableData.InitialStage(this, out mNextCheck);
 }
示例#6
0
 public bool HasType(VectorControl.StageType type)
 {
     return((mType & type) == type);
 }