X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fnetserv.c;h=08d161023dbf20312319899a9161b853bac9a1fd;hb=b876f418a4aaf55280b4b5da38c175997be01360;hp=21a48572d08af642fc09fbb42cd94630971fa0b6;hpb=c9433eab5c4317ed4f89164b386a7d33562e29be;p=rocksndiamonds.git diff --git a/src/netserv.c b/src/netserv.c index 21a48572..08d16102 100644 --- a/src/netserv.c +++ b/src/netserv.c @@ -20,11 +20,11 @@ #include #include #include -#include #include #include #include #include +#include /* apparently needed for OS/2 port */ #include "libgame/libgame.h" @@ -90,8 +90,9 @@ static void broadcast(struct NetworkServerPlayerInfo *except, realbuffer[0] = realbuffer[1] = realbuffer[2] = 0; realbuffer[3] = (unsigned char)len; - for (player=first_player; player; player=player->next) - if (player != except && (player->active || !activeonly) && player->introduced) + for (player = first_player; player; player = player->next) + if (player != except && player->introduced && + (player->active || !activeonly)) addtobuffer(player, realbuffer, 4 + len); } @@ -114,7 +115,7 @@ static void RemovePlayer(struct NetworkServerPlayerInfo *player) first_player = player->next; else { - for (v=first_player; v; v=v->next) + for (v = first_player; v; v = v->next) { if (v->next && v->next == player) { @@ -150,6 +151,7 @@ static void AddPlayer(int fd) { struct NetworkServerPlayerInfo *player, *v; unsigned char nxn; + boolean again = TRUE; player = checked_malloc(sizeof (struct NetworkServerPlayerInfo)); @@ -167,9 +169,28 @@ static void AddPlayer(int fd) nxn = 1; +#if 1 + while (again) + { + again = FALSE; + v = player->next; + + while (v) + { + if (v->number == nxn) + { + nxn++; + + again = TRUE; + break; + } + v = v->next; + } + } +#else again: v = player->next; - while(v) + while (v) { if (v->number == nxn) { @@ -178,6 +199,7 @@ static void AddPlayer(int fd) } v = v->next; } +#endif player->number = nxn; if (options.verbose) @@ -234,7 +256,7 @@ static void Handle_OP_NUMBER_WANTED(struct NetworkServerPlayerInfo *player) Error(ERR_NETWORK_SERVER, "client %d (%s) wants to switch to # %d", player->number, player->player_name, nr_wanted); - for (v=first_player; v; v=v->next) + for (v = first_player; v; v = v->next) { if (v->number == nr_wanted) { @@ -282,7 +304,7 @@ static void Handle_OP_PLAYER_NAME(struct NetworkServerPlayerInfo *player, len=16; memcpy(player->player_name, &buffer[2], len-2); player->player_name[len-2] = 0; - for (i=0; iplayer_name[i] < ' ' || ((unsigned char)(player->player_name[i]) > 0x7e && @@ -308,7 +330,7 @@ static void Handle_OP_PLAYER_NAME(struct NetworkServerPlayerInfo *player, if (!player->introduced) { - for (v=first_player; v; v=v->next) + for (v = first_player; v; v = v->next) { if (v != player && v->introduced) { @@ -337,7 +359,7 @@ static void Handle_OP_START_PLAYING(struct NetworkServerPlayerInfo *player) (buffer[4] << 8) + buffer[5], &buffer[6]); - for (w=first_player; w; w=w->next) + for (w = first_player; w; w = w->next) if (w->introduced) w->active = 1; @@ -345,7 +367,7 @@ static void Handle_OP_START_PLAYING(struct NetworkServerPlayerInfo *player) ServerFrameCounter = 0; /* reset player actions */ - for (v=first_player; v; v=v->next) + for (v = first_player; v; v = v->next) { v->action = 0; v->action_received = FALSE; @@ -378,14 +400,14 @@ static void Handle_OP_STOP_PLAYING(struct NetworkServerPlayerInfo *player) broadcast(NULL, 2, 0); } -static void Handle_OP_MOVE_FIGURE(struct NetworkServerPlayerInfo *player) +static void Handle_OP_MOVE_PLAYER(struct NetworkServerPlayerInfo *player) { struct NetworkServerPlayerInfo *v; int last_client_nr = 0; int i; /* store player action */ - for (v=first_player; v; v=v->next) + for (v = first_player; v; v = v->next) { if (v->number == player->number) { @@ -395,7 +417,7 @@ static void Handle_OP_MOVE_FIGURE(struct NetworkServerPlayerInfo *player) } /* check if server received action from each player */ - for (v=first_player; v; v=v->next) + for (v = first_player; v; v = v->next) { if (!v->action_received) return; @@ -405,11 +427,11 @@ static void Handle_OP_MOVE_FIGURE(struct NetworkServerPlayerInfo *player) } /* initialize all player actions to zero */ - for (i=0; inext) + for (v = first_player; v; v = v->next) { buffer[6 + v->number-1] = v->action; v->action = 0; @@ -478,8 +500,8 @@ void NetworkServer(int port, int serveronly) if (is_daemon) { /* become a daemon, breaking all ties with the controlling terminal */ - options.verbose = 0; - for (i=0; i<255; i++) + options.verbose = FALSE; + for (i = 0; i < 255; i++) { if (i != lfd) close(i); @@ -505,11 +527,11 @@ void NetworkServer(int port, int serveronly) PROTOCOL_VERSION_1, PROTOCOL_VERSION_2, PROTOCOL_VERSION_3); } - while(1) + while (1) { interrupt = 0; - for (player=first_player; player; player=player->next) + for (player = first_player; player; player = player->next) flushuser(player); FD_ZERO(&fds); @@ -636,8 +658,8 @@ void NetworkServer(int port, int serveronly) Handle_OP_STOP_PLAYING(player); break; - case OP_MOVE_FIGURE: - Handle_OP_MOVE_FIGURE(player); + case OP_MOVE_PLAYER: + Handle_OP_MOVE_PLAYER(player); break; case OP_BROADCAST_MESSAGE: