Skip to content

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 DistanceSlack metros 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 PerSecond y nunca se acumula más allá de Burst. 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 MaxAmount se acepta en absoluto, y los precios se mantienen dentro de Config.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 employees es 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.lua
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.