fixed placement of sides in their preferred locations to work;

fixed memory leaks in random side code
This commit is contained in:
Dave White 2004-05-03 22:08:46 +00:00
parent 6218bfd499
commit ef359fbe39
4 changed files with 38 additions and 34 deletions

View file

@ -305,6 +305,11 @@ ggggggggggggggggggggffffffffffffffffff
name=Default
id=era_default
[multiplayer_side]
name=&random-enemy.png,Random
type=random
[/multiplayer_side]
[multiplayer_side]
name=&human-general.png,Loyalists
type=General
@ -355,6 +360,11 @@ id=era_default
name=Classic
id=era_classic
[multiplayer_side]
name=&random-enemy.png,Random
type=random
[/multiplayer_side]
[multiplayer_side]
name=&human-general.png,Humans
type=General
@ -405,6 +415,11 @@ id=era_classic
name=Age of Heroes
id=era_heroes
[multiplayer_side]
name=&random-enemy.png,Random
type=random
[/multiplayer_side]
[multiplayer_side]
name=&human-general.png,Loyalists
type=General

View file

@ -389,11 +389,7 @@ void play_multiplayer_client(display& disp, game_data& units_data, config& cfg,
return;
}
config::child_list possible_sides = era_cfg->get_children("multiplayer_side");
config* random = new config();
(*random)["name"]="&random-enemy.png,Random";
possible_sides.insert(possible_sides.begin(),random);
const config::child_list& possible_sides = era_cfg->get_children("multiplayer_side");
if(possible_sides.empty()) {
std::cerr << "no multiplayer sides found\n";

View file

@ -180,10 +180,7 @@ int mp_connect::load_map(const std::string& era, int map, int num_turns, int vil
return -1;
}
config::child_list possible_sides = era_cfg->get_children("multiplayer_side");
config* random = new config();
(*random)["name"]="&random-enemy.png,Random";
possible_sides.insert(possible_sides.begin(),random);
const config::child_list& possible_sides = era_cfg->get_children("multiplayer_side");
if(sides.first == sides.second || possible_sides.empty()) {
gui::show_dialog(*disp_, NULL, "",
@ -233,6 +230,9 @@ int mp_connect::load_map(const std::string& era, int map, int num_turns, int vil
if(side["music"].empty())
side["music"] = (*possible_sides.front())["music"];
if(side["terrain_liked"].empty())
side["terrain_liked"] = (*possible_sides.front())["terrain_liked"];
if(side["recruitment_pattern"].empty())
side["recruitment_pattern"] = possible_sides.front()->values["recruitment_pattern"];
}
@ -271,10 +271,7 @@ void mp_connect::lists_init()
return;
}
config::child_list possible_sides = era_cfg->get_children("multiplayer_side");
config* random = new config();
(*random)["name"]="&random-enemy.png,Random";
possible_sides.insert(possible_sides.begin(),random);
const config::child_list& possible_sides = era_cfg->get_children("multiplayer_side");
for(std::vector<config*>::const_iterator race = possible_sides.begin();
race != possible_sides.end(); ++race) {
@ -534,12 +531,7 @@ lobby::RESULT mp_connect::process()
return lobby::QUIT;
}
config::child_list possible_sides = era_cfg->get_children("multiplayer_side");
config* random = new config();
(*random)["name"]="&random-enemy.png,Random";
possible_sides.insert(possible_sides.begin(),random);
const config::child_list& possible_sides = era_cfg->get_children("multiplayer_side");
const config::child_itors sides = level_->child_range("side");
@ -547,6 +539,8 @@ lobby::RESULT mp_connect::process()
const int mouse_flags = SDL_GetMouseState(&mousex,&mousey);
const bool left_button = mouse_flags&SDL_BUTTON_LMASK;
bool start_game = false;
bool level_changed = false;
for(size_t n = 0; n != combos_team_.size(); ++n) {
@ -665,30 +659,24 @@ lobby::RESULT mp_connect::process()
const config::child_list& real_sides = era_cfg->get_children("multiplayer_side");
for(config::child_iterator side = sides.first; side != sides.second; ++side) {
if((**side)["name"]=="&random-enemy.png,Random") {
int choice = rand()%real_sides.size();
int ntry = 0;
while((**side)["type"] == "random" && ntry < 1000) {
const int choice = rand()%real_sides.size();
(**side)["name"] = (*real_sides[choice])["name"];
(**side)["type"] = (*real_sides[choice])["type"];
(**side)["recruit"] = (*real_sides[choice])["recruit"];
(**side)["music"] = (*real_sides[choice])["music"];
(**side)["recruitment_pattern"] = real_sides[choice]->values["recruitment_pattern"];
(**side)["terrain_liked"] = (*real_sides[choice])["terrain_liked"];
level_changed = true;
++ntry;
}
}
if(level_changed) {
config diff;
diff.add_child("scenario_diff",level_->get_diff(old_level_));
network::send_data(diff);
old_level_ = *level_;
}
return lobby::CREATE;
start_game = true;
}
if(level_changed) {
@ -700,6 +688,10 @@ lobby::RESULT mp_connect::process()
old_level_ = *level_;
}
if(start_game) {
return lobby::CREATE;
}
gui_update();
update_positions();
update_network();
@ -866,6 +858,7 @@ void mp_connect::update_network()
pos->first->values["type"] = cfg["type"];
pos->first->values["recruit"] = cfg["recruit"];
pos->first->values["music"] = cfg["music"];
pos->first->values["terrain_liked"] = cfg["terrain_liked"];
pos->second = sock;
network::send_data(*level_);

View file

@ -48,7 +48,7 @@ namespace {
}
}
}
}
}z
return (100*liked)/positions;
}