Пример #1
0
        /// <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);
        }