+ 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);
+ Error(ERR_NETWORK_CLIENT, "client %d (%s) disconnected",
+ player_nr, getNetworkPlayerName(buffer[0]));
+
+ for (player = &first_player; player; player = player->next)
+ 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()
+{
+ LevelDirTree *new_leveldir;
+ int new_level_nr;
+ unsigned int new_random_seed;
+ char *new_leveldir_identifier;
+
+ new_level_nr = (buffer[2] << 8) + buffer[3];
+ new_random_seed =
+ (buffer[6] << 24) | (buffer[7] << 16) | (buffer[8] << 8) | (buffer[9]);
+ new_leveldir_identifier = (char *)&buffer[10];
+
+ new_leveldir = getTreeInfoFromIdentifier(leveldir_first,
+ new_leveldir_identifier);
+ if (new_leveldir == NULL)
+ {
+ 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);
+ }
+
+ printf("OP_START_PLAYING: %d\n", buffer[0]);
+ Error(ERR_NETWORK_CLIENT,
+ "client %d starts game [level %d from level identifier '%s']\n",
+ buffer[0], new_level_nr, new_leveldir->identifier);
+
+ leveldir_current = new_leveldir;
+ level_nr = new_level_nr;