X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fnetwork.c;h=0b3c6a8f0b6c27be5385663fbb6311e4d3e5cd07;hb=6687b5314f1e08eb7364c0c5d753b96db18f6089;hp=6f06d610392aa6d6d3b36c11b2af5315254b6381;hpb=dad6457f2f778d11ad84e90d328981532d0ba0ea;p=rocksndiamonds.git diff --git a/src/network.c b/src/network.c index 6f06d610..0b3c6a8f 100644 --- a/src/network.c +++ b/src/network.c @@ -462,6 +462,8 @@ static void Handle_OP_YOUR_NUMBER() Error(ERR_EXIT, "sorry, more than %d players not allowed", MAX_PLAYERS); Error(ERR_NETWORK_CLIENT, "you get client # %d", new_client_nr); + + stored_player[new_index_nr].connected_network = TRUE; } static void Handle_OP_NUMBER_WANTED() @@ -618,8 +620,9 @@ static void Handle_OP_START_PLAYING() { Error(ERR_WARN, "no such level identifier: '%s'", new_leveldir_identifier); - new_leveldir = leveldir_first; - Error(ERR_WARN, "using default level set: '%s'", new_leveldir->identifier); + stop_network_game = TRUE; + + return; } printf("OP_START_PLAYING: %d\n", buffer[0]); @@ -822,6 +825,17 @@ static char *HandleNetworkingPackets() return NULL; } +static void FreeNetworkClientPlayerInfo(struct NetworkClientPlayerInfo *player) +{ + if (player == NULL) + return; + + if (player->next) + FreeNetworkClientPlayerInfo(player->next); + + checked_free(player); +} + static void HandleNetworkingDisconnect() { int i; @@ -838,6 +852,11 @@ static void HandleNetworkingDisconnect() for (i = 0; i < MAX_PLAYERS; i++) stored_player[i].connected_network = FALSE; + + FreeNetworkClientPlayerInfo(first_player.next); + + first_player.nr = 0; + first_player.next = NULL; } void HandleNetworking() @@ -859,6 +878,9 @@ void HandleNetworking() else { Request(error_message, REQ_CONFIRM); + + if (game_status == GAME_MODE_MAIN) + ClearNetworkPlayers(); } } }