// 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);
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()); } }