private static void UpdateDiplomacyProperties(KingdomDiplomacyItemVM __instance, ref IFaction ____playerKingdom, ref IFaction ___Faction1, ref IFaction ___Faction2, ref string ____faction2Name) { StanceLink stanceWith = ____playerKingdom.GetStanceWith(___Faction2); if (stanceWith.IsNeutral) { var days = (int)stanceWith.PeaceDeclarationDate.ElapsedDaysUntilNow; if (stanceWith.GetDailyTributePaid(____playerKingdom) != 0) { var paid = -stanceWith.GetDailyTributePaid(____playerKingdom); __instance.Faction2Name = $"{___Faction2.Name.ToString()}({paid}$/d)({days}d)"; } else { __instance.Faction2Name = ___Faction2.Name.ToString() + (days < 10000 ? $"({days}d)" : ""); } } else { var days = (int)stanceWith.WarStartDate.ElapsedDaysUntilNow; __instance.Faction2Name = ___Faction2.Name.ToString() + (days < 10000 ? $"({days}d)" : ""); } }
//CalculateTributeFactor private double CalculateTributeFactor(DecisionMaker decisionMaker, IFaction factionToChangeStateWith, int dailyTributeToBePaid = 0) { bool atWar = decisionMaker.Hero.MapFaction.IsAtWarWith(factionToChangeStateWith); StanceLink stanceWith = decisionMaker.Hero.MapFaction.GetStanceWith(factionToChangeStateWith); dailyTributeToBePaid = atWar ? dailyTributeToBePaid : stanceWith.GetDailyTributePaid(decisionMaker.Hero.MapFaction); double GetReputationScoreModifierAtWar() => dailyTributeToBePaid *CalculateWarSuccessScore(decisionMaker.Hero.Clan.Kingdom, factionToChangeStateWith) >= 0 //Tribute is being demanded from the winning faction ? CalculateWarSuccessScore(decisionMaker.Hero.Clan.Kingdom, factionToChangeStateWith) >= 0 //Deciding kingdom is winning ? GetTraitLevelModifier(decisionMaker.Hero.GetTraitLevel(DefaultTraits.Valor) * 2 + decisionMaker.Hero.GetTraitLevel(DefaultTraits.Calculating) - decisionMaker.Hero.GetTraitLevel(DefaultTraits.Generosity), 2) : GetTraitLevelModifier(-decisionMaker.Hero.GetTraitLevel(DefaultTraits.Honor) - decisionMaker.Hero.GetTraitLevel(DefaultTraits.Generosity)) : 1.0; double GetReputationScoreModifierAtPeace() => GetTraitLevelModifier(-decisionMaker.Hero.GetTraitLevel(DefaultTraits.Honor) - decisionMaker.Hero.GetTraitLevel(DefaultTraits.Generosity)); double weightedDailyTribute = dailyTributeToBePaid * (atWar ? GetReputationScoreModifierAtWar() : GetReputationScoreModifierAtPeace()) * 0.25 //This is reputational consideration part (uses faction tribute as whole) + (dailyTributeToBePaid * deCalculateShareFactor(decisionMaker.Hero.Clan) //This is clan financial consideration part (assesses clan income) * GetTraitLevelModifier(decisionMaker.Hero.GetTraitLevel(DefaultTraits.Calculating) - decisionMaker.Hero.GetTraitLevel(DefaultTraits.Generosity))); return(Campaign.Current.Models.DiplomacyModel.GetValueOfDailyTribute((int)weightedDailyTribute) * Campaign.Current.Models.DiplomacyModel.DenarsToInfluence()); }