2020#include " log.hpp"
2121#include " mp_ui_alerts.hpp"
2222#include " preferences/preferences.hpp"
23+ #include " serialization/string_utils.hpp"
2324
2425
2526static lg::log_domain log_engine (" engine" );
@@ -123,9 +124,16 @@ void lobby_info::process_gamelist(const config& data)
123124 games_by_id_.clear ();
124125
125126 for (const config& game : prefs::get ().get_game_presets ()) {
126- optional_const_config scenario = game_config_manager::get ()->game_config ().find_child (" multiplayer" , " id" , game[" scenario" ].str ());
127+ const auto game_config = game_config_manager::get ()->game_config ();
128+
129+ optional_const_config scenario = game_config.find_child (" multiplayer" , " id" , game[" scenario" ].str ());
127130 if (!scenario) {
128- ERR_LB << " Scenario " << game[" scenario" ].str () << " not found in game config" ;
131+ ERR_LB << " Scenario " << game[" scenario" ].str () << " not found in game preset " << game[" id" ];
132+ continue ;
133+ }
134+ optional_const_config era = game_config.find_child (" era" , " id" , game[" era" ].str ());
135+ if (!era) {
136+ ERR_LB << " Era " << game[" era" ].str () << " not found in game preset " << game[" id" ];
129137 continue ;
130138 }
131139
@@ -153,6 +161,7 @@ void lobby_info::process_gamelist(const config& data)
153161 qgame[" mp_shroud" ] = game[" shroud" ];
154162 qgame[" mp_village_gold" ] = game[" village_gold" ];
155163 qgame[" experience_modifier" ] = game[" experience_modifier" ];
164+ qgame[" random_faction_mode" ] = game[" random_faction_mode" ];
156165
157166 qgame[" mp_countdown" ] = game[" countdown" ];
158167 if (qgame[" mp_countdown" ].to_bool ()) {
@@ -165,12 +174,30 @@ void lobby_info::process_gamelist(const config& data)
165174 qgame[" observer" ] = game[" observer" ];
166175 qgame[" human_sides" ] = human_sides;
167176
177+ std::vector<std::string> mods = utils::split (game[" mp_modifications" ].str ());
178+ for (const std::string& mod : mods) {
179+ auto cfg = game_config.find_child (" modification" , " id" , mod);
180+
181+ if (cfg) {
182+ config& m = qgame.add_child (" modification" );
183+ m[" name" ] = cfg[" name" ];
184+ m[" id" ] = mod;
185+ } else {
186+ ERR_LB << " Modification " << mod << " not found in game preset " << game[" id" ];
187+ continue ;
188+ }
189+ }
190+
191+ if (game.has_child (" options" )) {
192+ qgame.add_child (" options" , game.mandatory_child (" options" ));
193+ }
194+
168195 if (scenario->has_attribute (" map_data" )) {
169196 qgame[" map_data" ] = scenario[" map_data" ];
170197 } else {
171198 qgame[" map_data" ] = filesystem::read_map (scenario[" map_file" ]);
172199 }
173- qgame[" hash" ] = game_config_manager::get ()-> game_config () .mandatory_child (" multiplayer_hashes" )[game[" scenario" ].str ()];
200+ qgame[" hash" ] = game_config.mandatory_child (" multiplayer_hashes" )[game[" scenario" ].str ()];
174201
175202 config& qchild = qgame.add_child (" slot_data" );
176203 qchild[" vacant" ] = human_sides;
0 commit comments