Anti-cheat
Anti-cheat
Cada decisión de dinero y stock se toma en el servidor. El cliente dibuja el surtidor e informa de lo que pasó; nunca decide cuánto cuesta algo ni cuánto se repostó.
Lo que el servidor aplica
- Sesiones de surtidor. Abrir un surtidor solicita al servidor un token de sesión. Pagar requiere ese token, y los litros facturados tienen un límite basado en el tiempo que la sesión estuvo realmente abierta a la tasa de flujo configurada. Un cliente que reclame más de lo que el surtidor físicamente podría haber dispensado se recorta a lo que el reloj permite.
- Caducidad de sesión. Los tokens son de un solo uso, están vinculados al jugador que los abrió y se descartan después de
PumpSessionTimeout. Una sesión caducada no factura nada. - Comprobaciones de distancia. Comprar, repostar, cargar, cambiar una batería, llenar una garrafa, pedir stock y cada acción del panel de control vuelven a comprobar en el servidor que el jugador está realmente en esa estación, con un margen de
DistanceSlackmetros para el retraso de la posición del monigote. - Limitación de tasa. Cada evento y callback cuesta un token de un cubo por jugador que se recarga a
PerSecondy nunca se acumula más allá deBurst. Una tecla atascada sigue funcionando; un bucle de spam choca contra un muro casi de inmediato. - Limitación de valores. Los precios, salarios, pedidos, retiradas y depósitos tienen comprobaciones de límites y de tipo en el lado del servidor. Nada por encima de
MaxAmountse acepta en absoluto, y los precios se mantienen dentro deConfig.Refuel.PriceLimits. - Comprobaciones de permisos en cada acción. Los permisos del personal se vuelven a verificar en el servidor por cada solicitud, nunca se confía en la interfaz de usuario. Contratar, despedir y editar a cualquiera que tenga el permiso
employeeses exclusivo del propietario, por lo que un empleado no puede ascenderse a sí mismo. La transferencia y la recompra son exclusivas del propietario y requieren que se vuelva a escribir el nombre de la estación. - El stock y el banco son estado del servidor. Una venta solo ocurre si la estación realmente tiene los litros y el cliente realmente tiene el dinero; ambas partes se mueven en el mismo paso del lado del servidor.
Config.AntiCheat = {
RateLimit = { Burst = 14, PerSecond = 6 },
MaxLitresPerPay = 200.0,
LitreGrace = 3.0,
PumpSessionTimeout = 900,
DistanceSlack = 15.0,
MaxAmount = 100000000,
MaxWage = 25000,
JerryPourTimeout = 600,
}| Setting | Purpose |
|---|---|
RateLimit |
Tamaño de ráfaga y tasa de recarga del cubo de eventos por jugador |
MaxLitresPerPay |
Límite estricto en una sola sesión de surtidor o cargador, sin importar lo que diga el tiempo |
LitreGrace |
Margen en la comprobación de tiempo, en litros. Cubre un tick con lag |
PumpSessionTimeout |
Segundos que una sesión permanece válida |
DistanceSlack |
Metros adicionales permitidos además del radio de una estación |
MaxAmount |
Límite para cualquier valor de dinero aceptado de un cliente |
MaxWage |
Salario más alto que un propietario puede asignar a un empleado |
JerryPourTimeout |
Segundos que se recuerda un vertido sin terminar antes de que el sobrante ya no pueda reclamarse |
Ajustes
Los valores predeterminados se adaptan a un servidor normal. Los dos que vale la pena tocar:
LitreGrace— súbelo uno o dos litros si a los jugadores con malas conexiones se les está dando menos de lo debido en el surtidor. Mantenlo bajo; es combustible gratis.RateLimit.Burst— súbelo si una estación de servicio legítimamente ocupada empieza a rechazar acciones. Bájalo si quieres un control más estricto.
⚠
Aflojar demasiado MaxLitresPerPay o DistanceSlack elimina el límite para el cual existen esas comprobaciones. Cámbialos solo si los jugadores honestos están siendo bloqueados visiblemente.