diff --git a/src/saved_game.cpp b/src/saved_game.cpp index 15f31f7d60c3..1137993b9786 100644 --- a/src/saved_game.cpp +++ b/src/saved_game.cpp @@ -81,8 +81,15 @@ saved_game::saved_game(const config& cfg) carryover_sides = cfg.child_or_empty("carryover_sides"); carryover_sides_start = cfg.child_or_empty("carryover_sides_start"); + + //Serversided replays can contain multiple [replay] replay_start_ = cfg.child_or_empty("replay_start"); - replay_data = cfg.child_or_empty("replay"); + replay_data = config(); //cfg.child_or_empty("replay"); + BOOST_FOREACH(const config& replay, cfg.child_range("replay")) + { + replay_data.append_children(replay); + } + if(const config& snapshot = cfg.child("snapshot")) { this->starting_pos_type_ = STARTINGPOS_SNAPSHOT; diff --git a/src/server/game.cpp b/src/server/game.cpp index 4c31525244bb..a1e7f6a78afb 100644 --- a/src/server/game.cpp +++ b/src/server/game.cpp @@ -1470,11 +1470,13 @@ void game::save_replay() { history_.clear(); std::stringstream name; - name << level_["name"] << " Turn " << current_turn(); + name << (*starting_pos( level_.root()))["name"] << " Turn " << current_turn(); std::stringstream replay_data; try { +#if 0 replay_data << "campaign_type=\"multiplayer\"\n" + //why did we save difficulcy here ? esp in scmapogn difficulacy = normal is not bguaranteed << "difficulty=\"NORMAL\"\n" << "label=\"" << name.str() << "\"\n" << "mp_game_title=\"" << name_ << "\"\n" @@ -1485,7 +1487,15 @@ void game::save_replay() { << replay_commands << "[/replay]\n" << "[replay_start]\n" << level_.output() << "[/replay_start]\n"; +#else + replay_data << level_.output() + //This can result in having 2 [replay] at toplevel since level_ can contain one already. But the client can handle this (simply merges them). + << "[replay]\n" + << "\t[command]\n\t\t[start]\n\t\t[/start]\n\t[/command]\n" //this is required by gfgtdf's sync mechanism, in PR 121 + << replay_commands + << "[/replay]\n"; +#endif name << " (" << id_ << ").bz2"; std::string replay_data_str = replay_data.str();