Fixes for players controlling multiple sides.

This commit is contained in:
Jon Daniel 2005-06-08 21:10:39 +00:00
parent 5d2f9a4ddc
commit 1046e7a894
3 changed files with 13 additions and 10 deletions

View file

@ -153,7 +153,9 @@ bool game::take_side(network::connection player, const config& cfg)
side_controllers_[side_index] = "network";
sides_.insert(std::pair<network::connection, size_t>(player, side_index));
sides_taken_[side_index] = true;
network::queue_data(cfg, players_.front());
config new_cfg = cfg;
new_cfg["side"] = (**i)["side"];
network::queue_data(new_cfg, players_.front());
return true;
}
}
@ -172,6 +174,7 @@ bool game::take_side(network::connection player, const config& cfg)
void game::update_side_data()
{
sides_taken_.clear();
sides_taken_.resize(9);
sides_.clear();
const config::child_itors level_sides = level_.child_range("side");
@ -204,7 +207,7 @@ void game::update_side_data()
if((**sd)["controller"] == "network") {
side_controllers_[side_index] = "network";
if((**sd)["description"] == info->second.name()) {
if((**sd)["user_description"] == info->second.name()) {
sides_.insert(std::pair<network::connection, size_t>(*player, side_index));
sides_taken_[side_index] = true;
}
@ -216,7 +219,7 @@ void game::update_side_data()
side_controllers_[side_index] = "ai";
sides_taken_[side_index] = true;
}
else if((**sd)["controller"] == "human"){
else if((**sd)["controller"] == "human") {
sides_taken_[side_index] = true;
side_controllers_[side_index] = "human";
}
@ -270,17 +273,17 @@ const std::string& game::transfer_side_control(const config& cfg)
return not_during_turn;
}
}
sides_.insert(std::pair<network::connection,size_t>(*i, side_index));
side_controllers_[side_index] = "network";
sides_taken_[side_index] = true;
sides_.insert(std::pair<const network::connection,size_t>(*i, side_index));
// send a response to the host and to the new controller
config response;
config& change = response.add_child("change_controller");
change["side"] = side;
change["controller"] = "network";
change["controller"] = "network";
network::queue_data(response,players_.front());
change["controller"] = "human";
@ -292,7 +295,6 @@ const std::string& game::transfer_side_control(const config& cfg)
observer_quit.add_child("observer_quit").values["name"] = player;
send_data(observer_quit);
}
static const std::string success = "";
return success;
}
@ -450,6 +452,7 @@ void game::remove_player(network::connection player, bool notify_creator)
{
const std::vector<network::connection>::iterator itor =
std::find(players_.begin(),players_.end(),player);
if(itor != players_.end())
players_.erase(itor);

View file

@ -110,7 +110,7 @@ private:
static int id_num;
int id_;
std::vector<network::connection> players_;
std::map<network::connection,size_t> sides_;
std::multimap<network::connection,size_t> sides_;
std::vector<bool> sides_taken_;
std::vector<std::string> side_controllers_;
bool started_;

View file

@ -599,7 +599,7 @@ void server::process_data_from_player_in_game(const network::connection sock, co
const config& msg = construct_server_message("You have been banned",*g);
network::send_data(msg, pl->first);
} else {
g->remove_player(pl->first, false);
g->remove_player(pl->first);
}
config leave_game;