diff -Nurd -x*.[Poa] -x*.orig -x *.rej -x*.bak -x*.pot -x*.deps -x Makefile -xlibintl.h -xFreeciv.h -xpo -xintl freeciv/server/civserver.c freeciv-mar6+firstlevel/server/civserver.c --- freeciv/server/civserver.c Sat Mar 4 16:14:59 2000 +++ freeciv-mar6+firstlevel/server/civserver.c Tue Mar 7 21:27:16 2000 @@ -1365,6 +1365,7 @@ sz_strlcpy(pplayer->username, name); pplayer->conn = pconn; pplayer->is_connected = (pconn!=NULL); + if (pconn) { sz_strlcpy(pplayer->addr, pconn->addr); join_game_accept(pplayer, 0); diff -Nurd -x*.[Poa] -x*.orig -x *.rej -x*.bak -x*.pot -x*.deps -x Makefile -xlibintl.h -xFreeciv.h -xpo -xintl freeciv/server/sernet.c freeciv-mar6+firstlevel/server/sernet.c --- freeciv/server/sernet.c Sun Mar 5 17:52:05 2000 +++ freeciv-mar6+firstlevel/server/sernet.c Tue Mar 7 21:24:03 2000 @@ -282,7 +282,7 @@ connections[i].buffer.ndata=0; connections[i].first_packet=1; connections[i].byte_swap=0; - connections[i].access_level=default_access_level; + connections[i].access_level=(i?default_access_level:first_access_level); if (from) sz_strlcpy(connections[i].addr, from->h_name); diff -Nurd -x*.[Poa] -x*.orig -x *.rej -x*.bak -x*.pot -x*.deps -x Makefile -xlibintl.h -xFreeciv.h -xpo -xintl freeciv/server/stdinhand.c freeciv-mar6+firstlevel/server/stdinhand.c --- freeciv/server/stdinhand.c Tue Feb 15 15:21:10 2000 +++ freeciv-mar6+firstlevel/server/stdinhand.c Tue Mar 7 22:28:56 2000 @@ -56,6 +56,7 @@ extern int metaserver_port; enum cmdlevel_id default_access_level = ALLOW_INFO; +enum cmdlevel_id first_access_level = ALLOW_INFO; static void cut_player_connection(struct player *caller, char *playername); static void quit_game(struct player *caller); @@ -857,6 +858,7 @@ N_("cmdlevel\n" "cmdlevel \n" "cmdlevel new\n" + "cmdlevel first\n" "cmdlevel "), N_("Query or set command-level access."), N_("The command-level controls which server commands are available to " @@ -868,7 +870,9 @@ "With no arguments, the current command-levels are reported.\n" "With a single argument, the level is set for all existing " "connections, and the default is set for future connections.\n" - "If 'new' is specified, the default level is set for future connections.\n" + "If 'new' is specified, the level is set for newly connecting players.\n" + "If 'first' is specified, the level is set for newly connecting players\n" + "connecting at a time when nobody else is connected.\n" "If a player name is specified, the level is set for that player only.\n" "Command-levels do not persist if a player disconnects, " "because some untrusted person could reconnect as that player.") @@ -1510,9 +1514,12 @@ /* first, some state info from commands (we can't save everything) */ - fprintf(script_file, "cmdlevel %s\n", + fprintf(script_file, "cmdlevel %s new\n", cmdlevel_name(default_access_level)); + fprintf(script_file, "cmdlevel %s first\n", + cmdlevel_name(first_access_level)); + fprintf(script_file, "%s\n", (game.skill_level <= 3) ? "easy" : (game.skill_level >= 6) ? "hard" : @@ -1628,8 +1635,11 @@ } } cmd_reply(CMD_CMDLEVEL, caller, C_COMMENT, - _("Default command level for new connections: %s"), + _("Command level for new connections: %s"), cmdlevel_name(default_access_level)); + cmd_reply(CMD_CMDLEVEL, caller, C_COMMENT, + _("Command level for first connections: %s"), + cmdlevel_name(first_access_level)); return; } @@ -1679,10 +1689,16 @@ pplayer->name); } } + if (level < first_access_level) { + first_access_level = level; + cmd_reply(CMD_CMDLEVEL, caller, C_OK, + _("first connection command access level also lowered to '%s'"), + cmdlevel_name(level)); + } } default_access_level = level; cmd_reply(CMD_CMDLEVEL, caller, C_OK, - _("Default command access level set to '%s'."), + _("default command access level set to '%s'"), cmdlevel_name(level)); notify_player(0, _("Game: All players now have access level '%s'."), cmdlevel_name(level)); @@ -1694,6 +1710,26 @@ cmdlevel_name(level)); notify_player(0, _("Game: New connections will have access level '%s'."), cmdlevel_name(level)); + if (level < first_access_level) { + first_access_level = level; + cmd_reply(CMD_CMDLEVEL, caller, C_OK, + _("first connection command access level also lowered to '%s'"), + cmdlevel_name(level)); + } + } + else if (strcmp(arg_name,"first") == 0) { + first_access_level = level; + cmd_reply(CMD_CMDLEVEL, caller, C_OK, + _("first connection command access level set to '%s'"), + cmdlevel_name(level)); + notify_player(0, _("Game: First connections will have access level '%s'."), + cmdlevel_name(level)); + if (level < default_access_level) { + default_access_level = level; + cmd_reply(CMD_CMDLEVEL, caller, C_OK, + _("default command access level also lowered to '%s'"), + cmdlevel_name(level)); + } } else if ((pplayer=find_player_by_name_prefix(arg_name,&match_result))) { if (!pplayer->conn) { diff -Nurd -x*.[Poa] -x*.orig -x *.rej -x*.bak -x*.pot -x*.deps -x Makefile -xlibintl.h -xFreeciv.h -xpo -xintl freeciv/server/stdinhand.h freeciv-mar6+firstlevel/server/stdinhand.h --- freeciv/server/stdinhand.h Fri Nov 19 17:30:13 1999 +++ freeciv-mar6+firstlevel/server/stdinhand.h Tue Mar 7 21:24:54 2000 @@ -24,6 +24,7 @@ extern void set_ai_level_directer(struct player *pplayer, int level); extern void read_init_script(char *script_filename); -extern enum cmdlevel_id default_access_level; +extern enum cmdlevel_id default_access_level; /* for sernet.c in */ +extern enum cmdlevel_id first_access_level; /* initing a new connection */ #endif /* FC__STDINHAND_H */