Example #1
0
        // KillCharacterAction && MarriageAction
        internal void ClanOption(Hero firstHero, Clan newClan, bool setLeader = false, bool adopt = false)
        {
            if (firstHero.Clan != newClan)
            {
                Clan         clan = firstHero.Clan;
                PropertyInfo pi   = Campaign.Current.GetType().GetProperty("PlayerDefaultFaction", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
                try
                {
                    RemoveFactionLeader(firstHero);

                    if (firstHero.PartyBelongedTo != null && clan != null && !firstHero.IsHumanPlayerCharacter)
                    {
                        if (clan.Kingdom != newClan.Kingdom)
                        {
                            if (firstHero.PartyBelongedTo.Army != null)
                            {
                                if (firstHero.PartyBelongedTo.Army.LeaderParty == firstHero.PartyBelongedTo)
                                {
                                    firstHero.PartyBelongedTo.Army.DisperseArmy(Army.ArmyDispersionReason.Unknown);
                                }
                                else
                                {
                                    firstHero.PartyBelongedTo.Army = null;
                                }
                            }
                            IFaction kingdom = newClan.Kingdom;
                            FactionHelper.FinishAllRelatedHostileActionsOfNobleToFaction(firstHero, kingdom ?? newClan);
                        }

                        DisbandPartyAction.ApplyDisband(firstHero.PartyBelongedTo);
                        if (firstHero.PartyBelongedTo != null)
                        {
                            firstHero.PartyBelongedTo.Party.Owner = null;
                        }
                        firstHero.ChangeState(Hero.CharacterStates.Fugitive);
                        MobileParty partyBelongedTo = firstHero.PartyBelongedTo;
                        if (partyBelongedTo != null)
                        {
                            partyBelongedTo.MemberRoster.RemoveTroop(firstHero.CharacterObject, 1, default, 0);
Example #2
0
        public void AddPatrolMenu(CampaignGameStarter obj)
        {
            try
            {
                obj.AddGameMenuOption("village", "basilpatrol_manage_patrol", "Manage patrols",
                                      (MenuCallbackArgs args) =>
                {
                    args.optionLeaveType = GameMenuOption.LeaveType.Manage;

                    /*
                     * if (Settlement.CurrentSettlement.OwnerClan != Clan.PlayerClan)
                     * {
                     *  return false;
                     * }
                     */
                    return(true);
                },
                                      (MenuCallbackArgs args) => { GameMenu.SwitchToMenu("basilpatrol_pay_menu"); }, false, 4);

                obj.AddGameMenu("basilpatrol_pay_menu", "The {BASILPATROL_SETTLEMENT_TYPE} says they have the manpower but not the gear to " +
                                "send men on patrols. He tells he can send up to {BASILPATROL_MAX_PATROL_AMOUNT} patrols if you are willing to pay their " +
                                "gear. Your clan must own the village to hire patrols. Patrols will switch allegiance to the new clan owner if ownership changes. " +
                                "Disbanding patrols will only affect patrols that are not engaging an enemy.",
                                (MenuCallbackArgs args) =>
                {
                    if (Settlement.CurrentSettlement.IsVillage)
                    {
                        MBTextManager.SetTextVariable("BASILPATROL_SETTLEMENT_TYPE", "village spokesman", false);
                        MBTextManager.SetTextVariable("BASILPATROL_MAX_PATROL_AMOUNT", MaxPatrolCountPerVillage, false);
                    }
                    else
                    {
                        MBTextManager.SetTextVariable("BASILPATROL_SETTLEMENT_TYPE", "castle sergeant", false);
                        MBTextManager.SetTextVariable("BASILPATROL_MAX_PATROL_AMOUNT", MaxPatrolCountPerCastle, false);
                    }
                });

                #region Hiring

                obj.AddGameMenuOption("basilpatrol_pay_menu", "basilpatrol_pay_small", "Pay for a small patrol ({BASILPATROL_SMALL_COST}{GOLD_ICON})",
                                      (MenuCallbackArgs args) =>
                {
                    try
                    {
                        args.optionLeaveType = GameMenuOption.LeaveType.Recruit;
                        PatrolProperties patrolProperties;
                        string settlementID = Settlement.CurrentSettlement.StringId;
                        settlementPatrolProperties.TryGetValue(settlementID, out patrolProperties);
                        int cost = BaseCost + patrolProperties.getPatrolCost();
                        MBTextManager.SetTextVariable("BASILPATROL_SMALL_COST", cost, false);
                        MBTextManager.SetTextVariable("GOLD_ICON", "<img src=\"Icons\\Coin@2x\">");
                        if (Settlement.CurrentSettlement.IsVillage)
                        {
                            if (cost > Hero.MainHero.Gold || patrolProperties.getPatrolCount() >= MaxPatrolCountPerVillage || Settlement.CurrentSettlement.OwnerClan != Clan.PlayerClan)
                            {
                                return(false);
                            }
                            return(true);
                        }
                        else
                        {
                            if (cost > Hero.MainHero.Gold || patrolProperties.getPatrolCount() >= MaxPatrolCountPerCastle || Settlement.CurrentSettlement.OwnerClan != Clan.PlayerClan)
                            {
                                return(false);
                            }
                            return(true);
                        }
                    } catch (Exception e)
                    {
                        MessageBox.Show("Error in small button..." + e.ToString());
                        return(false);
                    }
                },
                                      (MenuCallbackArgs args) =>
                {
                    try
                    {
                        PatrolProperties patrolProperties;
                        string settlementID = Settlement.CurrentSettlement.StringId;
                        settlementPatrolProperties.TryGetValue(settlementID, out patrolProperties);
                        int cost = BaseCost + patrolProperties.getPatrolCost();
                        if (AttemptAddPatrolToDictionary(Settlement.CurrentSettlement, patrolProperties, cost))
                        {
                            InformationManager.DisplayMessage(new InformationMessage("You have hired a patrol at " + Settlement.CurrentSettlement.ToString()));
                        }
                        if (Settlement.CurrentSettlement.IsVillage)
                        {
                            GameMenu.SwitchToMenu("basilpatrol_pay_menu");
                        }
                        else
                        {
                            GameMenu.SwitchToMenu("basilpatrol_pay_menu");
                        }
                    } catch (Exception e)
                    {
                        MessageBox.Show("Error in small purchase..." + e.ToString());
                    }
                });

                obj.AddGameMenuOption("basilpatrol_pay_menu", "basilpatrol_pay_medium", "Pay for a medium patrol ({BASILPATROL_MEDIUM_COST}{GOLD_ICON})",
                                      (MenuCallbackArgs args) =>
                {
                    try
                    {
                        args.optionLeaveType = GameMenuOption.LeaveType.Recruit;
                        PatrolProperties patrolProperties;
                        string settlementID = Settlement.CurrentSettlement.StringId;
                        settlementPatrolProperties.TryGetValue(settlementID, out patrolProperties);
                        int cost = (BaseCost + patrolProperties.getPatrolCost()) * 2;
                        MBTextManager.SetTextVariable("BASILPATROL_MEDIUM_COST", cost, false);
                        MBTextManager.SetTextVariable("GOLD_ICON", "<img src=\"Icons\\Coin@2x\">");
                        //MBTextManager.SetTextVariable("BASILPATROL_COST", patrolProperties.getPatrolCost, false);
                        if (Settlement.CurrentSettlement.IsVillage)
                        {
                            if (cost > Hero.MainHero.Gold || patrolProperties.getPatrolCount() >= MaxPatrolCountPerVillage || Settlement.CurrentSettlement.OwnerClan != Clan.PlayerClan)
                            {
                                return(false);
                            }
                            return(true);
                        }
                        else
                        {
                            if (cost > Hero.MainHero.Gold || patrolProperties.getPatrolCount() >= MaxPatrolCountPerCastle || Settlement.CurrentSettlement.OwnerClan != Clan.PlayerClan)
                            {
                                return(false);
                            }
                            return(true);
                        }
                    } catch (Exception e)
                    {
                        MessageBox.Show("Error in medium button... " + e.ToString());
                        return(false);
                    }
                },
                                      (MenuCallbackArgs args) =>
                {
                    try
                    {
                        PatrolProperties patrolProperties;
                        string settlementID = Settlement.CurrentSettlement.StringId;
                        settlementPatrolProperties.TryGetValue(settlementID, out patrolProperties);
                        int cost = (BaseCost + patrolProperties.getPatrolCost()) * 2;
                        if (AttemptAddPatrolToDictionary(Settlement.CurrentSettlement, patrolProperties, cost, 2))
                        {
                            InformationManager.DisplayMessage(new InformationMessage("You have hired a patrol at " + Settlement.CurrentSettlement.ToString()));
                        }
                        if (Settlement.CurrentSettlement.IsVillage)
                        {
                            GameMenu.SwitchToMenu("basilpatrol_pay_menu");
                        }
                        else
                        {
                            GameMenu.SwitchToMenu("basilpatrol_pay_menu");
                        }
                    } catch (Exception e)
                    {
                        MessageBox.Show("Error in medium purchase... " + e.ToString());
                    }
                });

                obj.AddGameMenuOption("basilpatrol_pay_menu", "basilpatrol_pay_large", "Pay for a large patrol ({BASILPATROL_LARGE_COST}{GOLD_ICON})",
                                      (MenuCallbackArgs args) =>
                {
                    try
                    {
                        args.optionLeaveType = GameMenuOption.LeaveType.Recruit;
                        PatrolProperties patrolProperties;
                        string settlementID = Settlement.CurrentSettlement.StringId;
                        settlementPatrolProperties.TryGetValue(settlementID, out patrolProperties);
                        int cost = (BaseCost + patrolProperties.getPatrolCost()) * 3;
                        MBTextManager.SetTextVariable("BASILPATROL_LARGE_COST", cost, false);
                        MBTextManager.SetTextVariable("GOLD_ICON", "<img src=\"Icons\\Coin@2x\">");
                        //MBTextManager.SetTextVariable("BASILPATROL_COST", patrolProperties.getPatrolCost, false);
                        if (Settlement.CurrentSettlement.IsVillage)
                        {
                            if (cost > Hero.MainHero.Gold || patrolProperties.getPatrolCount() >= MaxPatrolCountPerVillage || Settlement.CurrentSettlement.OwnerClan != Clan.PlayerClan)
                            {
                                return(false);
                            }
                            return(true);
                        }
                        else
                        {
                            if (cost > Hero.MainHero.Gold || patrolProperties.getPatrolCount() >= MaxPatrolCountPerCastle || Settlement.CurrentSettlement.OwnerClan != Clan.PlayerClan)
                            {
                                return(false);
                            }
                            return(true);
                        }
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show("Error in large button..." + e.ToString());
                        return(false);
                    }
                },
                                      (MenuCallbackArgs args) =>
                {
                    try
                    {
                        PatrolProperties patrolProperties;
                        string settlementID = Settlement.CurrentSettlement.StringId;
                        settlementPatrolProperties.TryGetValue(settlementID, out patrolProperties);
                        int cost = (BaseCost + patrolProperties.getPatrolCost()) * 3;
                        if (AttemptAddPatrolToDictionary(Settlement.CurrentSettlement, patrolProperties, cost, 3))
                        {
                            InformationManager.DisplayMessage(new InformationMessage("You have hired a patrol at " + Settlement.CurrentSettlement.ToString()));
                        }
                        if (Settlement.CurrentSettlement.IsVillage)
                        {
                            GameMenu.SwitchToMenu("basilpatrol_pay_menu");
                        }
                        else
                        {
                            GameMenu.SwitchToMenu("basilpatrol_pay_menu");
                        }
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show("Error in large purchase..." + e.ToString());
                    }
                });
                #endregion

                obj.AddGameMenuOption("basilpatrol_pay_menu", "basilpatrol_disband_all", "Disband all patrols",
                                      (MenuCallbackArgs args) =>
                {
                    try
                    {
                        args.optionLeaveType = GameMenuOption.LeaveType.Manage;
                        PatrolProperties patrolProperties;
                        if (Settlement.CurrentSettlement.IsVillage || Settlement.CurrentSettlement.IsCastle)
                        {
                            if (settlementPatrolProperties.TryGetValue(Settlement.CurrentSettlement.StringId, out patrolProperties))
                            {
                                if (patrolProperties.patrols.Count > 0 && Settlement.CurrentSettlement.OwnerClan == Clan.PlayerClan)
                                {
                                    return(true);
                                }
                            }
                        }
                        return(false);
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show("Error in disband option..." + e.ToString());
                        return(false);
                    }
                }, (MenuCallbackArgs args) =>
                {
                    try
                    {
                        PatrolProperties patrolProperties;
                        if (settlementPatrolProperties.TryGetValue(Settlement.CurrentSettlement.StringId, out patrolProperties))
                        {
                            if (patrolProperties.patrols.Count > 0)
                            {
                                foreach (MobileParty patrol in patrolProperties.patrols.ToList())
                                {
                                    if (!patrol.IsEngaging)
                                    {
                                        DisbandPartyAction.ApplyDisband(patrol);
                                        allPatrols.Remove(patrol);
                                        patrolProperties.patrols.Remove(patrol);
                                    }
                                }
                                settlementPatrolProperties[Settlement.CurrentSettlement.StringId] = patrolProperties;
                            }
                        }

                        if (Settlement.CurrentSettlement.IsVillage)
                        {
                            GameMenu.SwitchToMenu("basilpatrol_pay_menu");
                        }
                        else
                        {
                            GameMenu.SwitchToMenu("basilpatrol_pay_menu");
                        }
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show("Error in disbanding all patrols..." + e.ToString());
                    }
                });

                obj.AddGameMenuOption("basilpatrol_pay_menu", "basilpatrol_leave", "Leave", game_menu_just_add_leave_conditional, game_menu_switch_to_village_menu);
            } catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }