seg fault fixed (?)

This commit is contained in:
Dave White 2003-10-30 08:22:34 +00:00
parent 4f82b1cf19
commit aca3971e4e
5 changed files with 22 additions and 20 deletions

View file

@ -713,16 +713,17 @@ void check_victory(std::map<gamemap::location,unit>& units,
bool found_human = false;
for(size_t n = 0; n != seen_leaders.size(); ++n) {
const size_t side1 = seen_leaders[n]-1;
const size_t side = seen_leaders[n]-1;
assert(side < teams.size());
for(size_t m = n+1; m != seen_leaders.size(); ++m) {
const size_t side2 = seen_leaders[m];
if(side1 < teams.size() && teams[side1].is_enemy(side2)) {
if(side < teams.size() && teams[side].is_enemy(seen_leaders[m])) {
found_enemies = true;
}
}
if(side1 < teams.size() && teams[side1].is_human()) {
if(side < teams.size() && teams[side].is_human()) {
found_human = true;
}
}
@ -732,12 +733,14 @@ void check_victory(std::map<gamemap::location,unit>& units,
}
//remove any units which are leaderless
for(std::map<gamemap::location,unit>::iterator j = units.begin();
j != units.end(); ++j) {
std::map<gamemap::location,unit>::iterator j = units.begin();
while(j != units.end()) {
if(std::find(seen_leaders.begin(),seen_leaders.end(),j->second.side())
== seen_leaders.end()) {
units.erase(j);
j = units.begin();
} else {
++j;
}
}
}

View file

@ -555,21 +555,16 @@ void display::draw_game_status(int x, int y)
std::stringstream details;
if(team_valid()) {
const int nunits = team_units(units_,currentTeam_+1);
const int upkeep = team_upkeep(units_,currentTeam_+1);
const int expenses = upkeep - teams_[currentTeam_].towers().size();
const int income = teams_[currentTeam_].income() - maximum<int>(expenses,0);
const team_data data = calculate_team_data(teams_[currentTeam_],
currentTeam_+1,units_);
details << char(activeTeam_+1) << string_table["turn"] << ": "
<< status_.turn() << "/" << status_.number_of_turns() << "\n"
<< string_table["gold"] << ": "
<< teams_[currentTeam_].gold() << "\n"
<< string_table["villages"] << ": "
<< teams_[currentTeam_].towers().size() << "\n"
<< string_table["units"] << ": " << nunits << "\n"
<< string_table["upkeep"] << ": " << upkeep << "\n"
<< string_table["income"] << ": " << income << "\n";
<< string_table["gold"] << ": " << data.gold << "\n"
<< string_table["villages"] << ": " << data.villages << "\n"
<< string_table["units"] << ": " << data.units << "\n"
<< string_table["upkeep"] << ": " << data.upkeep << "\n"
<< string_table["income"] << ": " << data.net_income << "\n";
}
if(map_.on_board(mouseoverHex_)) {

View file

@ -248,6 +248,10 @@ void play_multiplayer(display& disp, game_data& units_data, config cfg,
//ensure we send a close game message to the server when we are done
network_game_manager game_manager;
//make sure the amount of gold we have for the game is 100
//later allow configuration of amount of gold
state.gold = 100;
std::vector<std::string> options;
std::vector<config*>& levels = cfg.children["multiplayer"];
std::map<int,std::string> res_to_id;

View file

@ -226,6 +226,7 @@ LEVEL_RESULT play_level(game_data& gameinfo, config& terrain_config,
config cfg;
turn_info turn_data;
const paths_wiper wiper(gui);
for(;;) {
network::connection res =
@ -297,7 +298,6 @@ LEVEL_RESULT play_level(game_data& gameinfo, config& terrain_config,
game_events::fire(event_stream.str());
}
std::map<int,int> expenditure;
for(unit_map::iterator i = units.begin();
i != units.end(); ++i) {
i->second.new_turn();

View file

@ -725,7 +725,7 @@ team_data calculate_team_data(const team& tm, int side, const unit_map& units)
res.upkeep = team_upkeep(units,side);
res.villages = tm.towers().size();
res.expenses = maximum<int>(0,res.upkeep - res.villages);
res.net_income = res.villages - res.expenses;
res.net_income = game_config::base_income + res.villages - res.expenses;
res.gold = tm.gold();
return res;
}