private void MenuItems(CampaignGameStarter campaignGameStarter)
        {
            campaignGameStarter.AddGameMenuOption("village", "breed_horses", "Breed Horse", (GameMenuOption.OnConditionDelegate)(args =>
            {
                if (!Settlement.CurrentSettlement.Village.IsProducing(MBObjectManager.Instance.GetObject <ItemObject>("aserai_horse")) && !Settlement.CurrentSettlement.Village.IsProducing(MBObjectManager.Instance.GetObject <ItemObject>("battania_horse")) && !Settlement.CurrentSettlement.Village.IsProducing(MBObjectManager.Instance.GetObject <ItemObject>("empire_horse")) && !Settlement.CurrentSettlement.Village.IsProducing(MBObjectManager.Instance.GetObject <ItemObject>("khuzait_horse")) && !Settlement.CurrentSettlement.Village.IsProducing(MBObjectManager.Instance.GetObject <ItemObject>("sturgia_horse")) && !Settlement.CurrentSettlement.Village.IsProducing(MBObjectManager.Instance.GetObject <ItemObject>("vlandia_horse")))
                {
                    args.optionLeaveType = GameMenuOption.LeaveType.Continue;
                    args.Tooltip         = new TextObject("The land around this village is not suited to horse breeding (Hint: go to a village that produces horse to use this action)");
                    args.IsEnabled       = true;
                    return(false);
                }

                return(true);
            }), (GameMenuOption.OnConsequenceDelegate)(args => ShowHorseBreedList()), index: 1);

            campaignGameStarter.AddWaitGameMenu("breeding_wait", "You are breeding horses", (OnInitDelegate)(args =>
            {
                args.MenuContext.GameMenu.SetTargetedWaitingTimeAndInitialProgress(_Duration, 0.0f);
                args.MenuContext.GameMenu.AllowWaitingAutomatically();
            }), (TaleWorlds.CampaignSystem.GameMenus.OnConditionDelegate)(args =>
            {
                args.MenuContext.GameMenu.AllowWaitingAutomatically();
                args.optionLeaveType = GameMenuOption.LeaveType.Wait;
                return(true);
            }), (TaleWorlds.CampaignSystem.GameMenus.OnConsequenceDelegate)(args => ProduceEnd()), (OnTickDelegate)((args, dt) => args.MenuContext.GameMenu.SetProgressOfWaitingInMenu(_startTime.ElapsedHoursUntilNow / _Duration)), GameMenu.MenuAndOptionType.WaitMenuShowOnlyProgressOption);
            campaignGameStarter.AddWaitGameMenu("breeding_wait2", "You are breeding horses", (OnInitDelegate)(args =>
            {
                args.MenuContext.GameMenu.SetTargetedWaitingTimeAndInitialProgress(_Duration, 0.0f);
                args.MenuContext.GameMenu.AllowWaitingAutomatically();
            }), (TaleWorlds.CampaignSystem.GameMenus.OnConditionDelegate)(args =>
            {
                args.MenuContext.GameMenu.AllowWaitingAutomatically();
                args.optionLeaveType = GameMenuOption.LeaveType.Wait;
                return(true);
            }), (TaleWorlds.CampaignSystem.GameMenus.OnConsequenceDelegate)(args => Produce2End()), (OnTickDelegate)((args, dt) => args.MenuContext.GameMenu.SetProgressOfWaitingInMenu(_startTime.ElapsedHoursUntilNow / _Duration)), GameMenu.MenuAndOptionType.WaitMenuShowOnlyProgressOption);

            campaignGameStarter.AddGameMenuOption("breeding_wait", "breeding_wait_leave", "Stop and Leave", (GameMenuOption.OnConditionDelegate)(args =>
            {
                args.optionLeaveType = GameMenuOption.LeaveType.Leave;
                return(true);
            }), (GameMenuOption.OnConsequenceDelegate)(args =>
            {
                GameMenu.SwitchToMenu("village");
            }));

            campaignGameStarter.AddGameMenuOption("breeding_wait2", "breeding_wait2_leave", "Stop and Leave", (GameMenuOption.OnConditionDelegate)(args =>
            {
                args.optionLeaveType = GameMenuOption.LeaveType.Leave;
                return(true);
            }), (GameMenuOption.OnConsequenceDelegate)(args =>
            {
                GameMenu.SwitchToMenu("village");
            }));
        }
        private void AddVillageStealMenu(CampaignGameStarter campaignGameStarter)
        {
            try
            {
                campaignGameStarter.AddGameMenuOption("village", "village_steal", "Steal supplies from the peasants.", this.game_menu_steal_on_condition, this.game_menu_steal_on_consequence, false, 6, false);

                campaignGameStarter.AddGameMenu("village_steal", "{VILLAGE_STEAL_INTRO}  \n{SETTLEMENT_STEAL_INTRO_CONSEQUENCE}", this.game_menu_steal_on_init, GameOverlays.MenuOverlayType.SettlementWithCharacters, GameMenu.MenuFlags.none, null);
                campaignGameStarter.AddGameMenuOption("village_steal", "village_steal_atempt", "Look for opportunities to steal supplies.", this.game_menu_steal_atempt_on_condition, this.game_menu_steal_atempt_on_consequence, false, 1, false);
                campaignGameStarter.AddGameMenuOption("village_steal", "village_steal_back", "Leave.", this.game_menu_steal_leave_on_condition, this.game_menu_steal_leave_on_consequence, false, -1, false);

                campaignGameStarter.AddWaitGameMenu("village_steal_wait", "{SETTLEMENT_STEAL_WAIT}  \n  {SETTLEMENT_STEAL_WAIT_DETECTION}  \n  {SETTLEMENT_STEAL_WAIT_MIN_GOODS}", this.game_menu_steal_wait_on_init, this.game_menu_steal_wait_on_condition, this.game_menu_steal_wait_on_consequence, this.game_menu_steal_wait_on_tick, GameMenu.MenuAndOptionType.WaitMenuHideProgressAndHoursOption, GameOverlays.MenuOverlayType.SettlementWithBoth, 0f, GameMenu.MenuFlags.none, null);
                campaignGameStarter.AddGameMenuOption("village_steal_wait", "village_steal_wait_back", "Forget it.", this.game_menu_steal_leave_on_condition, this.game_menu_steal_leave_on_consequence, false, -1, false);

                campaignGameStarter.AddGameMenu("village_steal_receive", "{SETTLEMENT_STEAL_RECEIVE}  \n{SETTLEMENT_STEAL_RECEIVE_DETECT}  \n  {SETTLEMENT_STEAL_RECEIVE_LOOT}", this.game_menu_steal_receive_on_init, GameOverlays.MenuOverlayType.SettlementWithCharacters, GameMenu.MenuFlags.none, null);
                campaignGameStarter.AddGameMenuOption("village_steal_receive", "village_steal_loot", "Take away the supplies.", this.game_menu_steal_receive_on_condition, this.game_menu_steal_receive_on_consequence, false, -1, false);
                campaignGameStarter.AddGameMenuOption("village_steal_receive", "village_steal_encounter_persuade", "Here, some denars will shut you up. " + KleptomaniaSubModule.settings.EncounterBribeCost + "{GOLD_ICON}", this.game_menu_steal_encounter_persuade_on_condition, this.game_menu_steal_encounter_persuade_on_consequence, false, 0, false);
                campaignGameStarter.AddGameMenuOption("village_steal_receive", "village_steal_encounter_influence", "Do you even know who I am? " + KleptomaniaSubModule.settings.EncounterInfluenceCost + " Influence", this.game_menu_steal_encounter_influence_on_condition, this.game_menu_steal_encounter_influence_on_consequence, false, 1, false);
                campaignGameStarter.AddGameMenuOption("village_steal_receive", "village_steal_encounter_threat", "Don't mess with gang business, or else...", this.game_menu_steal_encounter_threat_on_condition, this.game_menu_steal_threat_on_consequence, false, 2, false);
                campaignGameStarter.AddGameMenuOption("village_steal_receive", "village_steal_encounter_giveback", "Fine, you can have all the supplies back.", this.game_menu_steal_encounter_giveback_on_condition, this.game_menu_steal_giveback_on_consequence, false, 3, false);

                KleptomaniaSubModule.Log.Info("Behaviour intialization | Sucessfully added Village Steal Menus");
                if (KleptomaniaSubModule.settings.DebugInfo)
                {
                    InformationManager.DisplayMessage(new InformationMessage("Sucessfully added Village Steal Menus", Colors.Yellow));
                }
            }
            catch (Exception ex)
            {
                InformationManager.DisplayMessage(new InformationMessage("Something went wrong with Iron Will - Wound Experience: " + ex.Message, Colors.Red));
                KleptomaniaSubModule.Log.Error("Error on adding StealSuppliesBehaviour for Villages | " + ex.Message);
            }
        }
Example #3
0
        public static void CELoadRandomEvent(CampaignGameStarter gameStarter, CEEvent listedEvent, List <CEEvent> eventList)
        {
            CEVariablesLoader          variablesLoader = new CEVariablesLoader();
            MenuCallBackDelegateRandom rcb             = new MenuCallBackDelegateRandom(listedEvent, eventList);

            if (listedEvent.MultipleRestrictedListOfFlags.Contains(RestrictedListOfFlags.ProgressMenu))
            {
                gameStarter.AddWaitGameMenu(listedEvent.Name,
                                            listedEvent.Text,
                                            rcb.RandomProgressInitWaitGameMenu,
                                            rcb.RandomProgressConditionWaitGameMenu,
                                            rcb.RandomProgressConsequenceWaitGameMenu,
                                            rcb.RandomProgressTickWaitGameMenu,
                                            CEProgressMode(variablesLoader.GetIntFromXML(listedEvent.ProgressEvent.DisplayProgressMode)),
                                            TaleWorlds.CampaignSystem.Overlay.GameOverlays.MenuOverlayType.None,
                                            variablesLoader.GetFloatFromXML(listedEvent.ProgressEvent.TimeToTake),
                                            GameMenu.MenuFlags.none,
                                            "CEEVENTS");
            }
            else
            {
                gameStarter.AddGameMenu(
                    listedEvent.Name,
                    listedEvent.Text,
                    rcb.RandomEventGameMenu,
                    TaleWorlds.CampaignSystem.Overlay.GameOverlays.MenuOverlayType.None,
                    GameMenu.MenuFlags.none,
                    "CEEVENTS");
            }

            if (listedEvent.Options == null)
            {
                return;                                                                                                     // Leave if no Options
            }
            List <Option> sorted = listedEvent.Options.OrderBy(item => variablesLoader.GetIntFromXML(item.Order)).ToList(); // Sort Options

            foreach (Option op in sorted)
            {
                MenuCallBackDelegateRandom mcb = new MenuCallBackDelegateRandom(listedEvent, op, eventList);
                gameStarter.AddGameMenuOption(
                    listedEvent.Name,
                    listedEvent.Name + op.Order,
                    op.OptionText,
                    mcb.RandomEventConditionMenuOption,
                    mcb.RandomEventConsequenceMenuOption,
                    false, variablesLoader.GetIntFromXML(op.Order));
            }
        }
Example #4
0
 private static void Postfix(CampaignGameStarter campaignGameStarter)
 {
     campaignGameStarter.AddGameMenuOption(
         "training_field_menu",
         "training_field_train_troops",
         "{=training_field_train_troops}Train your troops.",
         menuCallbackArgs =>
     {
         menuCallbackArgs.optionLeaveType = GameMenuOption.LeaveType.Wait;
         return(TrainingFieldCampaignBehavior.Current.HasTroopsToTrain);
     },
         menuCallbackArgs => TrainingFieldCampaignBehavior.Current.BeginTraining(),
         false,
         1
         );
     campaignGameStarter.AddWaitGameMenu(
         "training_field_train_troops_wait",
         "{=training_field_train_troops_wait}Your troops train tirelessly throughout the day, increasing their combat effectiveness.",
         null,
         args =>
     {
         args.MenuContext.GameMenu.SetTargetedWaitingTimeAndInitialProgress(TrainingFieldCampaignBehavior.Current.MaximumNumberOfHoursToTrain, 0);
         args.MenuContext.GameMenu.AllowWaitingAutomatically();
         return(true);
     },
         null,
         (args, dt) =>
     {
         args.MenuContext.GameMenu.SetProgressOfWaitingInMenu(TrainingFieldCampaignBehavior.Current.TrainingProgress);
     },
         GameMenu.MenuAndOptionType.WaitMenuShowOnlyProgressOption
         );
     campaignGameStarter.AddGameMenuOption(
         "training_field_train_troops_wait",
         "training_field_train_troops_wait_end_training",
         "{=training_field_train_troops_wait_end_training}End training early.",
         args =>
     {
         args.optionLeaveType = GameMenuOption.LeaveType.Leave;
         return(true);
     },
         args => TrainingFieldCampaignBehavior.Current.CancelTraining()
         );
 }
Example #5
0
 private void AddArenaTrainingMenus(CampaignGameStarter campaignGameStarter)
 {
     campaignGameStarter.AddGameMenuOption(
         "town_arena",
         "town_arena_train_troops",
         "{=town_arena_train_troops}Train your troops ({COST}{GOLD_ICON})",
         menuCallbackArgs =>
     {
         MBTextManager.SetTextVariable("COST", CalculateCostToTrainTroops());
         menuCallbackArgs.optionLeaveType = GameMenuOption.LeaveType.Wait;
         return(HasTroopsToTrain && !Settlement.CurrentSettlement.HasTournament);
     },
         menuCallbackArgs => BeginTraining(),
         false,
         2
         );
     campaignGameStarter.AddWaitGameMenu(
         "town_arena_train_troops_wait",
         "{=town_arena_train_troops_wait}Your troops train tirelessly throughout the day, increasing their combat effectiveness.",
         null,
         args =>
     {
         args.MenuContext.GameMenu.SetTargetedWaitingTimeAndInitialProgress(MaximumNumberOfHoursToTrain, 0);
         args.MenuContext.GameMenu.AllowWaitingAutomatically();
         return(true);
     },
         null,
         (args, dt) => { args.MenuContext.GameMenu.SetProgressOfWaitingInMenu(TrainingProgress); },
         GameMenu.MenuAndOptionType.WaitMenuShowOnlyProgressOption
         );
     campaignGameStarter.AddGameMenuOption(
         "town_arena_train_troops_wait",
         "town_arena_train_troops_wait_end_training",
         "{=town_arena_train_troops_wait_end_training}End training early.",
         args =>
     {
         args.optionLeaveType = GameMenuOption.LeaveType.Leave;
         return(true);
     },
         args => CancelTraining()
         );
 }
        private void OnSessionLaunched(CampaignGameStarter starter)
        {
            MBTextManager.SetTextVariable("PLAYER_CAMP_STATE", "idling");
            MBTextManager.SetTextVariable("PLAYER_CAMP_START_STOP", "Start");

            starter.AddGameMenu(
                PlayerCampMenu,
                "Player camp.\n \nTroops are currently {PLAYER_CAMP_STATE}.\nResources left for {PLAYER_CAMP_RESOURCES} days.",
                null
                );

            starter.AddGameMenuOption(
                PlayerCampMenu,
                "player_camp_train",
                "{PLAYER_CAMP_START_STOP} training",
                Utils.positiveLeaveType(GameMenuOption.LeaveType.Recruit),
                _ =>
            {
                if (_establishedCamp != null)
                {
                    _establishedCamp.IsTraining = !_establishedCamp.IsTraining;

                    MBTextManager.SetTextVariable("PLAYER_CAMP_STATE", _establishedCamp.IsTraining ? "training" : "idling");
                    MBTextManager.SetTextVariable("PLAYER_CAMP_START_STOP", _establishedCamp.IsTraining ? "Stop" : "Start");
                }
            }
                );

            starter.AddGameMenuOption(
                PlayerCampMenu,
                "player_camp_remove",
                "Remove camp",
                Utils.positiveLeaveType(GameMenuOption.LeaveType.Continue),
                _ =>
            {
                RemoveCamp();
                PlayerEncounter.Finish();
            },
                true
                );

            starter.AddGameMenuOption(
                PlayerCampMenu,
                "player_camp_wait",
                "Wait",
                Utils.positiveLeaveType(GameMenuOption.LeaveType.Wait),
                _ => GameMenu.ActivateGameMenu("player_camp_menu_wait")
                );

            starter.AddGameMenuOption(
                PlayerCampMenu,
                "player_camp_leave",
                "Leave",
                Utils.positiveLeaveType(GameMenuOption.LeaveType.Leave),
                _ => PlayerEncounter.Finish()
                );

            // wait menu
            starter.AddWaitGameMenu("player_camp_menu_wait", "Waiting.",
                                    null,
                                    args =>
            {
                args.MenuContext.GameMenu.AllowWaitingAutomatically();
                args.optionLeaveType = GameMenuOption.LeaveType.Wait;
                return(true);
            },
                                    null,
                                    null,
                                    GameMenu.MenuAndOptionType.WaitMenuHideProgressAndHoursOption
                                    );

            starter.AddGameMenuOption(
                "player_camp_menu_wait",
                "wait_leave",
                "{=UqDNAZqM}Stop waiting",
                Utils.positiveLeaveType(GameMenuOption.LeaveType.Leave),
                _ => GameMenu.ActivateGameMenu(PlayerCampMenu)
                );
        }
        private static void OnSessionLaunched(CampaignGameStarter campaignStarter)
        {
            campaignStarter.AddDialogLine("start_wanderer_unmet", "start", "zendzee_repopulate_prisoner0",
                                          "{=BaeqKlQ6}I am not allowed to talk with you.[rb:very_negative]",
                                          ConditionTalkToPrisonerInCell,
                                          null,
                                          120, null);
            campaignStarter.AddDialogLine("start_wanderer_unmet", "lord_introduction", "zendzee_repopulate_prisoner0",
                                          "{=BaeqKlQ6}I am not allowed to talk with you.[rb:very_negative]",
                                          ConditionTalkToPrisonerInCell,
                                          null,
                                          120, null);

            campaignStarter.AddPlayerLine("zendzee_repopulate_prisoner0_0", "zendzee_repopulate_prisoner0", "close_window",
                                          "{=zee427439A1}Go to my chambers.",
                                          null,
                                          ConsequenceGoToChambers,
                                          100, null);
            campaignStarter.AddPlayerLine("zendzee_repopulate_prisoner0_1", "zendzee_repopulate_prisoner0", "close_window",
                                          "{=mdNRYlfS}Nevermind.",
                                          null,
                                          null,
                                          100, null);

            campaignStarter.AddWaitGameMenu("zendzee_settlement_prisoner_wait",
                                            "{=zee2A38FB4E}{CAPTIVITY_TEXT}\nThe guards dragged you into the lord's rooms. You can only hope that they will not harm you.",
                                            new OnInitDelegate(settlement_wait_on_init),
                                            new OnConditionDelegate(args => true),
                                            null,
                                            new OnTickDelegate(wait_menu_settlement_wait_on_tick),
                                            GameMenu.MenuAndOptionType.WaitMenuHideProgressAndHoursOption,
                                            GameOverlays.MenuOverlayType.None,
                                            0f,
                                            GameMenu.MenuFlags.none,
                                            null);

            campaignStarter.AddWaitGameMenu("zendzee_town_wait_menus",
                                            "{=zee56CA3AF1}You are waiting in {CURRENT_SETTLEMENT}.\nHaving fun with the prisoner.",
                                            null,
                                            new OnConditionDelegate(game_menu_town_wait_on_condition),
                                            null,
                                            null,
                                            GameMenu.MenuAndOptionType.WaitMenuHideProgressAndHoursOption,
                                            GameOverlays.MenuOverlayType.SettlementWithBoth,
                                            0f,
                                            GameMenu.MenuFlags.none,
                                            null);
            campaignStarter.AddGameMenuOption("zendzee_town_wait_menus",
                                              "wait_leave",
                                              "{=UqDNAZqM}Stop waiting",
                                              new GameMenuOption.OnConditionDelegate(game_menu_stop_waiting_at_town_on_condition),
                                              delegate(MenuCallbackArgs args)
            {
                if (Hero.MainHero.CurrentSettlement.IsTown)
                {
                    GameMenu.SwitchToMenu("town");
                    return;
                }
                if (Hero.MainHero.CurrentSettlement.IsCastle)
                {
                    GameMenu.SwitchToMenu("castle");
                }
            },
                                              true,
                                              -1,
                                              false);
        }
Example #8
0
        private void ToolMakerMenuItems(CampaignGameStarter campaignGameStarter)
        {
            campaignGameStarter.AddGameMenuOption("town", "town_tool_maker", "Visit tool maker at your smithy", (GameMenuOption.OnConditionDelegate)(args =>
            {
                if (MoreSettlementActionHelper.OwnsWorkshop(Settlement.CurrentSettlement.Town, "smithy") == 0)
                {
                    return(false);
                }
                args.optionLeaveType = GameMenuOption.LeaveType.Craft;
                args.IsEnabled       = true;
                return(true);
            }), (GameMenuOption.OnConsequenceDelegate)(args => {
                GameMenu.SwitchToMenu("town_tool_maker_menu");
            }), index: 1);

            campaignGameStarter.AddGameMenu("town_tool_maker_menu", "The tool maker can turn various metal ingots into tools.  Smeltable items in the stockpile will be melted down if there are no ingots avalible.  Hardwood in stockpile will be refined into charcoal when there is not enough charcoal.  If the import material option is turned on iron ore and hardwood will be imported from owned slave estates producing iron ore and hardwood when none is left in the inventory of the tool maker but is avalible at the slave estates.  The import cost is 5 gold per unit delievered.  Building can be upgraded, with each level increasing building base production by 50%", (OnInitDelegate)(args => {
                ToolMaker toolMaker;
                if (!ToolMakers.TryGetValue(Settlement.CurrentSettlement.Town, out toolMaker))
                {
                    return;
                }
                MBTextManager.SetTextVariable("LEVEL", "(Current Level: " + toolMaker.UpgradeLevel.ToString() + ")", false);
            }), GameOverlays.MenuOverlayType.SettlementWithBoth);

            campaignGameStarter.AddGameMenuOption("town_tool_maker_menu", "tool_maker_upgrade", "Upgrade Buildings {LEVEL}", (GameMenuOption.OnConditionDelegate)(args =>
            {
                ToolMaker toolMaker;
                if (!ToolMakers.TryGetValue(Settlement.CurrentSettlement.Town, out toolMaker))
                {
                    return(false);
                }
                int itemNumber     = PartyBase.MainParty.ItemRoster.GetItemNumber(MBObjectManager.Instance.GetObject <ItemObject>("hardwood"));
                string tooltipText = "";
                if (itemNumber < 100 * (toolMaker.UpgradeLevel + 2))
                {
                    args.IsEnabled = false;
                    tooltipText    = tooltipText + "you lack the " + (100 * (toolMaker.UpgradeLevel + 2)).ToString() + " hardwood needed to upgrade to next level.  ";
                }
                else
                {
                    tooltipText = tooltipText + (100 * (toolMaker.UpgradeLevel + 2)).ToString() + " hardwood needed to upgrade to next level.  ";
                }
                if (toolMaker.UpgradeLevel == 0)
                {
                    tooltipText = tooltipText + "This currently has no bonuses";
                }
                else
                {
                    tooltipText = tooltipText + "This building has a " + (50 * toolMaker.UpgradeLevel).ToString() + "% bounus to base daily work rate";
                }
                args.Tooltip         = new TextObject(tooltipText);
                args.optionLeaveType = GameMenuOption.LeaveType.Manage;
                return(true);
            }), (GameMenuOption.OnConsequenceDelegate)(args =>
            {
                ToolMaker toolMaker;
                ToolMakers.TryGetValue(Settlement.CurrentSettlement.Town, out toolMaker);
                _startTime              = CampaignTime.Now;
                int partySize           = MobileParty.MainParty.Army == null ? MobileParty.MainParty.Party.NumberOfAllMembers : (int)MobileParty.MainParty.Army.TotalManCount;
                int engineeringSkill    = Hero.MainHero.GetSkillValue(DefaultSkills.Engineering);
                int partyEngineeringSum = MoreSettlementActionHelper.GetSkillTotalForParty(DefaultSkills.Engineering);
                _Duration     = 1000 * (toolMaker.UpgradeLevel + 2);
                _upgrade_cost = 100 * (toolMaker.UpgradeLevel + 2);
                _Duration     = _Duration / ((100 + engineeringSkill) / 100 * (partySize + (partyEngineeringSum / 100)));
                GameMenu.SwitchToMenu("tool_maker_upgrade_wait");
            }));

            campaignGameStarter.AddWaitGameMenu("tool_maker_upgrade_wait", "Your party is upgrading your toolmaker workshop", (OnInitDelegate)(args =>
            {
                args.MenuContext.GameMenu.SetTargetedWaitingTimeAndInitialProgress(_Duration, 0.0f);
                args.MenuContext.GameMenu.SetMenuAsWaitMenuAndInitiateWaiting();
            }), (TaleWorlds.CampaignSystem.GameMenus.OnConditionDelegate)(args =>
            {
                args.MenuContext.GameMenu.SetMenuAsWaitMenuAndInitiateWaiting();
                args.optionLeaveType = GameMenuOption.LeaveType.Wait;
                return(true);
            }), (TaleWorlds.CampaignSystem.GameMenus.OnConsequenceDelegate)(args => {
                ToolMaker toolMaker;
                ToolMakers.TryGetValue(Settlement.CurrentSettlement.Town, out toolMaker);
                PartyBase.MainParty.ItemRoster.AddToCounts(MBObjectManager.Instance.GetObject <ItemObject>("hardwood"), (int)(-1 * _upgrade_cost));
                toolMaker.UpgradeLevel++;
                InformationManager.DisplayMessage(new InformationMessage("Toolmaker workshop in the slave estate at " + Settlement.CurrentSettlement.Town.Name.ToString() + " has been upgraded to level " + toolMaker.UpgradeLevel.ToString()));

                GameMenu.SwitchToMenu("town_tool_maker_menu");
            }), (OnTickDelegate)((args, dt) => args.MenuContext.GameMenu.SetProgressOfWaitingInMenu(_startTime.ElapsedHoursUntilNow / _Duration)), GameMenu.MenuAndOptionType.WaitMenuShowOnlyProgressOption);

            campaignGameStarter.AddGameMenuOption("tool_maker_upgrade_wait", "tool_maker_upgrade_wait_leave", "Stop and Leave", (GameMenuOption.OnConditionDelegate)(args =>
            {
                args.optionLeaveType = GameMenuOption.LeaveType.Leave;
                return(true);
            }), (GameMenuOption.OnConsequenceDelegate)(args =>
            {
                InformationManager.DisplayMessage(new InformationMessage("You stopped builing before the job was done."));
                GameMenu.SwitchToMenu("village");
            }));

            campaignGameStarter.AddGameMenuOption("town_tool_maker_menu", "town_tool_maker_menu_leave_companion", "Leave companion to assist tool maker", (GameMenuOption.OnConditionDelegate)(args =>
            {
                args.optionLeaveType = GameMenuOption.LeaveType.Recruit;
                return(true);
            }), (GameMenuOption.OnConsequenceDelegate)(args =>
            {
                LeaveCompanion();
            }));

            campaignGameStarter.AddGameMenuOption("town_tool_maker_menu", "town_tool_maker_menu_take_companion", "Take companion to party", (GameMenuOption.OnConditionDelegate)(args =>
            {
                args.optionLeaveType = GameMenuOption.LeaveType.Recruit;
                ToolMaker toolMaker;
                if (ToolMakers.TryGetValue(Settlement.CurrentSettlement.Town, out toolMaker))
                {
                    return(toolMaker.Assistants.Count > 0);
                }
                else
                {
                    return(false);
                }
            }), (GameMenuOption.OnConsequenceDelegate)(args =>
            {
                TakeCompanion();
            }));

            campaignGameStarter.AddGameMenuOption("town_tool_maker_menu", "town_tool_maker_menu_manage_stockpile", "Manage Inventory", (GameMenuOption.OnConditionDelegate)(args =>
            {
                args.optionLeaveType = GameMenuOption.LeaveType.Trade;
                return(true);
            }), (GameMenuOption.OnConsequenceDelegate)(args =>
            {
                ToolMaker toolMaker;
                if (!ToolMakers.TryGetValue(Settlement.CurrentSettlement.Town, out toolMaker))
                {
                    toolMaker = new ToolMaker();
                    ToolMakers.Add(Settlement.CurrentSettlement.Town, toolMaker);
                }
                if (ToolMakers.TryGetValue(Settlement.CurrentSettlement.Town, out toolMaker))
                {
                    InventoryManager.OpenScreenAsStash(toolMaker.StockPile);
                }
            }));

            campaignGameStarter.AddGameMenuOption("town_tool_maker_menu", "town_tool_maker_menu_import_materials_on", "Import Materials : off", (GameMenuOption.OnConditionDelegate)(args =>
            {
                if (ImportMaterials)
                {
                    return(false);
                }
                args.optionLeaveType = GameMenuOption.LeaveType.Trade;
                args.Tooltip         = new TextObject("click to turn on");
                return(true);
            }), (GameMenuOption.OnConsequenceDelegate)(args =>
            {
                ImportMaterials = true;
                GameMenu.SwitchToMenu("town");
            }));

            campaignGameStarter.AddGameMenuOption("town_tool_maker_menu", "town_tool_maker_menu_import_materials_off", "Import Materials : on", (GameMenuOption.OnConditionDelegate)(args =>
            {
                if (!ImportMaterials)
                {
                    return(false);
                }
                args.optionLeaveType = GameMenuOption.LeaveType.Trade;
                args.Tooltip         = new TextObject("click to turn off");
                return(true);
            }), (GameMenuOption.OnConsequenceDelegate)(args =>
            {
                ImportMaterials = false;
                GameMenu.SwitchToMenu("town");
            }));

            campaignGameStarter.AddGameMenuOption("town_tool_maker_menu", "town_tool_maker_menu_leave", "Back", (GameMenuOption.OnConditionDelegate)(args =>
            {
                args.optionLeaveType = GameMenuOption.LeaveType.Leave;
                return(true);
            }), (GameMenuOption.OnConsequenceDelegate)(args =>
            {
                GameMenu.SwitchToMenu("town");
            }));
        }