X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fnetwork.c;h=b51402eb7299e7cb299018f9deebb74d2187b8c7;hp=e62df4ce2d5e596a963f1a03959a63db5c5156e9;hb=70fe541d68f18a22eb3bd134f128c0d56b885701;hpb=3ff2e8a0b5c27b99a9920bdf5ed82bc41bf40181 diff --git a/src/network.c b/src/network.c index e62df4ce..b51402eb 100644 --- a/src/network.c +++ b/src/network.c @@ -98,7 +98,7 @@ char *getNetworkPlayerName(int player_nr) return("you"); else for (player = &first_player; player; player = player->next) - if (player->nr == player_nr && player->name && strlen(player->name)) + if (player->nr == player_nr && strlen(player->name) > 0) return(player->name); return(EMPTY_PLAYER_NAME); @@ -275,11 +275,15 @@ static void Handle_OP_YOUR_NUMBER() if (old_local_player != new_local_player) { - /* copy existing player settings and change to new player */ + /* set relevant player settings and change to new player */ - *new_local_player = *old_local_player; - old_local_player->connected = FALSE; local_player = new_local_player; + + old_local_player->connected_locally = FALSE; + new_local_player->connected_locally = TRUE; + + old_local_player->connected_network = FALSE; + new_local_player->connected_network = TRUE; } if (first_player.nr > MAX_PLAYERS) @@ -313,17 +317,22 @@ static void Handle_OP_NUMBER_WANTED() if (old_client_nr != new_client_nr) { - /* copy existing player settings and change to new player */ + /* set relevant player settings and change to new player */ - *new_player = *old_player; - old_player->connected = FALSE; + old_player->connected_network = FALSE; + new_player->connected_network = TRUE; } player = getNetworkPlayer(old_client_nr); player->nr = new_client_nr; if (old_player == local_player) /* local player switched */ + { local_player = new_player; + + old_player->connected_locally = FALSE; + new_player->connected_locally = TRUE; + } } else if (old_client_nr == first_player.nr) /* failed -- local player? */ { @@ -375,13 +384,14 @@ static void Handle_OP_PLAYER_CONNECTED() player->name[0] = '\0'; player->next = NULL; - stored_player[new_index_nr].connected = TRUE; + stored_player[new_index_nr].connected_network = TRUE; } static void Handle_OP_PLAYER_DISCONNECTED() { struct NetworkClientPlayerInfo *player, *player_disconnected; int player_nr = (int)buffer[0]; + int index_nr = player_nr - 1; printf("OP_PLAYER_DISCONNECTED: %d\n", player_nr); player_disconnected = getNetworkPlayer(player_nr); @@ -392,6 +402,9 @@ static void Handle_OP_PLAYER_DISCONNECTED() if (player->next == player_disconnected) player->next = player_disconnected->next; free(player_disconnected); + + stored_player[index_nr].connected_locally = FALSE; + stored_player[index_nr].connected_network = FALSE; } static void Handle_OP_START_PLAYING() @@ -464,7 +477,8 @@ static void Handle_OP_STOP_PLAYING() Request("Network game stopped!", REQ_CONFIRM); } - game_status = GAME_MODE_MAIN; + SetGameStatus(GAME_MODE_MAIN); + DrawMainMenu(); } @@ -494,7 +508,7 @@ static void Handle_OP_MOVE_PLAYER(unsigned int len) /* copy valid player actions */ for (i = 0; i < MAX_PLAYERS; i++) stored_player[i].effective_action = - (i < len - 6 && stored_player[i].active ? buffer[6 + i] : 0); + (i < len - 6 ? buffer[6 + i] : 0); network_player_action_received = TRUE; }