diff -Nur -Xsnap/diff_ignore snap/server/connecthand.c snap-unames/server/connecthand.c --- snap/server/connecthand.c 2003-07-25 23:21:28.000000000 -0500 +++ snap-unames/server/connecthand.c 2003-07-27 21:21:33.000000000 -0500 @@ -703,6 +703,7 @@ if (!pconn->observer) { sz_strlcpy(pplayer->username, pconn->username); + sz_strlcpy(pplayer->name, pconn->username); pplayer->is_connected = TRUE; } diff -Nur -Xsnap/diff_ignore snap/server/stdinhand.c snap-unames/server/stdinhand.c --- snap/server/stdinhand.c 2003-07-25 23:21:29.000000000 -0500 +++ snap-unames/server/stdinhand.c 2003-07-27 21:39:08.000000000 -0500 @@ -3138,11 +3138,9 @@ was_connected = pplayer->is_connected; - /* FIXME: remove when multiconnect becomes mature */ conn_list_iterate(pplayer->connections, aconn) { cmd_reply(CMD_TAKE, caller, C_FAIL, - _("%s already controls or observes %s.\n" - " multiple controlling connections aren't allowed yet."), + _("%s already controls or observes %s.\n"), pplayer->username, pplayer->name); goto end; } conn_list_iterate_end; @@ -3181,15 +3179,11 @@ cmd_reply(CMD_TAKE, caller, C_COMMENT, _("%s detaching from %s"), pconn->username, old_plr->name); - /* only remove the player if the game is new and in pregame, nobody - * is connected to it anymore and it wasn't AI-controlled. */ - if (!old_plr->is_connected && game.is_new_game && !old_plr->ai.control - && (server_state == PRE_GAME_STATE - || server_state == SELECT_RACES_STATE)) { - - /* debugging, should we keep this around? */ - cmd_reply(CMD_TAKE, caller, C_COMMENT, - _("removing %s [%d]"), old_plr->name, old_plr->player_no); + /* only remove the player if the game is new and in pregame + * and nobody is connected to it anymore */ + if (!old_plr->is_connected && game.is_new_game + && (server_state == PRE_GAME_STATE + || server_state == SELECT_RACES_STATE)) { game_remove_player(old_plr); game_renumber_players(old_plr->player_no); @@ -3214,6 +3208,12 @@ send_packet_generic_empty(pconn, PACKET_START_TURN); } + /* in pregame, always switch player to human */ + if (pplayer->ai.control && (server_state == PRE_GAME_STATE + || server_state == SELECT_RACES_STATE)) { + toggle_ai_player_direct(NULL, pplayer); + } + /* if the player we're taking was already connected, then the primary * controller set that player to ai control. don't undo that decision */ if (!was_connected && pplayer->ai.control && game.auto_ai_toggle) {