Lag Compensation

From Valve Developer Community
< Es
Jump to navigation Jump to search
English (en)Español (es)Translate (Translate)


Cajas de colisión reales (en rojo) y cajas de colisión del servidor (en azul).

La compensación de retardo es la utilización de la latencia del jugador por parte del servidor al ejecutando usercmd(en), 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(en), 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(en).

Note.pngNota:CBasePlayer no usa compensación de retardo; debe implementarse. Los jugadores en red de Valve ya lo tienen.
Tip.pngConsejo:Desde Left 4 Dead 2, todas las entidades pueden compensar su retardo con el valor LagCompensate !FGD.

Configuración

cl_lagcompensation <boolean(en)>
Permite a los clientes decirle al servidor que no quieren que se compensen sus comandos. Esto no es hacer trampas.
cl_lagcomp_errorcheck <integer(en)>
¿No válido? En teoría muestra un error, en la práctica no hace nada.
sv_lagcompensationforcerestore <boolean(en)>
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.
Pendiente: Why would anyone want that to happen?
sv_showlagcompensation <boolean(en)>
Trampa. Displays rewound hitbox(en)es 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(en)>
Activa/Desactiva la compensación entera.
sv_maxunlag <float(en)>
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(en). 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

Pendiente: Supporting lag compensation on new entities.

Véase también