Ejemplo n.º 1
0
        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);
            }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 7
0
        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)
            {
            }
        }