mirror of
https://github.com/wesnoth/wesnoth
synced 2025-05-04 10:31:17 +00:00
Remove a side from carryover on all of its leaders loss.
These changes allow to pass a correct information about sides to mp::connect. Can be turned off by adding "remove_from_carryover_on_leaders_loss=no".
This commit is contained in:
parent
abaa3944d7
commit
fe3224e9b4
@ -303,6 +303,16 @@ void carryover_info::add_side(const config& cfg) {
|
||||
carryover_sides_.push_back(carryover(cfg));
|
||||
}
|
||||
|
||||
void carryover_info::remove_side(const std::string& id) {
|
||||
for (std::vector<carryover>::iterator it = carryover_sides_.begin();
|
||||
it != carryover_sides_.end(); ++it) {
|
||||
|
||||
if (it->get_save_id() == id) {
|
||||
carryover_sides_.erase(it);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const end_level_data& carryover_info::get_end_level() const{
|
||||
return end_level_;
|
||||
|
@ -138,6 +138,7 @@ public:
|
||||
std::vector<carryover>& get_all_sides();
|
||||
void add_side(const config& cfg);
|
||||
void add_side(const team& t, const int gold, const bool add);
|
||||
void remove_side(const std::string& id);
|
||||
void set_end_level(const end_level_data& end_level) { end_level_ = end_level; }
|
||||
|
||||
void transfer_from(const team& t, int carryover_gold);
|
||||
|
@ -124,6 +124,7 @@ play_controller::play_controller(const config& level, game_state& state_of_game,
|
||||
savenames_(),
|
||||
wml_commands_(),
|
||||
victory_when_enemies_defeated_(true),
|
||||
remove_from_carryover_on_leaders_loss_(true),
|
||||
end_level_data_(),
|
||||
victory_music_(),
|
||||
defeat_music_()
|
||||
@ -1356,7 +1357,8 @@ void play_controller::check_victory()
|
||||
}
|
||||
}
|
||||
|
||||
// Clear villages for teams that have no leader
|
||||
// Clear villages for teams that have no leader and
|
||||
// mark side as lost if it should be removed from carryover.
|
||||
for (std::vector<team>::iterator tm_beg = teams_.begin(), tm = tm_beg,
|
||||
tm_end = teams_.end(); tm != tm_end; ++tm)
|
||||
{
|
||||
@ -1365,6 +1367,10 @@ void play_controller::check_victory()
|
||||
// invalidate_all() is overkill and expensive but this code is
|
||||
// run rarely so do it the expensive way.
|
||||
gui_->invalidate_all();
|
||||
|
||||
if (!tm->no_leader() && remove_from_carryover_on_leaders_loss_) {
|
||||
tm->set_lost();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -118,7 +118,9 @@ public:
|
||||
virtual void process_oos(const std::string& msg) const;
|
||||
|
||||
void set_victory_when_enemies_defeated(bool e)
|
||||
{ victory_when_enemies_defeated_ = e; }
|
||||
{ victory_when_enemies_defeated_ = e; }
|
||||
void set_remove_from_carryover_on_leaders_loss(bool e)
|
||||
{ remove_from_carryover_on_leaders_loss_ = e; }
|
||||
end_level_data& get_end_level_data() {
|
||||
return end_level_data_;
|
||||
}
|
||||
@ -266,6 +268,7 @@ private:
|
||||
static const size_t MAX_WML_COMMANDS = 7;
|
||||
|
||||
bool victory_when_enemies_defeated_;
|
||||
bool remove_from_carryover_on_leaders_loss_;
|
||||
end_level_data end_level_data_;
|
||||
std::vector<std::string> victory_music_;
|
||||
std::vector<std::string> defeat_music_;
|
||||
|
@ -141,6 +141,9 @@ static void store_carryover(game_state& gamestate, playsingle_controller& playco
|
||||
{
|
||||
if (!t.persistent()){
|
||||
continue;
|
||||
} else if (t.lost()) {
|
||||
sides.remove_side(t.save_id());
|
||||
continue;
|
||||
}
|
||||
int carryover_gold = div100rounded((t.gold() + finishing_bonus) * end_level.carryover_percentage);
|
||||
sides.transfer_from(t, carryover_gold);
|
||||
|
@ -356,6 +356,7 @@ LEVEL_RESULT playsingle_controller::play_scenario(
|
||||
}
|
||||
|
||||
set_victory_when_enemies_defeated(level_["victory_when_enemies_defeated"].to_bool(true));
|
||||
set_remove_from_carryover_on_leaders_loss(level_["remove_from_carryover_on_leaders_loss"].to_bool(true));
|
||||
end_level_data &end_level = get_end_level_data();
|
||||
end_level.carryover_percentage = level_["carryover_percentage"].to_int(game_config::gold_carryover_percentage);
|
||||
end_level.carryover_add = level_["carryover_add"].to_bool();
|
||||
|
@ -50,7 +50,7 @@ const int team::default_team_gold_ = 100;
|
||||
const char * const team::attributes[] = {
|
||||
"ai_config", "color", "controller", "current_player", "flag",
|
||||
"flag_icon", "fog", "fog_data", "gold", "hidden", "income",
|
||||
"no_leader", "objectives", "objectives_changed", "persistent",
|
||||
"no_leader", "objectives", "objectives_changed", "persistent", "lost",
|
||||
"recall_cost", "recruit", "save_id", "scroll_to_leader",
|
||||
"share_maps", "share_view", "shroud", "shroud_data", "start_gold",
|
||||
"suppress_end_turn_confirmation",
|
||||
@ -104,7 +104,8 @@ team::team_info::team_info() :
|
||||
no_turn_confirmation(false),
|
||||
color(),
|
||||
side(0),
|
||||
persistent(false)
|
||||
persistent(false),
|
||||
lost(false)
|
||||
{
|
||||
}
|
||||
|
||||
@ -276,6 +277,7 @@ void team::team_info::write(config& cfg) const
|
||||
cfg["color"] = color;
|
||||
|
||||
cfg["persistent"] = persistent;
|
||||
cfg["lost"] = lost;
|
||||
|
||||
cfg.add_child("ai",ai::manager::to_config(side));
|
||||
}
|
||||
|
@ -107,6 +107,7 @@ class team : public savegame::savegame_config
|
||||
|
||||
int side;
|
||||
bool persistent;
|
||||
bool lost;
|
||||
};
|
||||
|
||||
static const int default_team_gold_;
|
||||
@ -256,6 +257,8 @@ public:
|
||||
bool hidden() const { return info_.hidden; }
|
||||
void set_hidden(bool value) { info_.hidden=value; }
|
||||
bool persistent() const {return info_.persistent;}
|
||||
void set_lost(bool value=true) { info_.lost = value; }
|
||||
bool lost() const { return info_.lost; }
|
||||
bool no_turn_confirmation() const { return info_.no_turn_confirmation; }
|
||||
void set_no_turn_confirmation(bool value) { info_.no_turn_confirmation = value; }
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user