Esempio n. 1
0
        public override void Perform(Sim sim, DiseaseVector vector)
        {
            if (sim.OccultManager == null)
            {
                return;
            }

            if (mRemove)
            {
                OccultTypeHelper.Remove(sim.SimDescription, mOccult, true);
            }
            else
            {
                if (sim.OccultManager.HasOccultType(mOccult))
                {
                    return;
                }

                if (mDropOthers)
                {
                    foreach (OccultTypes type in Enum.GetValues(typeof(OccultTypes)))
                    {
                        if (type == OccultTypes.None)
                        {
                            continue;
                        }

                        OccultTypeHelper.Remove(sim.SimDescription, type, true);
                    }
                }

                OccultTypeHelper.Add(sim.SimDescription, mOccult, false, true);
            }
        }
Esempio n. 2
0
        protected override bool PrivateUpdate(ScenarioFrame frame)
        {
            if (!base.PrivateUpdate(frame))
            {
                return(false);
            }

            if ((!mFail) && (GetValue <AllowRevertOption, bool>()))
            {
                foreach (OccultTypes type in OccultTypeHelper.CreateList(Target, true))
                {
                    OccultTypeHelper.Remove(Target, type, true);
                }
            }

            return(true);
        }
Esempio n. 3
0
        public static void MergeOccults(OccultManager ths, OccultManager source)
        {
            Common.StringBuilder msg = new Common.StringBuilder("MergeOccults " + ths.mOwnerDescription.FullName + Common.NewLine);
            Traveler.InsanityWriteLog(msg);

            foreach (OccultTypes type in Enum.GetValues(typeof(OccultTypes)))
            {
                try
                {
                    switch (type)
                    {
                    case OccultTypes.None:
                    case OccultTypes.Ghost:
                        break;

                    default:
                        if ((source.HasOccultType(type)) && (!ths.HasOccultType(type)))
                        {
                            msg += Common.NewLine + "A " + type;
                            Traveler.InsanityWriteLog(msg);

                            ths.MergeOccult(type);
                        }

                        if ((!source.HasOccultType(type)) && (ths.HasOccultType(type)))
                        {
                            msg += Common.NewLine + "B " + type;
                            Traveler.InsanityWriteLog(msg);

                            OccultTypeHelper.Remove(ths.mOwnerDescription, type, false);
                        }
                        break;
                    }
                }
                catch (Exception e)
                {
                    Common.Exception(ths.mOwnerDescription, null, "Type: " + type, e);
                }
            }
        }
Esempio n. 4
0
        protected override bool Run(SimDescription me, bool singleSelection)
        {
            if (!base.Run(me, singleSelection))
            {
                return(false);
            }

            foreach (SelectionCriteria.Occult.Values type in mTypes)
            {
                if (type.mOccult == OccultTypes.Ghost)
                {
                    Urnstone stone = Urnstones.FindGhostsGrave(me);

                    if ((stone != null) && (me.CreatedSim != null))
                    {
                        stone.GhostToSim(me.CreatedSim, false, false);
                    }
                    else
                    {
                        me.SetDeathStyle(SimDescription.DeathType.None, false);
                        me.IsGhost           = false;
                        me.IsNeverSelectable = false;
                        me.ShowSocialsOnSim  = true;
                        me.AgingEnabled      = true;

                        if (stone != null)
                        {
                            stone.Destroy();
                        }
                    }
                }
                else
                {
                    OccultTypeHelper.Remove(me, type.mOccult, true);
                }
            }

            return(true);
        }
Esempio n. 5
0
        public static void FixupOccults(FutureDescendantService ths, FutureDescendantService.FutureDescendantHouseholdInfo descendantHouseholdInfo)
        {
            Common.StringBuilder msg = new Common.StringBuilder("FixupOccults");

            if (descendantHouseholdInfo == null)
            {
                msg += Common.NewLine + "descendantHouseholdInfo null";
            }

            if (descendantHouseholdInfo.DescendantHousehold == null)
            {
                msg += Common.NewLine + "descendantHouseholdInfo.DescendantHousehold null";
            }

            if (!descendantHouseholdInfo.mFutureDescendantHouseholdInfoDirty)
            {
                msg += Common.NewLine + "mFutureDescendantHosueholdInfoDirty is false";
            }

            if (Traveler.Settings.mChanceOfOccultHybrid == 0)
            {
                msg += Common.NewLine + "Hybrid 0, returning";
                Common.DebugWriteLog(msg);
                ths.FixupOccults(descendantHouseholdInfo);
                return;
            }

            try
            {
                if (((descendantHouseholdInfo != null) && descendantHouseholdInfo.mFutureDescendantHouseholdInfoDirty) && (descendantHouseholdInfo.DescendantHousehold != null))
                {
                    descendantHouseholdInfo.mFutureDescendantHouseholdInfoDirty = false;
                    List <OccultTypes> list  = null;
                    float minAlienPercentage = 0f;
                    float maxAlienPercentage = 0f;
                    if (descendantHouseholdInfo.mProgenitorSimIds != null)
                    {
                        foreach (ulong num in descendantHouseholdInfo.mProgenitorSimIds)
                        {
                            SimDescription item     = null;
                            bool           unpacked = false;
                            msg += Common.NewLine + "Num: " + num;
                            item = FutureDescendantHouseholdInfoEx.CreateProgenitor(num, out unpacked);

                            if (CrossWorldControl.sRetention.transitionedOccults.ContainsKey(num))
                            {
                                list = CrossWorldControl.sRetention.transitionedOccults[num];
                            }
                            else
                            {
                                msg += Common.NewLine + "Couldn't find Sim in transitionedOccults (Maybe they had none?)";
                            }

                            if (item != null)
                            {
                                // EA appears to transition this... I hope :)
                                msg += Common.NewLine + "Working on " + item.FullName;
                                if (SimTypes.IsServiceAlien(item))
                                {
                                    msg += Common.NewLine + "Is full blood Alien";
                                    maxAlienPercentage = 1f;
                                }
                                else
                                {
                                    msg += Common.NewLine + "Died (2)";
                                    if (item.AlienDNAPercentage == 0 && item.IsAlien)
                                    {
                                        msg += Common.NewLine + "IsAlien";
                                        minAlienPercentage = 0;
                                        maxAlienPercentage = 1;
                                    }
                                    else
                                    {
                                        if (item.AlienDNAPercentage > maxAlienPercentage)
                                        {
                                            maxAlienPercentage = item.mAlienDNAPercentage;
                                        }
                                        else if (item.AlienDNAPercentage > minAlienPercentage)
                                        {
                                            minAlienPercentage = item.mAlienDNAPercentage;
                                        }
                                    }
                                }
                            }
                            else
                            {
                                msg += Common.NewLine + "Failed to find SimDesc";
                            }
                        }
                    }

                    if (descendantHouseholdInfo.mHouseholdMembers != null)
                    {
                        foreach (ulong num3 in descendantHouseholdInfo.mHouseholdMembers)
                        {
                            SimDescription newSim = SimDescription.Find(num3);
                            if (newSim != null && !newSim.IsDead)
                            {
                                msg += Common.NewLine + "Processing: " + newSim.FullName;
                                if (Traveler.Settings.mChanceOfOccultMutation == 0)
                                {
                                    msg += Common.NewLine + "Occult Mutation 0";
                                    List <OccultTypes> descendantOccults = OccultTypeHelper.CreateList(newSim, true);
                                    foreach (OccultTypes type in descendantOccults)
                                    {
                                        if (list == null || !list.Contains(type))
                                        {
                                            OccultTypeHelper.Remove(newSim, type, true);
                                        }
                                    }
                                }

                                if (list != null && list.Count > 0)
                                {
                                    msg += Common.NewLine + "Applying Occult Chance to " + newSim.FullName;
                                    bool success = FutureDescendantHouseholdInfoEx.ApplyOccultChance(newSim, list, Traveler.Settings.mChanceOfOccultHybrid, Traveler.Settings.mChanceOfOccultMutation, Traveler.Settings.mMaxOccult);
                                    if (success)
                                    {
                                        msg += Common.NewLine + "Added occults";
                                    }
                                }
                                else
                                {
                                    msg += Common.NewLine + "No occults found...";
                                }

                                if (minAlienPercentage > 0 || maxAlienPercentage > 0 && RandomUtil.CoinFlip())
                                {
                                    float percent = (minAlienPercentage + maxAlienPercentage) / 2f;
                                    float jitter  = SimDescription.kAlienDNAJitterPercent * 2; // 2 generations have passed considering Travelers approach to descendants
                                    percent = RandomUtil.GetFloat(-jitter, jitter);
                                    newSim.SetAlienDNAPercentage(MathUtils.Clamp(percent, 0f, 1f));

                                    msg += Common.NewLine + "Made alien. Percent: " + newSim.mAlienDNAPercentage;
                                }
                            }
                            else
                            {
                                msg += Common.NewLine + "New Sim was null.";
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Common.Exception("", e);
            }
            finally
            {
                Common.DebugWriteLog(msg);
            }
        }