public override float[] GetDailyRecruitedPrisoners(MobileParty mainParty)
        {
            // Default Taleworlds values are { 1f, 0.5f, 0.3f, 0.2f, 0.1f, 0f, 0f }
            // Target values for an "average character" (used as reference) are:
            float[] referenceValues = new[] { 0.95f, 0.55f, 0.4f, 0.3f, 0.2f, 0.1f, 0.075f };

            const float ReferenceMorale         = 50f;
            float       moraleRecruitmentChange = (mainParty.Morale - ReferenceMorale) / (2 * ReferenceMorale); // 2 * to reduce scaling

            const float ReferenceCharisma      = 100f;
            SkillObject charismaSkill          = SkillObject.FindFirst((x) => { return(x.StringId == "Charm"); });
            float       leaderCharisma         = (float)mainParty.LeaderHero.GetSkillValue(charismaSkill);
            float       charmRecruitmentChange = (leaderCharisma - ReferenceCharisma) / (4 * ReferenceCharisma); // 4 * to reduce scaling

            float totalAdjustmentPercent = moraleRecruitmentChange + charmRecruitmentChange;

            InformationManager.DisplayMessage(new InformationMessage(string.Format("Chance to recruit adjustment: {0}%", totalAdjustmentPercent * 100f)));
            for (int troopTier = 0; troopTier < referenceValues.Length; ++troopTier)
            {
                referenceValues[troopTier] += totalAdjustmentPercent * referenceValues[troopTier];
                referenceValues[troopTier]  = Mathf.Clamp(referenceValues[troopTier], MinimumValues[troopTier], MaximumValues[troopTier]);
            }

            return(referenceValues);
        }
        public static void Postfix(PartyBase party, StatExplainer explanation, ref int __result)
        {
            XmlNode settings = ClanTweakerSubModule.settings.xmlSettings.ChildNodes[1].SelectSingleNode("PartySizeSettings");

            bool flag;

            if (settings.SelectSingleNode("AffectClanParties").InnerText == "true")
            {
                flag = party.LeaderHero != null && (party.LeaderHero == Hero.MainHero || party.LeaderHero.Clan.Name == Hero.MainHero.Clan.Name);
            }
            else
            {
                flag = party.LeaderHero != null && party.LeaderHero == Hero.MainHero;
            }


            if (party.LeaderHero != null && party.LeaderHero == Hero.MainHero)
            {
                SkillObject leadership = SkillObject.FindFirst((SkillObject x) => x.Name.ToString() == "Leadership");
                SkillObject steward    = SkillObject.FindFirst((SkillObject x) => x.Name.ToString() == "Steward");

                int num = (int)Math.Ceiling((double)party.LeaderHero.GetSkillValue(leadership) * float.Parse(settings.SelectSingleNode("LeadershipBonus").InnerText) * 0.25f);
                __result += num;
                if (explanation != null)
                {
                    explanation.AddLine("Leadership bonus", (float)num, StatExplainer.OperationType.Add);
                }
                num       = (int)Math.Ceiling((double)party.LeaderHero.GetSkillValue(steward) * float.Parse(settings.SelectSingleNode("StewardBonus").InnerText) * 0.25f);
                __result += num;
                if (explanation != null)
                {
                    explanation.AddLine("Steward bonus", (float)num, StatExplainer.OperationType.Add);
                }
            }
        }
Esempio n. 3
0
 private void DoTellStories(ToldStoriesTo village)
 {
     if (village._battleStoriesTold < _notableBattlesWon)
     {
         SkillObject skill;
         int         num;
         skill = SkillObject.FindFirst((x) => { return(x.StringId == "Charm"); });
         num   = (int)Math.Ceiling(MobileParty.MainParty.LeaderHero.GetSkillValue(skill) * 0.03f);
         float _renownToGive = CalculateRenownToGive(num);
         GainRenownAction.Apply(Hero.MainHero, _renownToGive, true);
         if ((double)_renownToGive <= 0.2)
         {
             village._daysToResetStories = CampaignTime.DaysFromNow(this.RandomizeDays());
             village._hasToldStories     = true;
             ++village._battleStoriesTold;
             Hero.MainHero.AddSkillXp(DefaultSkills.Charm, 1);
             InformationManager.DisplayMessage(new InformationMessage("Your story failed to inspire the villagers."));
             return;
         }
         InformationManager.DisplayMessage(new InformationMessage("You told the villagers a story about a notable battle, gained " + _renownToGive + " renown."));
         village._daysToResetStories = CampaignTime.DaysFromNow(RandomizeDays());
         village._hasToldStories     = true;
         village._battleStoriesTold++;
         Hero.MainHero.AddSkillXp(DefaultSkills.Charm, MBRandom.RandomInt(1, 3));
         if (_renownToGive >= 2.0)
         {
             if (Settlement.CurrentSettlement.Notables.Count >= 1)
             {
                 InformationManager.DisplayMessage(new InformationMessage("Notable people in village were impressed by your feats and like you more."));
                 foreach (Hero notablePerson in Settlement.CurrentSettlement.Notables)
                 {
                     int _relationToGive = CalculateRelationToGive(_renownToGive);
                     ChangeRelationAction.ApplyPlayerRelation(notablePerson, _relationToGive, false, true);
                 }
             }
         }
     }
     else
     {
         InformationManager.DisplayMessage(new InformationMessage("You do not have new stories to tell to these villagers."));
     }
 }
        static void Postfix(MobileParty party, StatExplainer explanation, ref int __result)
        {
            if (party.LeaderHero != null && party.LeaderHero == Hero.MainHero)
            {
                SkillObject skill;
                int         num;
                if (Settings.Instance.LeadershipPartySizeBonusEnabled)
                {
                    skill     = SkillObject.FindFirst((x) => { return(x.StringId == "Leadership"); });
                    num       = (int)Math.Ceiling(party.LeaderHero.GetSkillValue(skill) * Settings.Instance.LeadershipPartySizeBonus);
                    __result += num;
                    explanation?.AddLine("Leadership bonus", num);
                }

                if (Settings.Instance.StewardPartySizeBonusEnabled)
                {
                    skill     = SkillObject.FindFirst((x) => x.StringId == "Steward");
                    num       = (int)Math.Ceiling(party.LeaderHero.GetSkillValue(skill) * Settings.Instance.StewardPartySizeBonus);
                    __result += num;
                    explanation?.AddLine("Steward bonus", num);
                }
            }
        }
Esempio n. 5
0
        private void SetSkill(TaleWorlds.CampaignSystem.Hero hero, string skill, int value)
        {
            var s = SkillObject.FindFirst(n => n.StringId.ToUpper() == skill);

            hero.SetSkillValue(s, hero.GetSkillValue(s) + value);
        }