protected virtual void UpdateActionAvailability() { this.IsMessengerAvailable = MessengerManager.CanSendMessengerWithCost(Faction2Leader.Hero, DiplomacyCostCalculator.DetermineCostForSendingMessenger()); this.IsOptionAvailable = DeclareWarConditions.Instance.CanApplyExceptions(this, true).IsEmpty(); string allianceException = FormAllianceConditions.Instance.CanApplyExceptions(this, true).FirstOrDefault()?.ToString(); this.IsAllianceAvailable = allianceException == null; string declareWarException = DeclareWarConditions.Instance.CanApplyExceptions(this, true).FirstOrDefault()?.ToString(); this.ActionHint = declareWarException != null ? new HintViewModel(declareWarException) : new HintViewModel(); this.AllianceHint = allianceException != null ? new HintViewModel(allianceException) : new HintViewModel(); string nonAggressionPactException = NonAggressionPactConditions.Instance.CanApplyExceptions(this, true).FirstOrDefault()?.ToString(); this.IsNonAggressionPactAvailable = nonAggressionPactException == null; this.NonAggressionPactHint = nonAggressionPactException != null ? new HintViewModel(nonAggressionPactException) : new HintViewModel(); HybridCost allianceCost = DiplomacyCostCalculator.DetermineCostForFormingAlliance(Faction1 as Kingdom, Faction2 as Kingdom, true); this.AllianceInfluenceCost = (int)allianceCost.InfluenceCost.Value; this.AllianceGoldCost = (int)allianceCost.GoldCost.Value; HybridCost nonAggressionPactCost = DiplomacyCostCalculator.DetermineCostForFormingNonAggressionPact(Faction1 as Kingdom, Faction2 as Kingdom, true); this.NonAggressionPactInfluenceCost = (int)nonAggressionPactCost.InfluenceCost.Value; this.NonAggressionPactGoldCost = (int)nonAggressionPactCost.GoldCost.Value; this.AllianceScoreHint = this.UpdateDiplomacyTooltip(AllianceScoringModel.Instance.GetScore(Faction2 as Kingdom, Faction1 as Kingdom, new StatExplainer())); this.NonAggressionPactScoreHint = this.UpdateDiplomacyTooltip(NonAggressionPactScoringModel.Instance.GetScore(Faction2 as Kingdom, Faction1 as Kingdom, new StatExplainer())); }
protected virtual void ExecuteExecutiveAction() { float influenceCost = DiplomacyCostCalculator.DetermineInfluenceCostForDeclaringWar(Faction1 as Kingdom); DiplomacyCostManager.deductInfluenceFromPlayerClan(influenceCost); DeclareWarAction.Apply(Faction1, Faction2); }
public KingdomTruceItemVMExtensionVM(IFaction faction1, IFaction faction2, Action <KingdomDiplomacyItemVM> onSelection, Action <KingdomTruceItemVM> onAction) : base(faction1, faction2, onSelection, onAction) { this.SendMessengerActionName = new TextObject("{=cXfcwzPp}Send Messenger").ToString(); this.AllianceActionName = new TextObject("{=0WPWbx70}Form Alliance").ToString(); this.InfluenceCost = (int)DiplomacyCostCalculator.DetermineInfluenceCostForDeclaringWar(Faction1 as Kingdom); this.ActionName = GameTexts.FindText("str_kingdom_declate_war_action", null).ToString(); UpdateDiplomacyProperties(); }
public KingdomWarItemVMExtensionVM(StanceLink stanceLink, Action <KingdomWarItemVM> onSelect, Action <KingdomWarItemVM> onAction) : base(stanceLink, onSelect, onAction) { this.SendMessengerActionName = new TextObject("{=cXfcwzPp}Send Messenger").ToString(); this.InfluenceCost = (int)DiplomacyCostCalculator.DetermineInfluenceCostForMakingPeace(Faction1 as Kingdom); this.GoldCost = DiplomacyCostCalculator.DetermineGoldCostForMakingPeace(this.Faction1 as Kingdom, this.Faction2 as Kingdom); this.ActionName = GameTexts.FindText("str_kingdom_propose_peace_action", null).ToString(); UpdateDiplomacyProperties(); }
public EncyclopediaHeroPageVMExtensionVM(EncyclopediaPageArgs args) : base(args) { this._grantFiefInterface = new GrantFiefInterface(); _hero = (base.Obj as Hero); this.SendMessengerInfluenceCost = (int)DiplomacyCostCalculator.DetermineInfluenceCostForSendingMessenger(); this.SendMessengerActionName = new TextObject("{=cXfcwzPp}Send Messenger").ToString(); this.GrantFiefActionName = new TextObject("{=LpoyhORp}Grant Fief").ToString(); this.CanGrantFief = GrantFiefAction.CanGrantFief(this._hero.Clan, out _); base.RefreshValues(); }
public EncyclopediaHeroPageVMExtensionVM(EncyclopediaPageArgs args) : base(args) { _grantFiefInterface = new GrantFiefInterface(); _hero = (Obj as Hero) !; _sendMessengerCost = DiplomacyCostCalculator.DetermineCostForSendingMessenger(); SendMessengerCost = (int)_sendMessengerCost.Value; SendMessengerActionName = new TextObject("{=cXfcwzPp}Send Messenger").ToString(); GrantFiefActionName = new TextObject("{=LpoyhORp}Grant Fief").ToString(); RefreshValues(); }
protected override bool ApplyConditionInternal(Kingdom kingdom, Kingdom otherKingdom, ref TextObject textObject, bool forcePlayerCharacterCosts = false) { bool hasEnoughInfluence = DiplomacyCostCalculator.DetermineCostForDeclaringWar(kingdom, forcePlayerCharacterCosts).CanPayCost(); if (!hasEnoughInfluence) { textObject = FailedConditionText; } return(hasEnoughInfluence); }
protected override bool ApplyConditionInternal(Kingdom kingdom, Kingdom otherKingdom, ref TextObject textObject, bool forcePlayerCharacterCosts = false) { bool hasEnoughGold = DiplomacyCostCalculator.DetermineCostForMakingPeace(kingdom, otherKingdom, forcePlayerCharacterCosts).GoldCost.CanPayCost(); if (!hasEnoughGold) { textObject = FailedConditionText; } return(hasEnoughGold); }
protected override bool ApplyConditionInternal(Kingdom kingdom, Kingdom otherKingdom, ref TextObject?textObject, bool forcePlayerCharacterCosts = false) { var hasEnoughInfluence = DiplomacyCostCalculator.DetermineCostForFormingAlliance(kingdom, otherKingdom, true).InfluenceCost.CanPayCost(); if (!hasEnoughInfluence) { textObject = FailedConditionText; } return(hasEnoughInfluence); }
public bool ApplyCondition(Kingdom kingdom, Kingdom otherKingdom, out TextObject textObject, bool forcePlayerCharacterCosts = false) { textObject = null; Hero heroPayingCosts = forcePlayerCharacterCosts ? Hero.MainHero : kingdom.Leader; bool hasEnoughInfluence = heroPayingCosts.Clan.Influence >= DiplomacyCostCalculator.DetermineInfluenceCostForMakingPeace(kingdom); if (!hasEnoughInfluence) { textObject = new TextObject(NOT_ENOUGH_INFLUENCE); } return(hasEnoughInfluence); }
public bool ApplyCondition(Kingdom kingdom, Kingdom otherKingdom, out TextObject textObject, bool forcePlayerCharacterCosts = false) { textObject = null; Hero heroPayingCosts = forcePlayerCharacterCosts ? Hero.MainHero : kingdom.Leader; bool hasEnoughGold = heroPayingCosts.Gold >= DiplomacyCostCalculator.DetermineGoldCostForMakingPeace(kingdom, otherKingdom); if (!hasEnoughGold) { textObject = new TextObject(NOT_ENOUGH_GOLD); } return(hasEnoughGold); }
protected override bool ApplyConditionInternal(Kingdom kingdom, Kingdom otherKingdom, ref TextObject textObject, bool forcePlayerCharacterCosts = false) { DiplomacyCost influenceCost = DiplomacyCostCalculator.DetermineCostForFormingNonAggressionPact(kingdom, otherKingdom, forcePlayerCharacterCosts).InfluenceCost; bool hasEnoughInfluence = influenceCost.CanPayCost(); if (!hasEnoughInfluence) { textObject = FailedConditionText; } return(hasEnoughInfluence); }
protected virtual void UpdateActionAvailability() { this.IsMessengerAvailable = MessengerManager.CanSendMessengerWithInfluenceCost(Faction2Leader.Hero, this.SendMessengerInfluenceCost); this.IsOptionAvailable = WarAndPeaceConditions.CanDeclareWarExceptions(this).IsEmpty(); string allianceException = AllianceConditions.CanFormAllianceExceptions(this, true).FirstOrDefault()?.ToString(); this.IsAllianceAvailable = allianceException == null; string declareWarException = WarAndPeaceConditions.CanDeclareWarExceptions(this).FirstOrDefault()?.ToString(); this.ActionHint = declareWarException != null ? new HintViewModel(declareWarException) : new HintViewModel(); this.AllianceHint = allianceException != null ? new HintViewModel(allianceException) : new HintViewModel(); this.AllianceInfluenceCost = (int)DiplomacyCostCalculator.DetermineInfluenceCostForFormingAlliance(Faction1 as Kingdom, Faction2 as Kingdom, true); }
public KingdomWarItemVMExtensionVM(StanceLink stanceLink, Action <KingdomWarItemVM> onSelect, Action <KingdomWarItemVM> onAction) : base(stanceLink, onSelect, onAction) { this.SendMessengerActionName = new TextObject("{=cXfcwzPp}Send Messenger").ToString(); HybridCost costForMakingPeace = DiplomacyCostCalculator.DetermineCostForMakingPeace(Faction1 as Kingdom, Faction2 as Kingdom, true); this.InfluenceCost = (int)costForMakingPeace.InfluenceCost.Value; this.GoldCost = (int)costForMakingPeace.GoldCost.Value; this.ActionName = GameTexts.FindText("str_kingdom_propose_peace_action", null).ToString(); this.AllianceText = new TextObject("{=zpNalMeA}Alliances").ToString(); this.WarsText = new TextObject("{=y5tXjbLK}Wars").ToString(); this.PactsText = new TextObject("{=noWHMN1W}Non-Aggression Pacts").ToString(); UpdateDiplomacyProperties(); }
public static void ApplyPeace(Kingdom kingdomMakingPeace, Kingdom otherKingdom, bool forcePlayerCharacterCosts = false) { HybridCost diplomacyCost = DiplomacyCostCalculator.DetermineCostForMakingPeace(kingdomMakingPeace, otherKingdom, forcePlayerCharacterCosts); if (!otherKingdom.Leader.IsHumanPlayerCharacter) { AcceptPeace(kingdomMakingPeace, otherKingdom, diplomacyCost); } else if (!CooldownManager.HasPeaceProposalCooldownWithPlayerKingdom(kingdomMakingPeace)) { CreatePeaceInquiry(kingdomMakingPeace, otherKingdom, diplomacyCost); } }
private static void ApplyInternal(Kingdom kingdom, Kingdom otherKingdom, bool forcePlayerCharacterCosts) { FactionManager.DeclareAlliance(kingdom, otherKingdom); float influenceCost = DiplomacyCostCalculator.DetermineInfluenceCostForFormingAlliance(kingdom, otherKingdom, forcePlayerCharacterCosts); if (forcePlayerCharacterCosts) { DiplomacyCostManager.deductInfluenceFromPlayerClan(influenceCost); } else { DiplomacyCostManager.DeductInfluenceFromKingdom(kingdom, influenceCost); } Events.Instance.OnAllianceFormed(new AllianceEvent(kingdom, otherKingdom)); }
public KingdomTruceItemVMExtensionVM(IFaction faction1, IFaction faction2, Action <KingdomDiplomacyItemVM> onSelection, Action <KingdomTruceItemVM> onAction) : base(faction1, faction2, onSelection, onAction) { this.SendMessengerActionName = new TextObject("{=cXfcwzPp}Send Messenger").ToString(); this.AllianceActionName = new TextObject("{=0WPWbx70}Form Alliance").ToString(); this.InfluenceCost = (int)DiplomacyCostCalculator.DetermineCostForDeclaringWar(Faction1 as Kingdom, true).Value; this.ActionName = GameTexts.FindText("str_kingdom_declate_war_action", null).ToString(); this.NonAggressionPactActionName = new TextObject("{=9pY0NQrk}Form Pact").ToString(); TextObject textObject = new TextObject("{=9zlQNtlX}Form a non-aggression pact lasting {PACT_DURATION_DAYS} days."); textObject.SetTextVariable("PACT_DURATION_DAYS", Settings.Instance.NonAggressionPactDuration); this.NonAggressionPactHelpText = textObject.ToString(); this.AllianceText = new TextObject("{=zpNalMeA}Alliances").ToString(); this.WarsText = new TextObject("{=y5tXjbLK}Wars").ToString(); this.PactsText = new TextObject(StringConstants.NonAggressionPacts).ToString(); UpdateDiplomacyProperties(); }
public bool ApplyCondition(Kingdom kingdom, Kingdom otherKingdom, out TextObject textObject, bool forcePlayerCharacterCosts = false) { textObject = null; // Currently this cost is not assessed on AI leaders, but only through the Kingdom Diplomacy screen. if (!forcePlayerCharacterCosts) { return(true); } Hero heroPayingCosts = forcePlayerCharacterCosts ? Hero.MainHero : kingdom.Leader; bool hasEnoughInfluence = heroPayingCosts.Clan.Influence >= DiplomacyCostCalculator.DetermineInfluenceCostForDeclaringWar(kingdom); if (!hasEnoughInfluence) { textObject = new TextObject(NOT_ENOUGH_INFLUENCE); } return(hasEnoughInfluence); }
public bool ApplyCondition(Kingdom kingdom, Kingdom otherKingdom, out TextObject textObject, bool forcePlayerCharacterCosts = false) { textObject = null; float influenceCost = DiplomacyCostCalculator.DetermineInfluenceCostForFormingAlliance(kingdom, otherKingdom, true); bool hasEnoughInfluence; if (forcePlayerCharacterCosts) { hasEnoughInfluence = influenceCost <= Clan.PlayerClan.Influence; } else { hasEnoughInfluence = influenceCost <= kingdom.Leader.Clan.Influence; } if (!hasEnoughInfluence) { textObject = new TextObject(NOT_ENOUGH_INFLUENCE); } return(hasEnoughInfluence); }
protected override void AssessCosts(Kingdom proposingKingdom, Kingdom otherKingdom, bool forcePlayerCharacterCosts) { DiplomacyCostCalculator.DetermineCostForFormingAlliance(proposingKingdom, otherKingdom, forcePlayerCharacterCosts).ApplyCost(); }
private void OnMessengerSent(Hero hero) { _messengerManager.SendMessengerWithInfluenceCost(hero, DiplomacyCostCalculator.DetermineInfluenceCostForSendingMessenger()); }
private void UpdateActionAvailability() { this.IsMessengerAvailable = MessengerManager.CanSendMessengerWithCost(Faction2Leader.Hero, DiplomacyCostCalculator.DetermineCostForSendingMessenger()); this.IsOptionAvailable = MakePeaceConditions.Instance.CanApplyExceptions(this, true).IsEmpty(); string makePeaceException = MakePeaceConditions.Instance.CanApplyExceptions(this, true).FirstOrDefault()?.ToString(); this.ActionHint = makePeaceException != null ? new HintViewModel(makePeaceException) : new HintViewModel(); }
protected virtual void ExecuteExecutiveAction() { DiplomacyCostCalculator.DetermineCostForDeclaringWar(Faction1 as Kingdom, true).ApplyCost(); DeclareWarAction.Apply(Faction1, Faction2); }