X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fnetwork.c;h=657c796b7cfd30d7b5951ab686f82d3ba3f04a48;hb=80a611519cc20b404bce7fc5dc6d321b082f99d2;hp=010e8b33f6c6bef3931c50b2cf5884ca0b52575c;hpb=d5a1ec86f68d4b1bf514d60f2245c1894f7295a9;p=rocksndiamonds.git diff --git a/src/network.c b/src/network.c index 010e8b33..657c796b 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() @@ -518,6 +520,9 @@ static void Handle_OP_NUMBER_WANTED() Error(ERR_NETWORK_CLIENT, "cannot switch -- you keep client # %d", new_client_nr); } + + if (game_status == GAME_MODE_MAIN) + DrawNetworkPlayers(); } static void Handle_OP_PLAYER_NAME(unsigned int len) @@ -591,6 +596,10 @@ static void Handle_OP_PLAYER_DISCONNECTED() DrawMainMenu(); } + else if (game_status == GAME_MODE_MAIN) + { + DrawNetworkPlayers(); + } } static void Handle_OP_START_PLAYING() @@ -669,11 +678,11 @@ static void Handle_OP_STOP_PLAYING() if (buffer[2] != NETWORK_STOP_BY_PLAYER || stopped_by_remote_player) Request(message, REQ_CONFIRM | REQ_STAY_CLOSED); - } - SetGameStatus(GAME_MODE_MAIN); + SetGameStatus(GAME_MODE_MAIN); - DrawMainMenu(); + DrawMainMenu(); + } } static void Handle_OP_MOVE_PLAYER(unsigned int len) @@ -815,6 +824,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; @@ -831,6 +851,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() @@ -852,6 +877,9 @@ void HandleNetworking() else { Request(error_message, REQ_CONFIRM); + + if (game_status == GAME_MODE_MAIN) + ClearNetworkPlayers(); } } }