Aller au guide

Documentation 9.6.24

Référence des exports

Tous les exports publics de Tosun AC 9.6.15, avec leurs paramètres, leurs valeurs de retour, leurs effets de bord et l'obligation ou non pour la ressource appelante d'être de confiance. Pour un parcours par tâche, commencez par le guide d'intégration.

Appeler un export#

Appelez les exports serveur depuis les scripts serveur de votre ressource et les exports client depuis ses scripts client. Le nom de la ressource contient un tiret : utilisez donc toujours la forme avec crochets exports['tosun-ac']. La forme exports.tosun-ac n'est pas du Lua valide.

  • Passez les id serveur sous forme de nombres. Plusieurs exports utilisent l'id directement comme clé de table.
  • Certains exports lancent une requête synchrone en base et cèdent la main (yield). Appelez-les depuis un thread ou un gestionnaire d'événement : getBans, getBanInfo, GetDetections, isAdmin et les autres vérifications du staff, IsExemptFromPunish, ForensicLinksOf et refreshPanelWhitelist. scanAllResources et scanSingleResource cèdent aussi la main.
  • Un export protégé qui refuse votre ressource renvoie false, même s'il renvoie normalement nil.
  • Certains exports n'existent que lorsque leur fonctionnalité est activée (voir Exports dépendant d'une fonctionnalité). Appeler un export non enregistré lève une erreur : entourez donc ces appels d'un pcall.
  • Plusieurs exports manquent dans les listes d'exports de fxmanifest.lua (par exemple MarkTeleport, punish et AllowWeapon). Ces listes sont seulement informatives ; les exports fonctionnent.
  • Les tableaux ci-dessous indiquent Oui dans la dernière colonne quand la ressource appelante doit être de confiance. Voir Ressources de confiance.
-- script serveur dans votre propre ressource
local status = exports['tosun-ac']:GetIntegrationStatus()
if not status.trusted then
    print(status.hint) -- la ligne server.cfg à ajouter
end

-- signaler une téléportation à l'AC, puis déplacer le joueur
exports['tosun-ac']:MarkTeleport(src, 8000)
SetEntityCoords(GetPlayerPed(src), x, y, z)

-- script client dans votre propre ressource
exports['tosun-ac']:SetExempt(true, 60000, 'my_menu')

Ressources de confiance#

Les exports marqués Oui dans la colonne de confiance modifient les exemptions, les droits staff, les bans, la santé, les armes ou l'inventaire des joueurs, la quarantaine, les ressources et les signatures, ou le serveur entier. Ils n'acceptent que les appels d'une ressource de confiance. Un appel refusé ne fait rien et renvoie false.

Un appelant est de confiance quand il s'agit de la console du serveur, de tosun-ac lui-même, d'une ressource listée dans ts.ExportCallerWhitelist dans la config, ou d'une ressource listée dans la convar tosun_ac_trusted_resources. La liste par défaut de la config est qbx_core, qb-core, es_extended, ox_inventory et ox_lib.

Préférez la convar. Elle se trouve dans server.cfg et survit aux mises à jour de l'AC, alors que les modifications du fichier de config peuvent être perdues lors d'une mise à jour. Séparez les noms par des virgules ou des espaces. La liste de confiance est mise en cache 10 secondes : une modification faite en cours d'exécution s'applique donc dans les 10 secondes.

Au premier refus pour chaque couple ressource et export, l'AC affiche un avertissement dans la console du serveur avec la ligne exacte à ajouter à server.cfg, et écrit une ligne dans les logs du panel. La ligne de log du panel est toujours en turc.

Mode audit : avec ts.EnforceExportCallerWhitelist = false, les appels non fiables s'exécutent et chaque couple ressource et export est affiché une fois dans la console du serveur (sans ligne de log dans le panel). La valeur par défaut est true. N'utilisez le mode audit que pendant l'installation, pour voir quels scripts appellent quoi.

Lancez tosunac_integration dans la console du serveur pour afficher le mode d'application, les ressources de confiance avec leur source (config ou convar) et les 20 derniers appels refusés. Depuis un script, appelez GetIntegrationStatus().

La confiance supprime aussi le budget de MarkTeleport : les ressources de confiance peuvent marquer des téléportations sans la limite de temps par joueur.

Tosun AC enregistre aussi des exports et des événements réseau internes pour son propre fonctionnement (pont du panel, signature, analyse, licences, traitement par lots). Ils ne font pas partie de cette référence et ne constituent pas une API prise en charge. Certains sont protégés par la vérification de confiance ou par une vérification interne de l'appelant. Ne les appelez pas.

# server.cfg
set tosun_ac_trusted_resources "my-housing,my-clothing"

Intégration et exemptions#

Exports serveur qui informent l'AC des actions légitimes de vos scripts, et qui indiquent si un joueur est exempté.

ExportParamètresRetourEffetRessource de confiance requise ?
MarkTeleportsrc; ms? (8000 par défaut, borné entre 1000 et ts.Integration.markTeleportMaxMs, 15000 par défaut); reason? (étiquette de log)true si accordé ou déjà couvert ; false si le joueur est invalide ou hors ligne, ou si le budget ne peut pas le couvrirExemption souple. Appelez-le juste avant de déplacer un joueur. Assouplit les vérifications de mouvement serveur, les vérifications godmode/invisible/noclip/focus et les vérifications client du joueur. Les sanctions pour armes, argent, dégâts, abus d'événements, injection et crash s'appliquent toujours. Effacé à la déconnexion.Non. Les ressources non fiables partagent un budget de 180000 ms par joueur et par période de 10 minutes (ts.Integration.markTeleportBudgetMs). Une demande qui ne tient pas dans le budget est refusée en entier.
IsMovementExemptsrcbooléentrue tant qu'une fenêtre souple MarkTeleport ou DetectionExempt.serverEvents est active.Non
GetIntegrationStatusaucun (l'appelant est détecté){ version, resource, trusted, trustedVia ('config', 'convar', 'self' ou nil), enforcing, hint }Indique à votre ressource si elle est de confiance et comment. hint est la ligne server.cfg à ajouter quand elle ne l'est pas. enforcing = false signifie mode audit.Non
SetPlayerExemptsrc; state (true accorde, false retire); durationMs? (30000 par défaut, 300000 max); reason?true ; false si non fiable ou si src n'est pas un nombreExemption complète : immunité contre les sanctions serveur plus l'indicateur d'exemption client. La plupart des vérifications client sont ignorées ; les détections qui atteignent quand même le chemin de ban client sont rétrogradées en entrées LOG marquées [exempt]. Partage un seul minuteur avec whitelistPlayer, PausePlayerDetections et BypassDetection : une nouvelle attribution peut donc raccourcir une plus ancienne, et state = false les annule. Effacé à la déconnexion.Oui
SetExempt (server)src; durationMs? (30000 par défaut, 300000 max); reason?identique à SetPlayerExemptAlias de SetPlayerExempt(src, true, durationMs, reason). L'export client du même nom prend des arguments différents.Oui
BypassDetectionsrc; detectionKey (obligatoire, mais sa valeur est ignorée); durationMs? (5000 par défaut, 500 à 60000)true ; false si non fiable, si src est absent ou vaut 0, ou si la clé vaut nilNom historique. Accorde la même exemption complète que SetPlayerExempt ; ne se limite pas à une seule détection. Une table vide comme clé renvoie true mais n'accorde rien.Oui
PausePlayerDetectionssrc; durationMs? (15000 par défaut, 300000 max)true ; false si non fiable ou si src n'est pas un nombreImmunité contre les sanctions serveur plus un indicateur de pause client pour un joueur.Oui
PauseAllDetectionsdurationMs? (10000 par défaut, 300000 max)true ; false si non fiableSuspend les détections client pour tous les joueurs en ligne à ce moment. Aucune exemption côté serveur. Les joueurs qui arrivent plus tard ne sont pas suspendus. Il n'y a aucune limitation de fréquence.Oui
AllowWeaponsrc; weapon? (nom comme 'WEAPON_PISTOL', hash, '*' ou nil pour toutes les armes); ms? (600000 par défaut, 1000 à 3600000)true ; false si non fiable, si le joueur est invalide ou hors ligne, ou si un nombre vaut NaN/infPermet à un joueur de tenir et d'utiliser une arme absente de son inventaire. N'assouplit que la vérification arme contre inventaire (arme tenue et dégâts). Effacé à la déconnexion.Oui
IsExemptFromPunishsrcbooléen (true = ne pas sanctionner)La règle centrale utilisée par les modules d'application. true pour le staff (quand ts.AdminBypassDetections n'est pas false), les exemptions actives, la liste blanche en mémoire et celle du panel, et les joueurs protégés. À cause de cette dernière règle, le staff reste exempté ici même avec AdminBypassDetections = false. Toujours false avec ts.Debug. Peut interroger la base de données.Non
IsPlayerProtectedsrcbooléentrue pour le staff, le statut admin ou une exemption active. Ignore ts.AdminBypassDetections et ts.Debug. N'inclut ni la liste blanche en mémoire ni celle du panel ; utilisez IsExemptFromPunish pour la règle complète. Peut interroger la base de données.Non

Choisir une exemption#

Utilisez l'exemption la plus étroite qui couvre votre script. Plusieurs exemptions partagent le même indicateur d'exemption client, si bien que l'une peut mettre fin à une autre : ClearArea avec un nom de zone réinitialise l'indicateur que SetPlayerExempt, MarkTeleport et BypassDetection définissent aussi.

ExportImmunité contre les sanctions serveurVérifications clientDuréeRessource de confiance requise ?
MarkTeleportVérifications de mouvement et de visibilité uniquementExemptées (la fenêtre ne fait que s'allonger)8 s par défaut, 1 s min ; max ts.Integration.markTeleportMaxMs par appel (15 s par défaut)Non (avec budget)
SetPlayerExempt, SetExempt (server)OuiExemptées30 s par défaut, 300 s maxOui
BypassDetectionOuiExemptées5 s par défaut, 0,5 à 60 sOui
PausePlayerDetectionsOuiSuspendues15 s par défaut, 300 s maxOui
PauseAllDetectionsNonSuspendues pour les joueurs en ligne à ce moment10 s par défaut, 300 s maxOui
whitelistPlayerOuiAucun indicateur client3600 s par défaut, -1 = jusqu'à la déconnexionOui
AddWhitelistOui, par identifiantAucun indicateur clientJusqu'au redémarrage, ou durationSecOui
WhitelistAreaNonExemptées30 s par défautOui
AllowWeaponVérification arme contre inventaire uniquementInchangées600 s par défaut, 3600 s maxOui
Client SetExempt, PauseDetectionsNonExemptées ou suspendues sur ce client30 s ou 10 s par défaut, 300 s maxNon (toute ressource client)

Staff et permissions#

Lire et modifier qui l'AC considère comme staff. Les vérifications du staff peuvent interroger la base de données : appelez-les depuis un thread ou un gestionnaire d'événement.

isAdmin renvoie true pour : une attribution manuelle via addAdmin ; les ACE txadmin, tx.admin, txadmin.menu, txadmin.advanced, command.txadmin, command.ts, command.ban, command.kick, tosun.admin, ts.admin et ceux de ts.AdminBypassAces ; les principals group.admin, group.superadmin, group.moderator et group.god ; command.kick/ban/resources/restart quand ts.txAdminAuth est actif ; les identifiants de admins.lua, ts.AdminMenu.allowedIds et ts.AdminBypassIdentifiers ; et les autorisations du panel en base de données. Un ACE également accordé à builtin.everyone ne compte pas.

isAdmin et addAdmin sont enregistrés deux fois dans le code source. Les versions de anticheat_server.lua se chargent en dernier et sont celles qui s'exécutent ; cette référence décrit celles-ci.

ExportParamètresRetourEffetRessource de confiance requise ?
isAdminsrc (passez un nombre)booléenStatut admin selon les sources listées ci-dessus. Les résultats de la base sont mis en cache 5 s s'ils sont positifs et 30 s s'ils sont négatifs. Ne tient pas compte de ts.AdminBypassDetections.Non
isStaffPlayersrcbooléenLa vérification du staff utilisée par les chemins de ban. Mêmes sources qu'isAdmin, plus les ACE de commandes txAdmin (command.kick/ban/resources/restart/screenshot/unban) sauf si ts.txAdminAuth = false.Non
isAdminMenuAllowedsrcbooléenIndique si le joueur peut ouvrir le menu admin. false quand le menu est désactivé. Les ACE propres à txAdmin (txadmin, tx.admin), ts.AdminBypassAces et ts.AdminBypassIdentifiers ne comptent pas. Pas de cache : une requête en base par appel.Non
getAdminTypesrc'tx', 'config' ou falseLibellé trompeur : chaque chemin admin positif définit le même indicateur, si bien que le staff obtient presque toujours 'tx', et 'tx' ne signifie pas txAdmin. Utilisez plutôt isAdmin.Non
addAdminsrc (passez un nombre)nil ; false si refuséAttribution staff en mémoire : immunité contre les sanctions et accès au menu admin. Non enregistrée en base. Non effacée à la déconnexion : elle reste liée à cet id serveur jusqu'à removeAdmin ou un redémarrage.Oui
removeAdminsrcnil ; false si refuséRetire l'attribution manuelle et le statut en cache. Les attributions par ACE, txAdmin, admins.lua et le panel ne sont pas révoquées et comptent de nouveau à la vérification suivante.Oui

Liste blanche des joueurs et zones#

Liste blanche par id serveur, liste blanche par identifiant et zones nommées. Les listes gérées à l'exécution ne vivent qu'en mémoire et sont perdues au redémarrage ; la liste blanche du panel est distincte.

ExportParamètresRetourEffetRessource de confiance requise ?
whitelistPlayersrc (passez un nombre); durationSec? (3600 par défaut; -1 = jusqu'à la déconnexion)nil ; false si refuséImmunité contre les sanctions serveur par id serveur. Aucun indicateur client. Effacé à la déconnexion. SetPlayerExempt, PausePlayerDetections et BypassDetection l'écrasent.Oui
removeWhitelistsrcnil ; false si refuséMet fin à whitelistPlayer. Met aussi fin à toute immunité serveur de SetPlayerExempt, PausePlayerDetections ou BypassDetection.Oui
AddWhitelisttarget (id serveur ou chaîne d'identifiant); durationSec? (nil ou 0 = jusqu'au redémarrage)true ; false si vide ou refuséAjoute des identifiants à la liste blanche en mémoire (non enregistrée en base). Un id serveur ajoute tous les identifiants de ce joueur. Les identifiants sont mis en minuscules et le préfixe license:, license2:, discord:, steam: ou fivem: est retiré. Une valeur composée uniquement de chiffres est lue comme un id serveur : passez donc les id Discord avec le préfixe discord:.Oui
RemoveWhitelisttarget (id serveur ou identifiant)true ; false si vide ou refuséRetire des entrées de la liste blanche en mémoire. La table de liste blanche du panel n'est pas modifiée.Oui
IsWhitelistedsrcbooléentrue si un identifiant figure dans la liste blanche en mémoire ou dans la liste blanche du panel en cache. N'inclut pas whitelistPlayer ni SetPlayerExempt. Toujours false avec ts.Debug.Non
refreshPanelWhitelistaucunnilRecharge immédiatement la liste blanche du panel (requête synchrone). Elle se recharge aussi 12 s après le démarrage puis toutes les 60 s.Non
WhitelistAreasrc; areaName (non vide); durationSec? (30 par défaut)true ; false si invalide ou refuséEnregistre une zone nommée et définit l'indicateur d'exemption client. Soulagement côté client uniquement : aucun module serveur ne lit la zone, il n'y a donc aucune immunité contre les sanctions serveur.Oui
ClearAreasrc; areaName? ('' ou nil = toutes les zones)true ; false si src vaut 0 ou si refuséRetire la zone. Avec un nom, réinitialise aussi l'indicateur d'exemption client, ce qui met fin également aux autres exemptions client. Avec un nom vide, l'indicateur reste tel quel.Oui
IsInAreasrc; areaName? (vide = n'importe quelle zone)booléenAvec un nom, vérifie l'expiration. Avec un nom vide, renvoie true pour n'importe quelle entrée, y compris les entrées expirées.Non

Sanctions et bans#

Sanctionner des joueurs via le circuit de l'AC, bannir des joueurs hors ligne et lire les bans. Tous les exports d'écriture de cette section nécessitent la confiance.

ExportParamètresRetourEffetRessource de confiance requise ?
punishsrc (en ligne); reason; image? (URL ou données de capture d'écran); configKey?; punishment? ('BAN', 'KICK' ou 'LOG')nil ; false si refuséExécute tout le circuit de sanction de l'AC. Les joueurs exemptés sont ignorés. Voir Comment punish() choisit la sanction.Oui
bansrc (en ligne); reasonnil ; false si refuséMême circuit avec la clé de config 'Banned via Export' et la sanction ts.punishType. Pas toujours permanent : la durée est ts.BanDurations['default'] (0 = permanent), et si le propriétaire a réglé ts.punishType sur KICK ou LOG, il expulse ou journalise à la place. Les joueurs exemptés sont ignorés en silence.Oui
BanPlayerExtsrc (en ligne); reason? ('Banned by script' par défaut)true si transmis ; false si non fiable ou hors ligneIdentique à ban().Oui
KickPlayersrc (en ligne); reason? ('Kicked by script' par défaut)true ; false si non fiable ou hors ligneSimple expulsion avec le message '[Tosun AC] ' suivi du motif. Aucune vérification d'exemption : le staff et les joueurs en liste blanche sont expulsés aussi. Rien n'est journalisé.Oui
offlineBandata { playername, license, steam, discord, ip, HWID, HWID2 à HWID5 } (identifiants sans préfixe); reasonnil ; false si refuséLigne de ban permanent pour un joueur hors ligne. Les identifiants manquants sont stockés comme valeurs de remplacement qui ne correspondent jamais à la connexion. Définissez toujours data.playername et reason : sans eux, l'insertion échoue en sql_mode STRICT et l'appelant n'en est pas informé. Affiche une ligne dans la console. data = nil lève une erreur Lua.Oui
offlineBanByLicenselicense (hex brut ou 'license:...'); reason? ('Sebep yok' par défaut, en turc); actor? ('panel' par défaut); name?; citizenid?true, banID ('O' + 8 hex) ; false, 'license required' ; false si refuséBan permanent de la licence plus une ligne d'historique dans ac_offline_bans. Renvoie avant la fin des écritures en base : les erreurs de base ne sont donc pas signalées. N'expulse pas un joueur en ligne. Une licence qui n'est pas une chaîne lève une erreur Lua.Oui
unbanbanIDtoujours nilAsynchrone : si le ban existe, le supprime, envoie un log Discord au webhook du menu admin et déclenche l'événement serveur ts_anticheat:playerUnbanned. Les lignes d'historique de ac_offline_bans sont conservées.Oui
getBanslimit? (100 par défaut, non plafonné); offset? (0 par défaut)lignes de ban, les plus récentes d'abordLignes complètes, y compris les colonnes IP, licence, Steam, Discord et HWID. Requête synchrone.Non
getBanInfobanIDligne de ban complète ou nilRequête synchrone.Non

Comment punish() choisit la sanction#

punish(), ban() et BanPlayerExt() partagent un même circuit. Voici l'ordre qu'il suit.

  1. Le staff est ignoré quand ts.AdminBypassDetections n'est pas false. Les joueurs avec une exemption active ou présents dans la liste blanche en mémoire ou celle du panel sont ignorés. ts.Debug désactive ces exclusions. Les appels ignorés ne font rien et ne journalisent rien.
  2. Le joueur doit être en ligne. Sinon, une erreur est affichée dans la console du serveur et rien ne se passe.
  3. Sanction : un argument punishment valide l'emporte. Sinon ts.DetectionPunishments[configKey], puis son alias, puis la clé de détection, puis ts.punishType, puis BAN.
  4. Chaque issue déclenche l'événement serveur ts_anticheat:playerBanned, publie un message dans le chat quand ts.chatMessages est actif, ajoute une violation cloud et écrit le log de l'AC et le log en direct.
  5. LOG : envoie le log de capture d'écran sur Discord.
  6. KICK : revérifie le staff quel que soit ts.AdminBypassDetections, si bien que le staff n'est jamais expulsé. Envoie ensuite le log de capture d'écran et déconnecte le joueur.
  7. BAN : insère le ban avec une durée tirée de ts.BanDurations en heures (configKey, alias, clé de détection, préfixe, puis default ; 0 = permanent) et bannedBy 'anticheat:' suivi de la clé. Déclenche ts_anticheat:banCommitted, prévient le panel et déconnecte le joueur (nouvelle tentative après 3 s).
exports['tosun-ac']:punish(src, 'Money exploit', nil, 'my_shop_exploit', 'BAN')

Modération d'un seul joueur#

Agir sur un joueur. Lisez attentivement la colonne de confiance : plusieurs de ces exports n'ont aucune vérification de confiance.

ExportParamètresRetourEffetRessource de confiance requise ?
freezePlayersrc (en ligne); freeze (booléen)true ; false si hors ligneFige ou dégèle le joueur et publie un avis localisé dans le chat. L'indicateur de gel n'est pas effacé à la déconnexion.Non
isPlayerFrozensrcbooléenReflète uniquement freezePlayer, pas massFreeze.Non
slayPlayersrc (en ligne)true ; false si hors ligneTue le joueur sur son client et affiche une notification.Non
warnPlayersrc (en ligne); reason?; actor? ('console' par défaut)true ; false si hors ligneAvertissement dans le chat du joueur et une ligne dans ac_player_warnings.Non
mutePlayersrc (en ligne); durationSec? (nombre; nil ou 0 = permanent); reason?; actor? ('system' par défaut)true ; false si hors ligneBloque les événements chatMessage historiques du joueur et enregistre une ligne dans ac_player_mutes. Les mutes temporaires prennent fin dans les 15 s suivant l'expiration. Un mute permanent n'est pas effacé à la déconnexion et se reporte sur le joueur suivant qui reçoit le même id serveur, jusqu'à unmutePlayer ou un redémarrage. Les avis du chat envoyés au joueur sont codés en dur en turc.Non
unmutePlayersrctrue ; false si src vaut nilRetire le mute et prévient le joueur s'il est en ligne (avis dans le chat codé en dur en turc).Non
isPlayerMutedsrcbooléenLecture seule.Non
setPlayerHealthsrc (en ligne); hp? (100 par défaut, 0 à 200)true ; false si hors ligne ou refuséRègle la santé sur le client et fixe la santé max à 200.Oui
setPlayerArmorsrc (en ligne); armor? (0 par défaut, 0 à 100)true ; false si hors ligne ou refuséRègle l'armure sur le client.Oui
giveWeaponsrc (en ligne); weapon? ('WEAPON_PISTOL' par défaut); ammo? (60 par défaut)true ; false si hors ligne ou refuséUtilise ox_inventory s'il est démarré ; sinon l'inventaire QB (framework 'qb' ou 'qbox' uniquement, pas 'qbcore') ; sinon addWeapon d'ESX ; sinon un don natif. Renvoie true même quand l'inventaire a refusé l'objet. N'appelle pas AllowWeapon : une arme donnée nativement peut donc être signalée par la vérification arme contre inventaire (action par défaut log).Oui
stripWeaponssrc (en ligne)true ; false si hors ligne ou refuséRetire toutes les armes du ped. Les objets d'inventaire ne sont pas touchés.Oui
clearInventorysrc (en ligne)true ; false si hors ligne ou refuséVide l'inventaire avec ox_inventory. Sans ox_inventory, affiche seulement une notification et ne vide rien, mais renvoie quand même true.Oui
spectatePlayeradminSrc; targetSrctrue ; false si un argument vaut nil ou si la cible n'a pas de pedPas un vrai mode spectateur : téléporte adminSrc vers la cible. Chaque appel donne aussi à adminSrc une exemption de mouvement de 15 s hors budget.Non

Actions sur tout le serveur#

Actions qui affectent tous les joueurs ou toutes les nouvelles connexions.

ExportParamètresRetourEffetRessource de confiance requise ?
lockdownStatusaucunactive (booléen), reason (chaîne)Lecture seule.Non
setLockdownstate (booléen); reason (passez une chaîne lors de l'activation)nil ; false si refuséTant qu'il est actif, chaque nouvelle connexion est refusée avec un message LOCKDOWN et le motif. Aucune exception pour le staff. En mémoire uniquement. Diffuse une ligne dans le chat. L'appeler avec state à true et sans motif active le verrouillage puis lève une erreur Lua.Oui
emergencyLockdownreason? (le motif du verrouillage vaut 'Acil durum' par défaut, en turc)nombre de joueurs expulsés ; false si refuséActive le verrouillage et expulse tous les joueurs hors staff avec un message localisé.Oui
massFreezestate (booléen)nombre de joueurs ; false si refuséFige ou dégèle tous les joueurs, staff compris, et diffuse une ligne dans le chat. La ligne du chat est codée en dur en turc.Oui
healAllaucunnombre de joueurs ayant reçu le soin ; false si refuséMet la santé au maximum et l'armure à 100 pour chaque joueur qui a un ped.Oui
setSpeedLimitkmh (0 désactive)la limite appliquée ; false si refuséLimite la vitesse des véhicules pour les joueurs en ligne à ce moment. Les joueurs qui arrivent plus tard ne reçoivent pas la limite.Oui
applyWeatherWithFrameworkweather (non vérifié)true, liste des méthodes essayéesEssaie qb-weather, Renewed-Weathersync, cd_easytime, puis wd_weather, weathersync, vSync et qb-weathersync, sinon diffuse à chaque client. N'existe que lorsque le menu admin est activé.Non
applyTimeWithFrameworkhour; minute (non bornés)true, liste des méthodes essayéesMême chaîne de repli pour l'heure. N'existe que lorsque le menu admin est activé.Non

Quarantaine et protection des données reçues#

Isoler un joueur suspect, et protéger vos propres événements réseau contre les payloads de crash et le spam.

ExportParamètresRetourEffetRessource de confiance requise ?
quarantinesrc (en ligne); reason? ('supheli davranis' par défaut, en turc); seconds? (300 par défaut, 30 à 1800)true (aussi s'il est déjà retenu) ; false pour les joueurs exemptés ou invalides, en cas d'échec du bucket ou pour un appelant non fiableDéplace le joueur dans un routing bucket isolé (9001 à 9500 par défaut, verrouillage strict des entités, sans population). Journalise une détection QUARANTINE et publie un avis dans le chat du joueur, sauf si notifyPlayer = false. L'avis est codé en dur en turc. Libéré automatiquement à l'expiration.Oui
releaseQuarantinesrctrue si libéré ; false s'il n'est pas retenu ou si refuséRétablit le routing bucket d'origine, journalise et prévient le joueur (avis dans le chat codé en dur en turc, sauf si notifyPlayer = false).Oui
isQuarantinedsrcbooléenLecture seule.Non
quarantineListaucun{ id, name, reason, remaining }[] (remaining en secondes)Lecture seule.Non
crashGuardInspectvalue (n'importe quel payload)nil si sûr ; sinon une description du problème en turcRecherche les nombres NaN/Inf, les vecteurs invalides, les chaînes de plus de 32768 caractères, une imbrication de plus de 8 niveaux, plus de 2000 éléments, environ 64 Ko au total, les clés de plus de 512 caractères, les types non pris en charge et la récursion. Aucun effet de bord.Non
crashGuardRejectsrc (en ligne); payloadtrue si le payload est invalide (à abandonner) ; false s'il est propre ou si src est invalideMême vérification plus un avertissement (strike) pour le joueur. 3 avertissements en 60 s appliquent ts.crashGuard.action : 'kick' (par défaut), 'ban', ou toute autre valeur = console et log uniquement. Les joueurs exemptés sont ignorés.Non
RateLimitsrc; key? ('default' par défaut); max? (10 par défaut, 1 min); windowMs? (10000 par défaut, 100 min)true = autorisé ; false = au-delà de la limiteCompteur à fenêtre fixe par joueur et par clé. Les clés sont partagées par toutes les ressources : préfixez-les avec le nom de votre ressource. src à 0 ou invalide renvoie toujours true. Effacé à la déconnexion.Non
RegisterNetEvent('myres:buy', function(data)
    local src = source
    if not exports['tosun-ac']:RateLimit(src, 'myres:buy', 5, 10000) then return end
    if exports['tosun-ac']:crashGuardReject(src, data) then return end
    -- traiter l'achat
end)

Joueurs et détections#

Rechercher des joueurs, des identifiants, les bans d'un joueur, des scores de menace et des comptes liés. Certains résultats contiennent des données personnelles comme des adresses IP.

ExportParamètresRetourEffetRessource de confiance requise ?
GetPlayerInfosrc (en ligne){ id, name, ping, license, discord, steam, citizenid, isAdmin, coords, endpoint } ou nilIdentifiants sans préfixe (license se rabat sur license2). endpoint est l'IP du joueur. citizenid n'est rempli que pour le framework 'qb', 'qbcore' ou 'esx' ; il est vide sur 'qbox'. isAdmin peut interroger la base de données.Non
GetNearbyPlayerssrc; radius? (30.0 par défaut){ id, name, distance }[]Joueurs proches de src d'après la position du ped côté serveur (OneSync), src exclu.Non
getOnlinePlayersaucun{ id, name, ping, license, discord, steam, isAdmin }[]Ici, les identifiants gardent leur préfixe (license:..., discord:..., steam:...). isAdmin peut interroger la base de données pour chaque joueur.Non
GetDetectionssrc (en ligne); limit? (25 par défaut){ banID, reason, banDate, banUntil }[] ou {}Nom historique : renvoie les lignes BAN du joueur trouvées par licence, pas des détections.Non
GetCloudThreatScoresrc0 à 100Score d'affichage : 8 par violation de session (40 max, seulement tant que la plus récente date de moins de 10 minutes), 10 par check-in Shield manqué (30 max) et 12 par point de menace du native-guard (30 max). 0 quand ts.cloudBridge.enabled = false.Non
NoteCloudViolationsrc; reason?; punishment? ('LOG', 'KICK' ou 'BAN')nilAjoute une violation au score du joueur ; ne fait rien quand ts.cloudBridge.enabled = false. Chaque note KICK ou BAN ajoute 25 au score de renseignement (100 max, tant que la dernière date de moins de 10 minutes) ; à 50 ou plus, la licence est signalée à la base de menaces inter-serveurs du panel (nécessite l'URL et le jeton du panel). Les connexions suivantes ne sont bloquées que si ts.cloudBridge.threatIntelAction = 'kick' ('log' par défaut). L'AC l'appelle déjà pour chaque sanction.Non
ForensicLinksOflicense (hex brut, sans préfixe license:)licences liées (liste de chaînes) ; {} si inconnueTrouve les comptes alternatifs qui partagent des valeurs Steam, Discord ou HWID (IP uniquement avec ts.forensics.linkByIp = true), jusqu'à ts.forensics.maxHops (3 par défaut, 5 max). Requêtes bloquantes. Fonctionne avec la forensique désactivée, mais aucun nouveau lien n'est alors enregistré.Non
checkIpReputationip{ vpn, proxy, hosting, country, org, expiresAt } ou nilLecture du cache uniquement. Ne renvoie des données que pour les IP vérifiées à la connexion dans la fenêtre de ts.v12.ipCheckCacheHours (24). Aucune recherche en direct.Non
webBridgeFindByLicenselicense (chaîne, avec ou sans license:)id serveur en ligne ou nilTrouve un joueur en ligne. En pratique, il compare exactement n'importe quel identifiant, par exemple license2:... ou discord:....Non
webBridgeFindByCitizencid (citizenid QB ou identifiant ESX)id serveur en ligne ou nilFonctionne uniquement pour le framework 'qb', 'qbcore' et 'esx' ; renvoie nil sur 'qbox'.Non

Notifications et langue#

Envoyer des notifications téléphone et utiliser les tables de traduction de l'AC. phoneNotify et phoneNotifyAdmins n'existent que lorsque ts.AdminMenu.enable est actif.

ExportParamètresRetourEffetRessource de confiance requise ?
phoneNotifysrc (en ligne); title; body; opts? { icon, color, app }true ; false si hors ligneEnvoie au premier téléphone démarré : qb-phone, qs-smartphone, lb-phone, yseries, gks_phone, npwd ou roadphone, sinon dans le chat. Le téléphone n'est détecté qu'une fois : un téléphone démarré plus tard est ignoré jusqu'au redémarrage.Non
phoneNotifyAdminstitle; body; opts?nilphoneNotify vers chaque membre du staff en ligne. Peut interroger la base de données pour chaque joueur.Non
getPlayerLocalesrccode de langue ; par défaut ts.Locale ('tr')Lecture seule. Côté serveur uniquement.Non
setPlayerLocalesrc; lang (2 ou 3 lettres minuscules avec un fichier locales)true si défini ; false sinonRègle la langue du joueur côté serveur. Contrairement à la commande ts_setlang, ne synchronise pas la langue vers le client. Effacé à la déconnexion.Non
translatekey; ... (valeurs pour {0}, {1}, ou une table pour {name})chaîne traduite ; repli en anglais ; la clé elle-même si elle est absenteUtilise ts.Locale. Un code final de 2 ou 3 lettres associé à un fichier de langue sélectionne la langue. Les modèles qui utilisent %s reviennent non formatés ; formatez-les vous-même.Non
translateForPlayersrc; key; ...chaîne dans la langue du joueurComme translate, avec la langue du joueur. Pas de code de langue final.Non

Captures d'écran#

Demander des captures d'écran de joueurs pour le panel. Les exports d'écriture de logs de l'AC sont internes et ne sont pas listés ici.

ExportParamètresRetourEffetRessource de confiance requise ?
v6ScreenWatchRequestserverId (en ligne); mode? ('once' par défaut); requestedBy? ('panel' par défaut); panelUrl?; forceBase64?id de requête ; ou nil, 'invalid_id' ; ou nil, 'offline'Met une capture en file d'attente et demande au client de l'envoyer au panel avec un jeton propre à chaque envoi. Un panelUrl doit être en https et correspondre à ts_public_panel_url ou ts.webPanelURL, sinon le client n'est pas sollicité. Les requêtes en attente expirent après 30 s et sont supprimées après 90 s.Non
v6ScreenWatchPollrid{ pending = true } tant qu'elle est en attente ; sinon l'entrée avec status ('done', 'failed' ou 'expired') et url ; ou nil, 'not_found'Lecture seule.Non
v6ScreenWatchLatestserverIddernière entrée de requête ou nilLecture seule.Non
RequestShieldScreenshotsrc (en ligne)true ; false si hors ligneDemande une capture au Shield client (requête valable 60 s). Une réponse signée est envoyée au panel et déclenche l'événement serveur ts_anticheat:shield:screenshot_saved(src, b64).Non
screenCapturesrc (en ligne); requestedBy? ('panel' par défaut)true ; false si hors ligneAncien mécanisme. Nécessite la ressource screenshot-basic et la convar ts_screen_upload définie avec setr (par défaut http://localhost/api/screen_upload.php). L'AC ne stocke pas le résultat. Utilisez plutôt v6ScreenWatchRequest ou RequestShieldScreenshot.Non

État et diagnostic#

Lire l'état de l'AC pour des tableaux de bord et des contrôles de santé.

ExportParamètresRetourEffetRessource de confiance requise ?
GetStatusaucun{ version, online, detections, debug, framework }version est la version de la ressource issue de fxmanifest. detections ne compte que les rapports d'un ancien canal client non signé et reste proche de 0 avec la signature active (par défaut) ; ce n'est pas un compteur de détections ou de bans. Il n'y a pas de champ de durée de fonctionnement.Non
getConfig (server)configType? ('webhooks' ou autre chose)copie nettoyée de la config ; pour 'webhooks', la table Webhooks aux appelants de confiance et {} aux autresLa copie retire les fonctions, les clés contenant secret, password, token ou webhook, les clés se terminant par key (sauf les noms se terminant par hotkey et le nom key seul), et tout ce qui est imbriqué au-delà de 6 niveaux. Mise en cache 5 s.Seulement pour 'webhooks'
licenseStatusaucun{ checked, ok, reason, serverId, licenseSet }État du verrou de licence. reason vaut 'disabled' quand ts.licenseLock.enabled n'est pas true, et 'not_checked' avant la première vérification, 1,5 s après le démarrage.Non
GetServerAuthorityStatusaucun{ enabled, checks = { [id] = { available, enabled, action } } }Indique quelles vérifications server-authority ce build du serveur prend en charge et comment elles sont réglées. Ids : superJump, damageMod, meleeMod, defenseMod, weapon, godmode, invisible, noclip, focus.Non
getRuntimeStatsaucun{ uptime_sec, connect_buckets, subnet_buckets, license_tracking }Compteurs du durcissement des connexions.Non
getBatchStatsaucun{ log_pending, detection_pending, webhook_pending }Tailles des files d'attente de l'écriture par lots toutes les 5 s.Non
getCleanupStatsaucun{ runs, last_run_at, last_summary, cleaned }Lecture seule.Non
runCleanupaucunla table de statistiques ; false si refuséLance immédiatement le nettoyage de rétention : lignes obsolètes de joueurs en ligne, anciennes détections, logs admin, audit du panel, réputation IP, files de commandes et de captures, tentatives de connexion et sessions expirées (limites issues des réglages keep de ts.v12). Les suppressions sont asynchrones : les statistiques renvoyées n'incluent donc pas encore ce passage.Oui

Resource guard#

Lire et modifier la baseline des ressources approuvées. Tous ces exports sont enregistrés même quand le resource guard est désactivé.

ExportParamètresRetourEffetRessource de confiance requise ?
getBaselineaucun{ [resource] = { manifest_hash, deep_hash } }La baseline approuvée.Non
getResourcesaucun{ [resource] = true }Ressources connues.Non
getSuspiciousaucun{ [resource] = { reason, state, hash, manifest, at } }Ressources signalées comme modifiées ou suspectes.Non
getStatsaucun{ lastScan, violations, driftedResources }Compteurs du guard.Non
rescanResourcesaucunétat complet du guard (ready, resources, hashes, suspicious, drift_count, violation_count, last_scan et plus)Reconstruit l'instantané des ressources de façon synchrone.Non
approveResourceresourceName; approvedBy? ('web_panel' par défaut)true ; false, 'resource_missing' ; false si refuséAjoute le hash actuel du manifeste à la baseline, efface les indicateurs suspect et bloqué, enregistre en base et met à jour tous les clients.Oui
blockResourceresourceName; reason? ('Manuel blok' par défaut, en turc)true ; false si refuséMarque la ressource comme bloquée, la retire de la baseline, enregistre en base et l'arrête si elle est démarrée.Oui
tsAutoSetupaucuntrue (aussi si une installation est déjà en cours) ; false si refuséIdentique à la commande console tosunac_setup : détecte le framework, lance le scan de backdoors (délai de 120 s) et le scan des signatures, approuve uniquement les ressources démarrées dont les résultats de backdoor et de signature sont complets, propres et inchangés, puis lance le scan des événements. S'interrompt sans rien approuver si le backdoor guard est désactivé ou occupé.Oui

Scans de signatures, de backdoors et d'événements#

Lancer des scans et gérer les signatures, les exceptions de faux positifs et les exclusions escrow. Les scans peuvent prendre du temps ; lancez-les depuis un thread.

ExportParamètresRetourEffetRessource de confiance requise ?
scanAllResourcesaucun{ total, scanned, infected, clean, errors, cached, skipped } ; ou nil, 'already_scanning'Scan des signatures de chaque ressource. Cède la main (yield). Réinitialise la liste des ressources infectées. Bloque les ressources infectées quand ts.ResourceGuard.autoBlockInfected est actif.Non
scanSingleResourcenameinfected (booléen), reasonreason vaut self, escrow_signature_skip, whitelisted, snapshot_unavailable, incomplete, clean, cached_clean, infected, cached_infected ou blocked. Peut céder la main (yield).Non
getInfectedFilesaucuntable des fichiers infectésRésultat du dernier scan.Non
addCheatSignaturepattern (motif de nom de ressource); signatureName?; severity? ('critical' par défaut)true ; false si vide ou refuséAjoute le motif en mémoire et en base. severity : info (faible), warning (moyenne), low, medium, high ou critical ; les valeurs inconnues deviennent high.Oui
invalidateSignatureCacheaucuntrueVide le cache des motifs et les résultats de scan enregistrés : le scan suivant relit donc chaque ressource.Non
reloadSignatureExceptionsaucuntrueInvalide les caches des exceptions et des exclusions escrow ainsi que les résultats de scan enregistrés. Ils sont rechargés à la prochaine utilisation.Non
reloadSignatureScanCachesaucuntrueRecharge immédiatement depuis la base les motifs, la liste blanche, les exceptions et les exclusions escrow.Non
addSignatureEscrowSkipresourceName; note?true ; false si vide, sans MySQL ou refuséFait ignorer tout le scan des signatures pour cette ressource (pour du code escrow).Oui
removeSignatureEscrowSkipidOrName (id de ligne ou nom de ressource)true ; false si invalide, sans MySQL ou refuséRetire l'exclusion escrow.Oui
addSignatureExceptionresourceName; filePath? ('' = tous les fichiers); signatureName; note?true ; false si des champs manquent, sans MySQL ou refuséMarque une détection de signature dans cette ressource comme faux positif.Oui
removeSignatureExceptionid (nombre)true ; false si non numérique, sans MySQL ou refuséSupprime l'exception.Oui
tsScanBackdoorscallback?(report) avec report = { complete, resources, finished_at, trigger }true si lancé ; false si un scan est en coursLance le scan de backdoors dans un thread. Les résultats vont en base et au panel. Avec ts.BackdoorGuard.autoQuarantine actif, les détections critiques arrêtent la ressource.Non
tsScanEventsaucuntrue si lancé ; false si un scan est en coursConstruit un inventaire statique des événements et triggers de toutes les ressources et l'envoie au panel.Non

Événements honeypot#

Transformer des noms d'événements en pièges ou les libérer. Les deux exports écrivent dans ac_protected_events et rechargent depuis la base.

ExportParamètresRetourEffetRessource de confiance requise ?
fakeTriggerTrapeventName; type ('client' ou 'server')true si transmis ; false si non fiable ou type invalideFait de l'événement un honeypot (active = 1). Redémarrez l'AC (ensure tosun-ac) pour un effet complet.Oui
fakeTriggerWhitelisteventNametrue si transmis (aussi pour un nom vide, qui ne fait rien) ; false si non fiableDésactive le honeypot pour cet événement (active = 0). Les gestionnaires déjà enregistrés peuvent nécessiter un redémarrage de l'AC ; la console le signale.Oui

Exports dépendant d'une fonctionnalité#

Ces exports ne sont enregistrés que lorsque leur fonctionnalité est active. Si la fonctionnalité est désactivée, les appeler lève une erreur.

ExportsEnregistrés uniquement quand
quarantine, releaseQuarantine, isQuarantined, quarantineListts.quarantine.enabled n'est pas false
crashGuardInspect, crashGuardRejectts.crashGuard.enabled n'est pas false
runCleanup, getCleanupStatsts.v12.enableAutoCleanup n'est pas false
tsScanBackdoorsts.BackdoorGuard.enabled n'est pas false
tsScanEventsts.EventScanner.enabled n'est pas false
applyWeatherWithFramework, applyTimeWithFrameworkle menu admin est activé (ts.AdminMenu existe et ni enable ni enabled ne vaut false)
phoneNotify, phoneNotifyAdminsts.AdminMenu.enable est actif

Exports côté client#

Appelez-les depuis des scripts client. N'importe quelle ressource client peut les appeler ; il n'y a aucune vérification de confiance. Ils n'affectent que les vérifications sur ce client et ne changent jamais l'application côté serveur.

ExportParamètresRetourEffetRessource de confiance requise ?
SetExempt (client)state (booléen); durationMs? (30000 par défaut, 300000 max); reason? (clé, 'unknown' par défaut)nilAjoute ou retire une exemption locale sous ce motif. Une nouvelle attribution remplace l'heure de fin pour le même motif. La plupart des vérifications client sont ignorées tant qu'elle est active ; les détections qui atteignent quand même le chemin de ban client sont rétrogradées en entrées LOG marquées [exempt]. state = false retire uniquement ce motif.Non
PauseDetectionsdurationMs? (10000 par défaut, 300000 max)nilSuspend les vérifications client locales. Chaque appel remplace l'heure de fin : PauseDetections(0) met donc fin à une pause et une valeur plus courte la raccourcit.Non
IsPlayerAdminaucunbooléenIndicateur staff local, rafraîchi toutes les 2 s à partir de l'état admin vérifié par le serveur, et non d'un state bag que le client peut écrire.Non
IsExemptaucunbooléentrue si le joueur est staff, si une exemption ou une pause serveur est active, si PauseDetections est actif ou si un motif SetExempt est actif.Non
GetExemptionsaucun{ [reason] = remainingMs }Liste uniquement les motifs SetExempt et le state bag tsAcExempt. N'affiche ni PauseDetections, ni les exemptions serveur, ni le statut staff ; utilisez IsExempt pour la réponse complète.Non
SetSpawnedstate (booléen)niltrue marque le joueur comme apparu (spawn). false suspend les vérifications de mouvement et visuelles, par exemple pendant la sélection de personnage ; il est pris en compte au plus une fois toutes les 5 minutes, et les vérifications reprennent après environ 30 s de mouvement visible normal.Non
getConfig (client)aucuntable de config clientSeuls les réglages sans risque pour le client sont synchronisés vers les clients.Non
-- sélection du personnage
exports['tosun-ac']:SetSpawned(false)
-- ... le joueur choisit un personnage ...
exports['tosun-ac']:SetSpawned(true)

Exports JavaScript#

Tosun AC enregistre quelques exports JavaScript sur le serveur pour l'analyse des ressources et la vérification de licence. Ils sont internes, ne passent pas par la vérification des ressources de confiance et ne constituent pas une API prise en charge. Ne les appelez pas. Il n'existe aucun export JavaScript public.

Fichiers bridge : installation#

Les fichiers bridge facultatifs de tosun-ac/bridge donnent à votre ressource une table globale TosunAC avec de petites fonctions utilitaires. Ils appellent les exports dans un pcall : votre script continue donc de tourner quand l'AC est arrêté. L'AC voit votre ressource comme appelante.

  1. Ajoutez le bridge au fxmanifest.lua de votre ressource : server_script '@tosun-ac/bridge/tosun_ac_server.lua' et, si besoin, client_script '@tosun-ac/bridge/tosun_ac_client.lua'.
  2. Si le dossier de l'AC porte un autre nom, ajoutez setr tosun_ac_resource "folder-name" à server.cfg. Utilisez setr : le bridge client lit cette convar sur le client.
  3. Facultatif : set tosun_ac_bridge_server_ms (60000 par défaut), set tosun_ac_bridge_cooldown_ms (750 par défaut, 0 désactive) et setr tosun_ac_bridge_client_ms (60000 par défaut).
  4. Pour des exemptions serveur complètes, ajoutez votre ressource à tosun_ac_trusted_resources. Sans confiance, TosunAC.PlayerExempt se rabat sur une exemption souple et affiche une seule fois un conseil dans la console du serveur (le texte du conseil est en turc).
-- fxmanifest.lua de votre ressource
server_script '@tosun-ac/bridge/tosun_ac_server.lua'
client_script '@tosun-ac/bridge/tosun_ac_client.lua'

# server.cfg
setr tosun_ac_resource "tosun-ac"
set tosun_ac_trusted_resources "my-resource"

-- script serveur
local ok, mode = TosunAC.PlayerExempt(src, 'long', 'clothing')
-- mode vaut 'full' (de confiance) ou 'soft' (mouvement uniquement, 15 s max)

Bridge : fonctions serveur#

Définies par bridge/tosun_ac_server.lua dans votre ressource. Préréglages : SHORT 30000, MEDIUM 60000, LONG 120000, XL 180000 ms (TosunAC.Presets). TosunAC.Version vaut '1.2'.

ExportParamètresRetourEffetRessource de confiance requise ?
TosunAC.MarkTeleportplayerId (1 ou plus); durationMs? (8000 par défaut)true uniquement si l'export a renvoyé trueAppelle MarkTeleport avec le motif 'bridge:teleport'.Non (si votre ressource n'est pas de confiance, le budget MarkTeleport par joueur s'applique)
TosunAC.PlayerExemptplayerId; durationMs (500 à 300000), nom de préréglage ou nil (= tosun_ac_bridge_server_ms); tag? (par défaut le nom de votre ressource)true, 'full' ; true, 'soft' ; ou falseEssaie SetPlayerExempt. En cas de refus, se rabat sur MarkTeleport pour 15 s au maximum. Un délai de récupération par joueur (750 ms par défaut, partagé avec PlayerExemptPreset) renvoie un simple false. En mode audit, le résultat est 'full' même pour les ressources non listées.Seulement pour 'full'
TosunAC.PlayerExemptPresetplayerId; presetName? ('MEDIUM' par défaut, insensible à la casse); tag?identique à PlayerExemptPlayerExempt avec une durée prédéfinie. Les noms inconnus utilisent MEDIUM. Ignore tosun_ac_bridge_server_ms.Seulement pour 'full'
TosunAC.PlayerExemptOffplayerId; tag? (non utilisé par l'AC)true si acceptéAppelle SetPlayerExempt(playerId, false). Les ressources non fiables reçoivent false, et une fenêtre souple n'est pas interrompue.Oui
TosunAC.IsTrustedaucunbooléenGetIntegrationStatus().trusted. Renvoie false pour les ressources non listées, même en mode audit où les appels protégés passent quand même.Non
TosunAC.IsAvailableaucunbooléentrue quand la ressource de l'AC est démarrée.Non

Bridge : fonctions client#

Définies par bridge/tosun_ac_client.lua dans votre ressource. Elles enveloppent l'export client SetExempt et n'apportent donc qu'un soulagement côté client.

ExportParamètresRetourEffetRessource de confiance requise ?
TosunAC.ExemptdurationMs (500 à 300000), nom de préréglage ou nil (= tosun_ac_bridge_client_ms); tag? (par défaut le nom de votre ressource)nilAppelle le SetExempt client avec la clé 'bridge:' suivie du tag.Non
TosunAC.ExemptOfftag? (doit correspondre au tag utilisé dans Exempt)nilRetire cette exemption.Non
TosunAC.ExemptPresetname? ('MEDIUM' par défaut)nilExempt avec une durée prédéfinie et le tag par défaut. Pas de paramètre tag.Non
TosunAC.RunWithExemptdurationMs; tag; fntrue plus les résultats de fn ; false, err ; ou false si fn n'est pas une fonctionExempte, exécute fn dans un pcall, puis appelle ExemptOff(tag).Non
TosunAC.RunWithExemptPresetpresetName; fnidentique à RunWithExemptRunWithExempt avec une durée prédéfinie et le tag par défaut.Non
TosunAC.IsAvailableaucunbooléentrue quand la ressource de l'AC est démarrée.Non
tosun-ac:bridge:clientExempt (net event)durationMs?; tag?rienEnregistré dans chaque ressource qui inclut le bridge client. Un script serveur peut l'envoyer avec TriggerClientEvent pour exécuter TosunAC.Exempt sur ce client. Si plusieurs ressources incluent le bridge, chacune applique sa propre exemption. Rien dans tosun-ac ne l'envoie.Non (scripts serveur, ou scripts client locaux avec TriggerEvent)

Exports que n'importe quelle ressource peut appeler#

Ces exports n'ont aucune vérification de confiance et ont des effets de bord. Toute ressource serveur peut les appeler. N'utilisez que des ressources de confiance ; notez que n'importe quelle ressource serveur peut déjà expulser des joueurs ou déclencher des événements client via les natives FiveM.

  • MarkTeleport : exemption de mouvement, limitée par le budget par joueur.
  • spectatePlayer : téléporte un joueur et accorde à chaque appel une exemption de mouvement de 15 s hors budget.
  • NoteCloudViolation : augmente le score de menace d'un joueur et peut signaler la licence à la base de menaces inter-serveurs.
  • warnPlayer et mutePlayer : écrivent des enregistrements d'avertissement et de mute.
  • freezePlayer et slayPlayer : agissent directement sur un joueur.
  • crashGuardReject : ajoute des avertissements (strikes) qui peuvent mener à une expulsion ou un ban.
  • screenCapture, v6ScreenWatchRequest et RequestShieldScreenshot : demandent des captures d'écran.
  • rescanResources, scanAllResources, scanSingleResource, tsScanBackdoors et tsScanEvents : lancent des scans. scanAllResources peut bloquer des ressources et tsScanBackdoors peut en arrêter quand le blocage automatique ou la quarantaine automatique est actif.
  • applyWeatherWithFramework et applyTimeWithFramework : changent la météo et l'heure pour tout le monde.
  • invalidateSignatureCache, reloadSignatureExceptions, reloadSignatureScanCaches et refreshPanelWhitelist : rechargent des caches.
  • setPlayerLocale et unmutePlayer : modifient l'état d'un joueur.
  • phoneNotify et phoneNotifyAdmins : envoient des messages téléphone ou dans le chat aux joueurs.

Noms historiques et trompeurs#

Ces exports fonctionnent toujours, mais leur nom ou une ancienne documentation suggère quelque chose qu'ils ne font pas.

  • Les anciens guides (INTEGRATION.md pour la 9.6.6, CONFIG-EXPORTS-MULTILANG.md pour la 8.6.1, et la page de redirection TOSUN-AC-EXPORTS.md) sont obsolètes. En cas de différence, cette référence correspond au code de la 9.6.15.
  • SetPlayerExempt, PausePlayerDetections, PauseAllDetections, BypassDetection, AddWhitelist, RemoveWhitelist, WhitelistArea, ClearArea, addAdmin, fakeTriggerTrap et fakeTriggerWhitelist nécessitent une ressource de confiance, bien que CONFIG-EXPORTS-MULTILANG.md les liste sans cette exigence.
  • La liste de confiance par défaut est qbx_core, qb-core, es_extended, ox_inventory et ox_lib. INSTALLER-READY.md omet qb-core et es_extended.
  • GetIntegrationStatus() renvoie aussi un champ version.
  • punish, ban, BanPlayerExt, KickPlayer, offlineBan et offlineBanByLicense nécessitent une ressource de confiance.
  • ban() et BanPlayerExt() suivent ts.punishType et ts.BanDurations['default'] : ils ne sont donc pas toujours permanents.
  • KickPlayer ne vérifie pas les exemptions. Dans le circuit punish, KICK épargne toujours le staff, alors que BAN et LOG suivent ts.AdminBypassDetections.
  • Pendant une exemption client, la plupart des vérifications client sont entièrement ignorées. Seules les détections qui atteignent quand même le chemin de ban deviennent des entrées LOG marquées [exempt].
  • NoteCloudViolation ne bloque les connexions suivantes qu'avec ts.cloudBridge.threatIntelAction = 'kick'.
  • Avec le bridge client, les convars tosun_ac_resource et tosun_ac_bridge_client_ms doivent être définies avec setr, pas set.
  • Le plafond par appel de MarkTeleport (ts.Integration.markTeleportMaxMs) s'applique aussi aux appelants de confiance. Seul le budget de 180 s par 10 minutes concerne les appelants non fiables.
ExportÀ savoirUtiliser plutôt
BypassDetectionLa clé de détection est ignorée. Accorde une exemption complète de 0,5 à 60 s.SetPlayerExempt avec une durée courte, ou MarkTeleport pour les téléportations
GetDetectionsRenvoie les lignes de ban du joueur, pas des détections.getBans ou getBanInfo
getAdminType'tx' ne signifie pas txAdmin ; le staff obtient presque toujours 'tx'.isAdmin ou isStaffPlayer
SetExempt (server)Alias de SetPlayerExempt(src, true, ...). Les arguments diffèrent de ceux du SetExempt client.SetPlayerExempt
WhitelistAreaSoulagement côté client uniquement ; aucune immunité contre les sanctions serveur.SetPlayerExempt pour l'immunité serveur
screenCaptureL'AC ne stocke pas le résultat.v6ScreenWatchRequest ou RequestShieldScreenshot
GetStatus().detectionsCe n'est pas un compteur de détections ou de bans.Ne l'utilisez pas comme compteur
isAdmin, addAdminEnregistrés deux fois dans le code source. Ce sont les versions de anticheat_server.lua qui s'exécutent.Appelez-les normalement