fix different carryover when loading startofscenario-save
this removes a hack in connect_engine.cpp that set save_id to a value to make sure that other connect_engine.cpp code does not chnge it later to the plyers id, (it did so at some point iirc). Instead we update carryover.cpp to make sure that a side with no save_id (or id since save_id defaults to id) is not carried over to the next scenario, fixes #3152
This commit is contained in:
parent
fb54b0376d
commit
fef4254c84
2 changed files with 9 additions and 7 deletions
|
@ -15,10 +15,15 @@
|
|||
#include "carryover.hpp"
|
||||
|
||||
#include "config.hpp"
|
||||
#include "log.hpp"
|
||||
#include "team.hpp"
|
||||
#include "units/unit.hpp"
|
||||
#include <cassert>
|
||||
|
||||
static lg::log_domain log_engine("engine");
|
||||
#define LOG_NG LOG_STREAM(info, log_engine)
|
||||
#define ERR_NG LOG_STREAM(err, log_engine)
|
||||
|
||||
carryover::carryover(const config& side)
|
||||
: add_(!side["carryover_add"].empty() ? side["carryover_add"].to_bool() : side["add"].to_bool())
|
||||
, current_player_(side["current_player"])
|
||||
|
@ -128,10 +133,12 @@ carryover_info::carryover_info(const config& cfg, bool from_snpashot)
|
|||
{
|
||||
for(const config& side : cfg.child_range("side"))
|
||||
{
|
||||
if(side["lost"].to_bool(false) || !side["persistent"].to_bool(true))
|
||||
if(side["lost"].to_bool(false) || !side["persistent"].to_bool(true) || side["save_id"].empty())
|
||||
{
|
||||
//this shouldn't happen outside a snpshot.
|
||||
assert(from_snpashot);
|
||||
if(!from_snpashot) {
|
||||
ERR_NG << "found invalid carryover data in saved game, lost='" << side["lost"] << "' persistent='" << side["persistent"] << "' save_id='" << side["save_id"] << "'\n";
|
||||
}
|
||||
continue;
|
||||
}
|
||||
this->carryover_sides_.emplace_back(side);
|
||||
|
|
|
@ -910,11 +910,6 @@ side_engine::side_engine(const config& cfg, connect_engine& parent_engine, const
|
|||
ERR_MP << "controller=<number> is deperecated\n";
|
||||
}
|
||||
|
||||
if(!parent_.params_.saved_game && cfg_["save_id"].str().empty()) {
|
||||
assert(cfg_["id"].empty()); // we already set "save_id" to "id" if "id" existed.
|
||||
cfg_["save_id"] = parent_.scenario()["id"].str() + "_" + std::to_string(index);
|
||||
}
|
||||
|
||||
if(cfg_["controller"] != "human" && cfg_["controller"] != "ai" && cfg_["controller"] != "null") {
|
||||
//an invalid controller type was specified. Remove it to prevent asertion failures later.
|
||||
cfg_.remove_attribute("controller");
|
||||
|
|
Loading…
Add table
Reference in a new issue