- struct user *u, *v;
-
- printf("OP_PLAYER_DISCONNECTED: %d\n", buf[0]);
- u = finduser(buf[0]);
- sprintf(msgbuf, "client %d (%s) disconnected",
- buf[0], get_user_name(buf[0]));
- sysmsg(msgbuf);
-
- for (v = &me; v; v = v->next)
- if (v->next == u)
- v->next = u->next;
- free(u);
+ 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;