Ejemplo n.º 1
0
        private static string FormAlliance(List <string> strings)
        {
            if (!CampaignCheats.CheckCheatUsage(ref CampaignCheats.ErrorType))
            {
                return(CampaignCheats.ErrorType);
            }

            if (!CampaignCheats.CheckParameters(strings, 2) || CampaignCheats.CheckHelp(strings))
            {
                return("Format uses 2 kingdom ID parameters without spaces: diplomacy.form_alliance [Kingdom1] [Kingdom2]");
            }

            var b1 = strings[0].ToLower();
            var b2 = strings[1].ToLower();

            if (b1 == b2)
            {
                return("Cannot ally a kingdom to itself!");
            }

            Kingdom?kingdom1 = null;
            Kingdom?kingdom2 = null;

            foreach (var k in Kingdom.All)
            {
                var id = k.Name.ToString().ToLower().Replace(" ", "");

                if (id == b1)
                {
                    kingdom1 = k;
                }
                else if (id == b2)
                {
                    kingdom2 = k;
                }
            }

            if (kingdom1 is null && kingdom2 is null)
            {
                return("Could not find either required kingdom!");
            }

            if (kingdom1 is null)
            {
                return("1st kingdom ID not found: " + b1);
            }

            if (kingdom2 is null)
            {
                return("2nd kingdom ID not found: " + b2);
            }

            DeclareAllianceAction.Apply(kingdom1, kingdom2, bypassCosts: true);
            return($"Alliance formed between {kingdom1.Name} and  {kingdom2.Name}!");
        }
        public static string FormAlliance(List <string> strings)
        {
            if (!CampaignCheats.CheckCheatUsage(ref CampaignCheats.ErrorType))
            {
                return(CampaignCheats.ErrorType);
            }
            if (!CampaignCheats.CheckParameters(strings, 2) || CampaignCheats.CheckHelp(strings))
            {
                return("Format is faction names without space \"campaign.form_alliance [Faction1] [Faction2]\".");
            }
            string  b        = strings[0].ToLower();
            string  b2       = strings[1].ToLower();
            Kingdom faction  = null;
            Kingdom faction2 = null;

            foreach (Kingdom faction3 in Campaign.Current.Kingdoms)
            {
                string a = faction3.Name.ToString().ToLower().Replace(" ", "");
                if (a == b)
                {
                    faction = faction3;
                }
                else if (a == b2)
                {
                    faction2 = faction3;
                }
            }
            if (faction != null && faction2 != null)
            {
                DeclareAllianceAction.Apply(faction as Kingdom, faction2 as Kingdom, bypassCosts: true);
                return(string.Concat(new object[]
                {
                    "Alliance declared between ",
                    faction.Name,
                    " and ",
                    faction2.Name
                }));
            }
            if (faction == null)
            {
                return("Faction is not found: " + faction);
            }
            return("Faction is not found: " + faction2);
        }
Ejemplo n.º 3
0
        static bool Prefix(ArmyManagementVM __instance, MBBindingList <ArmyManagementItemVM> ____partiesToRemove, Action ____onClose)
        {
            // Only enable this hack if it is enabled and player is independent
            // THIS IS A PORT OF ArmyManagementVM.ExecuteDone!
            if (!Hero.MainHero.MapFaction.IsKingdomFaction && Settings.Instance.CreatePlayerKingdom)
            {
                int  num   = __instance.PartiesInCart.Sum <ArmyManagementItemVM>((Func <ArmyManagementItemVM, int>)(P => P.Cost));
                bool flag1 = num <= 0 || (double)num <= (double)Hero.MainHero.Clan.Influence;
                if (flag1 && __instance.NewCohesion > __instance.Cohesion)
                {
                    var foo = __instance.GetType().GetMethod("ApplyCohesionChange", System.Reflection.BindingFlags.NonPublic);
                    foo.Invoke(__instance, null);
                }
                if (__instance.PartiesInCart.Count > 1 & flag1 /* && MobileParty.MainParty.MapFaction.IsKingdomFaction*/)
                {
                    if (MobileParty.MainParty.Army == null)
                    {
                        string err = "";
                        if (!CampaignCheats.CheckCheatUsage(ref err))
                        {
                            InformationMessage im = new InformationMessage(err);
                            InformationManager.DisplayMessage(im);
                            return(false);
                        }
                        if ((MobileParty.MainParty.MapFaction as Kingdom) is null)
                        {
                            CampaignCheats.CreatePlayerKingdom(new List <string>());
                        }
                        ((Kingdom)MobileParty.MainParty.MapFaction).CreateArmy(Hero.MainHero, (IMapPoint)Hero.MainHero.HomeSettlement, Army.ArmyTypes.Patrolling);
                    }
                    foreach (ArmyManagementItemVM managementItemVm in (Collection <ArmyManagementItemVM>)__instance.PartiesInCart)
                    {
                        if (managementItemVm.Party != MobileParty.MainParty)
                        {
                            managementItemVm.Party.Army = MobileParty.MainParty.Army;
                            SetPartyAiAction.GetActionForEscortingParty(managementItemVm.Party, MobileParty.MainParty);
                            managementItemVm.Party.IsJoiningArmy = true;
                        }
                    }
                    Hero.MainHero.Clan.Influence -= (float)num;
                }
                if (____partiesToRemove.Count > 0)
                {
                    bool flag2 = false;
                    foreach (ArmyManagementItemVM managementItemVm in (Collection <ArmyManagementItemVM>)____partiesToRemove)
                    {
                        if (managementItemVm.Party == MobileParty.MainParty)
                        {
                            managementItemVm.Party.Army = (Army)null;
                            flag2 = true;
                        }
                    }
                    if (!flag2)
                    {
                        foreach (ArmyManagementItemVM managementItemVm in (Collection <ArmyManagementItemVM>)____partiesToRemove)
                        {
                            Army army = MobileParty.MainParty.Army;
                            if ((army != null ? (army.Parties.Contains(managementItemVm.Party) ? 1 : 0) : 0) != 0)
                            {
                                managementItemVm.Party.Army = (Army)null;
                            }
                        }
                    }
                    ____partiesToRemove.Clear();
                }
                if (flag1)
                {
                    ____onClose();
                    CampaignEventDispatcher.Instance.OnArmyOverlaySetDirty();
                }
                else
                {
                    InformationManager.AddQuickInformation(new TextObject("{=Xmw93W6a}Not Enough Influence"));
                }

                //int num = __instance.PartiesInCart.Sum<ArmyManagementItemVM>((Func<ArmyManagementItemVM, int>)(P => P.Cost));
                //bool flag1 = (double)num <= (double)Hero.MainHero.Clan.Influence;
                //if (flag1 && __instance.NewCohesion > __instance.Cohesion)
                //{
                //    if (MobileParty.MainParty.Army == null)
                //        return false;
                //    ArmyManagementCalculationModel calculationModel = Campaign.Current.Models.ArmyManagementCalculationModel;
                //    int num1 = __instance.NewCohesion - __instance.Cohesion;
                //    Army army = MobileParty.MainParty.Army;
                //    double num2 = (double)num1;
                //    int totalInfluenceCost = calculationModel.CalculateTotalInfluenceCost(army, (float)num2);
                //    MobileParty.MainParty.Army.BoostCohesionWithInfluence((float)num1, totalInfluenceCost);
                //}
                //if (__instance.PartiesInCart.Count > 1 & flag1/* && MobileParty.MainParty.MapFaction.IsKingdomFaction*/)
                //{
                //    if (MobileParty.MainParty.Army == null)
                //    {
                //        string err = "";
                //        if (!CampaignCheats.CheckCheatUsage(ref err))
                //        {
                //            InformationMessage im = new InformationMessage(err);
                //            InformationManager.DisplayMessage(im);
                //            return false;
                //        }
                //        if ((MobileParty.MainParty.MapFaction as Kingdom) is null)
                //            CampaignCheats.CreatePlayerKingdom(new List<string>());

                //        ((Kingdom)MobileParty.MainParty.MapFaction).CreateArmy(Hero.MainHero, (IMapPoint)Hero.MainHero.HomeSettlement, Army.ArmyTypes.Patrolling);
                //    }
                //    foreach (ArmyManagementItemVM managementItemVm in (Collection<ArmyManagementItemVM>)__instance.PartiesInCart)
                //    {
                //        if (managementItemVm.Party != MobileParty.MainParty)
                //        {
                //            managementItemVm.Party.Army = MobileParty.MainParty.Army;
                //            SetPartyAiAction.GetActionForEscortingParty(managementItemVm.Party, MobileParty.MainParty);
                //            managementItemVm.Party.IsJoiningArmy = true;
                //        }
                //    }
                //    Hero.MainHero.Clan.Influence -= (float)num;
                //}
                //if (____partiesToRemove.Count > 0)
                //{
                //    bool flag2 = false;
                //    foreach (ArmyManagementItemVM managementItemVm in (Collection<ArmyManagementItemVM>)____partiesToRemove)
                //    {
                //        if (managementItemVm.Party == MobileParty.MainParty)
                //        {
                //            managementItemVm.Party.Army = (Army)null;
                //            flag2 = true;
                //        }
                //    }
                //    if (!flag2)
                //    {
                //        foreach (ArmyManagementItemVM managementItemVm in (Collection<ArmyManagementItemVM>)____partiesToRemove)
                //        {
                //            Army army = MobileParty.MainParty.Army;
                //            if ((army != null ? (army.Parties.Contains(managementItemVm.Party) ? 1 : 0) : 0) != 0)
                //                managementItemVm.Party.Army = (Army)null;
                //        }
                //    }
                //    ____partiesToRemove.Clear();
                //}
                //if (flag1)
                //    ____onClose();
                //else
                //    InformationManager.AddQuickInformation(new TextObject("{=Xmw93W6a}Not Enough Influence", (Dictionary<string, TextObject>)null), 0, (BasicCharacterObject)null, "");

                return(false);
            }

            return(true);
        }