From cdd3a2fe1c32378aafa23ba270ff31882496827a Mon Sep 17 00:00:00 2001 From: pentarctagon Date: Thu, 9 Jul 2020 10:15:59 -0500 Subject: [PATCH] Fix loading a save game erroring with "Mandatory WML child missing yet untested for". Save games don't have the [scenario] tag. They also don't keep the `addon_id` or `addon_version` attributes, so the MAP_SOURCE_ADDON and MAP_VERSION columns will be blank in the wesnothd database for saves reloaded in MP. --- src/game_initialization/mp_game_utils.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/game_initialization/mp_game_utils.cpp b/src/game_initialization/mp_game_utils.cpp index fd3bdb1cfed4..d9898b1f0191 100644 --- a/src/game_initialization/mp_game_utils.cpp +++ b/src/game_initialization/mp_game_utils.cpp @@ -80,8 +80,6 @@ config initial_level_config(saved_game& state) config level = state.to_config(); add_multiplayer_classification(level.child_or_add("multiplayer"), state); - level.child("multiplayer")["mp_scenario_addon_id"] = level.child("scenario")["addon_id"].str(); - level.child("multiplayer")["mp_scenario_addon_version"] = state.to_config().child("scenario")["addon_version"].str(); // [multiplayer] mp_era= should be persistent over saves. std::string era = params.mp_era; @@ -98,6 +96,17 @@ config initial_level_config(saved_game& state) const config& game_config = game_config_manager::get()->game_config(); const config& era_cfg = game_config.find_child("era", "id", era); + if(const config& temp_cfg = game_config.find_child("scenario", "id", level.child("multiplayer")["mp_scenario"])) { + level.child("multiplayer")["mp_scenario_addon_id"] = temp_cfg["addon_id"].str(); + level.child("multiplayer")["mp_scenario_addon_version"] = temp_cfg["addon_version"].str(); + } else if(const config& temp_cfg = game_config.find_child("multiplayer", "id", level.child("multiplayer")["mp_scenario"])) { + level.child("multiplayer")["mp_scenario_addon_id"] = temp_cfg["addon_id"].str(); + level.child("multiplayer")["mp_scenario_addon_version"] = temp_cfg["addon_version"].str(); + } else { + level.child("multiplayer")["mp_scenario_addon_id"] = ""; + level.child("multiplayer")["mp_scenario_addon_version"] = ""; + } + if(!era_cfg) { if(!params.saved_game) { throw config::error(VGETTEXT("Cannot find era $era", {{"era", era}}));