public static void OnSetPeaceItemPatch(KingdomTruceItemVM item, KingdomDiplomacyVM __instance)
 {
     try
     {
         if (SettingsHelper.SubSystemEnabled(SubSystemType.ElectionCooldownsForPlayer))
         {
             bool HasCooldown = AOCooldownManager.HasDecisionCooldown(new DeclareWarDecision(Clan.PlayerClan, item.Faction2), out float elapsedDaysUntilNow);
             __instance.IsActionEnabled = __instance.IsActionEnabled && !HasCooldown;
             __instance.ProposeActionExplanationText += HasCooldown ? "\n" + StringHelper.GetCooldownText(typeof(DeclareWarDecision), elapsedDaysUntilNow).ToString() : string.Empty;
         }
     }
     catch (Exception ex)
     {
         MethodInfo?methodInfo = MethodBase.GetCurrentMethod() as MethodInfo;
         DebugHelper.HandleException(ex, methodInfo, "Harmony patch for KingdomDiplomacyVM. OnSetPeaceItem");
     }
 }
Example #2
0
        public static void RefreshDiplomacyListPatch(KingdomDiplomacyVM __instance)
        {
            MBBindingList <KingdomWarItemVM>   playerWars   = new MBBindingList <KingdomWarItemVM>();
            MBBindingList <KingdomTruceItemVM> playerTruces = new MBBindingList <KingdomTruceItemVM>();

            MethodInfo onDiplomacyItemSelection = typeof(KingdomDiplomacyVM).GetMethod("OnDiplomacyItemSelection", BindingFlags.NonPublic | BindingFlags.Instance);
            MethodInfo onDeclareWarMethod       = typeof(KingdomDiplomacyVM).GetMethod("OnDeclareWar", BindingFlags.NonPublic | BindingFlags.Instance);
            MethodInfo onProposePeaceMethod     = typeof(KingdomDiplomacyVM).GetMethod("OnDeclarePeace", BindingFlags.NonPublic | BindingFlags.Instance);

            Action <KingdomTruceItemVM>     onDeclareWarAction   = (Action <KingdomTruceItemVM>)Delegate.CreateDelegate(typeof(Action <KingdomTruceItemVM>), __instance, onDeclareWarMethod);
            Action <KingdomWarItemVM>       onProposePeaceAction = (Action <KingdomWarItemVM>)Delegate.CreateDelegate(typeof(Action <KingdomWarItemVM>), __instance, onProposePeaceMethod);
            Action <KingdomDiplomacyItemVM> onItemSelectedAction = (Action <KingdomDiplomacyItemVM>)Delegate.CreateDelegate(typeof(Action <KingdomDiplomacyItemVM>), __instance, onDiplomacyItemSelection);

            Kingdom playerKingdom = Clan.PlayerClan.Kingdom;

            foreach (StanceLink stanceLink in from x in playerKingdom.Stances
                     where x.IsAtWar
                     select x into w
                     orderby w.Faction1.Name.ToString() + w.Faction2.Name.ToString()
                     select w)
            {
                if (stanceLink.Faction1 is Kingdom && stanceLink.Faction2 is Kingdom && !stanceLink.Faction1.IsMinorFaction && !stanceLink.Faction2.IsMinorFaction)
                {
                    playerWars.Add(new KingdomWarItemVMExtensionVM(stanceLink, onItemSelectedAction, onProposePeaceAction));
                }
            }
            foreach (Kingdom kingdom in Kingdom.All)
            {
                if (kingdom != playerKingdom && !kingdom.IsEliminated && FactionManager.IsNeutralWithFaction(kingdom, playerKingdom))
                {
                    playerTruces.Add(new KingdomTruceItemVMExtensionVM(playerKingdom, kingdom, onItemSelectedAction, onDeclareWarAction));
                }
            }

            __instance.PlayerTruces = playerTruces;
            __instance.PlayerWars   = playerWars;

            MethodInfo setDefaultSelectedItem = typeof(KingdomDiplomacyVM).GetMethod("SetDefaultSelectedItem", BindingFlags.NonPublic | BindingFlags.Instance);

            setDefaultSelectedItem.Invoke(__instance, new object[] { });
        }