Es/Lag Compensation: Difference between revisions
(Created page with "{{otherlang2 |noborder=true |cs=Lag_Compensation:cs |en=Lag_Compensation |de=Lag_Compensation:de |fr=Lag_Compensation:fr |ka=Lag_Compensation:ka |nl=Lag_Compensation:nl |ru=La...") |
(→Configuración: Fixed cvar table) |
||
(12 intermediate revisions by 7 users not shown) | |||
Line 1: | Line 1: | ||
{{ | {{LanguageBar}} | ||
}} | |||
<!-- | <!-- | ||
: ''You may be looking for | : ''You may be looking for {{L|Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization|Yahn Bernier's 2001 paper on game engine networking}}.'' | ||
--> | --> | ||
[[File:Lag compensation.jpg|thumb|Cajas de colisión reales (en rojo) y cajas de colisión del servidor (en azul).]] | [[File:Lag compensation.jpg|thumb|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 | La '''compensación de retardo''' es la utilización de la latencia del jugador por parte del servidor al ejecutando {{L|usercmd}}, logrando así que el jugador vea la misma imagen que se ejecuta al enviarse el comando. La combinación de esto con la {{L|prediction|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 {{L|Source Multiplayer Networking#Compensación de retardo|Redes multijugador Source}}. | ||
{{ | {{Note|{{ent|CBasePlayer}} no usa compensación de retardo; debe implementarse. Los jugadores en red de Valve ya lo tienen.}} | ||
{{tip|Desde {{l4d2}}, ''todas'' las entidades pueden compensar su retardo con el valor <code>LagCompensate</code> {{not in FGD}}.}} | {{tip|Desde {{l4d2}}, ''todas'' las entidades pueden compensar su retardo con el valor <code>LagCompensate</code> {{not in FGD}}.}} | ||
== Configuración == | == Configuración == | ||
{{ | {{Varcom|start}} | ||
{{ | {{Varcom|cl_lagcompensation||bool|Permite a los clientes decirle al servidor que no quieren que se compensen sus comandos. Esto ''no'' es hacer trampas.}} | ||
{{ | {{Varcom|cl_lagcomp_errorcheck||int|¿No válido? En teoría muestra un error, en la práctica no hace nada.}} | ||
{{ | {{Varcom|sv_lagcompensationforcerestore||bool|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. {{todo:es|Why would anyone want that to happen?}}}} | ||
{{Varcom|sv_showlagcompensation||bool|Trampa. Displays rewound {{L|hitbox}}es whenever a player is lag compensated. This fills the role of the old <code>sv_showhitboxes</code> command, only without the confusion caused by the hitboxes also being shown when compensation is not in effect.}} | |||
{{Varcom|end}} | |||
Las compilaciones de los desarrolladores de servidores (con <code>ALLOW_DEVELOPMENT_CVARS</code>) tienen comandos adicionales: | Las compilaciones de los desarrolladores de servidores (con <code>ALLOW_DEVELOPMENT_CVARS</code>) tienen comandos adicionales: | ||
{{Varcom|start}} | |||
{{ | {{Varcom|sv_unlag||bool|Activa/Desactiva la compensación entera.}} | ||
{{ | {{Varcom|sv_maxunlag||float|Número de segundos para almacenar la posición de jugadores. Por defecto (y máximo) es 1.}} | ||
{{Varcom|end}} | |||
== Invocación == | == Invocación == | ||
Line 48: | Line 39: | ||
lagcompensation->StartLagCompensation( this, this->GetCurrentCommand() ); | lagcompensation->StartLagCompensation( this, this->GetCurrentCommand() ); | ||
// Alien Swarm and later ( | // Alien Swarm and later (See also sub-section below) | ||
lagcompensation->StartLagCompensation( this, LAG_COMPENSATE_HITBOXES ); | lagcompensation->StartLagCompensation( this, LAG_COMPENSATE_HITBOXES ); | ||
Line 66: | Line 57: | ||
: Rebobina la ubicación de las entidades, omitiendo animaciones. | : Rebobina la ubicación de las entidades, omitiendo animaciones. | ||
; <code>LAG_COMPENSATE_HITBOXES</code> | ; <code>LAG_COMPENSATE_HITBOXES</code> | ||
: Rebobina la ubicación y las | : Rebobina la ubicación y las {{L|hitbox|cajas de colisión}}. Este es el ajuste estándar. | ||
; <code>LAG_COMPENSATE_HITBOXES_ALONG_RAY</code> | ; <code>LAG_COMPENSATE_HITBOXES_ALONG_RAY</code> | ||
: Rebobina las cajas de colisión si una entidad es golpeada por un rayo definido por sobrecarga de «weaponPos» <code>StartLagCompensation()</code>. | : Rebobina las cajas de colisión si una entidad es golpeada por un rayo definido por sobrecarga de «weaponPos» <code>StartLagCompensation()</code>. | ||
Line 74: | Line 65: | ||
== Implementación == | == Implementación == | ||
{{todo|Supporting lag compensation on new entities.}} | {{todo:es|Supporting lag compensation on new entities.}} | ||
== Véase también == | == Véase también == | ||
* | * {{L|Source Multiplayer Networking#Compensación de retardo|Compensación de retardo en redes multijugador Source}} | ||
* | * {{L|NPC Lag Compensation|Compensación de retardo en PNJ}} | ||
* | * {{L|Prediction|Predicción}} | ||
* | * {{L|Interpolation|Interpolación}} | ||
{{ACategory|Networking}} |
Latest revision as of 16:02, 21 April 2025
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 .



LagCompensate
!FGD.Configuración
Cvar/Command | Parameters or default value | Descriptor | Effect |
---|---|---|---|
cl_lagcompensation | bool | Permite a los clientes decirle al servidor que no quieren que se compensen sus comandos. Esto no es hacer trampas. | |
cl_lagcomp_errorcheck | int | ¿No válido? En teoría muestra un error, en la práctica no hace nada. | |
sv_lagcompensationforcerestore | bool | 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 | bool | Trampa. Displays rewound hitbox 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:
Cvar/Command | Parameters or default value | Descriptor | Effect |
---|---|---|---|
sv_unlag | bool | 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.