/// <summary> /// Get ChaFiles that are related to this AgentData (heroine). Warning: It might not return some copies. /// </summary> public static IEnumerable <ChaFileControl> GetRelatedChaFiles(this AgentData agentData) { if (agentData == null) { throw new ArgumentNullException(nameof(agentData)); } var results = new HashSet <ChaFileControl>(); if (agentData.param?.actor?.ChaControl?.chaFile != null) { results.Add(agentData.param.actor.ChaControl.chaFile); } var agentActor = agentData.GetNPC(); if (agentActor?.ChaControl?.chaFile != null) { results.Add(agentActor.ChaControl.chaFile); } return(results); }
public static HeroineStatus GetHeroineStatus(this AgentData heroine, PregnancyData pregData = null) { if (heroine == null) { return(HeroineStatus.Unknown); } if (pregData == null) { pregData = heroine.GetPregnancyData(); } var chaControl = heroine.GetNPC()?.ChaControl; if (chaControl == null) { return(HeroineStatus.Unknown); } // Check if she wants to tell if (heroine.SickState.ID == AIProject.Definitions.Sickness.GoodHealthID && !heroine.IsWet && (chaControl.fileGameInfo.phase > 2 || heroine.StatsTable[(int)Status.Type.Mood] > 95 || heroine.StatsTable[(int)Status.Type.Immoral] > 95 || heroine.StatsTable[(int)Status.Type.Motivation] > 140)) { var pregnancyWeek = pregData.Week; if (pregnancyWeek > 0) { if (PregnancyPlugin.ShowPregnancyIconEarly.Value) { return(HeroineStatus.Pregnant); } // Different personalities notice at different times if (_earlyDetectPersonalities.Contains(chaControl.fileParam.personality)) { if (pregnancyWeek > 1) { return(HeroineStatus.Pregnant); } } else if (_lateDetectPersonalities.Contains(chaControl.fileParam.personality)) { if (pregnancyWeek > 11) { return(HeroineStatus.Pregnant); } } else { if (pregnancyWeek > 5) { return(HeroineStatus.Pregnant); } } } var pregCharCtrl = chaControl.GetComponent <PregnancyCharaController>(); return(!pregCharCtrl.isDangerousDay ? HeroineStatus.Safe : HeroineStatus.Risky); } return(HeroineStatus.Unknown); }