diff --git a/src/menu_events.cpp b/src/menu_events.cpp index 668f17032e6b..32d9bac2d56c 100644 --- a/src/menu_events.cpp +++ b/src/menu_events.cpp @@ -2952,17 +2952,7 @@ void console_handler::do_nosaves() { void console_handler::do_next_level() { - if (!get_data().empty()) - menu_handler_.gamedata().set_next_scenario(get_data()); - end_level_data e; - e.transient.carryover_report = false; - e.prescenario_save = true; - e.transient.linger_mode = false; - e.proceed_to_next_level = true; - e.is_victory = true; - menu_handler_.pc_.set_end_level_data(e); - menu_handler_.pc_.force_end_turn(); - menu_handler_.pc_.maybe_throw_return_to_play_side(); + synced_context::run_and_throw("debug_next_level", config_of("next_level", get_data())); } void console_handler::do_choose_level() { @@ -3004,17 +2994,7 @@ void console_handler::do_choose_level() { return; if (size_t(choice) < options.size()) { - menu_handler_.gamedata().set_next_scenario(options[choice]); - end_level_data e; - e.transient.carryover_report = false; - e.prescenario_save = true; - e.transient.linger_mode = false; - e.proceed_to_next_level = true; - e.is_victory = true; - menu_handler_.pc_.set_end_level_data(e); - // This is for linger mode where end turn is actualy end scenario. - menu_handler_.pc_.force_end_turn(); - menu_handler_.pc_.maybe_throw_return_to_play_side(); + synced_context::run_and_throw("debug_next_level", config_of("next_level", options[choice])); } } diff --git a/src/synced_commands.cpp b/src/synced_commands.cpp index 08b44bf94d06..852fa9891e7f 100644 --- a/src/synced_commands.cpp +++ b/src/synced_commands.cpp @@ -497,3 +497,29 @@ SYNCED_COMMAND_HANDLER_FUNCTION(debug_lua, child, use_undo, /*show*/, /*error_ha return true; } + +SYNCED_COMMAND_HANDLER_FUNCTION(debug_next_level, child, use_undo, /*show*/, /*error_handler*/) +{ + if(use_undo) { + resources::undo_stack->clear(); + } + + utils::string_map symbols; + symbols["player"] = resources::controller->current_team().current_player(); + resources::screen->announce(vgettext(":next_level debug command was used during turn of $player", symbols), font::NORMAL_COLOR); + + std::string next_level = child["next_level"]; + if (!next_level.empty()) + resources::gamedata->set_next_scenario(next_level); + end_level_data e; + e.transient.carryover_report = false; + e.prescenario_save = true; + e.transient.linger_mode = false; + e.proceed_to_next_level = true; + e.is_victory = true; + + resources::controller->set_end_level_data(e); + resources::controller->force_end_turn(); + + return true; +}