Ir para o guia

Documentação 9.6.24

server.cfg, convars e permissões

Esta página lista todas as convars que o Tosun AntiCheat lê, todas as permissões ACE que ele verifica e os arquivos e seções de configuração que você pode editar. Ela começa com um bloco completo de server.cfg e também cobre as convars de endurecimento do FiveM que o AC audita no início.

Onde fica a configuração#

O Tosun AntiCheat lê configurações do server.cfg, de quatro arquivos no resource e do painel web. Credenciais só devem ficar em lugares exclusivos do servidor. configs/anticheat_config.lua é um script compartilhado, então o servidor o envia para todos os clientes.

Arquivo ou lugarCarregado emO que vai lá
server.cfgServidorConvars (licença, chave do painel, resources confiáveis), permissões ACE e as convars de endurecimento do FiveM.
configs/anticheat_server.luaSó no servidor, antes dos scripts de servidor do ACAlternativa para credenciais quando você não usa convars: panelKey, centralToken e licenseKey.
configs/anticheat_config.luaCompartilhado: servidor e todos os clientesTodas as configurações ts: detecções, punições, proteções, menu de admin e listas. Nunca coloque uma chave, token ou licença aqui.
configs/anticheat_webhooks.luaSó no servidorURLs de webhook do Discord e estilo dos embeds.
admins/anticheat_admins.luaSó no servidorA lista de identificadores Admins (status de staff e menu de admin).
Web panel (ac_settings and ac_ tables)Sincronizado com o servidorSobrescreve a maioria dos valores da config cerca de 3 s depois do início e depois a cada ts.ServerPerf.configSyncIntervalSec segundos (120 no padrão).

Exemplo completo de server.cfg#

Um bloco completo para uma instalação típica. A ordem importa: as dependências e as convars de credenciais precisam vir antes de ensure tosun-ac, porque as credenciais são resolvidas uma vez quando o resource carrega. Linhas que começam com um único # são opcionais; remova o # para usá-las.

## ---------- Tosun AntiCheat: bloco do server.cfg ----------
## O OneSync é uma dependência do manifest (o txAdmin também pode ativá-lo).
set onesync on

## Dependências: inicie-as antes do tosun-ac.
## oxmysql e tosun_render são dependências obrigatórias.
## screenshot-basic é o ts.screenshotModule padrão.
## Configure mysql_connection_string antes de ensure oxmysql (veja o guia de MySQL).
ensure oxmysql
ensure screenshot-basic
ensure tosun_render

## Credenciais: use set (nunca setr ou sets) e mantenha-as ACIMA de ensure tosun-ac.
## Elas são lidas uma vez quando o resource carrega.
## Formato da licença: tac_live_ seguido de 40 caracteres hex minúsculos.
set tosun_ac_license "YOUR_LICENSE_KEY"
## Opcional: quando vazia, a chave do painel é carregada de panel_settings no DB do jogo.
# set tosun_ac_panel_key "YOUR_PANEL_API_KEY"
# set tosun_ac_central_token "YOUR_FIVEM_SCOPED_TOKEN"
## Opcional: usado só pelo ts.licenseLock.
# set tosun_ac_server_id "server-1"

## Resources que podem chamar exports protegidos do AC (separados por vírgula).
set tosun_ac_trusted_resources "my-housing,my-clothing"

## Opcional: endereço https público do painel para uploads de capturas de tela e evidências.
# set ts_public_panel_url "https://panel.example.com"

## Opcional: controle o DB bridge do Tosun Connect por este arquivo.
## Sem a linha manual (e com ts.panelMirror desligado), as duas convars do bridge são forçadas para "1".
# set tosun_db_bridge_manual "1"
# set tosun_db_bridge_enabled "1"
# set tosun_db_bridge_money_write "0"

## Opcional: desliga o gravador de tempo de jogo (só qb, qbcore e qbox).
# set tosun_panel_playtime "0"

## Opcional, para integradores que usam os arquivos de bridge. Os clientes leem estas, então use setr.
# setr tosun_ac_resource "tosun-ac"
# setr tosun_ac_bridge_client_ms "60000"

ensure tosun-ac

## ---------- Permissões da staff ----------
## Status de staff e o menu de admin no jogo:
add_ace group.admin tosun.admin allow
## tosunac_setup, as varreduras manuais e a prévia da tela de ban:
add_ace group.admin tosunac.admin allow
add_ace group.admin command.tosunac_setup allow
add_ace group.admin command.tosunac_backdoorscan allow
add_ace group.admin command.tosunac_eventscan allow
add_ace group.admin tosunac.banscreen.test allow
## Uma linha por membro da staff:
add_principal identifier.license:YOUR_LICENSE_HEX group.admin

## ---------- Convars de endurecimento do FiveM que o AC verifica no início ----------
set sv_stateBagStrictMode true
set sv_filterRequestControl 2
set sv_enableNetworkedSounds false
set sv_enableNetworkedPhoneExplosions false
set sv_enableNetworkedScriptEntityStates false
set sv_scriptHookAllowed false
## Teste antes: relaxed ou strict pode quebrar scripts que dão spawn em veículos pelo cliente.
set sv_entityLockdown relaxed
set sv_pureLevel 1
## A auditoria do server.cfg avisa enquanto esta estiver vazia:
# set sv_enforceGameBuild YOUR_GAME_BUILD

Regras para o bloco do server.cfg#

Siga estas regras ao adaptar o exemplo ao seu servidor.

  • Inicie oxmysql e tosun_render antes do tosun-ac. O manifest declara como dependências o server build 4890 ou mais novo, OneSync, oxmysql e tosun_render.
  • Inicie o screenshot-basic se mantiver o ts.screenshotModule padrão.
  • Coloque todas as linhas de credencial set tosun_ac_ antes de ensure tosun-ac. Os valores são lidos uma vez no carregamento; uma mudança posterior exige restart do resource.
  • Use set para credenciais. setr replica o valor para todos os clientes, e sets o publica nas informações públicas do servidor.
  • Use setr só para convars que os clientes leem: ts_screen_upload, tosun_ac_resource e tosun_ac_bridge_client_ms.
  • Você não precisa de nenhuma linha do DB bridge. Desde a 9.6.14 o bridge vem ligado por padrão, e linhas set ... "0" são ignoradas a menos que tosun_db_bridge_manual seja "1" ou ts.panelMirror.enabled = true.
  • Guias de instalação antigos (INSTALLER-READY.md, INSTALLER-LICENSE.md, INSTALL-MULTILANG.md, CONFIG-PERFORMANCE-GUIDE.md) colocam o ensure antes das credenciais, colocam a chave do painel em configs/anticheat_config.lua e deixam o tosun_render de fora. Siga esta página.

Referência de convars#

Todas as convars que o Tosun AntiCheat lê e que você pode definir. Use set, a menos que a coluna Observações diga setr. O AC também grava e lê algumas convars internas próprias; elas são protegidas e você não deve defini-las.

ConvarPadrãoO que fazObservações
tosun_ac_license""Chave de licença do servidor. Lida uma vez no carregamento para ts.licenseLock.licenseKey. O bloqueio de licença e o DB bridge do Tosun Connect também releem a convar depois.Credencial: só set, antes do ensure. Formato tac_live_ mais 40 hex minúsculos. O DB bridge a trata como ausente a menos que tenha de 16 a 128 caracteres, sem espaços em branco.
tosun_ac_panel_key""Chave de API do painel. Enviada nas chamadas de saída para o painel e usada para autorizar as requisições que chegam do painel.Credencial: só set. Reinicie depois de uma mudança. Quando vazia, o AC copia panel_settings.ac_api_key do DB do jogo. A cada início, ela é gravada em texto puro na linha webPanelKey de ac_settings.
tosun_ac_central_token""Token de autenticação para a verificação de versão e a API central v9. Tem preferência sobre a chave do painel.Credencial: só set.
tosun_ac_server_id"" (ts.licenseLock.serverId)Identificador do servidor para o bloqueio de licença. Só importa quando ts.licenseLock.enabled = true e allowedServerIds não está vazio.Não é segredo. Depois de cada verificação de licença, o AC a regrava como convar replicada, então os clientes podem vê-la. O export licenseStatus a retorna como serverId.
tosun_ac_trusted_resources""Resources (separados por vírgula ou espaço) que podem chamar exports protegidos. Combinada com ts.ExportCallerWhitelist.Para desenvolvedores. Relida em até 10 s e sobrevive às atualizações do AC. Confira com o comando de console tosunac_integration.
ts_public_panel_url""Base pública do painel para uploads de capturas de tela, evidências de ban e vídeo ao vivo (base/api/screen_upload.php). Tem prioridade sobre ts.webPanelURL.Só é necessária quando a URL pública é diferente de ts.webPanelURL. Precisa ser https.
ts_screen_uploadhttp://localhost/api/screen_upload.phpURL de upload da captura do screenshot-basic usada pelo export screenCapture, pelos comandos /capture e /ts_capture e pela ação de captura do web-bridge do painel.Use setr: ela é lida no cliente. O padrão aponta para localhost. O AC não tem handler para o resultado do upload, então o resultado é descartado.
tosun_db_bridge_manual"0""1" impede o AC de forçar as duas convars do bridge abaixo, então quem as controla é o server.cfg.Defina antes de o resource iniciar.
tosun_db_bridge_enabled"0" no código, forçado para "1" no carregamentoLiga o DB bridge sob demanda do Tosun Connect.Um valor no server.cfg só conta com tosun_db_bridge_manual "1" ou ts.panelMirror.enabled = true. Com o panelMirror ligado, o AC não força o valor, então o bridge fica desligado a menos que o server.cfg o ligue.
tosun_db_bridge_money_write"0" no código, forçado para "1" no carregamentoPermite a operação player.money.set do bridge, que define o saldo de um jogador online.Quando não é "1", a operação falha com write_disabled. Para definir "0" pelo server.cfg, você precisa do modo manual.
tosun_db_bridge_query_timeout_ms5000 (1000 a 10000)Timeout de observação de cada query SQL do bridge.Um timeout informa query_timeout, mas não cancela a query.
tosun_panel_playtime"1""0" desativa o gravador que preenche players.playtime. Ele só age para qb, qbcore ou qbox.Lida uma vez no carregamento. O ALTER TABLE que adiciona a coluna playtime ainda roda 20 s depois do início, mesmo com "0". set é suficiente, embora o cabeçalho do arquivo sugira setr.
tosun_panel_playtime_interval_ms120000 (30000 a 600000)Intervalo do loop do gravador de tempo de jogo.set é suficiente.
tosun_ac_resource"tosun-ac"Nome do resource do AC usado pelos arquivos de bridge opcionais dentro do seu próprio resource.Para desenvolvedores. Use setr quando renomear a pasta do AC: a bridge do cliente só vê convars replicadas.
tosun_ac_bridge_server_ms60000 (500 a 300000)Duração padrão da isenção de TosunAC.PlayerExempt na bridge do servidor.Para desenvolvedores. set é suficiente.
tosun_ac_bridge_cooldown_ms750 (0 desativa)Cooldown por jogador que descarta chamadas repetidas de TosunAC.PlayerExempt na bridge do servidor.Para desenvolvedores. set é suficiente.
tosun_ac_bridge_client_ms60000 (500 a 300000)Duração padrão de TosunAC.Exempt() na bridge do cliente.Para desenvolvedores. setr é obrigatório.

Credenciais: precedência e cuidados#

Três credenciais são resolvidas uma vez quando o resource carrega: a chave de licença, a chave de API do painel e o token central. Para cada uma, o AC usa o primeiro valor não vazio nesta ordem.

O aviso MIGRATION pede que você limpe o valor compartilhado e troque qualquer credencial que já tenha sido guardada ali, porque esse arquivo é enviado para todos os clientes.

Um valor com mais de 4096 caracteres, ou que contenha caracteres de controle, interrompe o carregamento com um erro Invalid server credential setting.

Só para a chave do painel: se ela ainda estiver vazia depois destes passos, o AC copia panel_settings.ac_api_key do DB do jogo. A cada início, o AC grava a chave resolvida na linha webPanelKey de ac_settings, em texto puro. Se alguém editar essa linha no painel, o valor editado substitui o seu até o próximo restart.

Só para a chave de licença: o bloqueio de licença aceita os formatos tac_live_ mais 40 hex minúsculos (49 caracteres), TOSUN-AC-YYYY-... e TOSUN-.... A verificação de formato só roda quando ts.licenseLock.enabled = true, e ela verifica apenas o formato.

  1. A convar do servidor: tosun_ac_license, tosun_ac_panel_key ou tosun_ac_central_token.
  2. O valor em configs/anticheat_server.lua: licenseKey, panelKey ou centralToken.
  3. O valor legado no configs/anticheat_config.lua compartilhado: ts.licenseLock.licenseKey, ts.webPanelKey ou ts.Central.token. Qualquer valor aqui imprime um aviso MIGRATION no console.

configs/anticheat_server.lua#

Use este arquivo exclusivo do servidor quando preferir não colocar credenciais no server.cfg. Ele carrega antes dos scripts de servidor do AC e retorna na hora nos clientes. Deixe um campo vazio para continuar usando a convar ou a descoberta pelo banco de dados.

  • Uma convar não vazia sempre vence o valor deste arquivo.
  • Deixe em branco os campos correspondentes em configs/anticheat_config.lua: ts.webPanelKey, ts.Central.token e ts.licenseLock.licenseKey.
  • Mantenha os backups deste arquivo privados.
  • O arquivo só preenche ts.webPanelKey, ts.Central.token e ts.licenseLock.licenseKey. Os outros scripts leem esses valores, não o arquivo.
-- configs/anticheat_server.lua (só no servidor)
local credentials = {
    panelKey = '',     -- ou: set tosun_ac_panel_key "YOUR_PANEL_API_KEY"
    centralToken = '', -- ou: set tosun_ac_central_token "YOUR_FIVEM_SCOPED_TOKEN"
    licenseKey = '',   -- ou: set tosun_ac_license "YOUR_SERVER_LICENSE"
}

URL do painel e uploads de capturas de tela#

ts.webPanelURL em configs/anticheat_config.lua é a URL base do painel. Você pode deixá-la em branco: quando está vazia, o AC carrega panel_url ou site_url de panel_settings no DB do jogo e salva em ac_settings. A sincronização HTTP das configurações só roda quando a URL e a chave do painel estão definidas.

Defina ts_public_panel_url só quando capturas de tela, evidências de ban e vídeo ao vivo precisarem ir para um endereço público diferente. Precisa ser https. Os tokens de upload só são emitidos para https://host/api/screen_upload.php quando a base é igual a esta convar ou a ts.webPanelURL.

ts_screen_upload é um caminho separado usado pelo export screenCapture e pelos comandos /capture e /ts_capture. Ela exige setr, e o padrão aponta para localhost. Nada no AC trata o resultado desse upload.

Os nomes legados ts.PanelUrl, ts.panelUrl e ts.webPanelUrl ainda são lidos como alternativas.

Convars do DB bridge do Tosun Connect#

Desde a 9.6.14, o DB bridge sob demanda vem ligado por padrão e não precisa de nenhuma linha no server.cfg. No carregamento, editable/server/tosun_db_bridge_defaults.lua define tosun_db_bridge_enabled e tosun_db_bridge_money_write como "1", então as linhas "0" de guias antigos são ignoradas.

Você também pode desligar a conexão de um servidor no painel: Servidores, depois o servidor, depois o cartão Tosun Connect.

O bridge consulta https://admin.tosundev.com/api/server_db_bridge.php, envia a sua chave de licença como token Bearer e executa só estas operações: players.list, player.detail, player.vehicles, bans.list, logs.list e player.money.set.

Com ts.panelMirror.enabled = true, o AC não força o bridge a ligar, então o espelhamento legado continua funcionando. O próprio espelhamento não roda enquanto tosun_db_bridge_enabled for "1".

Os comandos de console tosunac_db_status e tosunac_db_check mostram o estado do bridge e testam o oxmysql.

  1. Para controlar o bridge pelo server.cfg, adicione set tosun_db_bridge_manual "1" antes de ensure tosun-ac.
  2. Adicione set tosun_db_bridge_enabled com "1" ou "0".
  3. Adicione set tosun_db_bridge_money_write com "1" ou "0". Sem "1", player.money.set falha com write_disabled e não é anunciado ao painel.

Convars para desenvolvedores de scripts#

Estas convars só importam quando outro resource chama o AC. tosun_ac_trusted_resources decide quais resources podem chamar exports protegidos; as convars de bridge configuram os arquivos de bridge opcionais.

Os exports protegidos incluem SetExempt, SetPlayerExempt, os exports Pause, BypassDetection, addAdmin, whitelistPlayer, approveResource, ban, offlineBan, os exports webBridge e quarantine.

O console do servidor e o próprio tosun-ac são sempre confiáveis. Uma chamada não confiável é rejeitada; para cada par de resource e export, o AC imprime um aviso no console e uma linha de log no painel que citam esta convar. Com ts.EnforceExportCallerWhitelist = false, a chamada roda e só é registrada uma vez.

Quem chama confiável também usa o MarkTeleport sem o orçamento por jogador.

INTEGRATION.md e bridge/INTEGRATION.txt mostram set para tosun_ac_resource e tosun_ac_bridge_client_ms. Use setr: a bridge do cliente lê as duas no cliente.

Também existem eventos e exports internos do AC. Eles são protegidos e não devem ser chamados pelos seus resources.

# Resources autorizados a chamar exports protegidos (separados por vírgula ou espaço)
set tosun_ac_trusted_resources "my-housing,my-clothing"

# Arquivos de bridge dentro do seu próprio resource
setr tosun_ac_resource "tosun-ac"
setr tosun_ac_bridge_client_ms "60000"
set tosun_ac_bridge_server_ms "60000"
set tosun_ac_bridge_cooldown_ms "750"

Permissões ACE#

Todas as ACEs que o Tosun AntiCheat verifica. Conceda as ACEs a um grupo e adicione a staff ao grupo com add_principal. Uma ACE que builtin.everyone também tem nunca torna ninguém staff.

ACE ou principalO que concedeLinha de exemplo
tosun.adminStatus de staff (isenção de punição e comandos de staff) e o menu de admin no jogo. Não libera tosunac_setup nem as varreduras manuais.add_ace group.admin tosun.admin allow
ts.adminO mesmo que tosun.admin.add_ace group.admin ts.admin allow
command.tsStatus de staff e o menu de admin. O próprio /ts é registrado sem restrição, então esta ACE é o marcador de função do AC, não uma barreira do FiveM.add_ace group.admin command.ts allow
command.ban, command.kickStatus de staff e o menu de admin, mesmo quando ts.txAdminAuth = false.add_ace group.admin command.ban allow
txadmin, tx.admin, txadmin.menu, txadmin.advanced, command.txadminSó status de staff. Sem menu de admin.Usually granted by txAdmin, or: add_ace group.admin txadmin.menu allow
command.resources, command.restartSó status de staff, enquanto ts.txAdminAuth = true. Sem menu de admin.Usually granted by txAdmin
command.screenshot, command.unbanSó isenção de punição, enquanto ts.txAdminAuth = true. Sem comandos de staff e sem menu de admin.Usually granted by txAdmin
group.admin, group.superadmin, group.moderator, group.godTestados como objetos ACE. Só dão status de staff e o menu se o nome resolver como uma ACE permitida para o jogador. Conceda também uma ACE explícita, como tosun.admin.add_principal identifier.license:YOUR_LICENSE_HEX group.admin
tosunac.adminUso no jogo de tosunac_setup, tosunac_backdoorscan e tosunac_eventscan (cada um também exige a sua ACE de comando) e de /banscreentest. Sem status de staff e sem menu.add_ace group.admin tosunac.admin allow
tosunac.banscreen.test/banscreentest no jogo, que mostra a prévia da tela de ban só para quem executa.add_ace group.admin tosunac.banscreen.test allow
command.tosunac_setupComando restrito. Um jogador também precisa de tosunac.admin.add_ace group.admin command.tosunac_setup allow
command.tosunac_backdoorscanComando restrito. Um jogador também precisa de tosunac.admin.add_ace group.admin command.tosunac_backdoorscan allow
command.tosunac_eventscanComando restrito. Um jogador também precisa de tosunac.admin.add_ace group.admin command.tosunac_eventscan allow
command.ts_setlangComando restrito. Um jogador também precisa de status de staff.add_ace group.admin command.ts_setlang allow
command.ts_v9_helpComando restrito sem nenhuma outra verificação. A saída vai para o console do servidor.add_ace group.admin command.ts_v9_help allow
command.tosunac_integration, command.tosunac_doctor, command.ac_cleanup, command.tosunac_db_status, command.tosunac_db_checkNada no jogo. Estes comandos são só de console e ignoram jogadores mesmo quando eles têm a ACE.Run them from the server console
command (bare ACE)Nunca dá staff quando builtin.everyone a tem. Mas é uma das ACEs que pulam a verificação de IP na conexão, e essa verificação não filtra builtin.everyone.Do not use: add_ace builtin.everyone command allow
ts.AdminBypassAces (config list)Concede status de staff, não o menu. Entradas padrão: command.ts, as ACEs do txAdmin, command.kick, command.ban, os quatro nomes de grupo, tosun.admin e ts.admin. Nunca adicione a ACE command sozinha.ts.AdminBypassAces = { "command.ts", ..., "your.staff.ace" }

Comandos restritos e só de console#

Dez comandos do AC são registrados como restritos. No jogo, o FiveM então exige a ACE de comando correspondente, além da verificação do próprio AC. Cinco dos dez ignoram jogadores completamente.

banscreentest não é restrito. A forma de console banscreentest playerId não exige ACE; o /banscreentest no jogo exige tosunac.banscreen.test ou tosunac.admin. Negações de tosunac_setup, das duas varreduras e de banscreentest são silenciosas.

tosunac_setup não aprova nada se a varredura de backdoors ou de assinaturas não terminar, inclusive quando ts.BackdoorGuard está desativado. Uma segunda execução enquanto outra está em andamento é recusada.

ComandoQuem pode executarO que faz
tosunac_setupConsole, ou um jogador com command.tosunac_setup e tosunac.adminSetup automático: detecta o framework, roda as varreduras de backdoors e de assinaturas, aprova os resources limpos na baseline e cataloga os eventos sem confiar neles. Rode só em um servidor que você sabe que está limpo.
tosunac_backdoorscanConsole, ou command.tosunac_backdoorscan e tosunac.adminVarredura manual de backdoors. Não é registrado quando ts.BackdoorGuard.enabled = false.
tosunac_eventscanConsole, ou command.tosunac_eventscan e tosunac.adminVarredura manual de eventos e triggers, enviada ao painel. Não é registrado quando ts.EventScanner.enabled = false.
ts_setlang playerId langConsole, ou command.ts_setlang e status de staffDefine o idioma do AC de um jogador. Não verifica se o ID do jogador está online.
ts_v9_helpConsole, ou command.ts_v9_helpImprime a lista de comandos extras da v9 no console do servidor.
tosunac_integrationSó consoleImprime o modo de aplicação dos exports, os resources confiáveis e a origem de cada um, e as últimas 20 negações.
tosunac_doctorSó consoleRelatório de risco das configurações aplicadas. Também roda 90 s depois do início. A saída é em turco.
ac_cleanupSó consoleExecuta agora a limpeza de retenção do banco de dados. A contagem impressa normalmente fica abaixo do real. Não é registrado quando ts.v12.enableAutoCleanup = false.
tosunac_db_statusSó consoleImprime o estado do DB bridge, o estado da licença, o estado do oxmysql e o framework.
tosunac_db_checkSó consoleExecuta SELECT 1 pelo oxmysql e imprime sucesso ou falha.

Como a staff é reconhecida#

O AC tem dois níveis de acesso separados. O status de staff dá isenção de punição e os comandos de staff (subcomandos de /ts e os comandos ts_). O acesso ao menu abre o menu de admin no jogo. Algumas fontes concedem só um deles.

A isenção de punição para a staff só vale enquanto ts.AdminBypassDetections = true (padrão) e ts.Debug = false (padrão).

O acesso ao menu também exige que ts.AdminMenu.enable e ts.AdminMenu.enabled continuem true. Quando qualquer um é false, o menu, a tecla F7 e os comandos de cliente das ferramentas de admin não são registrados.

Membros da staff com status de staff mas sem acesso ao menu, por exemplo staff só do txAdmin, ainda podem apertar F7. A requisição é negada e registrada.

FonteOnde você defineStatus de staffMenu de adminObservações
ACE tosun.admin, ts.admin, command.tsserver.cfg add_aceSimSimForma recomendada de conceder staff.
ACE command.ban, command.kickserver.cfg ou txAdminSimSimContinua staff mesmo com ts.txAdminAuth = false.
Principals group.admin, group.superadmin, group.moderator, group.godserver.cfg add_principalSó se o nome resolver como uma ACE permitidaMesma condiçãoTestados como objetos ACE. Adicione também uma ACE explícita.
ACE txadmin, tx.admin, txadmin.menu, txadmin.advanced, command.txadmintxAdmin ou add_aceSimNãoAdmins do txAdmin precisam de tosun.admin ou de uma permissão no painel para o menu.
ACE command.resources, command.restarttxAdminSó enquanto ts.txAdminAuth = trueNãoNormalmente concedidas pelo txAdmin.
ACE command.screenshot, command.unbantxAdminSó isenção, enquanto ts.txAdminAuth = trueNãoSem comandos de staff.
ts.AdminBypassAcesconfigs/anticheat_config.luaSimNãoAs entradas que você adiciona não abrem o menu.
Adminsadmins/anticheat_admins.luaSimSimArquivo exclusivo do servidor.
ts.AdminMenu.allowedIdsconfigs/anticheat_config.luaSimSim"all" e "staff" não são identificadores e não concedem nada.
ts.AdminBypassIdentifiersconfigs/anticheat_config.luaSimNãoO comentário da config também lista ip:x.x.x.x.
Panel grants (ac_v7_admin_grants)Painel webSimSimUm acerto fica em cache por 5 s, uma falha por 30 s.
addAdmin exportUm resource confiávelSimSimAté removeAdmin ser chamado.
Player whitelist (ac_whitelist) and runtime whitelistPainel web ou exports de whitelistNão (só isenção de punição)NãoIgnorado enquanto ts.Debug = true.
ACE tosunac.adminserver.cfg add_aceNãoNãoLibera o setup, as varreduras manuais e a prévia da tela de ban.

Listas de identificadores: Admins, allowedIds e AdminBypassIdentifiers#

Use identificadores completos, como valores license:, steam:, discord: ou fivem:. Para a staff, prefira admins/anticheat_admins.lua ou permissões no painel: esse arquivo é exclusivo do servidor, enquanto configs/anticheat_config.lua é enviado para todos os clientes.

  • Admins: uma entrada corresponde ao identificador completo (sem diferenciar maiúsculas de minúsculas) ou à parte depois do prefixo. Concede status de staff e o menu.
  • ts.AdminMenu.allowedIds: status de staff e o menu. Os valores "all" e "staff" não concedem nada.
  • ts.AdminBypassIdentifiers: só status de staff e isenção, sem menu.
-- admins/anticheat_admins.lua (só no servidor)
Admins = {
    "license:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "steam:11000010xxxxxxxx",
    "discord:123456789012345678",
}

-- configs/anticheat_config.lua (compartilhado, enviado aos clientes)
ts.AdminMenu = {
    -- as outras chaves do menu ficam como vieram
    allowedIds = {
        "license:YOUR_EXACT_PLAYER_IDENTIFIER",
    },
}
ts.AdminBypassIdentifiers = {}  -- status de staff e isenção, sem menu

Permissões do painel e o export addAdmin#

As permissões do painel são linhas em ac_v7_admin_grants que você cria no painel web. Uma permissão ativa corresponde à license ou license2 do jogador, com ou sem o prefixo, e dá status de staff e acesso ao menu.

Uma resposta positiva fica em cache por 5 s e uma negativa por 30 s, então uma nova permissão pode levar até 30 s para valer para um jogador que já foi verificado.

Um resource confiável pode chamar o export addAdmin para dar a um jogador status de staff e acesso ao menu até removeAdmin ser chamado. Enquanto ts.EnforceExportCallerWhitelist for true, quem chama precisa estar listado em tosun_ac_trusted_resources ou em ts.ExportCallerWhitelist.

A whitelist de jogadores não é staff#

A whitelist de jogadores do painel (ac_whitelist) e os identificadores adicionados em runtime pelos exports de whitelist só impedem punições. Eles não dão comandos de staff nem menu de admin.

  • Uma linha conta enquanto expires_at estiver vazio ou no futuro.
  • Valores aceitos: um identificador license, discord, steam ou fivem, ou um citizenid. Os prefixos são removidos.
  • As entradas de runtime ficam na memória e se perdem no restart.
  • As duas listas são ignoradas enquanto ts.Debug = true.

Configurações que mudam o tratamento da staff#

Estas chaves em configs/anticheat_config.lua mudam como a staff e os usuários do menu sem autorização são tratados.

ConfiguraçãoValor padrãoEfeito
ts.AdminBypassDetectionstruefalse torna a staff punível como qualquer jogador.
ts.txAdminAuthtruefalse desativa o caminho das ACEs de comando do txAdmin (command.resources, command.restart, command.screenshot, command.unban). command.ban e command.kick continuam sendo staff.
ts.Debugfalsetrue desliga as exceções de staff, whitelist, whitelist do painel e isenção, para que a staff possa testar as detecções em si mesma. Mantenha false em produção.
ts.NuiNeverBanUnauthorizedtruefalse pune jogadores que disparam eventos do menu de admin sem permissão, em vez de só registrar. A punição é ts.punishType.
ts.AdminMenu.enable, ts.AdminMenu.enabledtrue, truefalse em qualquer um dos dois desativa o menu de admin. enable = false também para o módulo de notificações de celular.
ts.AdminMenu.requireActionSignaturetruefalse desliga a assinatura das ações sensíveis do menu de admin.
ts.v12.bypassStaffIpChecktrueA staff pula as verificações de VPN, proxy, hosting e país na conexão.

builtin.everyone e a verificação de IP na conexão#

Toda verificação de ACE de staff e de menu ignora uma ACE que builtin.everyone também tem. Por isso add_ace builtin.everyone command allow não torna os jogadores staff. A verificação de IP na conexão funciona de outro jeito.

Enquanto ts.v12.bypassStaffIpCheck não for false, um jogador que está conectando pula a lista de países bloqueados e as recusas de VPN, proxy e hosting em qualquer um destes casos: o jogador é staff; o jogador tem a ACE command, txadmin, tx.admin, txadmin.menu, command.kick, command.ban ou um dos nomes group.admin, group.superadmin, group.moderator ou group.god; ou uma permissão ativa no painel corresponde exatamente à license do jogador.

Esta verificação usa testes de ACE simples, sem filtro de builtin.everyone. Em um servidor com add_ace builtin.everyone command allow, portanto, todo jogador pula as verificações de VPN e de país. A verificação de flood de entradas continua rodando antes da exceção.

Arquivo de webhooks do Discord#

configs/anticheat_webhooks.lua é exclusivo do servidor. Ele guarda uma URL de webhook do Discord por canal de log e o estilo dos embeds. Toda URL vem com o placeholder WEBHOOK_URL_BURAYA.

  • A sincronização HTTP do painel sobrescreve qualquer webhook para o qual ela envia uma URL não vazia.
  • Outros resources só recebem as URLs de webhook por getConfig('webhooks') quando são chamadores confiáveis.
  • Os logs de captura de tela rotulam o embed de Detections com ts.punishType em vez da punição resolvida, e também enviam para Webhooks.Bans sempre que ts.punishType é BAN.
  • Webhooks.WebhookAvatar define a imagem de avatar do embed.
Webhooks.Detections    = "https://discord.com/api/webhooks/..."
Webhooks.Bans          = "https://discord.com/api/webhooks/..."
Webhooks.AdminMenuLogs = "https://discord.com/api/webhooks/..."
Webhooks.Connections   = "https://discord.com/api/webhooks/..."
Webhooks.OCR           = "https://discord.com/api/webhooks/..."
Webhooks.Commands      = "https://discord.com/api/webhooks/..."
Webhooks.MoneyLogs     = "https://discord.com/api/webhooks/..."
Webhooks.ResourceLogs  = "https://discord.com/api/webhooks/..."

Webhooks.WebhookUsername = "Tosun AntiCheat"
Webhooks.WebhookColor    = 15285208
Webhooks.WebhookInlines  = true

Como o painel sobrescreve o arquivo de config#

A maioria dos valores em configs/anticheat_config.lua são padrões. O painel web guarda os seus próprios valores em ac_settings e em outras tabelas ac_, e esses valores vencem. Edite o arquivo só para valores que o painel não gerencia.

  • Cerca de 3 s depois do início, e depois a cada ts.ServerPerf.configSyncIntervalSec segundos (120 no padrão, mínimo 20, alternativa 60), as linhas de ac_settings sobrescrevem os valores ts.
  • Chaves com ponto, como AdminMenu.enable, gravam campos aninhados. Chaves planas legadas, como framework ou moneyCheck, são mapeadas primeiro.
  • Uma chave punishment_ grava ts.DetectionPunishments para aquela detecção. BAN e KICK são mantidos; qualquer outro valor vira LOG.
  • Os campos de ação são normalizados para ban, kick, log, cancel, reject ou stop. Qualquer outro valor vira log.
  • Chaves que começam com globalBan. são ignoradas.
  • As listas do painel substituem as listas da config: armas, blacklist de veículos, placas, lista de triggers, limites de eventos, resources na whitelist, palavras do OCR, as listas Blacklist, a lista de explosões e as whitelists de entidades. Os resources na whitelist e as palavras do OCR vindos do banco de dados são combinados em vez de substituídos.
  • Exceção: os handlers de ts.EventLimiter e ts.ProtectedEvents são registrados uma vez a partir do arquivo, no carregamento. Mudanças posteriores no painel não mudam a aplicação no servidor para eles.
  • Depois de uma mudança, só as chaves seguras para o cliente são reenviadas aos clientes.
  • Rode tosunac_doctor no console para revisar valores arriscados depois da sincronização com o painel.

Configurações principais#

Chaves de primeiro nível perto do início de configs/anticheat_config.lua. A maioria também pode ser definida pelo painel.

ConfiguraçãoValor padrãoO que faz
ts.Locale"tr"Idioma padrão do AC (ordem de alternativa: idioma do jogador, ts.Locale, en). Arquivos: ar, de, en, es, fr, pt, ru, tr, zh. Vem em turco: servidores em inglês devem definir "en" (em português, "pt"). O default_locale do painel pode substituí-lo.
ts.punishType'BAN'Punição alternativa para detecções sem mapeamento. Também é a punição dos bans manuais: o export ban, /ts ban, bans pelo menu de admin e bans pelo painel. LOG ou KICK transforma esses bans em logs ou kicks.
ts.Debugfalsetrue desativa as exceções de staff e de whitelist. Mantenha false em produção.
ts.txAdminAuth, ts.AdminBypassDetections, ts.NuiNeverBanUnauthorizedtrue, true, trueTratamento da staff. Veja Configurações que mudam o tratamento da staff.
ts.screenshotModule"screenshot-basic"Resource usado para as capturas de tela.
ts.banIDFormat11 = ABCD-1234, 2 = #1234.
ts.autoSQLfalsetrue cria as tabelas no início. O comentário da config diz para definir true na primeira instalação e voltar para false depois.
ts.Prefix, ts.showReason'Tosun AntiCheat', trueDefinem o formato das mensagens de kick e de ban.
ts.appealDiscord, ts.appealTicketUrlvendor linksAdicionado à mensagem de ban. appealDiscord vem com o Discord do fornecedor (https://discord.gg/9tCSJch) e também é a alternativa padrão. Defina o seu próprio link de apelação.
ts.pingOnDetectfalseAdiciona @everyone aos embeds de detecção. O texto é colocado dentro do objeto embed, não no content de primeiro nível da mensagem.
ts.chatMessagesfalseAnuncia as punições no chat.
ts.spoilerIPtrueEsconde os endereços IP em spoilers nos logs do Discord.
ts.needDiscordfalsetrue recusa jogadores que não têm identificador do Discord.
ts.maxUsernameLength-1Tamanho máximo do nome do jogador. -1 desativa a verificação.
ts.webPanelURL, ts.webPanelKey"", ""Deixe os dois em branco. Veja URL do painel e uploads de capturas de tela e as seções de credenciais.
ts.version"9.6.15"Só informativo. Em runtime é usada a versão do manifest.

Seções de configuração: detecções e punições#

Seções que decidem o que é detectado e com que rigor é punido.

SeçãoFinalidadeConfigurações que os donos costumam mudar
ts.DetectionPunishmentsPunição por chave de detecção: BAN, KICK ou LOG. Ordem: punição explícita, chave direta, alias, chave derivada e por fim ts.punishType.Entradas individuais. O painel pode sobrescrever cada uma. Padrão: BAN para sinais inequívocos, KICK para risco médio, LOG para os sensíveis ao contexto, como freecam, teleport, fastrun, invisibility e ocr.
ts.BanDurationsDuração do ban em horas por chave de detecção. 0 ou uma chave ausente significa permanente.["default"] (padrão 0 = permanente; os bans manuais também usam). As detecções de física têm tempo, por exemplo superjump, fastrun e teleport 72 h, noclip e godmode 168 h.
ts.confirmWindowBarreira de confirmação para detecções de física do cliente: velocidade, teleporte, noclip, superjump, vida e colete. Leituras com ping alto ou travadas de frame são ignoradas.Os padrões são os recomendados: confirmFrames 3, confirmMs 3000, maxPingMs 220. hardEscalateHits 8 em 90 s força uma punição mesmo com lag.
ts.v6EnforcementLimita as punições de heurísticas assinadas do cliente e de detecções de spam.maxAction ("KICK"). confirmHits 2 em confirmWindowSec 600 (mínimo 30).
Client detection toggles (ts.anti keys, thresholds, ts.confirmHits)Chaves simples de liga/desliga e limites para as detecções do lado do cliente.Desligue verificações individuais. Desligadas no padrão: antiRadar, fakeTriggerServerTraps, antiInfiniteStamina, antiPickups, antiClipboardPaste, antiGodmodeV2.
ts.OCR settingsOCR da tela em busca de palavras de menus de cheat.ts.OCR, ts.OCRCheckInterval (20000), ts.OCRWords. Todas as ações têm log como padrão, porque um texto de chat na tela corresponderia para todos que o veem. As palavras do painel são combinadas.
ts.quarantineIsolamento por routing bucket usado pelo export quarantine em vez de um ban.defaultSeconds 300, maxSeconds 1800, autoQuarantine (desligado).
ts.autoEvidenceEvidência curta e automática em vídeo depois de detecções graves, enquanto o jogador está online. Exige tosun_render.durationSec 25, cooldownSec 120, triggers.
ts.forensicsGrafo de evasão de ban que liga identidades com HWID e license compartilhados a grupos banidos.Comece com evasionAction "log". linkByIp vem desligado.
ts.v16Verificação de movimento do lado do servidor.action ("ban"). teleportAction ("log"): mude para kick quando todos os scripts que teleportam jogadores chamarem MarkTeleport.
ts.aimGuardAnti-aimbot estatístico nos eventos de dano de armas. A staff fica isenta enquanto AdminBypassDetections está ligado.magicBulletTargets 4 (kick), fireRatePerSec 22 (kick), headshotRatio 0.90 (log).
ts.combatGuardLimites de vida e colete do lado do servidor e uma verificação de dano de arma excessivo.healthCap 250, armorCap 105, weaponDamageCap 600. As duas ações são kick.

Seções de configuração: proteções do lado do servidor#

Proteções que rodam no servidor. Várias delas cancelam o evento primeiro e só punem depois de strikes repetidos.

SeçãoFinalidadeConfigurações que os donos costumam mudar
ts.netEventsVerificações com autoridade do servidor sobre os eventos do jogo.Por subseção: action, strikes, windowMs, cancel. Padrão: weapons ban com 2 em 60 s; respawn kick com 6 em 120 s; vehicleComponent log; explosionDistance kick a 250 m, 3 strikes; damageDistance ban a 600 m, 4.
ts.entityFloodLimite de taxa de spawn por jogador. Spawns acima do limite são cancelados.maxPerSec 30, banAfterFloods 3, action ("ban").
ts.crashGuardLimites de tamanho, profundidade e validade para valores de state bag e payloads de eventos.action ("kick"), strikes 3 em 60 s.
ts.serverAuthorityLê o estado replicado pelo OneSync para pegar superjump, multiplicadores de dano e de defesa, armas na blacklist, godmode, invisibilidade, noclip e foco da câmera.Por verificação: enabled, action, confirm. As verificações de alta confiança dão kick; as sensíveis ao contexto só registram.
ts.shieldAiEscudo contra spawn de entidades. Spawns de veículos e peds que não podem ser ligados a um resource são cancelados.action ("cancel"), strikes 3, maxObjectPerSec 25, maxVehiclePerSec 4, maxPedPerSec 8, scriptWhitelist. O tosunac_doctor aponta strictScriptWhitelist = true.
ts.shieldExplosionCancela explosões invisíveis ou inaudíveis e só pune depois de repetições.action ("kick"), strikes 5 em 60 s.
ts.premiumGuardProteção contra spam de partículas, projéteis, request-control, sons e ragdoll, e contra abuso de veículo-bomba.Toda ação tem log como padrão. Limites por segundo para cada tipo.
ts.vehicleGuardDetecta veículos sendo arremessados ou lançados.action ("kick"), strikeLimit 3, stuntMode, excludeAirVehicles.
ts.weaponInventoryMarca uma arma em mãos que não está no inventário do ox_inventory, QB ou ESX do jogador.action ("log"), removeWeapon (desligado), ignore, extraWeapons. Scripts que dão armas fora do inventário devem chamar o export AllowWeapon a partir de um resource confiável.
ts.entityGuardDetecta spawns de objetos em massa e apaga os objetos criados por jogadores expulsos ou banidos.massThreshold 50 em 60 s, cleanupOnBan.
ts.rateGuardLimites por jogador e por segundo para eventos de explosão, ptfx, fogo e projéteis.action ("kick"), explosionsPerSec 12, ptfxPerSec 25, firePerSec 15, projectilesPerSec 30.
ts.entityWhitelist (and its vehicle, ped, object, projectile and particle lists)Modo opcional de lista de permissão por tipo de entidade.Todos os modos vêm desligados, então só valem as blacklists e o escudo contra spawn. As tabelas de whitelist de entidades do painel substituem as listas.
ts.SpamGuardLimites por jogador para eventos de servidor e comandos de chat. Desligado com ts.SpamGuard = false, ou ts.antiServerEventSpam / ts.antiCommandSpam = false.serverEventPerSec 25, commandPerSec 8, autoKickAfter 1. A parte de eventos de servidor escuta um evento que o resource nunca dispara; confira a sua build, senão só o limite de comandos vale.
ts.EventLimiterLimite de chamadas por evento numa janela fixa de 5 s. No limite (quando a contagem chega ao valor), gera Event Spam (server_event_spam, KICK).Adicione ou aumente limites no arquivo. Os handlers são registrados uma vez no carregamento, então os limites de eventos do painel não mudam a aplicação.
ts.antiDump, ts.nativeIntegrity, ts.autoExemptAnti-dump com honeypot; armadilha no cliente contra natives de detecção sobrescritos; isenções automáticas durante eventos de aparência, multichar e morte.antiDump.action ("ban"), nativeIntegrity.checkMs 12000.
ts.shieldCamada de hook de natives em JS, verificações ocultas de NUI e evidências em captura de tela e vídeo de gameplay antes de um ban (o vídeo exige tosun_render).banScreenshot, banGameplayVideo.
ts.nativeGuardIntegração com o complemento externo para Windows tosun-guard.exe.action ("log"), requireGuard (false).
ts.guardWatchdog do resource de cliente separado tosun-guard. Não pune ninguém quando o tosun-guard não está instalado.action ("kick").
ts.launcherGateExige, na conexão, uma varredura limpa e recente do launcher a partir do IP do jogador, verificada pelo painel.enabled (false), action ("reject"), failOpen (false), downloadUrl, message (em turco por padrão).

Seções de configuração: conexão, admin e painel#

Seções para jogadores entrando, o menu de admin, a conexão com o painel e o comportamento do servidor inteiro.

SeçãoFinalidadeConfigurações que os donos costumam mudar
ts.FrameworkEscolha do framework e detecção de picos de dinheiro.framework: esx, qb, qbox, standalone ou "auto". Vem como "qb", que não é detectado automaticamente, então servidores ESX e Qbox precisam mudar. moneyCheckThreshold 5000000, moneySoftThreshold 75000.
ts.AutoSetupDetecção passiva do framework quando framework é "auto" ou "": qbx_core, depois qb-core, es_extended, vrp, ox_core.autoDetectFramework (true).
ts.v12Autoproteção, verificações de VPN, proxy e hosting na conexão (ipapi.co) e limpeza de retenção do banco de dados.blockVpn, blockProxy, blockHosting (desligados), bypassStaffIpCheck, as chaves de retenção keep (logs de admin 60 dias, detecções 90 dias).
ts.HeartBeatWatchdog do cliente: o intervalo permitido entre os relatórios do cliente e um prazo para o primeiro relatório válido.maxTime 90 s (mínimo 15). firstHeartbeatDeadline 180 s (mínimo 60): jogadores sem um primeiro relatório válido até lá são derrubados.
ts.NetworkJoinRitmo de entrada que evita estouro de eventos confiáveis, e o período de tolerância antes de as detecções serem armadas.minReadyDelayMs (padrão 15000; guias antigos dizem 45000), postFrameworkSettleMs 5000.
ts.AdminMenuMenu de admin no jogo, aberto com /ts menu, /tsmenu ou F7.enable, enabled, allowedIds, openKeyControl (168 = F7), espMaxDist, noclipInvisible, requireActionSignature. allowEsp, allowFreecam e allowDelete são aplicados só no código do cliente.
ts.PhoneNotifyNotificações do AC nos celulares da staff: qb-phone, qs-smartphone, lb-phone, yseries, gks_phone, npwd, roadphone.Só heartbeat é lido (uma notificação de status a cada 15 minutos). As notificações de ban e de detecção sempre disparam enquanto ts.AdminMenu.enable está ligado.
ts.LiveWatchVisualização da tela ao vivo pelo menu de admin e pelo painel.interval 1500, quality 0.7, maxSeconds 600, timeout 12000.
ts.ServerPerfEquilíbrio entre carga no servidor e latência das atualizações.configSyncIntervalSec 120 (mínimo 20), panelPlayerSyncIntervalMs 12000, liveWatchDbPollMs 4500.
ts.CentralAPI central do painel v9: handshake, polling e sincronização de idioma.pollIntervalSec 5 (limitado de 5 a 60). Deixe token em branco aqui e use tosun_ac_central_token.
ts.cloudBridgeEnvia pontuações de ameaça e a saída do console ao painel e consulta uma lista central de inteligência de ameaças na conexão.consoleForward vem ligado: toda linha do console do servidor vai para o painel em lotes. threatIntelAction ("log"), threatIntelMinScore 70.
ts.panelMirrorEnvio completo legado do banco de dados para o painel. Opcional, precisa ser ativado.enabled (false). Enquanto ele está ligado, o DB bridge não é ativado automaticamente.
ts.connectingCardCartão adaptativo mostrado enquanto os jogadores conectam.title ("TOSUN RP"), discord (usa ts.appealDiscord como alternativa), website, rules, image, tips.
ts.banScreen (panel only)Aviso de ban em tela cheia antes do drop. Não está no arquivo; configure no painel.enabled (desligado), seconds de 3 a 15 (8), mediaType, imageUrl (só https), youtubeId, title (80 caracteres), message (300 caracteres), showReason. Pré-visualize com banscreentest.
ts.PanelDangerousActionIPsLista de IPs permitidos para as ações do painel kick_all, stop_resource e broadcast.Vazia significa só registro de auditoria. Adicione o IP do servidor do painel para bloquear outras origens.
ts.licenseLockProteção de distribuição: formato da licença e verificação do ID do servidor.enabled (false), action (log, reject ou stop), allowedServerIds, failClosed. Deixe licenseKey em branco aqui.
ts.NpcBlockerRemove NPCs ambientes e o trânsito; entidades de missão, de script e da whitelist ficam.enabled (false), blockPeds, blockVehicles, whitelistModels.
ts.hardening, ts.cfgAuditProteção de convars do FiveM e auditoria somente leitura do server.cfg.Veja Chaves de endurecimento e saída.

Seções de configuração: resources, eventos e integração#

Seções para confiança em resources, scanners e a integração para desenvolvedores. As linhas marcadas para desenvolvedores só importam quando os seus próprios scripts chamam o AC.

SeçãoFinalidadeConfigurações que os donos costumam mudar
ts.whitelistedResourcesResources essenciais que o AC sempre trata como seguros: frameworks, oxmysql, chat, monitor, resources ox_.Adicione os seus resources essenciais. A sincronização HTTP do painel substitui a lista; a sincronização do DB adiciona a ela.
ts.ResourceGuardBaseline de resources, verificações de alteração de hash e o scanner de assinaturas de cheat.signatureScan, signatureScanInterval 600000, autoStopCheatResources (true), autoBlockInfected (false), deepScan (false).
ts.BackdoorGuardVarre os arquivos dos resources em busca de padrões de backdoor, RCE e exfiltração.autoQuarantine (false; com true, resources com um achado crítico são parados), ignoreResources, scanIntervalMs 1800000.
ts.EventScannerCataloga no painel os eventos de rede e os triggers de todos os resources.autoProtect (false; true os marca como protegidos), ignoreResources.
ts.ProtectedEvents, ts.SafeEventRateWindow, ts.SafeEventRateLimit, ts.SafeEventMaxArgsPara desenvolvedores. Eventos que precisam ser disparados com TriggerSafeServerEvent. Chamadas válidas são repassadas para o nome do evento mais :safe. Chamadas inválidas são rejeitadas e registradas, nunca punidas.Adicione só os seus próprios eventos que usam a API de cliente do SafeEvents. Limite de 30 chamadas a cada 10 s; SafeEventMaxArgs 64. O handler :safe ainda precisa verificar permissões.
ts.EnforceExportCallerWhitelist, ts.ExportCallerWhitelistPara desenvolvedores. Resources confiáveis para exports protegidos.Lista padrão: qbx_core, qb-core, es_extended, ox_inventory, ox_lib. false = modo de auditoria: as chamadas rodam e são registradas uma vez. MarkTeleport não exige confiança.
ts.IntegrationPara desenvolvedores. Limites do MarkTeleport.markTeleportMaxMs 15000 por chamada (1000 a 60000, qualquer chamador); markTeleportBudgetMs 180000 por jogador a cada 10 minutos (só chamadores não confiáveis).
ts.DetectionExempt (alias ts.MenuDetectionExempt)Para desenvolvedores. Isenções automáticas curtas quando disparam eventos conhecidos de roupas, casas, garagens ou revive.clientEvents, localEvents, serverEvents (event, durationMs, resource, always). Os eventos de servidor só aliviam as verificações de movimento e de visibilidade: no máximo 120 s por evento e budgetMsPer10Min 240000 por jogador.
ts.AdminBypassAces, ts.AdminBypassIdentifiersListas de ACEs e de identificadores da staff.Veja Como a staff é reconhecida.

Seções de configuração: listas#

Listas padrão em configs/anticheat_config.lua. A maioria é substituída pelas tabelas do painel na sincronização.

SeçãoFinalidadeConfigurações que os donos costumam mudar
ts.Weapons, ts.vehicleBlacklist, ts.Plates, ts.BlacklistObjects, ts.pedBlacklist, ts.BlacklistPeds, ts.BlacklistCommands, ts.BlacklistWords, ts.BlacklistNames, ts.BlacklistKeys, ts.BlacklistAnimsBlacklists padrão. A lista de armas também define BAN, KICK ou LOG por arma.Remova os itens que os seus empregos distribuem. Os comentários da config citam os helicópteros da PD e do EMS e os peds SWAT e hwaycop.
ts.BlacklistPlayerModelsModelos de ped de jogador reportados depois de 3 amostras com 5 s de intervalo (cerca de 15 s). Chave de punição peds (KICK).O loop do cliente não verifica, ele próprio, a chave antiPeds.
ts.BlacklistSpritesDicionários de texturas de menus de cheat.O painel pode substituí-la.
ts.detectedKeysTeclas que acionam overlays.Padrão {44, 73, 104}.
ts.explosionBlacklistTipos de explosão exóticos que são cancelados e punidos.BAN, KICK ou LOG por tipo. Sincronizado com o painel.
ts.triggerList, ts.fakeTriggers, ts.fakeTriggerStrikeMax, ts.fakeTriggerServerTrapsNomes de eventos honeypot que os menus de cheat chamam. Entradas com type server viram armadilhas de servidor enquanto ts.fakeTriggers está ligado.Nunca adicione eventos reais de framework. fakeTriggerStrikeMax 1, fakeTriggerServerTraps desligado.
ts.whitelistedCoords, ts.TaskListWhitelist de coordenadas do cliente e tarefas de ped na blacklist.As duas vêm vazias.

Chaves que não fazem nada e chaves que faltam no arquivo#

Algumas chaves em configs/anticheat_config.lua não são lidas pelo código na 9.6.15. Mudá-las não tem efeito.

O código também lê chaves que o arquivo não contém. Adicione-as você mesmo se precisar: ts.v12.joinFloodWindowSec (60), ts.v12.joinFloodMaxJoins (6), ts.v12.bannedCountries (códigos de país; uma lista geográfica de bloqueio), ts.v6Enforcement.heuristic (substitui a lista de tipos heurísticos), ts.LiveWatch.fps (30), ts.SafeEventMaxArgs (64) e always = true nos eventos de servidor de ts.DetectionExempt.

Estas chaves de cliente são lidas, mas não estão no arquivo, e ficam ligadas a menos que sejam definidas como false: ts.antiScreenshotBypass, ts.antiRateOfFire e ts.antiNetOwnership. ts.microJitterMeanMin (0.5) também é lida, mas não está no arquivo.

  • ts.NetworkJoin.minimalSync
  • ts.AdminMenu.espMaxDistance e ts.AdminMenu.screenshotTimeout (o ESP usa espMaxDist)
  • ts.AdminMenu.permissionLevel (um rótulo legado; o acesso vem de ACEs, listas e permissões)
  • ts.ResourceGuard.strictClientDiff
  • ts.LiveWatch.enabled, preferTosunRender e maxConcurrent
  • ts.PhoneNotify.enabled, onBan e onDetect

Comentários do arquivo de config que estão desatualizados#

Alguns comentários dentro de configs/anticheat_config.lua descrevem um comportamento antigo. O código funciona assim.

  • O comentário diz que as configurações do painel sincronizam de novo a cada 30 s. O intervalo é ts.ServerPerf.configSyncIntervalSec (120 s no padrão).
  • O comentário diz que o tosunac_setup coloca eventos na whitelist. Ele só os cataloga; quem decide a proteção é ts.EventScanner.autoProtect.
  • O comentário de ts.ProtectedEvents avisa que eventos de framework causam bans falsos. Chamadas sem chave são rejeitadas e registradas, nunca punidas.
  • O comentário de ts.EventLimiter diz que ele age quando o limite é excedido. Ele dispara quando a contagem chega ao valor.
  • O comentário da bridge recomenda setr para as quatro convars da bridge. Só tosun_ac_resource e tosun_ac_bridge_client_ms precisam de setr.
  • O comentário de ts.Locale omite ar, mas locales/ar.json vem incluído.

Convars de endurecimento do FiveM que o AC verifica#

Dois módulos leem convars do FiveM no início. A proteção de convars (ts.hardening) roda cerca de 8 s depois do início e trata um valor não definido como fraco. A auditoria do server.cfg (ts.cfgAudit) roda 15 s depois do início e é somente leitura.

ConvarRecomendadoVerificado porAplicado pelo autoApply
sv_stateBagStrictModetrueProteção de convarsSim
sv_filterRequestControl2Proteção de convarsSim
sv_enableNetworkedSoundsfalseProteção de convarsSim
sv_enableNetworkedPhoneExplosionsfalseProteção de convarsSim
sv_enableNetworkedScriptEntityStatesfalseProteção de convarsSim
sv_scriptHookAllowedfalseProteção de convars; a auditoria também avisa quando é trueSim
sv_entityLockdownrelaxed (strict also passes)Proteção de convars, só relatórioNão. Pode quebrar scripts que dão spawn em veículos pelo cliente; teste antes.
sv_pureLevel1 or higherProteção de convars, só relatórioNão
onesyncon (legacy also passes)Auditoria; também é uma dependência do manifestNão
sv_lanfalseA auditoria avisa quando é trueNão
sv_authMinTrust4 or higher (unset reads as 5)AuditoriaNão
sv_enforceGameBuildany build numberA auditoria avisa quando está vaziaNão

Chaves de endurecimento e saída#

As duas verificações só geram relatório por padrão. Mude isso em configs/anticheat_config.lua.

  • ts.hardening.enabled = false pula a proteção de convars.
  • ts.hardening.autoApply = true (padrão false) deixa o próprio AC executar set para as seis convars seguras. sv_entityLockdown e sv_pureLevel nunca são aplicadas automaticamente.
  • ts.cfgAudit.enabled = false desliga a auditoria do server.cfg.
  • A proteção de convars imprime um aviso no console e grava uma linha em ac_detections (detection_type hardening_missing) que lista todas as convars fracas.
  • A auditoria imprime um aviso no console e grava uma linha em admin_logs com o número de configurações fracas.
  • O texto no console das duas verificações é fixo em turco. Cada linha de aviso da proteção mostra a linha set exata a adicionar.
  • tosunac_doctor é um relatório de console separado sobre configurações arriscadas do AC, não sobre convars do FiveM.

Erros comuns#

Confira estes pontos antes de abrir um ticket de suporte.

  • Credenciais definidas com setr ou sets: chegam a todos os clientes ou às informações públicas do servidor.
  • Credenciais colocadas depois de ensure tosun-ac: só são lidas no próximo restart do resource.
  • Uma chave do painel em configs/anticheat_config.lua: o arquivo é enviado aos clientes e o console imprime um aviso MIGRATION.
  • tosun_render não iniciado: é uma dependência obrigatória.
  • ts.Framework.framework deixado em "qb" em um servidor ESX ou Qbox.
  • ts.Locale deixado em "tr" em um servidor que não usa turco.
  • ts.appealDiscord deixado com o link do Discord do fornecedor.
  • ts.punishType definido como LOG ou KICK: os bans manuais também viram logs ou kicks.
  • add_ace builtin.everyone command allow: todo jogador pula as verificações de VPN e de país.
  • Esperar que tosun.admin libere o tosunac_setup: isso exige tosunac.admin mais command.tosunac_setup.
  • Esperar que os admins do txAdmin abram o menu do AC: as ACEs do txAdmin dão só status de staff. Adicione tosun.admin ou uma permissão no painel.
  • set tosun_db_bridge_enabled "0" sem tosun_db_bridge_manual "1": a linha é ignorada.
  • ts.Debug deixado em true: as exceções de staff e de whitelist ficam desligadas.