Realmente no he implementado esto (por lo que puede haber algunos problemas que no estoy viendo de inmediato), pero pensé que intentaría ayudar.
Esto es lo que dijiste que está sucediendo:
El cliente A envía una entrada en T0
El servidor recibe la entrada en T1
Todos los clientes reciben el cambio en T2
Sin embargo, en T2, utilizando la predicción del cliente, el Cliente A está ahora en una posición apropiada para T4.
Probablemente sería útil pensar en términos de tiempo de servidor. Es (probablemente) muy similar a cómo funciona la interpolación .
Cada comando se envía con un tiempo de servidor. Este tiempo del servidor se calcula al comienzo de una coincidencia al consultar la marca del servidor, compensando el tiempo de ping. En el cliente, tiene su propio recuento de tics local, y cada comando que envía se convierte en ticks del servidor (es una operación de resta simple)
Además, el cliente siempre representa "en el pasado". Entonces, asume que el mundo que ve el cliente está, digamos, 100 ms atrás de lo que realmente es el tiempo del servidor.
Así que reformulemos su ejemplo con la hora del servidor (designada por S).
El cliente envía la entrada en T0 con el tiempo del servidor S0 (que supongo que es realmente "representación del cliente del tiempo del servidor menos el tiempo de interpolación"). El cliente no espera la respuesta del servidor y se mueve de inmediato.
El servidor recibe la entrada en T1. El servidor calcula la posición autorizada del cliente en el momento del servidor S0 proporcionado por el cliente. Envía eso al cliente.
El cliente recibe el puesto de autoridad en T2 (aún con la designación del tiempo del servidor S0). El cliente realiza un seguimiento de una cantidad de tiempo anterior de eventos anteriores (probablemente solo una cola de todas las predicciones no confirmadas).
Si la posición / velocidad predicha / lo que sea que el servidor envíe de vuelta en S0 es diferente de lo que el cliente ha almacenado en S0, el cliente maneja esto de alguna manera. Ya sea volviendo a colocar al jugador en su posición anterior o volviendo a simular la entrada anterior, o tal vez algo más en lo que no he pensado.