Noções básicas de anticheat do FiveM: o que fazer e o que nenhum anticheat pode fazer
Noções básicas de anticheat para FiveM: validar no servidor primeiro, limites de entidade OneSync, cancelar explosões, logs de webhook do Discord, bans do txAdmin e o que nenhum anticheat pode fazer.
Trapaceiros são parte de executar um servidor público. Eles spawnizam veículos, explodem o mapa, ganham dinheiro e armas, e afastam seus jogadores honrados. Um único recurso "anticheat" não consertará isso. O que funciona é algumas camadas, começando com a mais importante: não confie no cliente.
Camada 1: validar no servidor
A maioria das trapaças em um servidor de roleplay não são hacks de motor. São alguém disparando seus próprios eventos com valores que escolheu. Corrija isso primeiro e uma grande parte do problema desaparece.
- Compute preços, recompensas e quantidades no servidor.
- Use
source, nunca um id de jogador enviado pelo cliente. - Verifique emprego, distância e cooldowns antes de agir.
O método completo com código está em eventos de servidor seguro. Se você fizer apenas uma coisa deste artigo, faça essa.
Camada 2: controle de entidade com OneSync
Com OneSync, o servidor conhece entidades (veículos, peds, objetos) e pode controlar quem as cria. Isso permite parar cheaters de spawniarem coisas.
- Bloqueio de entidade. OneSync tem um modo de bloqueio de entidade onde entidades criadas pelo cliente são bloqueadas ou restritas. É forte, mas quebra qualquer script que spawna veículos ou objetos do cliente. Leia a documentação do OneSync para a configuração exata em seu build antes de ativar e mova a spawnagem para o servidor primeiro. Veja spawnando veículos do lado do servidor.
- Evento
entityCreating. O servidor pode inspecionar entidades conforme são criadas e cancelar as que você não quer.
AddEventHandler('entityCreating', function(entity)
local model = GetEntityModel(entity)
if model == `jet` then
CancelEvent()
end
end)Este exemplo recusa criar um jato de qualquer lugar. Crie sua própria lista de modelos que ninguém em seu servidor deve criar e tenha cuidado: uma regra que é muito ampla cancela as entidades de seus próprios scripts.
OneSync deve estar ativado para essas funcionalidades. Veja OneSync e limites de jogador.
Camada 3: lidar com eventos do jogo
FiveM envia algumas ações do jogo ao servidor como eventos, e o servidor pode cancelá-los. Dois comuns:
Explosões
AddEventHandler('explosionEvent', function(sender, ev)
-- sender is the player who caused the explosion
-- ev holds the explosion type and position
CancelEvent()
end)Cancelar todas as explosões pararia granadas e suas próprias explosões com script também. Limite com os dados em ev. Por exemplo, procure ev.explosionType e apenas cancele os tipos que nunca devem acontecer em seu servidor, ou registre-os primeiro para ver o que o gameplay normal produz.
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
O servidor também recebe eventos para dar, remover e disparer armas, como giveWeaponEvent. Trapaceiros que se dão armas disparam esses. Se seu inventário lida com armas, compare o que o evento quer dar com o que o jogador possui e cancele quando não corresponder. Registre primeiro, execute depois, para não bloquear jogadores reais por acidente.
Outros eventos do jogo existem para fogo, projéteis e dano de arma. Procure-os na documentação do Cfx antes de usar um, e teste em um servidor de desenvolvimento.
Atenção: um manipulador de eventos do jogo muito rigoroso pune jogadores honrados. Comece em modo de log apenas por alguns dias, leia os logs, depois execute.
Camada 4: registre comportamento suspeito
Não bana em um único sinal. Registre, leia, depois aja. Um webhook do Discord é um lugar fácil para enviar logs que a equipe pode 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)Defina a URL do webhook em server.cfg com set anticheat_webhook "https://...", não no script, e mantenha-a privada. Qualquer um com a URL pode postar em seu canal.
O que registrar: verificações falhadas no servidor (quantidades impossíveis, distância errada), explosões bloqueadas, spawnagens de entidade canceladas, spam de eventos repetidos. Inclua o nome do jogador, o id do servidor e um identificador como a licença, para que você possa bani-los.
Camada 5: aja com txAdmin
Quando os logs mostram um trapaceiro, remova-o. Use txAdmin para avisar ou banir, para que a ação seja registrada e sobreviva a reinicializações. Veja moderando com txAdmin. Em um script, DropPlayer(source, 'reason') expulsa um jogador, mas um ban deve passar por suas ferramentas de moderação para que identificadores sejam salvos.
O que nenhum anticheat pode fazer
Seja honesto sobre os limites.
- O cliente pertence ao trapaceiro. Qualquer coisa verificada apenas no cliente pode ser desligada. Apenas verificações de servidor são confiáveis.
- Nenhuma ferramenta pega tudo. Novas trapaças aparecem e detecção está sempre um passo atrás.
- Ofuscação não é segurança. Nomes de eventos ocultos e tokens "secretos" no código do cliente podem ser lidos.
- Código anticheat gratuito ou vaza é um risco. Desenvolvedores de trapaças o leem também e alguns contêm backdoors. Tenha cuidado com recursos de fontes desconhecidas.
- Pessoas ainda importam. Equipe ativa, sistema de relatório claro e bans rápidos fazem mais do que qualquer script.
Combine camadas, mantenha recursos atualizados e revise seus logs. Isso torna seu servidor um alvo difícil em comparação com outros.
Lista de verificação
| Sintoma | Correção |
|---|---|
| Jogadores ganham dinheiro ou itens grátis | Valide eventos no servidor, veja o guia de eventos |
| Trapaceiros spawnizam veículos e objetos | Controles de entidade OneSync e entityCreating; mova a spawnagem para o servidor |
| Explosões em todo o mapa | Manipulador explosionEvent com CancelEvent, limitado por tipo |
| Trapaças de fornecimento de armas | Verifique eventos de armas contra seu inventário, registre primeiro |
| Sem ideia do que trapaceiros fazem | Envie logs para um webhook do Discord mantido em uma convar |
| Trapaceiro encontrado | Bana do txAdmin com identificadores salvos |
| Regra bloqueia jogadores honrados | Mude para log apenas e restrinja a condição |
Respostas rápidas
Preciso de um recurso anticheat?
Primeiro proteja seus próprios scripts, porque isso para o abuso mais comum. Um recurso anticheat pode adicionar detecção no topo, mas não é um substituto para validação do lado do servidor.
Um anticheat pode parar todo cheater?
Não. Cheaters se adaptam, e o cliente do jogo está na máquina deles. O objetivo é tornar trapaças difíceis, detectar o óbvio e remover infratores rapidamente.
É seguro cancelar eventos do jogo no servidor?
Sim, com cuidado. Cancelar um evento para todos, então teste que o gameplay normal, como seus próprios scripts que criam explosões, ainda funciona antes de executar uma regra em um servidor ativo.
Scripts sem esse problema
CCTV Security CamerasCâmeras posicionáveis, um tablet com várias telas ao vivo e fotos impressas como prova.Ver script →
Shop CreatorMonte uma loja em menos de um minuto — donos, funcionários, cofres e assaltos inclusos.Ver script →
Tebex TemplateUm tema premium para sua loja Tebex, sem código e editado todo pelo painel da Tebex.Ver script →