예제 #1
0
        public static void Postfix(DecisionOutcome popularOption, DecisionOutcome overridingOption, KingdomDecision decision, ref int __result)
        {
            try
            {
                bool SubSystemEnabled   = SettingsHelper.SubSystemEnabled(SubSystemType.ElectionRebalance, decision.Kingdom);
                bool SystemDebugEnabled = SettingsHelper.SystemDebugEnabled(AOSystems.PoliticsRebalance, DebugType.Technical, decision.Kingdom);
                if (!SubSystemEnabled && !SystemDebugEnabled)
                {
                    if (SettingsHelper.SubSystemEnabled(SubSystemType.FreeDecisionOverriding))
                    {
                        __result = 0;
                    }
                    return;
                }

                float PopularOptionSupportPoints    = popularOption.TotalSupportPoints;
                float OverridingOptionSupportPoints = overridingOption.TotalSupportPoints;
                float CalculatedResult = 0.0f;
                if (decision.Kingdom.RulingClan == Clan.PlayerClan)
                {
                    CalculatedResult += ApplySupport(ref PopularOptionSupportPoints, ref OverridingOptionSupportPoints, decision);
                }
                float LackingPointsCompensationCost = 0;
                if (PopularOptionSupportPoints > OverridingOptionSupportPoints)
                {
                    LackingPointsCompensationCost = GetBaseCompensationCost(Settings.Instance.OverrideDecisionCostCalculationMethod.SelectedValue.EnumValue, popularOption, overridingOption, decision);
                    if (decision.Kingdom.ActivePolicies.Contains(DefaultPolicies.RoyalPrivilege))
                    {
                        LackingPointsCompensationCost *= 0.8f;
                    }
                    if (decision.Kingdom.RulingClan != Clan.PlayerClan)
                    {
                        LackingPointsCompensationCost *= 0.8f;
                    }
                    CalculatedResult += LackingPointsCompensationCost;
                }
                if (SettingsHelper.SubSystemEnabled(SubSystemType.FreeDecisionOverriding))
                {
                    CalculatedResult = 0f;
                }

                if (SystemDebugEnabled)
                {
                    string InfluenceRequiredDebugInfo = string.Format("DefaultClanPoliticsModel - InfluenceRequiredToOverrideKingdomDecision. Kingdom: {0}. Decision: {1}. PopularOption: {2}. OverridingOption: {3}. " +
                                                                      "PopularOptionSupportPoints = {4}. OverridingOptionSupportPoints = {5}. " +
                                                                      "OverrideDecisionCostCalculationMethod: {6}. LackingPointsCompensationCost = {7}. " +
                                                                      "Royal Privilege modifier: {8}. NPC modifier: {9}. Free of charge cheat modifier: {10} " +
                                                                      "CalculatedResult = {11}. NativeResult = {12}",
                                                                      decision.Kingdom.Name, decision.GetGeneralTitle(), popularOption.GetDecisionTitle(), overridingOption.GetDecisionTitle(),
                                                                      PopularOptionSupportPoints, OverridingOptionSupportPoints,
                                                                      Settings.Instance.OverrideDecisionCostCalculationMethod.SelectedValue, LackingPointsCompensationCost,
                                                                      GetModifierApplied(decision.Kingdom.ActivePolicies.Contains(DefaultPolicies.RoyalPrivilege)), GetModifierApplied(decision.Kingdom.RulingClan != Clan.PlayerClan), GetModifierApplied(SettingsHelper.SubSystemEnabled(SubSystemType.FreeDecisionOverriding)),
                                                                      CalculatedResult.ToString("N"), __result.ToString("N"));

                    MessageHelper.TechnicalMessage(InfluenceRequiredDebugInfo);
                }

                if (SubSystemEnabled)
                {
                    __result = (int)CalculatedResult;
                }
            }
            catch (Exception ex)
            {
                MethodInfo methodInfo = MethodBase.GetCurrentMethod() as MethodInfo;
                DebugHelper.HandleException(ex, methodInfo, "Harmony patch for DefaultClanPoliticsModel. GetInfluenceRequiredToOverrideKingdomDecision");
            }
        }