Author: martinxyz
Date: Sun Apr 6 09:56:14 2008
New Revision: 25612
URL: http://svn.gna.org/viewcvs/wesnoth?rev=25612&view=rev
Log:
this should fix bug #11281
If two players join at once the loser gets no longer kicked.
Also inform early observers via message.
Modified:
branches/1.4/src/server/game.cpp
branches/1.4/src/server/game.hpp
Modified: branches/1.4/src/server/game.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/branches/1.4/src/server/game.cpp?rev=25612&r1=25611&r2=25612&view=diff
==============================================================================
--- branches/1.4/src/server/game.cpp (original)
+++ branches/1.4/src/server/game.cpp Sun Apr 6 09:56:14 2008
@@ -202,6 +202,7 @@
{
side_num = (**side)["side"].to_int();
if (side_num < 1 || side_num > gamemap::MAX_PLAYERS)
continue;
+ if (sides_taken_[side_num - 1]) continue;
side_controllers_[side_num - 1] = "network";
sides_[side_num - 1] = user->first;
sides_taken_[side_num - 1] = true;
@@ -210,6 +211,7 @@
simple_wml::string_span data = cfg.output_compressed();
network::send_raw_data(data.begin(), data.size(),
owner_);
+ DBG_GAME << "take_side: took side " << side_num << "
because the name matched\n";
DBG_GAME << debug_player_info();
return true;
}
@@ -222,6 +224,8 @@
side_num = (**side)["side"].to_int();
} catch (bad_lexical_cast&) { continue; }
if (side_num < 1 || side_num > gamemap::MAX_PLAYERS)
continue;
+ if (sides_taken_[side_num - 1]) continue;
+ // we expect that the host will really use our proposed
side number (he could do different)
side_controllers_[side_num - 1] = "network";
sides_[side_num - 1] = user->first;
sides_taken_[side_num - 1] = true;
@@ -229,10 +233,12 @@
// Tell the host which side the new player should take.
simple_wml::string_span data = cfg.output_compressed();
network::send_raw_data(data.begin(), data.size(),
owner_);
+ DBG_GAME << "take_side: took the first free network
side which was " << side_num << "\n";
DBG_GAME << debug_player_info();
return true;
}
}
+ DBG_GAME << "take_side: there are no more sides available\n";
//if we get here we couldn't find a side to take
return false;
}
@@ -855,7 +861,7 @@
return true;
}
-void game::add_player(const network::connection player, const bool observer) {
+void game::add_player(const network::connection player, bool observer) {
if(is_member(player)) {
ERR_GAME << "ERROR: Player is already in this game. (socket: "
<< player << ")\n";
@@ -882,6 +888,7 @@
} else if (!allow_observers()) {
return; //false;
} else {
+ observer = true;
DBG_GAME << "adding observer...\n";
observers_.push_back(player);
@@ -910,6 +917,11 @@
} else {
send_user_list();
}
+
+ if (observer && end_turn_ == 0) {
+ // in case someone took the last slot right before this player
+ send_server_message("You are an observer.", player);
+ }
}
//! Removes a user from the game.
Modified: branches/1.4/src/server/game.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/branches/1.4/src/server/game.hpp?rev=25612&r1=25611&r2=25612&view=diff
==============================================================================
--- branches/1.4/src/server/game.hpp (original)
+++ branches/1.4/src/server/game.hpp Sun Apr 6 09:56:14 2008
@@ -59,7 +59,7 @@
//! Ban and kick a user by name. He doesn't need to be in this game.
network::connection ban_user(const simple_wml::node& ban, const
player_map::const_iterator banner);
- void add_player(const network::connection player, const bool observer =
false);
+ void add_player(const network::connection player, bool observer =
false);
bool remove_player(const network::connection player, const bool
disconnect=false);
//! Adds players and observers into one vector and returns that.
_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits