public static bool DisperseArmy(ref Army __instance, ref bool ____armyIsDispersing, ref List <MobileParty> ____parties, ref MBCampaignEvent ____hourlyTickEvent, Army.ArmyDispersionReason reason = Army.ArmyDispersionReason.Unknown)
        {
            try
            {
                if (____armyIsDispersing)
                {
                    return(false);
                }
                CampaignEventDispatcher.Instance.OnArmyDispersed(__instance, reason, __instance.Parties.Contains(MobileParty.MainParty));
                ____armyIsDispersing = true;
                int num = 0;
                for (int i = __instance.Parties.Count - 1; i >= num; i--)
                {
                    __instance.Parties[i].Army = null;
                }
                ____parties.Clear();
                __instance.Kingdom = null;
                if (__instance.LeaderParty == MobileParty.MainParty)
                {
                    MapState mapState = Game.Current.GameStateManager.ActiveState as MapState;
                    if (mapState != null)
                    {
                        mapState.OnDispersePlayerLeadedArmy();
                    }
                }
                Campaign.Current.DeletePeriodicEvent(____hourlyTickEvent);
                ____armyIsDispersing = false;
            }
            catch (Exception ex)
            {
                InformationManager.DisplayMessage(new InformationMessage($"GCO prevented crash with error {ex.Message}"));
            }

            return(false);
        }
 internal static void OnArmyDispersed(this CampaignEventDispatcher __instance, Army army, Army.ArmyDispersionReason reason, bool isPlayersArmy)
 {
     throw new NotImplementedException("Need to patch first");
 }