- case OP_PLAYER_CONNECTED:
- printf("OP_PLAYER_CONNECTED: %d\n", buf[0]);
- sprintf(msgbuf, "new client %d connected", buf[0]);
- sysmsg(msgbuf);
-
- for (u = &me; u; u = u->next)
- {
- if (u->nr == buf[0])
- Error(ERR_EXIT, "multiplayer server sent duplicate player id");
- else
- v = u;
- }
-
- v->next = u = mmalloc(sizeof(struct user));
- u->nr = buf[0];
- u->name[0] = '\0';
- u->next = NULL;
+static void Handle_OP_PLAYER_DISCONNECTED()
+{
+ struct NetworkClientPlayerInfo *player, *player_disconnected;
+ int player_nr = (int)buffer[0];
+
+ 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);
+}