+static void Handle_OP_NUMBER_WANTED()
+{
+ int client_nr_wanted = buf[2];
+ int old_client_nr = buf[0];
+ int new_client_nr = buf[3];
+ int old_index_nr = old_client_nr - 1;
+ int new_index_nr = new_client_nr - 1;
+ int index_nr_wanted = client_nr_wanted - 1;
+ struct PlayerInfo *old_player = &stored_player[old_index_nr];
+ struct PlayerInfo *new_player = &stored_player[new_index_nr];
+
+ printf("OP_NUMBER_WANTED: %d\n", buf[0]);
+
+ if (new_client_nr == client_nr_wanted) /* switching succeeded */
+ {
+ struct user *u;
+
+ if (old_client_nr != client_nr_wanted) /* client's nr has changed */
+ {
+ sprintf(msgbuf, "client %d switches to # %d",
+ old_client_nr, new_client_nr);
+ sysmsg(msgbuf);
+ }
+ else if (old_client_nr == me.nr) /* local player keeps his nr */
+ {
+ sprintf(msgbuf, "keeping client # %d", new_client_nr);
+ sysmsg(msgbuf);
+ }
+
+ if (old_client_nr != new_client_nr)
+ {
+ /* copy existing player settings and change to new player */
+
+ *new_player = *old_player;
+ old_player->connected = FALSE;
+ }
+
+ u = finduser(old_client_nr);
+ u->nr = new_client_nr;
+
+ if (old_player == local_player) /* local player switched */
+ local_player = new_player;
+
+
+ TestPlayer = new_index_nr;
+ }
+ else if (old_client_nr == me.nr) /* failed -- local player? */
+ {
+ char *color[] = { "yellow", "red", "green", "blue" };
+
+ sprintf(msgbuf, "Sorry ! %s player still exists ! You are %s player !",
+ color[index_nr_wanted], color[new_index_nr]);
+ Request(msgbuf, REQ_CONFIRM);
+
+ sprintf(msgbuf, "cannot switch -- you keep client # %d",
+ new_client_nr);
+ sysmsg(msgbuf);
+ }
+}
+
+static void Handle_OP_NICKNAME(unsigned int len)
+{
+ struct user *u;
+
+ printf("OP_NICKNAME: %d\n", buf[0]);
+ u = finduser(buf[0]);
+ buf[len] = 0;
+ sprintf(msgbuf, "client %d calls itself \"%s\"", buf[0], &buf[2]);
+ sysmsg(msgbuf);
+ strncpy(u->name, &buf[2], MAXNICKLEN);
+}
+
+static void Handle_OP_PLAYER_CONNECTED()