Conceptos básicos de anticheat de FiveM: qué hacer y qué no puede hacer ningún anticheat
Conceptos básicos de anticheat para FiveM: valida en el servidor primero, límites de entidades de OneSync, cancelar explosiones, registros de webhooks de Discord, prohibiciones de txAdmin y qué no puede hacer ningún anticheat.
Los tramposos son parte de ejecutar un servidor público. Generan vehículos, vuelan el mapa, se dan dinero y armas a sí mismos, e impulsan a tus jugadores honestos. Un único recurso «anticheat» no lo arreglará. Lo que funciona es algunas capas, comenzando con la más importante: no confíes en el cliente.
Capa 1: validar en el servidor
La mayoría de los trucos en un servidor de rol no son hacks de motores. Son alguien triggerando tus propios eventos con valores que eligieron. Arréglalo primero, y una gran parte del problema desaparece.
- Calcula precios, recompensas y cantidades en el servidor.
- Usa
source, nunca un id de jugador enviado por el cliente. - Comprueba el trabajo, la distancia y los tiempos de reutilización antes de actuar.
El método completo con código está en securing server events. Si solo haces una cosa de este artículo, haz eso.
Capa 2: control de entidades con OneSync
Con OneSync, el servidor sabe sobre entidades (vehículos, peds, objetos) y puede controlar quién las crea. Eso te permite detener a los tramposos de generar cosas.
- Bloqueo de entidades. OneSync tiene un modo de bloqueo de entidades donde las entidades creadas por el cliente se bloquean o se restringen. Es fuerte, pero rompe cualquier script que genere vehículos u objetos desde el cliente. Lee la documentación de OneSync para la configuración exacta en tu compilación antes de activarla, y mueve la generación al servidor primero. Ve spawning vehicles server-side.
- Evento
entityCreating. El servidor puede inspeccionar entidades mientras se crean y cancelar las que no quieres.
AddEventHandler('entityCreating', function(entity)
local model = GetEntityModel(entity)
if model == `jet` then
CancelEvent()
end
end)Este ejemplo se niega a crear un jet desde cualquier lugar. Construye tu propia lista de modelos que nadie en tu servidor debe crear, y ten cuidado: una regla que es demasiado amplia cancela las entidades de tus propios scripts.
OneSync debe estar habilitado para estas características. Ve OneSync and player limits.
Capa 3: manejar eventos del juego
FiveM envía algunas acciones del juego al servidor como eventos, y el servidor puede cancelarlas. Dos comunes:
Explosiones
AddEventHandler('explosionEvent', function(sender, ev)
-- sender is the player who caused the explosion
-- ev holds the explosion type and position
CancelEvent()
end)Cancelar cada explosión también detendría granadas y tus propias explosiones secuenciadas. Estréchalo con los datos en ev. Por ejemplo, mira ev.explosionType y solo cancela los tipos que nunca deberían suceder en tu servidor, o registra primero para ver qué produce el juego normal.
local blocked = { [1] = true } -- example: replace with the types you decide to block
AddEventHandler('explosionEvent', function(sender, ev)
if blocked[ev.explosionType] then
CancelEvent()
print(('Blocked explosion from player %s'):format(sender))
end
end)Armas
El servidor también recibe eventos para dar, quitar y disparar armas, como giveWeaponEvent. Los tramposos que se dan armas a sí mismos disparan estos. Si tu inventario maneja armas, compara lo que el evento quiere dar con lo que el jugador posee, y cancélalo cuando no coincida. Registra primero, enforce después, para que no bloquees a jugadores reales por accidente.
Existen otros eventos del juego para fuego, proyectiles y daño de armas. Búscalos en la documentación de Cfx antes de usar uno, y prueba en un servidor de desarrollo.
Cuidado: un manejador de eventos del juego demasiado estricto castiga a jugadores honestos. Comienza en modo solo-registro durante unos días, lee los registros, y luego enforce.
Capa 4: registrar comportamiento sospechoso
No banees con una sola señal. Registra, lee, luego actúa. Un webhook de Discord es un lugar fácil para enviar registros que el personal puede ver.
local WEBHOOK = GetConvar('anticheat_webhook', '')
local function logToDiscord(text)
if WEBHOOK == '' then return end
PerformHttpRequest(WEBHOOK, function() end, 'POST',
json.encode({ username = 'Anticheat', content = text }),
{ ['Content-Type'] = 'application/json' })
end
AddEventHandler('explosionEvent', function(sender, ev)
logToDiscord(('Explosion from %s (%s), type %s'):format(GetPlayerName(sender), sender, ev.explosionType))
end)Establece la URL del webhook en server.cfg con set anticheat_webhook "https://...", no en el script, y mantenlo privado. Cualquiera con la URL puede publicar en tu canal.
Qué registrar: comprobaciones del lado del servidor fallidas (cantidades imposibles, distancia incorrecta), explosiones bloqueadas, generación de entidades que cancelaste, spam de eventos repetidos. Incluye el nombre del jugador, el id del servidor e un identificador como la licencia, para que puedas banearlo.
Capa 5: actúa con txAdmin
Cuando los registros muestren un tramposo, elimina. Usa txAdmin para advertir o banear, para que la acción se registre y sobreviva a reinicios. Ve moderating with txAdmin. En un script, DropPlayer(source, 'reason') expulsa a un jugador, pero un baneo debe ir a través de tus herramientas de moderación para que los identificadores se guarden.
Qué no puede hacer ningún anticheat
Sé honesto sobre los límites.
- El cliente pertenece al tramposo. Cualquier cosa verificada solo en el cliente puede ser desactivada. Solo las comprobaciones del servidor son confiables.
- Ninguna herramienta lo atrapa todo. Nuevos trucos aparecen, y la detección está siempre un paso atrás.
- La ofuscación no es seguridad. Los nombres de eventos ocultos y los «tokens secretos» en el código del cliente pueden ser leídos.
- El código anticheat libre o filtrado es un riesgo. Los desarrolladores de trucos también lo leen, y algo de ello contiene puertas traseras. Ten cuidado con recursos de fuentes desconocidas.
- Las personas aún importan. Personal activo, un sistema de informe claro y prohibiciones rápidas hacen más que cualquier script.
Combina capas, mantén los recursos actualizados, y revisa tus registros. Eso hace que tu servidor sea un objetivo difícil comparado con otros.
Lista de verificación
| Síntoma | Solución |
|---|---|
| Los jugadores obtienen dinero o artículos gratis | Valida eventos en el servidor, ve la guía de eventos |
| Los tramposos generan vehículos y objetos | Controles de entidades de OneSync y entityCreating; mueve la generación al servidor |
| Explosiones a través del mapa | Manejador explosionEvent con CancelEvent, estrechado por tipo |
| Trucos de dar armas | Comprueba eventos de armas contra tu inventario, registra primero |
| No sé qué hacen los tramposos | Envía registros a un webhook de Discord mantenido en un convar |
| Se encontró al tramposo | Banea desde txAdmin con los identificadores guardados |
| La regla bloquea jugadores honestos | Cambia a solo-registro y estrecha la condición |
Respuestas rápidas
¿Necesito un recurso anticheat?
Primero asegura tus propios scripts, porque eso detiene el abuso más común. Un recurso anticheat puede añadir detección encima, pero no es un reemplazo para la validación del lado del servidor.
¿Puede un anticheat detener a todos los tramposos?
No. Los tramposos se adaptan, y el cliente del juego está en su máquina. El objetivo es hacer que el tramposo sea difícil, detectar lo obvio, y eliminar a los infractores rápidamente.
¿Es seguro cancelar eventos del juego en el servidor?
Sí, con cuidado. Cancelar un evento lo detiene para todos, así que prueba que el juego normal como tus propios scripts que crean explosiones sigue funcionando antes de ejecutar una regla en un servidor en vivo.
Scripts que evitan este problema
CCTV Security CamerasCámaras colocables, una tablet con vista múltiple en vivo y fotos como prueba.Ver script →
Shop CreatorCrea una tienda en menos de un minuto — dueños, empleados, caja fuerte y atracos.Ver script →
Tebex TemplateUn tema premium para tu tienda Tebex, sin código y editable desde el panel.Ver script →