public static bool HasPrimaryDecisionCooldown(KingdomDecision decision, out float elapsedDaysUntilNow)
 {
     elapsedDaysUntilNow = default;
     return(SupportedDecisionTypes.Contains(decision.GetType()) &&
            KingdomDecisionHistory.TryGetValue(decision, out KingdomDecisionConclusion decisionConclusion) &&
            (elapsedDaysUntilNow = decisionConclusion.ConclusionTime.ElapsedDaysUntilNow) < GetRequiredDecisionCooldown(decision));
 }
 private void RegisterKingdomDecisionConcluded(KingdomDecision decision, DecisionOutcome chosenOutcome, bool isPlayerInvolved)
 {
     if (AOCooldownManager.SupportedDecisionTypes.Contains(decision.GetType()))
     {
         _cooldownManager.UpdateKingdomDecisionHistory(decision, chosenOutcome, CampaignTime.Now);
     }
 }
 public void UpdateKingdomDecisionHistory(KingdomDecision decision, DecisionOutcome chosenOutcome, CampaignTime conclusionTime)
 {
     if (SupportedDecisionTypes.Contains(decision.GetType()))
     {
         if (_KingdomDecisionHistory.ContainsKey(decision))
         {
             _KingdomDecisionHistory.Remove(decision);
         }
         _KingdomDecisionHistory[decision] = new KingdomDecisionConclusion(chosenOutcome, conclusionTime);
     }
     else
     {
         throw new ArgumentException(string.Format("{0} is not supported KingdomDecision type", decision.GetType().FullName), nameof(decision));
     }
 }
        public static int GetRequiredDecisionCooldown(KingdomDecision decision)
        {
            switch (decision)
            {
            case MakePeaceKingdomDecision _:
                return(Settings.Instance.MakePeaceDecisionCooldown);

            case DeclareWarDecision _:
                return(Settings.Instance.DeclareWarDecisionCooldown);

            case ExpelClanFromKingdomDecision _:
                return(Settings.Instance.ExpelClanDecisionCooldown);

            case KingdomPolicyDecision _:
                return(Settings.Instance.KingdomPolicyDecisionCooldown);

            case SettlementClaimantPreliminaryDecision _:
                return(Settings.Instance.AnnexationDecisionCooldown);

            default:
                throw new ArgumentException(string.Format("{0} is not supported KingdomDecision type", decision.GetType().FullName), nameof(decision));
            }
        }
예제 #5
0
        /*
         * public override int GetNumberOfFiefsDesired(DecisionMaker decisionMaker)
         * {
         * int baseNumber = CalculateBaseNumberOfFiefs(decisionMaker.Hero.Clan, Settings.Instance!.DesiredFiefsBaseline.SelectedValue.EnumValue);
         * return baseNumber >= 0
         *    ? Math.Max(0, baseNumber + Settings.Instance.DesiredFiefsModifier + CalculateTraitsModifierForDesiredFiefs(decisionMaker, Settings.Instance.DesiredFiefsBaseline.SelectedValue.EnumValue))
         *    : baseNumber;
         * }
         *
         * public override int GetNumberOfFiefsDeemedFair(Clan clan)
         * {
         * int baseNumber = CalculateBaseNumberOfFiefs(clan, Settings.Instance!.FiefsDeemedFairBaseline.SelectedValue.EnumValue);
         * return baseNumber >= 0
         *    ? Math.Max(0, baseNumber + Settings.Instance.FiefsDeemedFairModifier)
         *    : baseNumber;
         * }
         */

        //Protected overrides
        protected override float GetGeneralSupportScore(Clan clan, KingdomDecision decision, DecisionOutcome possibleOutcome)
        {
            return(decision switch
            {
                MakePeaceKingdomDecision makePeaceDecision => GetGeneralSupportScore(clan, makePeaceDecision, possibleOutcome),
                DeclareWarDecision declareWarDecision => GetGeneralSupportScore(clan, declareWarDecision, possibleOutcome),
                SettlementClaimantDecision claimantDecision => GetGeneralSupportScore(clan, claimantDecision, possibleOutcome),
                SettlementClaimantPreliminaryDecision annexationDecision => GetGeneralSupportScore(clan, annexationDecision, possibleOutcome),
                _ => throw new ArgumentOutOfRangeException(nameof(decision), string.Format("Kingdom decision of type {0} is not supported.", decision.GetType().FullName)),
            });
        protected override double GetSupportScoreOfDecisionMaker(DecisionMaker decisionMaker, KingdomDecision decision, DecisionOutcome possibleOutcome)
        {
            switch (decision)
            {
            case MakePeaceKingdomDecision makePeaceDecision: return(GetSupportScoreOfDecisionMaker(decisionMaker, makePeaceDecision, possibleOutcome) * decisionMaker.DecisionWeight);

            case DeclareWarDecision declareWarDecision: return(GetSupportScoreOfDecisionMaker(decisionMaker, declareWarDecision, possibleOutcome) * decisionMaker.DecisionWeight);

            case SettlementClaimantDecision claimantDecision: return(GetSupportScoreOfDecisionMaker(decisionMaker, claimantDecision, possibleOutcome) * decisionMaker.DecisionWeight);

            case SettlementClaimantPreliminaryDecision annexationDecision: return(GetSupportScoreOfDecisionMaker(decisionMaker, annexationDecision, possibleOutcome) * decisionMaker.DecisionWeight);

            default:
                throw new ArgumentOutOfRangeException(nameof(decision), string.Format("Kingdom decision of type {0} is not supported.", decision.GetType().FullName));
            }
        }
 public static int GetRequiredDecisionCooldown(KingdomDecision decision)
 {
     return(decision switch
     {
         MakePeaceKingdomDecision _ => Settings.Instance !.MakePeaceDecisionCooldown,
         DeclareWarDecision _ => Settings.Instance !.DeclareWarDecisionCooldown,
         ExpelClanFromKingdomDecision _ => Settings.Instance !.ExpelClanDecisionCooldown,
         KingdomPolicyDecision _ => Settings.Instance !.KingdomPolicyDecisionCooldown,
         SettlementClaimantPreliminaryDecision _ => Settings.Instance !.AnnexationDecisionCooldown,
         _ => throw new ArgumentException(string.Format("{0} is not supported KingdomDecision type", decision.GetType().FullName), nameof(decision)),
     });