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); } } }
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); } } }
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); }