- printf("OP_STOP_PLAYING: %d\n", buf[0]);
- sprintf(msgbuf, "client %d stops game", buf[0]);
- sysmsg(msgbuf);
+ printf("OP_STOP_PLAYING: %d [%d]\n", buffer[0], buffer[2]);
+ Error(ERR_NETWORK_CLIENT, "client %d stops game [%d]", buffer[0], buffer[2]);
+
+ if (game_status == GAME_MODE_PLAYING)
+ {
+ int client_nr = buffer[0];
+ int index_nr = client_nr - 1;
+ struct PlayerInfo *client_player = &stored_player[index_nr];
+ boolean stopped_by_remote_player = (!client_player->connected_locally);
+ char *message = (buffer[2] == NETWORK_STOP_BY_PLAYER ?
+ "Network game stopped by player!" :
+ buffer[2] == NETWORK_STOP_BY_ERROR ?
+ "Network game stopped due to internal error!" :
+ "Network game stopped!");
+
+ if (buffer[2] != NETWORK_STOP_BY_PLAYER || stopped_by_remote_player)
+ Request(message, REQ_CONFIRM | REQ_STAY_CLOSED);
+ }
+
+ SetGameStatus(GAME_MODE_MAIN);