static bool Prefix(ref float __result, Hero hero) { if (hero == Hero.MainHero || hero.Spouse == Hero.MainHero || hero.Clan.Leader == Hero.MainHero) { float num = 0.0f; if (hero.Spouse != null && hero.Age >= (double)SettingClass.Instance.MinPregnantAge && hero.Age <= (double)SettingClass.Instance.MaxPregnantAge && SettingClass.Instance.DailyPregnancyChanceOfTheMC - 0.0f >= 0.09f) { ExplainedNumber bonuses = new ExplainedNumber(1f, new StringBuilder("The chance of hero being pregnant")); PerkHelper.AddPerkBonusForCharacter(DefaultPerks.Medicine.PerfectHealth, hero.Clan.Leader.CharacterObject, ref bonuses); num = (float)bonuses.ResultNumber * 0.001f + SettingClass.Instance.DailyPregnancyChanceOfTheMC; if (num >= 1.0f) { num = 1.0f; } } __result = num; return(false); } return(true); }
public override float GetDailyChanceOfPregnancyForHero(Hero hero) { try { // Changed to message rather than exception. // if (hero == null) throw new ArgumentNullException(nameof(hero)); if (hero == null) { InformationManager.DisplayMessage(new InformationMessage($"An error occurred during GetDailyChanceOfPregnancyForHero. (No hero)")); // Debug // InformationManager.DisplayMessage(new InformationMessage("Hero is:" + hero.Name + "\nSpouse is:" + hero.Spouse.Name + "\nSpouse's Spouse is:" + hero.Spouse.Spouse.Name)); return(0); } if (!Settings.Instance.DailyChancePregnancyTweakEnabled) { return(base.GetDailyChanceOfPregnancyForHero(hero)); } float num = 0.0f; if (!Settings.Instance.PlayerCharacterFertileEnabled && HeroIsMainOrSpouseOfMain(hero)) { return(num); } if (Settings.Instance.MaxChildrenTweakEnabled && hero.Children != null && hero.Children.Any() && hero.Children.Count >= Settings.Instance.MaxChildren) { return(num); } if (hero.Spouse != null && hero.IsFertile && IsHeroAgeSuitableForPregnancy(hero)) { ExplainedNumber bonuses = new ExplainedNumber(1f, null); PerkHelper.AddPerkBonusForCharacter(DefaultPerks.Medicine.PerfectHealth, hero.Clan.Leader.CharacterObject, false, ref bonuses); num = (float)((6.5 - ((double)hero.Age - Settings.Instance.MinPregnancyAge) * 0.23) * 0.02) * bonuses.ResultNumber; } if (hero.Children == null || !hero.Children.Any()) { num *= 3f; } else if (hero.Children.Count > 1) { num *= 2f; } return(num); } catch (Exception ex) { MessageBox.Show($"An error occurred during GetDailyChanceOfPregnancyForHero. Reverting to original behavior... \n\nException:\n{ex.Message}\n\n{ex.InnerException?.Message}\n\n{ex.InnerException?.Message}"); return(0); } }
public static void Postfix(ref int __result, CharacterObject character, StatExplainer explanation) { var result = __result; var explainedNumber = new ExplainedNumber(result, explanation); var perk = ActivePatch._perk; PerkHelper.AddPerkBonusForCharacter(perk, character, ref explainedNumber); __result = MBMath.Round(explainedNumber.ResultNumber); }
public override float GetDailyChanceOfPregnancyForHero(Hero hero) { float result = default; var isMeOrMySpouse = IsMeOrMySpouse(hero); var maxPregnancyAge = isMeOrMySpouse ? config.MaxPregnancyAgeForMeOrMySpouse ?? GetMaxPregnancyAge() : GetMaxPregnancyAge(); if (hero.Spouse != null && hero.IsFertile && IsHeroAgeSuitableForPregnancy(hero, maxPregnancyAge)) { var bonuses = new ExplainedNumber(1f); PerkHelper.AddPerkBonusForCharacter(DefaultPerks.Medicine.PerfectHealth, hero.Clan.Leader.CharacterObject, true, ref bonuses); result = (float)((6.5 - (hero.Age - MinPregnancyAge) * 0.230000004172325) * 0.0199999995529652) * bonuses.ResultNumber; if (hero.Children.Count == 0) { result *= 3f; } else if (hero.Children.Count == 1) { result *= 2f; } if (isMeOrMySpouse && config.AddDailyChanceOfPregnancyForMeOrMySpouseMultiple != 1) { result *= config.AddDailyChanceOfPregnancyForMeOrMySpouseMultiple; } else if (config.AddDailyChanceOfPregnancyForHeroMultiple != 1) { result *= config.AddDailyChanceOfPregnancyForHeroMultiple; } if (config.HasWin32Console()) { var hero_name = hero?.Name?.ToString(); var hero_culture = hero?.Culture?.Name?.ToString(); var spouce_name = hero?.Spouse?.Name?.ToString(); var spouce_culture = hero?.Spouse?.Culture?.Name?.ToString(); var one_culture = hero_culture == spouce_culture; Console.WriteLine( $"GetDailyChanceOfPregnancyForHero: {result}, isMeOrMySpouse: {isMeOrMySpouse}, " + $"{hero_name}({hero_culture}) & " + $"{spouce_name}{(!one_culture ? $"({spouce_culture})" : null)}" ); } } return(result); }
public override float GetDailyChanceOfPregnancyForHero(Hero hero) { if (hero == null) { throw new ArgumentNullException(nameof(hero)); } if (!Settings.Instance.DailyChancePregnancyTweakEnabled) { return(base.GetDailyChanceOfPregnancyForHero(hero)); } float num = 0.0f; if (!Settings.Instance.PlayerCharacterFertileEnabled && HeroIsMainOrSpouseOfMain(hero)) { return(num); } if (Settings.Instance.MaxChildrenTweakEnabled && hero.Children != null && hero.Children.Any() && hero.Children.Count >= Settings.Instance.MaxChildren) { return(num); } if (hero.Spouse != null && hero.IsFertile && IsHeroAgeSuitableForPregnancy(hero)) { ExplainedNumber bonuses = new ExplainedNumber(1f, null); PerkHelper.AddPerkBonusForCharacter(DefaultPerks.Medicine.PerfectHealth, hero.Clan.Leader.CharacterObject, ref bonuses); num = (float)((6.5 - ((double)hero.Age - Settings.Instance.MinPregnancyAge) * 0.23) * 0.02) * bonuses.ResultNumber; } if (hero.Children == null || !hero.Children.Any()) { num *= 3f; } else if (hero.Children.Count > 1) { num *= 2f; } return(num); }
public override int CalculatePartyWage(MobileParty mobileParty, bool applyWithdrawals) { if (!mobileParty.IsActive || mobileParty.IsMilitia) { return(0); } int wages = mobileParty.GetTotalWage(1f, (StatExplainer)null); if (mobileParty.IsMainParty && (mobileParty.CurrentSettlement != null | mobileParty.LastVisitedSettlement.GetTrackDistanceToMainAgent() <= 2.0f)) { // player in settlement should have 2x wages so bring it half down wages /= 2; } else if (mobileParty.Party.Owner.Clan == Clan.PlayerClan && mobileParty.IsGarrison) { // player clan garrison has 2x wages so bring it half down wages /= 2; } else if (mobileParty.Party.Owner.Clan != Clan.PlayerClan) { // AI shouldn't have 4x wages so bring it back down wages /= 4; } if (mobileParty.IsGarrison) { wages = (int)((double)wages * 0.75); } ExplainedNumber bonuses = new ExplainedNumber((float)wages, (StringBuilder)null); if (mobileParty.CurrentSettlement != null && mobileParty.CurrentSettlement.IsTown) { PerkHelper.AddPerkBonusForTown(DefaultPerks.TwoHanded.ReducedWage, mobileParty.CurrentSettlement.Town, ref bonuses); } if (mobileParty.IsCaravan && mobileParty.LeaderHero != null && (mobileParty.Party.Owner.Clan.Leader != null && mobileParty.Party.Owner.Clan.Leader.GetPerkValue(DefaultPerks.Trade.CaravanMaster))) { PerkHelper.AddPerkBonusForCharacter(DefaultPerks.Trade.CaravanMaster, mobileParty.Party.Owner.Clan.Leader.CharacterObject, ref bonuses); } return((int)bonuses.ResultNumber); }
public static void Postfix(ref int __result, CharacterObject character, StatExplainer explanation = null) { ExplainedNumber bonuses = new ExplainedNumber(__result, explanation); //PerkHelper.AddPerkBonusForCharacter(DefaultPerks.OneHanded.ExtraHp, character, ref bonuses); //PerkHelper.AddPerkBonusForCharacter(DefaultPerks.TwoHanded.ExtraHp, character, ref bonuses); //PerkHelper.AddPerkBonusForCharacter(DefaultPerks.Polearm.ExtraHp, character, ref bonuses); //PerkHelper.AddPerkBonusForCharacter(DefaultPerks.Athletics.Endurance, character, ref bonuses); //PerkHelper.AddPerkBonusForCharacter(DefaultPerks.Medicine.PreventiveMedicine, character, ref bonuses); try { var ScoutingExtra1 = PerkObject.FindFirst(a => a.Name.GetID() == "dDKOoD3e"); if (ScoutingExtra1 != null) { PerkHelper.AddPerkBonusForCharacter(ScoutingExtra1, character, ref bonuses); } __result = MBMath.Round(bonuses.ResultNumber); } catch (Exception) { } }