示例#1
0
        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()));
        }
示例#2
0
        protected virtual void ExecuteExecutiveAction()
        {
            float influenceCost = DiplomacyCostCalculator.DetermineInfluenceCostForDeclaringWar(Faction1 as Kingdom);

            DiplomacyCostManager.deductInfluenceFromPlayerClan(influenceCost);
            DeclareWarAction.Apply(Faction1, Faction2);
        }
示例#3
0
 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();
 }
示例#4
0
 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();
 }
示例#5
0
 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);
        }
示例#11
0
        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);
        }
示例#13
0
        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();
        }
示例#15
0
        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);
            }
        }
示例#16
0
        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));
        }
示例#17
0
        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);
        }
示例#20
0
 protected override void AssessCosts(Kingdom proposingKingdom, Kingdom otherKingdom, bool forcePlayerCharacterCosts)
 {
     DiplomacyCostCalculator.DetermineCostForFormingAlliance(proposingKingdom, otherKingdom, forcePlayerCharacterCosts).ApplyCost();
 }
示例#21
0
 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();
        }
示例#23
0
 protected virtual void ExecuteExecutiveAction()
 {
     DiplomacyCostCalculator.DetermineCostForDeclaringWar(Faction1 as Kingdom, true).ApplyCost();
     DeclareWarAction.Apply(Faction1, Faction2);
 }