Ejemplo n.º 1
0
        private static bool WillSimComeToParty(SimDescription guest, Sim host, float fMaxLTR, bool bHostIsLegendary)
        {
            if (bHostIsLegendary || host.HasTrait(TraitNames.PartyAnimal))
            {
                return(true);
            }

            Relationship relationshipToParty = null;

            try
            {
                relationshipToParty = HostedSituation.GetRelationshipToHostedSituation(host.SimDescription, guest);
            }
            catch
            { }

            if (relationshipToParty == null)
            {
                return(false);
            }
            if (relationshipToParty.AreFriends() || relationshipToParty.AreRomantic())
            {
                return(true);
            }
            float num = MathUtils.Clamp(relationshipToParty.LTR.Liking, HouseParty.kLTRMinToInvite, fMaxLTR);

            return(RandomUtil.InterpolatedChance(HouseParty.kLTRMinToInvite, fMaxLTR, (float)HouseParty.kChanceToComeAtMinLTR, (float)HouseParty.kChanceToComeAtMaxLTR, num));
        }
Ejemplo n.º 2
0
        public static OptionResult Perform(Lot lot)
        {
            if (lot == null)
            {
                return(OptionResult.Failure);
            }

            foreach (Situation sit in Situation.sAllSituations)
            {
                if (sit.Lot != lot)
                {
                    continue;
                }

                HostedSituation hosted = sit as HostedSituation;
                if (hosted == null)
                {
                    continue;
                }

                hosted.Exit();
            }

            return(OptionResult.SuccessClose);
        }
Ejemplo n.º 3
0
        protected override bool Allow(Lot lot, Household me)
        {
            if (!base.Allow(lot, me))
            {
                return(false);
            }

            if (lot == null)
            {
                return(false);
            }

            foreach (Situation sit in Situation.sAllSituations)
            {
                if (sit.Lot != lot)
                {
                    continue;
                }

                HostedSituation hosted = sit as HostedSituation;
                if (hosted == null)
                {
                    continue;
                }

                return(true);
            }

            return(false);
        }
Ejemplo n.º 4
0
        public override void OnDelayedWorldLoadFinished()
        {
            Overwatch.Log("CleanupSituations");

            Dictionary <Situation, bool> existing = new Dictionary <Situation, bool>();

            List <Situation> removed = new List <Situation>();

            for (int i = Situation.sAllSituations.Count - 1; i >= 0; i--)
            {
                Situation situation = Situation.sAllSituations[i];

                bool remove = false;

                GroupingSituation grouping = situation as GroupingSituation;
                if (grouping != null)
                {
                    if ((grouping.mLeader == null) || (grouping.mLeader.HasBeenDestroyed))
                    {
                        remove = true;
                    }
                    else if (grouping.Participants != null)
                    {
                        foreach (Sim sim in grouping.Participants)
                        {
                            if (sim == null)
                            {
                                grouping.mParticipants.Clear();
                                remove = true;
                                break;
                            }
                        }
                    }
                }
                else
                {
                    HostedSituation hosted = situation as HostedSituation;
                    if (hosted != null)
                    {
                        if ((hosted.Host == null) || (hosted.Host.HasBeenDestroyed))
                        {
                            remove = true;
                        }
                    }
                }

                if (remove)
                {
                    removed.Add(situation);

                    Situation.sAllSituations.RemoveAt(i);

                    Overwatch.Log("Removed Broken Situation: " + situation.GetType());
                }
                else
                {
                    existing[situation] = true;
                }
            }

            foreach (Situation situation in removed)
            {
                try
                {
                    situation.Exit();
                }
                catch (Exception e)
                {
                    Common.DebugException(situation.GetType().ToString(), e);
                }
            }

            foreach (Sim sim in LotManager.Actors)
            {
                if (sim.Autonomy == null)
                {
                    continue;
                }

                if (sim.Autonomy.SituationComponent == null)
                {
                    continue;
                }

                List <Situation> situations = sim.Autonomy.SituationComponent.Situations;
                if (situations == null)
                {
                    continue;
                }

                for (int i = situations.Count - 1; i >= 0; i--)
                {
                    if (existing.ContainsKey(situations[i]))
                    {
                        continue;
                    }

                    Overwatch.Log("Dropped Broken Situation: " + sim.FullName);

                    situations.RemoveAt(i);
                }
            }
        }