Lag Compensation
La compensación de retardo es la utilización de la latencia del jugador por parte del servidor al ejecutando usercmd, logrando así que el jugador vea la misma imagen que se ejecuta al enviarse el comando. La combinación de esto con la predicción, puede lograr que la compensación de retardo ayude a combatir la latencia de red, hasta el mundo de casi eliminarla desde la perspectiva del atacante. Para una explicación más detallada, véase el artículo Redes multijugador Source.
CBasePlayer
no usa compensación de retardo; debe implementarse. Los jugadores en red de Valve ya lo tienen.LagCompensate
!FGD.Sumario
Configuración
cl_lagcompensation
<boolean>- Permite a los clientes decirle al servidor que no quieren que se compensen sus comandos. Esto no es hacer trampas.
cl_lagcomp_errorcheck
<integer>- ¿No válido? En teoría muestra un error, en la práctica no hace nada.
sv_lagcompensationforcerestore
<boolean>- Trampa. Disabling this causes the game to check if each entity can still occupy its rewind position in the current, un-rewound world. If it can't, it is rewound to the last valid position instead of the desired one. Quehacer: Why would anyone want that to happen?
sv_showlagcompensation
<boolean>- Trampa. Displays rewound hitboxes whenever a player is lag compensated. This fills the role of the old
sv_showhitboxes
command, only without the confusion caused by the hitboxes also being shown when compensation is not in effect.
Las compilaciones de los desarrolladores de servidores (con ALLOW_DEVELOPMENT_CVARS
) tienen comandos adicionales:
sv_unlag
<boolean>- Activa/Desactiva la compensación entera.
sv_maxunlag
<float>- Número de segundos para almacenar la posición de jugadores. Por defecto (y máximo) es 1.
Invocación
Rodea el código que quieras compensar entre dos calls con el objeto lagcompensation
:
#ifdef GAME_DLL
#include "..\server\ilagcompensationmanager.h"
void CMyPlayer::FireBullets ( const FireBulletsInfo_t &info )
{
// Source 2007
lagcompensation->StartLagCompensation( this, this->GetCurrentCommand() );
// Alien Swarm and later (See also sub-section below)
lagcompensation->StartLagCompensation( this, LAG_COMPENSATE_HITBOXES );
BaseClass::FireBullets(info);
lagcompensation->FinishLagCompensation( this );
}
#endif
El tiempo retrocederá desde el call hasta StartLagCompensation()
y avanzará del call a FinishLagCompensation()
.
Tipo de compensación de retardo
Desde Alien Swarm, puedes optimizar la compensación de retardo con estos ajustes:
LAG_COMPENSATE_BOUNDS
- Rebobina la ubicación de las entidades, omitiendo animaciones.
LAG_COMPENSATE_HITBOXES
- Rebobina la ubicación y las cajas de colisión. Este es el ajuste estándar.
LAG_COMPENSATE_HITBOXES_ALONG_RAY
- Rebobina las cajas de colisión si una entidad es golpeada por un rayo definido por sobrecarga de «weaponPos»
StartLagCompensation()
.
Estos ajustes se aplican a todas las entidades afectadas por el rebobinado.
Implementación
Quehacer: Supporting lag compensation on new entities.