public static bool Prefix(int fatherId, int motherId, int setFather, int setMother, ref bool __result) { if (!Main.enabled) { return(true); } int mainActorId = DateFile.instance.MianActorID(); // 启用功能并且是主角造孩子 if (Main.settings.pregnant.Enabled && (fatherId == mainActorId || motherId == mainActorId)) { DebugPregnant("主角尝试发生关系"); int num2 = int.Parse(DateFile.instance.GetActorDate(fatherId, 24)); int num3 = int.Parse(DateFile.instance.GetActorDate(motherId, 24)); DateFile.instance.ChangeActorFeature(fatherId, 4001, 4002); DateFile.instance.ChangeActorFeature(motherId, 4001, 4002); GEvent.OnEvent(eEvents.Copulate, fatherId, motherId); DebugPregnant("父方生育能力: " + num2 + " 母方生育能力: " + num3); if (Main.settings.pregnant.SpecifiedFecundity ? (Main.settings.pregnant.Fecundity <= 0) : (num2 <= 0 || num3 <= 0)) { DebugPregnant("生育不可能,终止"); __result = false; return(false); } if (int.Parse(DateFile.instance.GetActorDate(motherId, 14, applyBonus: false)) != 2) { DebugPregnant("阿拉,母方不是女性,终止"); __result = false; return(false); } int var1 = Random.Range(0, 15000); if (!DateFile.instance.HaveLifeDate(motherId, 901) && var1 < (Main.settings.pregnant.SpecifiedFecundity ? Main.settings.pregnant.Fecundity : (num2 * num3))) { DebugPregnant("生育能力判定通过,需求 " + var1 + ",结果 " + (Main.settings.pregnant.SpecifiedFecundity ? Main.settings.pregnant.Fecundity : (num2 * num3))); bool flag = fatherId == mainActorId || motherId == mainActorId; int num4 = 100; int num5 = flag ? 20 : 50; num4 -= DateFile.instance.GetActorSocial(fatherId, 310).Count *num5; num4 -= DateFile.instance.GetActorSocial(motherId, 310).Count *num5; int var2 = Random.Range(0, 100); if (var2 < (Main.settings.pregnant.SpecifiedPossibility ? Main.settings.pregnant.Possibility : num4)) { DebugPregnant("怀孕判定通过,需求 " + var2 + ",结果 " + (Main.settings.pregnant.SpecifiedPossibility ? Main.settings.pregnant.Possibility : num4)); DateFile.instance.ChangeActorFeature(motherId, 4002, 4003); int var3 = Random.Range(0, 100); if (var3 < (Main.settings.pregnant.SpecifiedQuQu ? Main.settings.pregnant.QuQu : ((DateFile.instance.getQuquTrun - 100) / 10))) { DebugPregnant("异胎判定通过,需求 " + var3 + ",结果 " + (Main.settings.pregnant.SpecifiedQuQu ? Main.settings.pregnant.QuQu : ((DateFile.instance.getQuquTrun - 100) / 10))); DateFile.instance.getQuquTrun = 0; DateFile.instance.actorLife[motherId].Add(901, new List <int> { 1042, fatherId, motherId, setFather, setMother }); } else { DebugPregnant("正常胎儿判定通过"); DateFile.instance.actorLife[motherId].Add(901, new List <int> { Random.Range(7, 10), fatherId, motherId, setFather, setMother }); DateFile.instance.pregnantFeature.Add(motherId, new string[2] { Characters.GetCharProperty(fatherId, 101), Characters.GetCharProperty(motherId, 101) }); } __result = true; } else { DebugPregnant("怀孕判定未通过,需求 " + var2 + ",结果 " + (Main.settings.pregnant.SpecifiedPossibility ? Main.settings.pregnant.Possibility : num4)); } } DebugPregnant("生育能力判定未通过,需求 " + var1 + ",结果 " + (Main.settings.pregnant.SpecifiedFecundity ? Main.settings.pregnant.Fecundity : (num2 * num3))); return(false); } else if (Main.settings.nontr.Enabled) { bool 是否拦截 = false; if (Main.settings.nontr.PreventAll) { 是否拦截 = true; // 允许配偶关系,并且确实是配偶,就不拦截 if (Main.settings.nontr.AllowCouple && DateFileHelper.HasSocial(fatherId, 309, motherId)) { 是否拦截 = false; } if (是否拦截) { DebugNontr(string.Format("拦截了 {0} 与 {1} 试图发生关系的行为", DateFile.instance.GetActorName(fatherId), DateFile.instance.GetActorName(motherId))); } } else { bool 在关系列表内 = false; if (!在关系列表内 && DateFileHelper.HasAnySocial(mainActorId, Main.NoNtrSocialTypList, fatherId)) { DebugNontr(string.Format("父方 {0} 在关系列表内", DateFile.instance.GetActorName(fatherId))); 在关系列表内 = true; } if (!在关系列表内 && DateFileHelper.HasAnySocial(mainActorId, Main.NoNtrSocialTypList, motherId)) { DebugNontr(string.Format("母方 {0} 在关系列表内", DateFile.instance.GetActorName(motherId))); 在关系列表内 = true; } if (在关系列表内) { 是否拦截 = true; if (Main.settings.nontr.AllowCouple && DateFileHelper.HasSocial(fatherId, 309, motherId)) { 是否拦截 = false; } if (是否拦截) { DebugNontr(string.Format("拦截了 {0} 与 {1} 试图发生关系的行为", DateFile.instance.GetActorName(fatherId), DateFile.instance.GetActorName(motherId))); } } } return(!是否拦截); } else { // 不拦截 return(true); } }
public static bool Prefix(int fatherId, int motherId, int setFather, int setMother, ref bool __result) { if (!Main.enabled) { return(true); } int mainActorId = DateFile.instance.MianActorID(); // 启用功能并且不是主角 if (Main.settings.nontr.Enabled && fatherId != mainActorId && motherId != mainActorId) { bool 是否拦截 = false; bool 人物是否需要拦截 = false; if (Main.settings.nontr.PreventAll) { 人物是否需要拦截 = true; } List <int> list1 = DateFile.instance.GetActorSocial(fatherId, 309); List <int> list2 = DateFile.instance.GetActorSocial(motherId, 309); bool 是太吾的关系人 = false; foreach (int i in list1) { if (!是太吾的关系人 && DateFileHelper.HasAnySocial(mainActorId, Main.NoNtrSocialTypList, i)) { 是太吾的关系人 = true; } } foreach (int i in list2) { if (!是太吾的关系人 && DateFileHelper.HasAnySocial(mainActorId, Main.NoNtrSocialTypList, i)) { 是太吾的关系人 = true; } } bool 是否配偶关系 = DateFileHelper.HasSocial(fatherId, 309, motherId); if (是太吾的关系人) { 人物是否需要拦截 = true; } 是否拦截 = 人物是否需要拦截; if (Main.settings.nontr.AllowCouple && 是否配偶关系) { 是否拦截 = false; } if (是否拦截) { if (是太吾的关系人) { Debug(string.Format("检测到想要搞事情的 {0} {1} 与关系列表内的人有婚姻关系,已拦截", DateFile.instance.GetActorName(fatherId), DateFile.instance.GetActorName(motherId))); } else { Debug(string.Format("检测到想要搞事情的 {0} {1} 的人,已拦截", DateFile.instance.GetActorName(fatherId), DateFile.instance.GetActorName(motherId))); } } else { if (是太吾的关系人) { Debug(string.Format("检测到想要搞事情的 {0} {1} 与关系列表内的人有婚姻关系,未拦截", DateFile.instance.GetActorName(fatherId), DateFile.instance.GetActorName(motherId))); } } return(!是否拦截); } else { // 不拦截 return(true); } }