Skip to content

Commit

Permalink
Fix loading a save game erroring with "Mandatory WML child missing ye…
Browse files Browse the repository at this point in the history
…t 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.
  • Loading branch information
Pentarctagon committed Jul 12, 2020
1 parent 64d2de9 commit cdd3a2f
Showing 1 changed file with 11 additions and 2 deletions.
13 changes: 11 additions & 2 deletions src/game_initialization/mp_game_utils.cpp
Expand Up @@ -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;
Expand All @@ -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}}));
Expand Down

0 comments on commit cdd3a2f

Please sign in to comment.