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 emplacement | Chargé sur | Contenu |
|---|---|---|
server.cfg | Serveur | Convars (licence, clé du panel, ressources de confiance), permissions ACE et convars de durcissement FiveM. |
configs/anticheat_server.lua | Serveur uniquement, avant les scripts serveur de l'AC | Solution de repli pour les identifiants quand vous n'utilisez pas les convars : panelKey, centralToken et licenseKey. |
configs/anticheat_config.lua | Partagé : serveur et chaque client | Tous 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.lua | Serveur uniquement | URL des webhooks Discord et style des embeds. |
admins/anticheat_admins.lua | Serveur uniquement | La liste d'identifiants Admins (statut staff et menu admin). |
Web panel (ac_settings and ac_ tables) | Synchronisé vers le serveur | Remplace 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_BUILDRè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.
| Convar | Par défaut | Effet | Remarques |
|---|---|---|---|
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_upload | http://localhost/api/screen_upload.php | URL 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 chargement | Active 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 chargement | Autorise 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_ms | 5000 (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_ms | 120000 (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_ms | 60000 (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_ms | 750 (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_ms | 60000 (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.
- La convar du serveur : tosun_ac_license, tosun_ac_panel_key ou tosun_ac_central_token.
- La valeur dans configs/anticheat_server.lua : licenseKey, panelKey ou centralToken.
- 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.
- Pour contrôler le bridge depuis server.cfg, ajoutez set tosun_db_bridge_manual "1" avant ensure tosun-ac.
- Ajoutez set tosun_db_bridge_enabled avec "1" ou "0".
- 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 principal | Ce qu'il accorde | Exemple de ligne |
|---|---|---|
tosun.admin | Statut 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.admin | Comme tosun.admin. | add_ace group.admin ts.admin allow |
command.ts | Statut 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.kick | Statut 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.txadmin | Statut staff uniquement. Pas de menu admin. | Usually granted by txAdmin, or: add_ace group.admin txadmin.menu allow |
command.resources, command.restart | Statut staff uniquement, tant que ts.txAdminAuth = true. Pas de menu admin. | Usually granted by txAdmin |
command.screenshot, command.unban | Exemption 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.god | Testé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.admin | Utilisation 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_setup | Commande restreinte. Un joueur a aussi besoin de tosunac.admin. | add_ace group.admin command.tosunac_setup allow |
command.tosunac_backdoorscan | Commande restreinte. Un joueur a aussi besoin de tosunac.admin. | add_ace group.admin command.tosunac_backdoorscan allow |
command.tosunac_eventscan | Commande restreinte. Un joueur a aussi besoin de tosunac.admin. | add_ace group.admin command.tosunac_eventscan allow |
command.ts_setlang | Commande restreinte. Un joueur a aussi besoin du statut staff. | add_ace group.admin command.ts_setlang allow |
command.ts_v9_help | Commande 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_check | Rien 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é.
| Commande | Qui peut la lancer | Effet |
|---|---|---|
tosunac_setup | Console, ou un joueur avec command.tosunac_setup et tosunac.admin | Installation 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_backdoorscan | Console, ou command.tosunac_backdoorscan et tosunac.admin | Scan manuel des backdoors. Non enregistrée quand ts.BackdoorGuard.enabled = false. |
tosunac_eventscan | Console, ou command.tosunac_eventscan et tosunac.admin | Scan manuel des événements et triggers, envoyé au panel. Non enregistrée quand ts.EventScanner.enabled = false. |
ts_setlang playerId lang | Console, ou command.ts_setlang et le statut staff | Règle la langue de l'AC pour un joueur. Ne vérifie pas que l'ID du joueur est en ligne. |
ts_v9_help | Console, ou command.ts_v9_help | Affiche la liste des commandes supplémentaires v9 dans la console du serveur. |
tosunac_integration | Console uniquement | Affiche le mode d'application des exports, les ressources de confiance et leur source, ainsi que les 20 derniers refus. |
tosunac_doctor | Console uniquement | Rapport 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_cleanup | Console uniquement | Lance 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_status | Console uniquement | Affiche l'état du DB bridge, l'état de la licence, l'état d'oxmysql et le framework. |
tosunac_db_check | Console uniquement | Exé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.
| Source | Où le définir | Statut staff | Menu admin | Remarques |
|---|---|---|---|---|
ACE tosun.admin, ts.admin, command.ts | server.cfg add_ace | Oui | Oui | Méthode recommandée pour accorder le statut staff. |
ACE command.ban, command.kick | server.cfg ou txAdmin | Oui | Oui | Reste staff même avec ts.txAdminAuth = false. |
Principals group.admin, group.superadmin, group.moderator, group.god | server.cfg add_principal | Seulement si le nom correspond à un ACE autorisé | Même condition | Testés comme objets ACE. Ajoutez aussi un ACE explicite. |
ACE txadmin, tx.admin, txadmin.menu, txadmin.advanced, command.txadmin | txAdmin ou add_ace | Oui | Non | Les admins txAdmin ont besoin de tosun.admin ou d'une autorisation du panel pour le menu. |
ACE command.resources, command.restart | txAdmin | Seulement tant que ts.txAdminAuth = true | Non | Généralement accordés par txAdmin. |
ACE command.screenshot, command.unban | txAdmin | Exemption uniquement, tant que ts.txAdminAuth = true | Non | Pas de commandes du staff. |
ts.AdminBypassAces | configs/anticheat_config.lua | Oui | Non | Les entrées que vous ajoutez n'ouvrent pas le menu. |
Admins | admins/anticheat_admins.lua | Oui | Oui | Fichier réservé au serveur. |
ts.AdminMenu.allowedIds | configs/anticheat_config.lua | Oui | Oui | "all" et "staff" ne sont pas des identifiants et n'accordent rien. |
ts.AdminBypassIdentifiers | configs/anticheat_config.lua | Oui | Non | Le commentaire de la config mentionne aussi ip:x.x.x.x. |
Panel grants (ac_v7_admin_grants) | Panel web | Oui | Oui | Un résultat positif est mis en cache 5 s, un négatif 30 s. |
addAdmin export | Une ressource de confiance | Oui | Oui | Jusqu'à l'appel de removeAdmin. |
Player whitelist (ac_whitelist) and runtime whitelist | Panel web ou exports de liste blanche | Non (exemption de sanction uniquement) | Non | Ignorées tant que ts.Debug = true. |
ACE tosunac.admin | server.cfg add_ace | Non | Non | Dé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 menuAutorisations 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églage | Valeur fournie | Effet |
|---|---|---|
ts.AdminBypassDetections | true | false rend le staff sanctionnable comme n'importe quel joueur. |
ts.txAdminAuth | true | false 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.Debug | false | true 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.NuiNeverBanUnauthorized | true | false 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.enabled | true, true | false 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.requireActionSignature | true | false désactive la signature des actions sensibles du menu admin. |
ts.v12.bypassStaffIpCheck | true | Le 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 = trueComment 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églage | Valeur fournie | Effet |
|---|---|---|
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.Debug | false | true désactive les exclusions du staff et de la liste blanche. Gardez false en production. |
ts.txAdminAuth, ts.AdminBypassDetections, ts.NuiNeverBanUnauthorized | true, true, true | Traitement du staff. Voir Réglages qui modifient le traitement du staff. |
ts.screenshotModule | "screenshot-basic" | Ressource utilisée pour les captures d'écran. |
ts.banIDFormat | 1 | 1 = ABCD-1234, 2 = #1234. |
ts.autoSQL | false | true 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', true | Façonnent les messages d'expulsion et de ban. |
ts.appealDiscord, ts.appealTicketUrl | vendor links | Ajouté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.pingOnDetect | false | Ajoute @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.chatMessages | false | Annonce les sanctions dans le chat. |
ts.spoilerIP | true | Masque les adresses IP sous des balises spoiler dans les logs Discord. |
ts.needDiscord | false | true refuse les joueurs qui n'ont pas d'identifiant Discord. |
ts.maxUsernameLength | -1 | Longueur 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.
| Section | Rôle | Réglages que l'on modifie généralement |
|---|---|---|
ts.DetectionPunishments | Sanction 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.BanDurations | Duré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.confirmWindow | Filtre 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.v6Enforcement | Plafonne 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 settings | OCR 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.quarantine | Isolement par routing bucket utilisé par l'export quarantine au lieu d'un ban. | defaultSeconds 300, maxSeconds 1800, autoQuarantine (désactivé). |
ts.autoEvidence | Courte 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.forensics | Graphe 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.v16 | Vé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.aimGuard | Anti-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.combatGuard | Plafonds 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.
| Section | Rôle | Réglages que l'on modifie généralement |
|---|---|---|
ts.netEvents | Vé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.entityFlood | Limite de débit des spawns par joueur. Les spawns au-delà de la limite sont annulés. | maxPerSec 30, banAfterFloods 3, action ("ban"). |
ts.crashGuard | Limites 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.serverAuthority | Lit 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.shieldAi | Bouclier 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.shieldExplosion | Annule les explosions invisibles ou silencieuses et ne sanctionne qu'en cas de répétition. | action ("kick"), strikes 5 en 60 s. |
ts.premiumGuard | Protection 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.vehicleGuard | Détecte les véhicules projetés ou lancés. | action ("kick"), strikeLimit 3, stuntMode, excludeAirVehicles. |
ts.weaponInventory | Signale 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.entityGuard | Dé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.rateGuard | Limites 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.SpamGuard | Limites 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.EventLimiter | Limite 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.autoExempt | Anti-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.shield | Couche 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.nativeGuard | Intégration avec le compagnon Windows externe tosun-guard.exe. | action ("log"), requireGuard (false). |
ts.guard | Surveillance de la ressource client séparée tosun-guard. Ne sanctionne personne quand tosun-guard n'est pas installé. | action ("kick"). |
ts.launcherGate | Exige à 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.
| Section | Rôle | Réglages que l'on modifie généralement |
|---|---|---|
ts.Framework | Choix 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.AutoSetup | Détection passive du framework quand framework vaut "auto" ou "" : qbx_core, puis qb-core, es_extended, vrp, ox_core. | autoDetectFramework (true). |
ts.v12 | Autoprotection, 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.HeartBeat | Surveillance 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.NetworkJoin | Cadencement 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.AdminMenu | Menu 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.PhoneNotify | Notifications 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.LiveWatch | Surveillance de l'écran en direct depuis le menu admin et le panel. | interval 1500, quality 0.7, maxSeconds 600, timeout 12000. |
ts.ServerPerf | Compromis entre charge du serveur et latence des mises à jour. | configSyncIntervalSec 120 (minimum 20), panelPlayerSyncIntervalMs 12000, liveWatchDbPollMs 4500. |
ts.Central | API 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.cloudBridge | Envoie 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.panelMirror | Ancien 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.connectingCard | Carte 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.PanelDangerousActionIPs | Liste 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.licenseLock | Protection 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.NpcBlocker | Supprime 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.cfgAudit | Garde 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.
| Section | Rôle | Réglages que l'on modifie généralement |
|---|---|---|
ts.whitelistedResources | Ressources 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.ResourceGuard | Baseline 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.BackdoorGuard | Analyse 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.EventScanner | Catalogue 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.SafeEventMaxArgs | Pour 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.ExportCallerWhitelist | Pour 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.Integration | Pour 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.AdminBypassIdentifiers | Listes 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.
| Section | Rôle | Ré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.BlacklistAnims | Listes 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.BlacklistPlayerModels | Modè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.BlacklistSprites | Dictionnaires de textures de menus de triche. | Le panel peut la remplacer. |
ts.detectedKeys | Touches de déclenchement d'overlay. | Valeur fournie {44, 73, 104}. |
ts.explosionBlacklist | Types 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.fakeTriggerServerTraps | Noms 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.TaskList | Liste 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.
| Convar | Recommandé | Vérifiée par | Appliquée par autoApply |
|---|---|---|---|
sv_stateBagStrictMode | true | Garde des convars | Oui |
sv_filterRequestControl | 2 | Garde des convars | Oui |
sv_enableNetworkedSounds | false | Garde des convars | Oui |
sv_enableNetworkedPhoneExplosions | false | Garde des convars | Oui |
sv_enableNetworkedScriptEntityStates | false | Garde des convars | Oui |
sv_scriptHookAllowed | false | Garde des convars ; l'audit avertit aussi quand elle vaut true | Oui |
sv_entityLockdown | relaxed (strict also passes) | Garde des convars, rapport uniquement | Non. Peut casser les scripts qui font apparaître des véhicules depuis le client ; testez d'abord. |
sv_pureLevel | 1 or higher | Garde des convars, rapport uniquement | Non |
onesync | on (legacy also passes) | Audit ; aussi une dépendance du manifeste | Non |
sv_lan | false | L'audit avertit quand elle vaut true | Non |
sv_authMinTrust | 4 or higher (unset reads as 5) | Audit | Non |
sv_enforceGameBuild | any build number | L'audit avertit quand elle est vide | Non |
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.