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)); }
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); }
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); }
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); } } }