Aller au guide

Documentation 9.6.24

server.cfg, convars et permissions

Cette page liste toutes les convars lues par Tosun AntiCheat, toutes les permissions ACE qu'il vérifie, ainsi que les fichiers et sections de configuration que vous pouvez modifier. Elle commence par un bloc server.cfg complet et couvre aussi les convars de durcissement FiveM que l'AC contrôle au démarrage.

Où se trouve la configuration#

Tosun AntiCheat lit ses réglages depuis server.cfg, quatre fichiers de la ressource et le panel web. Les identifiants secrets n'ont leur place que dans des emplacements réservés au serveur. configs/anticheat_config.lua est un script partagé : le serveur l'envoie donc à chaque client.

Fichier ou emplacementChargé surContenu
server.cfgServeurConvars (licence, clé du panel, ressources de confiance), permissions ACE et convars de durcissement FiveM.
configs/anticheat_server.luaServeur uniquement, avant les scripts serveur de l'ACSolution de repli pour les identifiants quand vous n'utilisez pas les convars : panelKey, centralToken et licenseKey.
configs/anticheat_config.luaPartagé : serveur et chaque clientTous les réglages ts : détections, sanctions, guards, menu admin et listes. N'y mettez jamais de clé, de jeton ou de licence.
configs/anticheat_webhooks.luaServeur uniquementURL des webhooks Discord et style des embeds.
admins/anticheat_admins.luaServeur uniquementLa liste d'identifiants Admins (statut staff et menu admin).
Web panel (ac_settings and ac_ tables)Synchronisé vers le serveurRemplace la plupart des valeurs de la config environ 3 s après le démarrage, puis toutes les ts.ServerPerf.configSyncIntervalSec secondes (120 par défaut).

Exemple complet de server.cfg#

Un bloc complet pour une installation type. L'ordre compte : les dépendances et les convars d'identifiants doivent venir avant ensure tosun-ac, car les identifiants sont résolus une seule fois au chargement de la ressource. Les lignes qui commencent par un seul # sont facultatives ; retirez le # pour les utiliser.

## ---------- Tosun AntiCheat : bloc server.cfg ----------
## OneSync est une dépendance du manifeste (txAdmin peut aussi l'activer).
set onesync on

## Dépendances : démarrez-les avant tosun-ac.
## oxmysql et tosun_render sont des dépendances obligatoires.
## screenshot-basic est le ts.screenshotModule par défaut.
## Configurez mysql_connection_string avant ensure oxmysql (voir le guide MySQL).
ensure oxmysql
ensure screenshot-basic
ensure tosun_render

## Identifiants : utilisez set (jamais setr ni sets) et placez-les AU-DESSUS de ensure tosun-ac.
## Ils sont lus une seule fois au chargement de la ressource.
## Format de licence : tac_live_ suivi de 40 caractères hexadécimaux en minuscules.
set tosun_ac_license "YOUR_LICENSE_KEY"
## Facultatif : si elle est vide, la clé du panel est chargée depuis panel_settings dans la base du jeu.
# set tosun_ac_panel_key "YOUR_PANEL_API_KEY"
# set tosun_ac_central_token "YOUR_FIVEM_SCOPED_TOKEN"
## Facultatif : utilisé uniquement par ts.licenseLock.
# set tosun_ac_server_id "server-1"

## Ressources autorisées à appeler les exports protégés de l'AC (séparées par des virgules).
set tosun_ac_trusted_resources "my-housing,my-clothing"

## Facultatif : adresse https publique du panel pour l'envoi des captures et des preuves.
# set ts_public_panel_url "https://panel.example.com"

## Facultatif : contrôler le DB bridge Tosun Connect depuis ce fichier.
## Sans la ligne manual (et avec ts.panelMirror désactivé), les deux convars du bridge sont forcées à "1".
# set tosun_db_bridge_manual "1"
# set tosun_db_bridge_enabled "1"
# set tosun_db_bridge_money_write "0"

## Facultatif : désactiver l'enregistrement du temps de jeu (qb, qbcore et qbox uniquement).
# set tosun_panel_playtime "0"

## Facultatif, pour les intégrateurs qui utilisent les fichiers bridge. Les clients les lisent : utilisez donc setr.
# setr tosun_ac_resource "tosun-ac"
# setr tosun_ac_bridge_client_ms "60000"

ensure tosun-ac

## ---------- Permissions du staff ----------
## Statut staff et menu admin en jeu :
add_ace group.admin tosun.admin allow
## tosunac_setup, les scans manuels et l'aperçu de l'écran 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
## Une ligne par membre du staff :
add_principal identifier.license:YOUR_LICENSE_HEX group.admin

## ---------- Convars de durcissement FiveM vérifiées par l'AC au démarrage ----------
set sv_stateBagStrictMode true
set sv_filterRequestControl 2
set sv_enableNetworkedSounds false
set sv_enableNetworkedPhoneExplosions false
set sv_enableNetworkedScriptEntityStates false
set sv_scriptHookAllowed false
## Testez d'abord : relaxed ou strict peut casser les scripts qui font apparaître des véhicules depuis le client.
set sv_entityLockdown relaxed
set sv_pureLevel 1
## L'audit de server.cfg avertit tant que cette valeur est vide :
# set sv_enforceGameBuild YOUR_GAME_BUILD

Règles pour le bloc server.cfg#

Suivez ces règles quand vous adaptez l'exemple à votre serveur.

  • Démarrez oxmysql et tosun_render avant tosun-ac. Le manifeste déclare comme dépendances le build serveur 4890 ou plus récent, OneSync, oxmysql et tosun_render.
  • Démarrez screenshot-basic si vous gardez le ts.screenshotModule par défaut.
  • Placez chaque ligne set tosun_ac_ d'identifiant avant ensure tosun-ac. Les valeurs sont lues une seule fois au chargement ; un changement ultérieur nécessite un redémarrage de la ressource.
  • Utilisez set pour les identifiants. setr réplique la valeur vers chaque client, et sets la publie dans les informations publiques du serveur.
  • N'utilisez setr que pour les convars lues par les clients : ts_screen_upload, tosun_ac_resource et tosun_ac_bridge_client_ms.
  • Aucune ligne de DB bridge n'est nécessaire. Depuis la 9.6.14, le bridge est actif par défaut, et les lignes set ... "0" sont ignorées sauf si tosun_db_bridge_manual vaut "1" ou si ts.panelMirror.enabled = true.
  • Les anciens guides d'installation (INSTALLER-READY.md, INSTALLER-LICENSE.md, INSTALL-MULTILANG.md, CONFIG-PERFORMANCE-GUIDE.md) placent ensure avant les identifiants, mettent la clé du panel dans configs/anticheat_config.lua et omettent tosun_render. Suivez plutôt cette page.

Référence des convars#

Toutes les convars lues par Tosun AntiCheat que vous pouvez définir. Utilisez set, sauf si la colonne Remarques indique setr. L'AC écrit et lit aussi quelques convars internes qui lui sont propres ; elles sont protégées et vous ne devez pas les définir.

ConvarPar défautEffetRemarques
tosun_ac_license""Clé de licence du serveur. Lue une seule fois au chargement dans ts.licenseLock.licenseKey. Le verrou de licence et le DB bridge Tosun Connect relisent aussi la convar plus tard.Identifiant : set uniquement, avant ensure. Format tac_live_ plus 40 caractères hexadécimaux en minuscules. Le DB bridge la considère comme absente si elle ne fait pas entre 16 et 128 caractères sans espace.
tosun_ac_panel_key""Clé API du panel. Envoyée lors des appels sortants vers le panel et utilisée pour autoriser les requêtes entrantes du panel.Identifiant : set uniquement. Redémarrez après un changement. Si elle est vide, l'AC copie panel_settings.ac_api_key depuis la base du jeu. À chaque démarrage, elle est écrite en clair dans la ligne webPanelKey de ac_settings.
tosun_ac_central_token""Jeton d'authentification pour le contrôle de version et l'API centrale v9. Utilisé de préférence à la clé du panel.Identifiant : set uniquement.
tosun_ac_server_id"" (ts.licenseLock.serverId)Identifiant du serveur pour le verrou de licence. Ne compte que lorsque ts.licenseLock.enabled = true et que allowedServerIds n'est pas vide.Pas un secret. Après chaque vérification de licence, l'AC la réécrit comme convar répliquée : les clients peuvent donc la voir. L'export licenseStatus la renvoie sous le nom serverId.
tosun_ac_trusted_resources""Ressources (séparées par des virgules ou des espaces) autorisées à appeler les exports protégés. Fusionnée avec ts.ExportCallerWhitelist.Pour les développeurs. Relue dans les 10 s et survit aux mises à jour de l'AC. Vérifiez-la avec la commande console tosunac_integration.
ts_public_panel_url""Base publique du panel pour l'envoi des captures d'écran, des preuves de ban et des vidéos en direct (base/api/screen_upload.php). Prioritaire sur ts.webPanelURL.Nécessaire uniquement quand l'URL publique diffère de ts.webPanelURL. Doit être en https.
ts_screen_uploadhttp://localhost/api/screen_upload.phpURL d'envoi pour la capture screenshot-basic utilisée par l'export screenCapture, les commandes /capture et /ts_capture et l'action de capture du web-bridge du panel.Utilisez setr : elle est lue sur le client. La valeur par défaut pointe vers localhost. L'AC n'a aucun gestionnaire pour le résultat de l'envoi : le résultat est donc perdu.
tosun_db_bridge_manual"0""1" empêche l'AC de forcer les deux convars du bridge ci-dessous : c'est alors server.cfg qui les contrôle.Définissez-la avant le démarrage de la ressource.
tosun_db_bridge_enabled"0" dans le code, forcé à "1" au chargementActive le DB bridge à la demande Tosun Connect.Une valeur de server.cfg ne compte qu'avec tosun_db_bridge_manual "1" ou ts.panelMirror.enabled = true. Avec panelMirror actif, l'AC ne la force pas : le bridge reste donc désactivé sauf si server.cfg l'active.
tosun_db_bridge_money_write"0" dans le code, forcé à "1" au chargementAutorise l'opération du bridge player.money.set, qui fixe le solde d'un joueur en ligne.Quand elle ne vaut pas "1", l'opération échoue avec write_disabled. Pour définir "0" depuis server.cfg, il faut le mode manual.
tosun_db_bridge_query_timeout_ms5000 (1000 à 10000)Délai d'observation de chaque requête SQL du bridge.Un dépassement signale query_timeout mais n'annule pas la requête.
tosun_panel_playtime"1""0" désactive l'enregistrement qui remplit players.playtime. N'agit que pour qb, qbcore ou qbox.Lue une seule fois au chargement. L'ALTER TABLE qui ajoute la colonne playtime s'exécute quand même 20 s après le démarrage avec "0". set suffit, même si l'en-tête du fichier suggère setr.
tosun_panel_playtime_interval_ms120000 (30000 à 600000)Intervalle de la boucle d'enregistrement du temps de jeu.set suffit.
tosun_ac_resource"tosun-ac"Nom de la ressource AC utilisé par les fichiers bridge facultatifs dans votre propre ressource.Pour les développeurs. Utilisez setr si vous renommez le dossier de l'AC : le bridge client ne voit que les convars répliquées.
tosun_ac_bridge_server_ms60000 (500 à 300000)Durée d'exemption par défaut de TosunAC.PlayerExempt dans le bridge serveur.Pour les développeurs. set suffit.
tosun_ac_bridge_cooldown_ms750 (0 désactive)Délai de récupération par joueur qui écarte les appels répétés à TosunAC.PlayerExempt dans le bridge serveur.Pour les développeurs. set suffit.
tosun_ac_bridge_client_ms60000 (500 à 300000)Durée par défaut de TosunAC.Exempt() dans le bridge client.Pour les développeurs. setr est obligatoire.

Identifiants : priorité et bonnes pratiques#

Trois identifiants sont résolus une seule fois au chargement de la ressource : la clé de licence, la clé API du panel et le jeton central. Pour chacun, l'AC prend la première valeur non vide dans cet ordre.

L'avertissement MIGRATION vous demande de vider la valeur partagée et de renouveler tout identifiant qui y a été stocké un jour, car ce fichier est envoyé à chaque client.

Une valeur de plus de 4096 caractères, ou qui contient des caractères de contrôle, arrête le chargement avec une erreur Invalid server credential setting.

Clé du panel uniquement : si elle est encore vide après ces étapes, l'AC copie panel_settings.ac_api_key depuis la base du jeu. À chaque démarrage, l'AC écrit la clé résolue en clair dans la ligne webPanelKey de ac_settings. Si quelqu'un modifie cette ligne dans le panel, la valeur modifiée remplace la vôtre jusqu'au redémarrage suivant.

Clé de licence uniquement : le verrou de licence accepte les formats tac_live_ plus 40 caractères hexadécimaux en minuscules (49 caractères), TOSUN-AC-YYYY-... et TOSUN-.... La vérification du format ne s'exécute que lorsque ts.licenseLock.enabled = true, et elle ne vérifie que le format.

  1. La convar du serveur : tosun_ac_license, tosun_ac_panel_key ou tosun_ac_central_token.
  2. La valeur dans configs/anticheat_server.lua : licenseKey, panelKey ou centralToken.
  3. L'ancienne valeur dans le fichier partagé configs/anticheat_config.lua : ts.licenseLock.licenseKey, ts.webPanelKey ou ts.Central.token. Toute valeur à cet endroit affiche un avertissement MIGRATION dans la console.

configs/anticheat_server.lua#

Utilisez ce fichier réservé au serveur si vous préférez ne pas mettre les identifiants dans server.cfg. Il se charge avant les scripts serveur de l'AC et s'arrête immédiatement sur les clients. Laissez un emplacement vide pour continuer à utiliser la convar ou la récupération depuis la base.

  • Une convar non vide l'emporte toujours sur la valeur de ce fichier.
  • Laissez vides les emplacements correspondants dans configs/anticheat_config.lua : ts.webPanelKey, ts.Central.token et ts.licenseLock.licenseKey.
  • Gardez privées les sauvegardes de ce fichier.
  • Le fichier ne fait que remplir ts.webPanelKey, ts.Central.token et ts.licenseLock.licenseKey. Les autres scripts lisent ces valeurs, pas le fichier.
-- configs/anticheat_server.lua (serveur uniquement)
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 du panel et envoi des captures d'écran#

ts.webPanelURL dans configs/anticheat_config.lua est l'URL de base du panel. Vous pouvez la laisser vide : dans ce cas, l'AC charge panel_url ou site_url depuis panel_settings dans la base du jeu et la stocke dans ac_settings. La synchro HTTP des réglages ne s'exécute que lorsque l'URL et la clé du panel sont toutes deux définies.

Définissez ts_public_panel_url uniquement quand les captures d'écran, les preuves de ban et les vidéos en direct doivent aller vers une autre adresse publique. Elle doit être en https. Les jetons d'envoi ne sont émis pour https://host/api/screen_upload.php que lorsque la base est égale à cette convar ou à ts.webPanelURL.

ts_screen_upload est un chemin distinct utilisé par l'export screenCapture et les commandes /capture et /ts_capture. Elle nécessite setr, et sa valeur par défaut pointe vers localhost. Rien dans l'AC ne traite le résultat de cet envoi.

Les anciens noms ts.PanelUrl, ts.panelUrl et ts.webPanelUrl sont toujours lus en solution de repli.

Convars du DB bridge Tosun Connect#

Depuis la 9.6.14, le DB bridge à la demande est actif par défaut et ne nécessite aucune ligne dans server.cfg. Au chargement, editable/server/tosun_db_bridge_defaults.lua règle tosun_db_bridge_enabled et tosun_db_bridge_money_write sur "1" : les lignes "0" des anciens guides sont donc ignorées.

Vous pouvez aussi couper la connexion pour un serveur dans le panel : Servers, puis le serveur, puis la carte Tosun Connect.

Le bridge interroge https://admin.tosundev.com/api/server_db_bridge.php, envoie votre clé de licence comme jeton Bearer et n'exécute que ces opérations : players.list, player.detail, player.vehicles, bans.list, logs.list et player.money.set.

Avec ts.panelMirror.enabled = true, l'AC ne force pas l'activation du bridge : l'ancien miroir continue donc de fonctionner. Le miroir lui-même ne tourne pas tant que tosun_db_bridge_enabled vaut "1".

Les commandes console tosunac_db_status et tosunac_db_check affichent l'état du bridge et testent oxmysql.

  1. Pour contrôler le bridge depuis server.cfg, ajoutez set tosun_db_bridge_manual "1" avant ensure tosun-ac.
  2. Ajoutez set tosun_db_bridge_enabled avec "1" ou "0".
  3. Ajoutez set tosun_db_bridge_money_write avec "1" ou "0". Sans "1", player.money.set échoue avec write_disabled et n'est pas annoncé au panel.

Convars pour les développeurs de scripts#

Ces convars ne comptent que lorsqu'une autre ressource appelle l'AC. tosun_ac_trusted_resources décide quelles ressources peuvent appeler les exports protégés ; les convars du bridge configurent les fichiers bridge facultatifs.

Les exports protégés incluent SetExempt, SetPlayerExempt, les exports Pause, BypassDetection, addAdmin, whitelistPlayer, approveResource, ban, offlineBan, les exports webBridge et quarantine.

La console du serveur et tosun-ac lui-même sont toujours de confiance. Un appel non fiable est refusé ; pour chaque couple ressource et export, l'AC affiche un avertissement dans la console et écrit une ligne de log dans le panel qui cite cette convar. Avec ts.EnforceExportCallerWhitelist = false, l'appel s'exécute et n'est journalisé qu'une fois.

Les appelants de confiance obtiennent aussi MarkTeleport sans le budget par joueur.

INTEGRATION.md et bridge/INTEGRATION.txt indiquent set pour tosun_ac_resource et tosun_ac_bridge_client_ms. Utilisez plutôt setr : le bridge client lit les deux sur le client.

Des événements et exports internes de l'AC existent aussi. Ils sont protégés et ne doivent pas être appelés depuis vos ressources.

# Ressources autorisées à appeler les exports protégés (séparées par des virgules ou des espaces)
set tosun_ac_trusted_resources "my-housing,my-clothing"

# Fichiers bridge dans votre propre ressource
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"

Permissions ACE#

Tous les ACE vérifiés par Tosun AntiCheat. Accordez les ACE à un groupe et ajoutez le staff à ce groupe avec add_principal. Un ACE que builtin.everyone possède aussi ne fait jamais de quelqu'un un membre du staff.

ACE ou principalCe qu'il accordeExemple de ligne
tosun.adminStatut staff (exemption de sanction et commandes du staff) et menu admin en jeu. Ne débloque ni tosunac_setup ni les scans manuels.add_ace group.admin tosun.admin allow
ts.adminComme tosun.admin.add_ace group.admin ts.admin allow
command.tsStatut staff et menu admin. /ts lui-même est enregistrée sans restriction : cet ACE sert donc de marqueur de rôle pour l'AC, pas de verrou FiveM.add_ace group.admin command.ts allow
command.ban, command.kickStatut staff et menu admin, même quand ts.txAdminAuth = false.add_ace group.admin command.ban allow
txadmin, tx.admin, txadmin.menu, txadmin.advanced, command.txadminStatut staff uniquement. Pas de menu admin.Usually granted by txAdmin, or: add_ace group.admin txadmin.menu allow
command.resources, command.restartStatut staff uniquement, tant que ts.txAdminAuth = true. Pas de menu admin.Usually granted by txAdmin
command.screenshot, command.unbanExemption de sanction uniquement, tant que ts.txAdminAuth = true. Pas de commandes du staff ni de menu admin.Usually granted by txAdmin
group.admin, group.superadmin, group.moderator, group.godTestés comme objets ACE. Ils ne donnent le statut staff et le menu que si le nom correspond à un ACE autorisé pour le joueur. Accordez aussi un ACE explicite comme tosun.admin.add_principal identifier.license:YOUR_LICENSE_HEX group.admin
tosunac.adminUtilisation en jeu de tosunac_setup, tosunac_backdoorscan et tosunac_eventscan (chacune nécessite aussi son ACE de commande) et de /banscreentest. Pas de statut staff ni de menu.add_ace group.admin tosunac.admin allow
tosunac.banscreen.test/banscreentest en jeu, qui affiche l'aperçu de l'écran de ban uniquement pour l'appelant.add_ace group.admin tosunac.banscreen.test allow
command.tosunac_setupCommande restreinte. Un joueur a aussi besoin de tosunac.admin.add_ace group.admin command.tosunac_setup allow
command.tosunac_backdoorscanCommande restreinte. Un joueur a aussi besoin de tosunac.admin.add_ace group.admin command.tosunac_backdoorscan allow
command.tosunac_eventscanCommande restreinte. Un joueur a aussi besoin de tosunac.admin.add_ace group.admin command.tosunac_eventscan allow
command.ts_setlangCommande restreinte. Un joueur a aussi besoin du statut staff.add_ace group.admin command.ts_setlang allow
command.ts_v9_helpCommande restreinte sans autre vérification. Sa sortie va dans la console du serveur.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_checkRien en jeu. Ces commandes sont réservées à la console et ignorent les joueurs, même s'ils ont l'ACE.Run them from the server console
command (bare ACE)Jamais staff quand builtin.everyone l'a. C'est toutefois l'un des ACE qui permettent de passer la vérification d'IP à la connexion, et cette vérification n'a pas de filtre builtin.everyone.Do not use: add_ace builtin.everyone command allow
ts.AdminBypassAces (config list)Accorde le statut staff, pas le menu. Entrées fournies : command.ts, les ACE txAdmin, command.kick, command.ban, les quatre noms de groupe, tosun.admin et ts.admin. N'ajoutez jamais l'ACE command seul.ts.AdminBypassAces = { "command.ts", ..., "your.staff.ace" }

Commandes restreintes et réservées à la console#

Dix commandes de l'AC sont enregistrées comme restreintes. En jeu, FiveM exige alors l'ACE de commande correspondant en plus de la vérification propre à l'AC. Cinq des dix ignorent complètement les joueurs.

banscreentest n'est pas restreinte. La forme console banscreentest playerId ne nécessite aucun ACE ; /banscreentest en jeu nécessite tosunac.banscreen.test ou tosunac.admin. Les refus de tosunac_setup, des deux scans et de banscreentest sont silencieux.

tosunac_setup n'approuve rien si le scan de backdoors ou de signatures ne se termine pas, y compris quand ts.BackdoorGuard est désactivé. Un second lancement pendant qu'un premier est en cours est refusé.

CommandeQui peut la lancerEffet
tosunac_setupConsole, ou un joueur avec command.tosunac_setup et tosunac.adminInstallation automatique : détecte le framework, lance les scans de backdoors et de signatures, approuve les ressources propres dans la baseline et catalogue les événements sans leur faire confiance. Lancez-la uniquement sur un serveur que vous savez sain.
tosunac_backdoorscanConsole, ou command.tosunac_backdoorscan et tosunac.adminScan manuel des backdoors. Non enregistrée quand ts.BackdoorGuard.enabled = false.
tosunac_eventscanConsole, ou command.tosunac_eventscan et tosunac.adminScan manuel des événements et triggers, envoyé au panel. Non enregistrée quand ts.EventScanner.enabled = false.
ts_setlang playerId langConsole, ou command.ts_setlang et le statut staffRègle la langue de l'AC pour un joueur. Ne vérifie pas que l'ID du joueur est en ligne.
ts_v9_helpConsole, ou command.ts_v9_helpAffiche la liste des commandes supplémentaires v9 dans la console du serveur.
tosunac_integrationConsole uniquementAffiche le mode d'application des exports, les ressources de confiance et leur source, ainsi que les 20 derniers refus.
tosunac_doctorConsole uniquementRapport de risques sur les réglages appliqués. S'exécute aussi 90 s après le démarrage. La sortie est en turc.
ac_cleanupConsole uniquementLance immédiatement le nettoyage de rétention de la base. Le nombre affiché est généralement sous-estimé. Non enregistrée quand ts.v12.enableAutoCleanup = false.
tosunac_db_statusConsole uniquementAffiche l'état du DB bridge, l'état de la licence, l'état d'oxmysql et le framework.
tosunac_db_checkConsole uniquementExécute SELECT 1 via oxmysql et affiche la réussite ou l'échec.

Comment le staff est reconnu#

L'AC a deux niveaux d'accès distincts. Le statut staff donne l'exemption de sanction et les commandes du staff (sous-commandes /ts et commandes ts_). L'accès au menu ouvre le menu admin en jeu. Certaines sources n'accordent que l'un des deux.

L'exemption de sanction du staff ne s'applique que tant que ts.AdminBypassDetections = true (valeur fournie) et ts.Debug = false (valeur fournie).

L'accès au menu nécessite aussi que ts.AdminMenu.enable et ts.AdminMenu.enabled restent à true. Si l'un des deux vaut false, le menu, la touche F7 et les commandes client des outils d'administration ne sont pas enregistrés.

Les membres du staff qui ont le statut staff sans accès au menu, par exemple le staff uniquement txAdmin, peuvent quand même appuyer sur F7. La demande est refusée et journalisée.

SourceOù le définirStatut staffMenu adminRemarques
ACE tosun.admin, ts.admin, command.tsserver.cfg add_aceOuiOuiMéthode recommandée pour accorder le statut staff.
ACE command.ban, command.kickserver.cfg ou txAdminOuiOuiReste staff même avec ts.txAdminAuth = false.
Principals group.admin, group.superadmin, group.moderator, group.godserver.cfg add_principalSeulement si le nom correspond à un ACE autoriséMême conditionTestés comme objets ACE. Ajoutez aussi un ACE explicite.
ACE txadmin, tx.admin, txadmin.menu, txadmin.advanced, command.txadmintxAdmin ou add_aceOuiNonLes admins txAdmin ont besoin de tosun.admin ou d'une autorisation du panel pour le menu.
ACE command.resources, command.restarttxAdminSeulement tant que ts.txAdminAuth = trueNonGénéralement accordés par txAdmin.
ACE command.screenshot, command.unbantxAdminExemption uniquement, tant que ts.txAdminAuth = trueNonPas de commandes du staff.
ts.AdminBypassAcesconfigs/anticheat_config.luaOuiNonLes entrées que vous ajoutez n'ouvrent pas le menu.
Adminsadmins/anticheat_admins.luaOuiOuiFichier réservé au serveur.
ts.AdminMenu.allowedIdsconfigs/anticheat_config.luaOuiOui"all" et "staff" ne sont pas des identifiants et n'accordent rien.
ts.AdminBypassIdentifiersconfigs/anticheat_config.luaOuiNonLe commentaire de la config mentionne aussi ip:x.x.x.x.
Panel grants (ac_v7_admin_grants)Panel webOuiOuiUn résultat positif est mis en cache 5 s, un négatif 30 s.
addAdmin exportUne ressource de confianceOuiOuiJusqu'à l'appel de removeAdmin.
Player whitelist (ac_whitelist) and runtime whitelistPanel web ou exports de liste blancheNon (exemption de sanction uniquement)NonIgnorées tant que ts.Debug = true.
ACE tosunac.adminserver.cfg add_aceNonNonDébloque l'installation, les scans manuels et l'aperçu de l'écran de ban.

Listes d'identifiants : Admins, allowedIds et AdminBypassIdentifiers#

Utilisez des identifiants complets, comme des valeurs license:, steam:, discord: ou fivem:. Préférez admins/anticheat_admins.lua ou les autorisations du panel pour le staff : ce fichier est réservé au serveur, alors que configs/anticheat_config.lua est envoyé à chaque client.

  • Admins : une entrée correspond à l'identifiant complet (sans tenir compte de la casse) ou à la partie après le préfixe. Elle accorde le statut staff et le menu.
  • ts.AdminMenu.allowedIds : statut staff et menu. Les valeurs "all" et "staff" n'accordent rien.
  • ts.AdminBypassIdentifiers : statut staff et exemption uniquement, pas de menu.
-- admins/anticheat_admins.lua (serveur uniquement)
Admins = {
    "license:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "steam:11000010xxxxxxxx",
    "discord:123456789012345678",
}

-- configs/anticheat_config.lua (partagé, envoyé aux clients)
ts.AdminMenu = {
    -- les autres clés du menu restent telles que fournies
    allowedIds = {
        "license:YOUR_EXACT_PLAYER_IDENTIFIER",
    },
}
ts.AdminBypassIdentifiers = {}  -- statut staff et exemption, pas de menu

Autorisations du panel et export addAdmin#

Les autorisations du panel sont des lignes de ac_v7_admin_grants que vous créez dans le panel web. Une autorisation active correspond à la license ou à la license2 du joueur, avec ou sans préfixe, et donne le statut staff et l'accès au menu.

Une réponse positive est mise en cache 5 s et une négative 30 s : une nouvelle autorisation peut donc mettre jusqu'à 30 s à s'appliquer à un joueur déjà vérifié.

Une ressource de confiance peut appeler l'export addAdmin pour donner à un joueur le statut staff et l'accès au menu jusqu'à l'appel de removeAdmin. Tant que ts.EnforceExportCallerWhitelist vaut true, l'appelant doit être listé dans tosun_ac_trusted_resources ou ts.ExportCallerWhitelist.

La liste blanche des joueurs n'est pas le staff#

La liste blanche des joueurs du panel (ac_whitelist) et les identifiants ajoutés à l'exécution par les exports de liste blanche ne font que suspendre les sanctions. Ils ne donnent ni commandes du staff ni menu admin.

  • Une ligne compte tant que expires_at est vide ou dans le futur.
  • Valeurs acceptées : un identifiant license, discord, steam ou fivem, ou un citizenid. Les préfixes sont retirés.
  • Les entrées ajoutées à l'exécution sont gardées en mémoire et perdues au redémarrage.
  • Les deux listes sont ignorées tant que ts.Debug = true.

Réglages qui modifient le traitement du staff#

Ces clés de configs/anticheat_config.lua modifient la façon dont sont traités le staff et les utilisateurs du menu non autorisés.

RéglageValeur fournieEffet
ts.AdminBypassDetectionstruefalse rend le staff sanctionnable comme n'importe quel joueur.
ts.txAdminAuthtruefalse désactive la voie des ACE de commandes txAdmin (command.resources, command.restart, command.screenshot, command.unban). command.ban et command.kick restent staff.
ts.Debugfalsetrue désactive les exclusions du staff, de la liste blanche, de la liste blanche du panel et des exemptions, pour que le staff puisse tester les détections sur lui-même. Gardez false en production.
ts.NuiNeverBanUnauthorizedtruefalse sanctionne les joueurs qui déclenchent des événements du menu admin sans permission, au lieu de seulement les journaliser. La sanction est ts.punishType.
ts.AdminMenu.enable, ts.AdminMenu.enabledtrue, truefalse sur l'un ou l'autre désactive le menu admin. enable = false arrête aussi le module de notifications téléphone.
ts.AdminMenu.requireActionSignaturetruefalse désactive la signature des actions sensibles du menu admin.
ts.v12.bypassStaffIpChecktrueLe staff passe outre les vérifications VPN, proxy, hébergeur et pays à la connexion.

builtin.everyone et la vérification d'IP à la connexion#

Toutes les vérifications d'ACE pour le staff et le menu ignorent un ACE que builtin.everyone possède aussi. Ainsi, add_ace builtin.everyone command allow ne fait pas des joueurs des membres du staff. La vérification d'IP à la connexion fonctionne différemment.

Tant que ts.v12.bypassStaffIpCheck n'est pas false, un joueur qui se connecte échappe à la liste de pays refusés et aux refus VPN, proxy et hébergeur dans chacun de ces cas : le joueur est staff ; le joueur a l'ACE command, txadmin, tx.admin, txadmin.menu, command.kick, command.ban ou l'un des noms group.admin, group.superadmin, group.moderator ou group.god ; ou une autorisation active du panel correspond exactement à la licence du joueur.

Cette vérification utilise de simples tests d'ACE sans filtre builtin.everyone. Sur un serveur avec add_ace builtin.everyone command allow, chaque joueur échappe donc aux vérifications VPN et pays. La vérification anti-afflux de connexions s'exécute quand même avant cette exception.

Fichier des webhooks Discord#

configs/anticheat_webhooks.lua est réservé au serveur. Il contient une URL de webhook Discord par canal de log et le style des embeds. Chaque URL est livrée avec la valeur de remplacement WEBHOOK_URL_BURAYA.

  • La synchro HTTP du panel écrase tout webhook pour lequel elle envoie une URL non vide.
  • Les autres ressources ne reçoivent les URL des webhooks via getConfig('webhooks') que si elles sont des appelants de confiance.
  • Les logs de capture d'écran étiquettent l'embed Detections avec ts.punishType plutôt qu'avec la sanction réellement appliquée, et publient aussi dans Webhooks.Bans chaque fois que ts.punishType vaut BAN.
  • Webhooks.WebhookAvatar définit l'image d'avatar de l'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

Comment le panel remplace le fichier de config#

La plupart des valeurs de configs/anticheat_config.lua sont des valeurs par défaut. Le panel web garde ses propres valeurs dans ac_settings et dans d'autres tables ac_, et ce sont elles qui l'emportent. Ne modifiez le fichier que pour les valeurs que le panel ne gère pas.

  • Environ 3 s après le démarrage, puis toutes les ts.ServerPerf.configSyncIntervalSec secondes (120 par défaut, minimum 20, repli 60), les lignes de ac_settings écrasent les valeurs ts.
  • Les clés avec des points, comme AdminMenu.enable, écrivent des champs imbriqués. Les anciennes clés plates comme framework ou moneyCheck sont d'abord converties.
  • Une clé punishment_ écrit ts.DetectionPunishments pour cette détection. BAN et KICK sont conservés ; toute autre valeur devient LOG.
  • Les champs d'action sont normalisés en ban, kick, log, cancel, reject ou stop. Toute autre valeur devient log.
  • Les clés qui commencent par globalBan. sont ignorées.
  • Les listes du panel remplacent celles de la config : armes, liste noire des véhicules, plaques, liste des triggers, limites d'événements, ressources en liste blanche, mots OCR, listes Blacklist, liste des explosions et listes blanches d'entités. Les ressources en liste blanche et les mots OCR venant de la base sont fusionnés au lieu d'être remplacés.
  • Exception : les gestionnaires de ts.EventLimiter et ts.ProtectedEvents sont enregistrés une seule fois depuis le fichier au chargement. Les changements ultérieurs dans le panel ne modifient pas leur application côté serveur.
  • Après un changement, seules les clés sans risque pour le client sont renvoyées aux clients.
  • Lancez tosunac_doctor dans la console pour passer en revue les valeurs risquées après la synchro du panel.

Réglages principaux#

Clés de premier niveau au début de configs/anticheat_config.lua. La plupart peuvent aussi être définies depuis le panel.

RéglageValeur fournieEffet
ts.Locale"tr"Langue par défaut de l'AC (ordre de repli : langue du joueur, ts.Locale, en). Fichiers : ar, de, en, es, fr, pt, ru, tr, zh. Livrée en turc : les serveurs non turcophones doivent la régler sur leur langue, par exemple "en" ou "fr". Le default_locale du panel peut la remplacer.
ts.punishType'BAN'Sanction de repli pour les détections sans correspondance. C'est aussi la sanction des bans manuels : l'export ban, /ts ban, les bans du menu admin et ceux du panel. LOG ou KICK les transforme en logs ou en expulsions.
ts.Debugfalsetrue désactive les exclusions du staff et de la liste blanche. Gardez false en production.
ts.txAdminAuth, ts.AdminBypassDetections, ts.NuiNeverBanUnauthorizedtrue, true, trueTraitement du staff. Voir Réglages qui modifient le traitement du staff.
ts.screenshotModule"screenshot-basic"Ressource utilisée pour les captures d'écran.
ts.banIDFormat11 = ABCD-1234, 2 = #1234.
ts.autoSQLfalsetrue crée les tables au démarrage. Le commentaire de la config conseille de le mettre à true lors de la première installation, puis de revenir à false.
ts.Prefix, ts.showReason'Tosun AntiCheat', trueFaçonnent les messages d'expulsion et de ban.
ts.appealDiscord, ts.appealTicketUrlvendor linksAjoutés au message de ban. appealDiscord est livré avec le Discord de l'éditeur (https://discord.gg/9tCSJch), qui sert aussi de valeur de repli. Indiquez votre propre lien de contestation.
ts.pingOnDetectfalseAjoute @everyone aux embeds de détection. Le texte est placé dans l'objet embed, pas dans le champ content de premier niveau du message.
ts.chatMessagesfalseAnnonce les sanctions dans le chat.
ts.spoilerIPtrueMasque les adresses IP sous des balises spoiler dans les logs Discord.
ts.needDiscordfalsetrue refuse les joueurs qui n'ont pas d'identifiant Discord.
ts.maxUsernameLength-1Longueur maximale du nom du joueur. -1 désactive la vérification.
ts.webPanelURL, ts.webPanelKey"", ""Laissez les deux vides. Voir URL du panel et envoi des captures d'écran ainsi que les sections sur les identifiants.
ts.version"9.6.15"Informatif uniquement. C'est la version du manifeste qui est utilisée à l'exécution.

Sections de configuration : détections et sanctions#

Sections qui décident de ce qui est détecté et de la sévérité de la sanction.

SectionRôleRéglages que l'on modifie généralement
ts.DetectionPunishmentsSanction par clé de détection : BAN, KICK ou LOG. Ordre : sanction explicite, clé directe, alias, clé dérivée, puis ts.punishType.Entrées individuelles. Le panel peut remplacer chacune. Valeurs fournies : BAN pour les signaux certains, KICK pour le risque moyen, LOG pour ceux qui dépendent du contexte comme freecam, teleport, fastrun, invisibility et ocr.
ts.BanDurationsDurée du ban en heures par clé de détection. 0 ou une clé absente signifie permanent.["default"] (0 fourni = permanent ; les bans manuels l'utilisent aussi). Les détections physiques sont temporaires, par exemple superjump, fastrun et teleport 72 h, noclip et godmode 168 h.
ts.confirmWindowFiltre de confirmation pour les détections physiques côté client : vitesse, téléportation, noclip, superjump, santé et armure. Les mesures prises avec un ping élevé ou des saccades d'image sont ignorées.Les valeurs par défaut sont recommandées : confirmFrames 3, confirmMs 3000, maxPingMs 220. hardEscalateHits 8 en 90 s force une sanction même en cas de lag.
ts.v6EnforcementPlafonne les sanctions issues des heuristiques client signées et des détections de spam.maxAction ("KICK"). confirmHits 2 sur confirmWindowSec 600 (minimum 30).
Client detection toggles (ts.anti keys, thresholds, ts.confirmHits)Interrupteurs on/off et limites simples pour les détections côté client.Désactivez des vérifications individuelles. Désactivées par défaut : antiRadar, fakeTriggerServerTraps, antiInfiniteStamina, antiPickups, antiClipboardPaste, antiGodmodeV2.
ts.OCR settingsOCR de l'écran à la recherche de mots de menus de triche.ts.OCR, ts.OCRCheckInterval (20000), ts.OCRWords. Toutes les actions valent log par défaut, car un texte de chat à l'écran correspondrait chez tous ceux qui le voient. Les mots du panel sont fusionnés.
ts.quarantineIsolement par routing bucket utilisé par l'export quarantine au lieu d'un ban.defaultSeconds 300, maxSeconds 1800, autoQuarantine (désactivé).
ts.autoEvidenceCourte preuve vidéo automatique après des détections graves, tant que le joueur est en ligne. Nécessite tosun_render.durationSec 25, cooldownSec 120, triggers.
ts.forensicsGraphe anti-contournement de ban qui relie les identités HWID et licence partagées aux groupes de comptes bannis.Commencez avec evasionAction "log". linkByIp est désactivé.
ts.v16Vérification des mouvements côté serveur.action ("ban"). teleportAction ("log") : passez-le à kick une fois que chaque script qui téléporte des joueurs appelle MarkTeleport.
ts.aimGuardAnti-aimbot statistique sur les événements de dégâts d'armes. Le staff est exempté tant qu'AdminBypassDetections est actif.magicBulletTargets 4 (kick), fireRatePerSec 22 (kick), headshotRatio 0.90 (log).
ts.combatGuardPlafonds de santé et d'armure côté serveur et vérification des dégâts d'arme excessifs.healthCap 250, armorCap 105, weaponDamageCap 600. Les deux actions valent kick.

Sections de configuration : guards côté serveur#

Guards qui tournent sur le serveur. Plusieurs d'entre eux annulent d'abord l'événement et ne sanctionnent qu'après des avertissements (strikes) répétés.

SectionRôleRéglages que l'on modifie généralement
ts.netEventsVérifications des événements de jeu où le serveur fait autorité.Par sous-section : action, strikes, windowMs, cancel. Valeurs fournies : weapons ban 2 en 60 s ; respawn kick 6 en 120 s ; vehicleComponent log ; explosionDistance kick 250 m, 3 strikes ; damageDistance ban 600 m, 4.
ts.entityFloodLimite de débit des spawns par joueur. Les spawns au-delà de la limite sont annulés.maxPerSec 30, banAfterFloods 3, action ("ban").
ts.crashGuardLimites de taille, de profondeur et de validité pour les valeurs des state bags et les données des événements.action ("kick"), strikes 3 en 60 s.
ts.serverAuthorityLit l'état répliqué par OneSync pour repérer le superjump, les multiplicateurs de dégâts et de défense, les armes sur liste noire, le godmode, l'invisibilité, le noclip et le focus de caméra.Par vérification : enabled, action, confirm. Les vérifications à haute confiance expulsent ; celles qui dépendent du contexte journalisent.
ts.shieldAiBouclier contre les spawns d'entités. Les spawns de véhicules et de peds qui ne peuvent pas être rattachés à une ressource sont annulés.action ("cancel"), strikes 3, maxObjectPerSec 25, maxVehiclePerSec 4, maxPedPerSec 8, scriptWhitelist. tosunac_doctor signale strictScriptWhitelist = true.
ts.shieldExplosionAnnule les explosions invisibles ou silencieuses et ne sanctionne qu'en cas de répétition.action ("kick"), strikes 5 en 60 s.
ts.premiumGuardProtection contre le spam de particules, de projectiles, de request-control, de sons et de ragdoll, et contre les abus de voitures piégées.Toutes les actions valent log par défaut. Limites par seconde et par type.
ts.vehicleGuardDétecte les véhicules projetés ou lancés.action ("kick"), strikeLimit 3, stuntMode, excludeAirVehicles.
ts.weaponInventorySignale une arme tenue qui n'est pas dans l'inventaire ox_inventory, QB ou ESX du joueur.action ("log"), removeWeapon (désactivé), ignore, extraWeapons. Les scripts qui donnent des armes hors de l'inventaire doivent appeler l'export AllowWeapon depuis une ressource de confiance.
ts.entityGuardDétecte les spawns massifs d'objets et supprime les objets créés par les joueurs expulsés ou bannis.massThreshold 50 en 60 s, cleanupOnBan.
ts.rateGuardLimites par joueur et par seconde sur les événements d'explosion, de ptfx, de feu et de projectile.action ("kick"), explosionsPerSec 12, ptfxPerSec 25, firePerSec 15, projectilesPerSec 30.
ts.entityWhitelist (and its vehicle, ped, object, projectile and particle lists)Mode liste d'autorisation facultatif par type d'entité.Tous les modes sont désactivés par défaut : seules les listes noires et le bouclier de spawn s'appliquent. Les tables de liste blanche d'entités du panel remplacent les listes.
ts.SpamGuardLimites par joueur sur les événements serveur et les commandes de chat. Désactivé avec ts.SpamGuard = false, ou ts.antiServerEventSpam / ts.antiCommandSpam = false.serverEventPerSec 25, commandPerSec 8, autoKickAfter 1. La partie événements serveur écoute un événement que la ressource n'émet jamais ; vérifiez votre build, sinon seule la limite des commandes s'applique.
ts.EventLimiterLimite d'appels par événement sur une fenêtre fixe de 5 s. À la limite (le compteur atteint la valeur), il déclenche Event Spam (server_event_spam, KICK).Ajoutez ou relevez des limites dans le fichier. Les gestionnaires sont enregistrés une seule fois au chargement : les limites d'événements du panel ne changent donc pas l'application.
ts.antiDump, ts.nativeIntegrity, ts.autoExemptAnti-dump par honeypot ; piège client contre l'écrasement des natives de détection ; exemptions automatiques pendant les événements d'apparence, de multipersonnage et de mort.antiDump.action ("ban"), nativeIntegrity.checkMs 12000.
ts.shieldCouche de hook des natives en JS, vérifications NUI cachées, et preuves par capture d'écran et vidéo de gameplay avant un ban (la vidéo nécessite tosun_render).banScreenshot, banGameplayVideo.
ts.nativeGuardIntégration avec le compagnon Windows externe tosun-guard.exe.action ("log"), requireGuard (false).
ts.guardSurveillance de la ressource client séparée tosun-guard. Ne sanctionne personne quand tosun-guard n'est pas installé.action ("kick").
ts.launcherGateExige à la connexion une analyse récente et propre du launcher depuis l'IP du joueur, vérifiée par le panel.enabled (false), action ("reject"), failOpen (false), downloadUrl, message (en turc par défaut).

Sections de configuration : connexion, administration et panel#

Sections pour les joueurs qui se connectent, le menu admin, la connexion au panel et le comportement global du serveur.

SectionRôleRéglages que l'on modifie généralement
ts.FrameworkChoix du framework et détection des pics d'argent.framework : esx, qb, qbox, standalone ou "auto". Livré avec "qb", qui n'est pas détecté automatiquement : les serveurs ESX et Qbox doivent donc le changer. moneyCheckThreshold 5000000, moneySoftThreshold 75000.
ts.AutoSetupDétection passive du framework quand framework vaut "auto" ou "" : qbx_core, puis qb-core, es_extended, vrp, ox_core.autoDetectFramework (true).
ts.v12Autoprotection, vérifications VPN, proxy et hébergeur à la connexion (ipapi.co), et nettoyage de rétention de la base.blockVpn, blockProxy, blockHosting (désactivés), bypassStaffIpCheck, les clés de rétention keep (logs admin 60 jours, détections 90 jours).
ts.HeartBeatSurveillance du client : l'écart autorisé entre deux rapports du client, et un délai pour le premier rapport valide.maxTime 90 s (minimum 15). firstHeartbeatDeadline 180 s (minimum 60) : les joueurs sans premier rapport valide à ce moment sont déconnectés.
ts.NetworkJoinCadencement des connexions qui évite la saturation des événements fiables, et période de grâce avant l'armement des détections.minReadyDelayMs (15000 fourni ; les anciens guides indiquent 45000), postFrameworkSettleMs 5000.
ts.AdminMenuMenu admin en jeu, ouvert avec /ts menu, /tsmenu ou F7.enable, enabled, allowedIds, openKeyControl (168 = F7), espMaxDist, noclipInvisible, requireActionSignature. allowEsp, allowFreecam et allowDelete ne sont appliqués que dans le code client.
ts.PhoneNotifyNotifications de l'AC sur les téléphones du staff : qb-phone, qs-smartphone, lb-phone, yseries, gks_phone, npwd, roadphone.Seul heartbeat est lu (une notification d'état toutes les 15 minutes). Les notifications de ban et de détection partent toujours tant que ts.AdminMenu.enable est actif.
ts.LiveWatchSurveillance de l'écran en direct depuis le menu admin et le panel.interval 1500, quality 0.7, maxSeconds 600, timeout 12000.
ts.ServerPerfCompromis entre charge du serveur et latence des mises à jour.configSyncIntervalSec 120 (minimum 20), panelPlayerSyncIntervalMs 12000, liveWatchDbPollMs 4500.
ts.CentralAPI centrale du panel v9 : poignée de main, interrogation périodique et synchro de la langue.pollIntervalSec 5 (borné entre 5 et 60). Laissez token vide ici et utilisez tosun_ac_central_token.
ts.cloudBridgeEnvoie les scores de menace et la sortie de la console au panel, et vérifie une liste centrale de renseignement sur les menaces à la connexion.consoleForward est actif par défaut : chaque ligne de la console du serveur part vers le panel par lots. threatIntelAction ("log"), threatIntelMinScore 70.
ts.panelMirrorAncien envoi complet de la base vers le panel. À activer explicitement.enabled (false). Tant qu'il est actif, le DB bridge n'est pas activé automatiquement.
ts.connectingCardCarte adaptative affichée pendant la connexion des joueurs.title ("TOSUN RP"), discord (se rabat sur ts.appealDiscord), website, rules, image, tips.
ts.banScreen (panel only)Avis de ban plein écran avant la déconnexion. Il n'est pas dans le fichier ; réglez-le dans le panel.enabled (désactivé), seconds 3 à 15 (8), mediaType, imageUrl (https uniquement), youtubeId, title (80 caractères), message (300 caractères), showReason. Prévisualisez-le avec banscreentest.
ts.PanelDangerousActionIPsListe d'IP autorisées pour les actions du panel kick_all, stop_resource et broadcast.Vide signifie journalisation d'audit uniquement. Ajoutez l'IP du serveur du panel pour bloquer les autres sources.
ts.licenseLockProtection de distribution : vérification du format de licence et de l'ID du serveur.enabled (false), action (log, reject ou stop), allowedServerIds, failClosed. Laissez licenseKey vide ici.
ts.NpcBlockerSupprime les PNJ ambiants et la circulation ; les entités de mission, de script et en liste blanche restent.enabled (false), blockPeds, blockVehicles, whitelistModels.
ts.hardening, ts.cfgAuditGarde des convars FiveM et audit en lecture seule de server.cfg.Voir Interrupteurs et sortie du durcissement.

Sections de configuration : ressources, événements et intégration#

Sections pour la confiance accordée aux ressources, les scanners et l'intégration pour les développeurs. Les lignes marquées pour les développeurs ne comptent que lorsque vos propres scripts appellent l'AC.

SectionRôleRéglages que l'on modifie généralement
ts.whitelistedResourcesRessources de base que l'AC considère toujours comme sûres : frameworks, oxmysql, chat, monitor, ressources ox_.Ajoutez vos ressources de base. La synchro HTTP du panel remplace la liste ; la synchro de la base y ajoute des entrées.
ts.ResourceGuardBaseline des ressources, contrôles de dérive des hashs et scanner de signatures de triche.signatureScan, signatureScanInterval 600000, autoStopCheatResources (true), autoBlockInfected (false), deepScan (false).
ts.BackdoorGuardAnalyse les fichiers des ressources à la recherche de motifs de backdoor, de RCE et d'exfiltration.autoQuarantine (false ; true arrête les ressources avec un résultat critique), ignoreResources, scanIntervalMs 1800000.
ts.EventScannerCatalogue dans le panel les événements réseau et les triggers de toutes les ressources.autoProtect (false ; true les marque comme protégés), ignoreResources.
ts.ProtectedEvents, ts.SafeEventRateWindow, ts.SafeEventRateLimit, ts.SafeEventMaxArgsPour les développeurs. Événements qui doivent être déclenchés avec TriggerSafeServerEvent. Les appels valides sont transmis au nom de l'événement suivi de :safe. Les appels invalides sont rejetés et journalisés, jamais sanctionnés.N'ajoutez que vos propres événements qui utilisent l'API client SafeEvents. Limite de 30 appels par 10 s ; SafeEventMaxArgs 64. Le gestionnaire :safe doit quand même vérifier les permissions.
ts.EnforceExportCallerWhitelist, ts.ExportCallerWhitelistPour les développeurs. Ressources de confiance pour les exports protégés.Liste fournie : qbx_core, qb-core, es_extended, ox_inventory, ox_lib. false = mode audit : les appels s'exécutent et sont journalisés une fois. MarkTeleport ne nécessite pas de confiance.
ts.IntegrationPour les développeurs. Limites de MarkTeleport.markTeleportMaxMs 15000 par appel (1000 à 60000, pour tous les appelants) ; markTeleportBudgetMs 180000 par joueur par période de 10 minutes (appelants non fiables uniquement).
ts.DetectionExempt (alias ts.MenuDetectionExempt)Pour les développeurs. Courtes exemptions automatiques quand des événements connus de vêtements, de logement, de garage ou de réanimation se déclenchent.clientEvents, localEvents, serverEvents (event, durationMs, resource, always). Les événements serveur n'apportent qu'un assouplissement des vérifications de mouvement et de visibilité : 120 s au maximum par événement et budgetMsPer10Min 240000 par joueur.
ts.AdminBypassAces, ts.AdminBypassIdentifiersListes d'ACE et d'identifiants du staff.Voir Comment le staff est reconnu.

Sections de configuration : listes#

Listes par défaut de configs/anticheat_config.lua. La plupart sont remplacées par les tables du panel lors de la synchro.

SectionRôleRéglages que l'on modifie généralement
ts.Weapons, ts.vehicleBlacklist, ts.Plates, ts.BlacklistObjects, ts.pedBlacklist, ts.BlacklistPeds, ts.BlacklistCommands, ts.BlacklistWords, ts.BlacklistNames, ts.BlacklistKeys, ts.BlacklistAnimsListes noires par défaut. La liste des armes définit aussi un BAN, KICK ou LOG par arme.Retirez les éléments que vos métiers distribuent. Les commentaires de la config citent les hélicoptères de la police et des EMS ainsi que les peds SWAT et hwaycop.
ts.BlacklistPlayerModelsModèles de ped joueur signalés après 3 relevés espacés de 5 s (environ 15 s). Clé de sanction peds (KICK).La boucle client ne vérifie pas elle-même l'interrupteur antiPeds.
ts.BlacklistSpritesDictionnaires de textures de menus de triche.Le panel peut la remplacer.
ts.detectedKeysTouches de déclenchement d'overlay.Valeur fournie {44, 73, 104}.
ts.explosionBlacklistTypes d'explosions exotiques qui sont annulés et sanctionnés.BAN, KICK ou LOG par type. Synchronisé avec le panel.
ts.triggerList, ts.fakeTriggers, ts.fakeTriggerStrikeMax, ts.fakeTriggerServerTrapsNoms d'événements honeypot appelés par les menus de triche. Les entrées de type server deviennent des pièges serveur tant que ts.fakeTriggers est actif.N'ajoutez jamais de vrais événements de framework. fakeTriggerStrikeMax 1, fakeTriggerServerTraps désactivé.
ts.whitelistedCoords, ts.TaskListListe blanche de coordonnées côté client et tâches de ped sur liste noire.Les deux sont vides par défaut.

Clés sans effet et clés absentes du fichier#

Certaines clés de configs/anticheat_config.lua ne sont pas lues par le code de la 9.6.15. Les modifier n'a aucun effet.

Le code lit aussi des clés que le fichier ne contient pas. Ajoutez-les vous-même si vous en avez besoin : ts.v12.joinFloodWindowSec (60), ts.v12.joinFloodMaxJoins (6), ts.v12.bannedCountries (codes pays ; une liste de refus géographique), ts.v6Enforcement.heuristic (remplace la liste des types d'heuristiques), ts.LiveWatch.fps (30), ts.SafeEventMaxArgs (64), et always = true sur les événements serveur de ts.DetectionExempt.

Ces interrupteurs client sont lus mais absents du fichier, et sont actifs sauf s'ils valent false : ts.antiScreenshotBypass, ts.antiRateOfFire et ts.antiNetOwnership. ts.microJitterMeanMin (0.5) est aussi lu mais absent du fichier.

  • ts.NetworkJoin.minimalSync
  • ts.AdminMenu.espMaxDistance et ts.AdminMenu.screenshotTimeout (l'ESP utilise espMaxDist)
  • ts.AdminMenu.permissionLevel (un libellé historique ; l'accès vient des ACE, des listes et des autorisations)
  • ts.ResourceGuard.strictClientDiff
  • ts.LiveWatch.enabled, preferTosunRender et maxConcurrent
  • ts.PhoneNotify.enabled, onBan et onDetect

Commentaires obsolètes dans le fichier de config#

Quelques commentaires de configs/anticheat_config.lua décrivent un ancien comportement. Le code fonctionne comme suit.

  • Le commentaire indique que les réglages du panel se resynchronisent toutes les 30 s. L'intervalle est ts.ServerPerf.configSyncIntervalSec (120 s par défaut).
  • Le commentaire indique que tosunac_setup met les événements en liste blanche. Elle ne fait que les cataloguer ; c'est ts.EventScanner.autoProtect qui décide de la protection.
  • Le commentaire de ts.ProtectedEvents prévient que les événements de framework provoquent de faux bans. Les appels sans clé sont rejetés et journalisés, jamais sanctionnés.
  • Le commentaire de ts.EventLimiter indique qu'il se déclenche quand la limite est dépassée. Il se déclenche quand le compteur atteint la valeur.
  • Le commentaire du bridge recommande setr pour les quatre convars du bridge. Seules tosun_ac_resource et tosun_ac_bridge_client_ms nécessitent setr.
  • Le commentaire de ts.Locale omet ar, mais locales/ar.json est bien fourni.

Convars de durcissement FiveM vérifiées par l'AC#

Deux modules lisent les convars FiveM au démarrage. La garde des convars (ts.hardening) s'exécute environ 8 s après le démarrage et considère une valeur non définie comme faible. L'audit de server.cfg (ts.cfgAudit) s'exécute 15 s après le démarrage et fonctionne en lecture seule.

ConvarRecommandéVérifiée parAppliquée par autoApply
sv_stateBagStrictModetrueGarde des convarsOui
sv_filterRequestControl2Garde des convarsOui
sv_enableNetworkedSoundsfalseGarde des convarsOui
sv_enableNetworkedPhoneExplosionsfalseGarde des convarsOui
sv_enableNetworkedScriptEntityStatesfalseGarde des convarsOui
sv_scriptHookAllowedfalseGarde des convars ; l'audit avertit aussi quand elle vaut trueOui
sv_entityLockdownrelaxed (strict also passes)Garde des convars, rapport uniquementNon. Peut casser les scripts qui font apparaître des véhicules depuis le client ; testez d'abord.
sv_pureLevel1 or higherGarde des convars, rapport uniquementNon
onesyncon (legacy also passes)Audit ; aussi une dépendance du manifesteNon
sv_lanfalseL'audit avertit quand elle vaut trueNon
sv_authMinTrust4 or higher (unset reads as 5)AuditNon
sv_enforceGameBuildany build numberL'audit avertit quand elle est videNon

Interrupteurs et sortie du durcissement#

Par défaut, les deux contrôles se contentent de signaler. Modifiez-les dans configs/anticheat_config.lua.

  • ts.hardening.enabled = false désactive la garde des convars.
  • ts.hardening.autoApply = true (false par défaut) laisse l'AC exécuter lui-même set pour les six convars sûres. sv_entityLockdown et sv_pureLevel ne sont jamais appliquées automatiquement.
  • ts.cfgAudit.enabled = false désactive l'audit de server.cfg.
  • La garde des convars affiche un avertissement dans la console et écrit une ligne dans ac_detections (detection_type hardening_missing) qui liste chaque convar faible.
  • L'audit affiche un avertissement dans la console et écrit une ligne dans admin_logs avec le nombre de réglages faibles.
  • Le texte console des deux contrôles est codé en dur en turc. Chaque ligne d'avertissement de la garde indique la ligne set exacte à ajouter.
  • tosunac_doctor est un rapport console distinct sur les réglages risqués de l'AC, pas sur les convars FiveM.

Erreurs fréquentes#

Vérifiez ces points avant d'ouvrir un ticket de support.

  • Identifiants définis avec setr ou sets : ils arrivent sur chaque client ou dans les informations publiques du serveur.
  • Identifiants placés après ensure tosun-ac : ils ne sont pas pris en compte avant le prochain redémarrage de la ressource.
  • Une clé du panel dans configs/anticheat_config.lua : le fichier est envoyé aux clients et la console affiche un avertissement MIGRATION.
  • tosun_render non démarré : c'est une dépendance obligatoire.
  • ts.Framework.framework laissé à "qb" sur un serveur ESX ou Qbox.
  • ts.Locale laissé à "tr" sur un serveur qui n'utilise pas le turc.
  • ts.appealDiscord laissé sur le lien Discord de l'éditeur.
  • ts.punishType réglé sur LOG ou KICK : les bans manuels deviennent aussi des logs ou des expulsions.
  • add_ace builtin.everyone command allow : chaque joueur échappe aux vérifications VPN et pays.
  • Penser que tosun.admin débloque tosunac_setup : il faut tosunac.admin plus command.tosunac_setup.
  • Penser que les admins txAdmin peuvent ouvrir le menu de l'AC : les ACE txAdmin ne donnent que le statut staff. Ajoutez tosun.admin ou une autorisation du panel.
  • set tosun_db_bridge_enabled "0" sans tosun_db_bridge_manual "1" : la ligne est ignorée.
  • ts.Debug laissé à true : les exclusions du staff et de la liste blanche sont désactivées.