diff --git a/src/play_controller.cpp b/src/play_controller.cpp index c6d974bc4259..b8b6381d02e9 100644 --- a/src/play_controller.cpp +++ b/src/play_controller.cpp @@ -1403,10 +1403,11 @@ void play_controller::check_victory() for (unit_map::const_iterator i = units_.begin(), i_end = units_.end(); i != i_end; ++i) { - if (i->can_recruit()) { + const team& tm = teams_[i->side()-1]; + if (i->can_recruit() && tm.defeat_condition() == team::NO_LEADER) { //DBG_NG << "seen leader for side " << i->side() << "\n"; not_defeated.insert(i->side()); - } else if (teams_[i->side()-1].defeat_condition() == team::NO_UNITS) { + } else if (tm.defeat_condition() == team::NO_UNITS) { //DBG_NG << "side doesn't require leader " << i->side() << "\n"; not_defeated.insert(i->side()); } diff --git a/src/team.cpp b/src/team.cpp index 37c7b8c910c0..9af9d43ce285 100644 --- a/src/team.cpp +++ b/src/team.cpp @@ -78,6 +78,8 @@ team::DEFEAT_CONDITION team::parse_defeat_condition(const std::string& cond, tea return team::NO_UNITS; else if (cond == "never") return team::NEVER; + else if (cond == "always") + return team::ALWAYS; else return def; //throw game::game_error("Cannot parse string " + cond +" to a DEFEAT_CONDITION"); @@ -92,6 +94,8 @@ std::string team::defeat_condition_to_string(DEFEAT_CONDITION cond) return "no_unit"; case team::NEVER: return "never"; + case team::ALWAYS: + return "always"; default: throw game::game_error("Found corrupted DEFEAT_CONDITION"); } diff --git a/src/team.hpp b/src/team.hpp index aa702329ddf6..962932591a86 100644 --- a/src/team.hpp +++ b/src/team.hpp @@ -33,7 +33,7 @@ class team : public savegame::savegame_config { public: enum CONTROLLER { HUMAN, AI, NETWORK, NETWORK_AI, IDLE, EMPTY }; - enum DEFEAT_CONDITION {NO_LEADER, NO_UNITS, NEVER}; + enum DEFEAT_CONDITION {NO_LEADER, NO_UNITS, NEVER, ALWAYS}; static DEFEAT_CONDITION parse_defeat_condition(const std::string& cond, team::DEFEAT_CONDITION def); static std::string defeat_condition_to_string(DEFEAT_CONDITION cond); private: