+static void Handle_OP_BAD_PROTOCOL_VERSION()
+{
+ Error(ERR_RETURN, "protocol version mismatch");
+ Error(ERR_EXIT, "server expects %d.%d.x instead of %d.%d.%d",
+ buf[2], buf[3], PROT_VERS_1, PROT_VERS_2, PROT_VERS_3);
+}
+
+static void Handle_OP_YOUR_NUMBER()
+{
+ int new_client_nr = buf[2];
+ int new_index_nr = new_client_nr - 1;
+
+ printf("OP_YOUR_NUMBER: %d\n", buf[0]);
+ me.nr = new_client_nr;
+
+ stored_player[new_index_nr] = *local_player;
+ local_player = &stored_player[new_index_nr];
+
+ TestPlayer = new_index_nr;
+
+ if (me.nr > MAX_PLAYERS)
+ Error(ERR_EXIT, "sorry - no more than %d players", MAX_PLAYERS);
+
+ sprintf(msgbuf, "you get client # %d", new_client_nr);
+ sysmsg(msgbuf);
+}
+
+static void Handle_OP_NUMBER_WANTED()
+{
+ int client_nr_wanted = buf[2];
+ int new_client_nr = buf[3];
+ int new_index_nr = new_client_nr - 1;
+
+ printf("OP_NUMBER_WANTED: %d\n", buf[0]);
+
+ if (new_client_nr != client_nr_wanted)
+ {
+ char *color[] = { "yellow", "red", "green", "blue" };
+
+ sprintf(msgbuf, "Sorry ! You are %s player !",
+ color[new_index_nr]);
+ Request(msgbuf, REQ_CONFIRM);
+
+ sprintf(msgbuf, "cannot switch -- you keep client # %d",
+ new_client_nr);
+ sysmsg(msgbuf);
+ }
+ else
+ {
+ if (me.nr != client_nr_wanted)
+ sprintf(msgbuf, "switching to client # %d", new_client_nr);
+ else
+ sprintf(msgbuf, "keeping client # %d", new_client_nr);
+ sysmsg(msgbuf);
+
+ me.nr = new_client_nr;
+
+ stored_player[new_index_nr] = *local_player;
+ local_player = &stored_player[new_index_nr];
+
+ TestPlayer = new_index_nr;
+ }
+}
+
+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()