Zur Anleitung

Dokumentation 9.6.24

Export-Referenz

Alle öffentlichen Exports von Tosun AC 9.6.15 mit Parametern, Rückgabewerten, Nebenwirkungen und der Angabe, ob die aufrufende Ressource vertrauenswürdig sein muss. Für eine aufgabenorientierte Anleitung beginnen Sie mit dem Integrationsleitfaden.

Einen Export aufrufen#

Rufen Sie Server-Exports aus den Server-Skripten Ihrer Ressource auf und Client-Exports aus ihren Client-Skripten. Der Ressourcenname enthält einen Bindestrich, verwenden Sie daher immer die Klammerform exports['tosun-ac']. Die Form exports.tosun-ac ist kein gültiges Lua.

  • Übergeben Sie Server-IDs als Zahlen. Mehrere Exports verwenden die ID direkt als Tabellenschlüssel.
  • Einige Exports führen eine synchrone Datenbankabfrage aus und geben dabei die Ausführung ab (yield). Rufen Sie sie aus einem Thread oder einem Event-Handler auf: getBans, getBanInfo, GetDetections, isAdmin und die anderen Staff-Prüfungen, IsExemptFromPunish, ForensicLinksOf und refreshPanelWhitelist. Auch scanAllResources und scanSingleResource geben die Ausführung ab.
  • Ein abgesicherter Export, der Ihre Ressource ablehnt, gibt false zurück, auch wenn er normalerweise nil zurückgibt.
  • Einige Exports existieren nur, wenn ihre Funktion aktiviert ist (siehe Funktionsabhängige Exports). Der Aufruf eines nicht registrierten Exports wirft einen Fehler, kapseln Sie diese Aufrufe daher in pcall.
  • Mehrere Exports fehlen in den Export-Listen in fxmanifest.lua (zum Beispiel MarkTeleport, punish und AllowWeapon). Diese Listen dienen nur der Information; die Exports funktionieren.
  • Die Tabellen unten zeigen Ja in der letzten Spalte, wenn die aufrufende Ressource vertrauenswürdig sein muss. Siehe Vertrauenswürdige Ressourcen.
-- Server-Skript in Ihrer eigenen Ressource
local status = exports['tosun-ac']:GetIntegrationStatus()
if not status.trusted then
    print(status.hint) -- die hinzuzufügende server.cfg-Zeile
end

-- dem AC einen Teleport melden, dann den Spieler bewegen
exports['tosun-ac']:MarkTeleport(src, 8000)
SetEntityCoords(GetPlayerPed(src), x, y, z)

-- Client-Skript in Ihrer eigenen Ressource
exports['tosun-ac']:SetExempt(true, 60000, 'my_menu')

Vertrauenswürdige Ressourcen#

Exports mit Ja in der Vertrauensspalte ändern Ausnahmen, Staff-Rechte, Banns, Spielergesundheit, Waffen oder Inventar, Quarantäne, Ressourcen und Signaturen oder den gesamten Server. Sie akzeptieren nur Aufrufe aus einer vertrauenswürdigen Ressource. Ein abgelehnter Aufruf bewirkt nichts und gibt false zurück.

Ein Aufrufer ist vertrauenswürdig, wenn er die Serverkonsole ist, tosun-ac selbst, eine in ts.ExportCallerWhitelist in der Konfiguration aufgeführte Ressource oder eine in der Convar tosun_ac_trusted_resources aufgeführte Ressource. Die Standardliste der Konfiguration ist qbx_core, qb-core, es_extended, ox_inventory und ox_lib.

Bevorzugen Sie die Convar. Sie steht in server.cfg und übersteht AC-Updates, während Änderungen an der Konfigurationsdatei bei einem AC-Update verloren gehen können. Trennen Sie Namen durch Kommas oder Leerzeichen. Die Vertrauensliste wird 10 Sekunden zwischengespeichert, eine Änderung zur Laufzeit greift also innerhalb von 10 Sekunden.

Bei der ersten Ablehnung für jedes Paar aus Ressource und Export gibt das AC eine Warnung mit der genauen hinzuzufügenden server.cfg-Zeile in der Serverkonsole aus und schreibt eine Zeile in die Panel-Logs. Die Zeile im Panel-Log ist immer auf Türkisch.

Audit-Modus: Mit ts.EnforceExportCallerWhitelist = false laufen nicht vertrauenswürdige Aufrufe, und jedes Paar aus Ressource und Export wird einmal in der Serverkonsole ausgegeben (keine Zeile im Panel-Log). Der Standard ist true. Verwenden Sie den Audit-Modus nur während der Einrichtung, um zu sehen, welche Skripte was aufrufen.

Führen Sie tosunac_integration in der Serverkonsole aus, um den Durchsetzungsmodus, die vertrauenswürdigen Ressourcen mit ihrer Quelle (config oder convar) und die letzten 20 abgelehnten Aufrufe auszugeben. Aus einem Skript rufen Sie GetIntegrationStatus() auf.

Vertrauen hebt außerdem das MarkTeleport-Budget auf: Vertrauenswürdige Ressourcen können Teleports ohne das Zeitlimit pro Spieler markieren.

Tosun AC registriert außerdem interne Exports und Net-Events für die eigene Infrastruktur (Panel-Bridge, Signierung, Scans, Lizenzierung, Batching). Sie gehören nicht zu dieser Referenz und sind keine unterstützte API. Einige sind durch die Vertrauensprüfung oder eine interne Aufruferprüfung geschützt. Rufen Sie sie nicht auf.

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

Integration und Ausnahmen#

Server-Exports, die dem AC legitime Aktionen in Ihren Skripten mitteilen und abfragen, ob ein Spieler ausgenommen ist.

ExportParameterRückgabeFunktionVertrauenswürdige Ressource nötig?
MarkTeleportsrc; ms? (Standard 8000, begrenzt auf 1000 bis ts.Integration.markTeleportMaxMs, Standard 15000); reason? (Log-Tag)true, wenn gewährt oder bereits abgedeckt; false, wenn der Spieler ungültig oder offline ist oder das Budget nicht reichtWeiche Ausnahme. Rufen Sie den Export direkt vor dem Bewegen eines Spielers auf. Lockert die serverseitigen Bewegungsprüfungen, die Prüfungen für Godmode/Unsichtbarkeit/Noclip/Fokus und die eigenen Client-Prüfungen des Spielers. Strafen für Waffen, Geld, Schaden, Event-Missbrauch, Injection und Crashes gelten weiterhin. Wird beim Verlassen zurückgesetzt.Nein. Nicht vertrauenswürdige Ressourcen teilen sich ein Budget von 180000 ms pro Spieler pro 10 Minuten (ts.Integration.markTeleportBudgetMs). Eine Anfrage, die nicht hineinpasst, wird vollständig abgelehnt.
IsMovementExemptsrcbooleantrue, solange ein weiches Fenster aus MarkTeleport oder DetectionExempt.serverEvents aktiv ist.Nein
GetIntegrationStatuskeine (der Aufrufer wird erkannt){ version, resource, trusted, trustedVia ('config', 'convar', 'self' oder nil), enforcing, hint }Teilt Ihrer Ressource mit, ob und wie sie vertrauenswürdig ist. hint ist die hinzuzufügende server.cfg-Zeile, wenn sie es nicht ist. enforcing = false bedeutet Audit-Modus.Nein
SetPlayerExemptsrc; state (true gewährt, false entfernt); durationMs? (Standard 30000, max. 300000); reason?true; false, wenn nicht vertrauenswürdig oder src keine Zahl istVolle Ausnahme: serverseitige Straffreiheit plus das Client-Ausnahme-Flag. Die meisten Client-Prüfungen werden übersprungen; Erkennungen, die trotzdem den Client-Bannweg erreichen, werden zu LOG-Einträgen mit dem Tag [exempt] herabgestuft. Teilt einen Timer mit whitelistPlayer, PausePlayerDetections und BypassDetection, daher kann eine neue Gewährung eine ältere verkürzen, und state = false hebt sie alle auf. Wird beim Verlassen zurückgesetzt.Ja
SetExempt (server)src; durationMs? (Standard 30000, max. 300000); reason?wie SetPlayerExemptAlias für SetPlayerExempt(src, true, durationMs, reason). Der gleichnamige Client-Export erwartet andere Argumente.Ja
BypassDetectionsrc; detectionKey (Pflicht, sein Wert wird aber ignoriert); durationMs? (Standard 5000, 500 bis 60000)true; false, wenn nicht vertrauenswürdig, src fehlt oder 0 ist oder key nil istVeralteter Name. Gewährt dieselbe volle Ausnahme wie SetPlayerExempt; beschränkt sich nicht auf eine Erkennung. Eine leere Tabelle als key gibt true zurück, gewährt aber nichts.Ja
PausePlayerDetectionssrc; durationMs? (Standard 15000, max. 300000)true; false, wenn nicht vertrauenswürdig oder src keine Zahl istServerseitige Straffreiheit plus ein Client-Pause-Flag für einen Spieler.Ja
PauseAllDetectionsdurationMs? (Standard 10000, max. 300000)true; false, wenn nicht vertrauenswürdigPausiert Client-Erkennungen für alle aktuell verbundenen Spieler. Keine serverseitige Ausnahme. Später verbundene Spieler werden nicht pausiert. Es gibt keine Drosselung.Ja
AllowWeaponsrc; weapon? (Name wie 'WEAPON_PISTOL', Hash, '*' oder nil für alle Waffen); ms? (Standard 600000, 1000 bis 3600000)true; false, wenn nicht vertrauenswürdig, Spieler ungültig oder offline oder eine Zahl NaN/inf istErlaubt einem Spieler, eine Waffe zu halten und zu benutzen, die nicht in seinem Inventar ist. Lockert nur die Prüfung Waffe gegen Inventar (gehaltene Waffe und Schaden). Wird beim Verlassen zurückgesetzt.Ja
IsExemptFromPunishsrcboolean (true = nicht bestrafen)Die zentrale Regel der Durchsetzungsmodule. true für Teammitglieder (wenn ts.AdminBypassDetections nicht false ist), aktive Ausnahmen, die Laufzeit- und Panel-Whitelist und geschützte Spieler. Wegen der letzten Regel bleiben Teammitglieder hier auch bei AdminBypassDetections = false ausgenommen. Mit ts.Debug immer false. Kann die Datenbank abfragen.Nein
IsPlayerProtectedsrcbooleantrue für Staff, Admin-Status oder eine aktive Ausnahme. Ignoriert ts.AdminBypassDetections und ts.Debug. Umfasst nicht die Laufzeit- oder Panel-Whitelist; verwenden Sie IsExemptFromPunish für die vollständige Regel. Kann die Datenbank abfragen.Nein

Die passende Ausnahme wählen#

Verwenden Sie die engste Ausnahme, die Ihr Skript abdeckt. Mehrere Ausnahmen teilen sich dasselbe Client-Ausnahme-Flag, daher kann eine die andere beenden: ClearArea mit einem Bereichsnamen setzt das Flag zurück, das auch SetPlayerExempt, MarkTeleport und BypassDetection setzen.

ExportServerseitige StraffreiheitClient-PrüfungenDauerVertrauenswürdige Ressource nötig?
MarkTeleportNur Bewegungs- und SichtbarkeitsprüfungenAusgenommen (das Fenster wird immer nur verlängert)Standard 8 s, min. 1 s; max. ts.Integration.markTeleportMaxMs pro Aufruf (Standard 15 s)Nein (mit Budget)
SetPlayerExempt, SetExempt (server)JaAusgenommenStandard 30 s, max. 300 sJa
BypassDetectionJaAusgenommenStandard 5 s, 0,5 bis 60 sJa
PausePlayerDetectionsJaPausiertStandard 15 s, max. 300 sJa
PauseAllDetectionsNeinPausiert für aktuell verbundene SpielerStandard 10 s, max. 300 sJa
whitelistPlayerJaKein Client-FlagStandard 3600 s, -1 = bis zum VerlassenJa
AddWhitelistJa, nach KennungKein Client-FlagBis zum Neustart oder durationSecJa
WhitelistAreaNeinAusgenommenStandard 30 sJa
AllowWeaponNur Prüfung Waffe gegen InventarUnverändertStandard 600 s, max. 3600 sJa
Client SetExempt, PauseDetectionsNeinAuf diesem Client ausgenommen oder pausiertStandard 30 s bzw. 10 s, max. 300 sNein (jede Client-Ressource)

Staff und Berechtigungen#

Lesen und ändern Sie, wen das AC als Staff behandelt. Staff-Prüfungen können die Datenbank abfragen, rufen Sie sie daher aus einem Thread oder einem Event-Handler auf.

isAdmin gibt true zurück für: eine manuelle Gewährung per addAdmin; die ACEs txadmin, tx.admin, txadmin.menu, txadmin.advanced, command.txadmin, command.ts, command.ban, command.kick, tosun.admin, ts.admin und alle aus ts.AdminBypassAces; die Principals group.admin, group.superadmin, group.moderator und group.god; command.kick/ban/resources/restart, wenn ts.txAdminAuth aktiv ist; Kennungen in admins.lua, ts.AdminMenu.allowedIds und ts.AdminBypassIdentifiers; sowie Panel-Freigaben in der Datenbank. Eine ACE, die auch builtin.everyone erteilt wurde, zählt nicht.

isAdmin und addAdmin sind im Quellcode zweimal registriert. Die Versionen in anticheat_server.lua werden zuletzt geladen und sind die, die laufen; diese Referenz beschreibt jene.

ExportParameterRückgabeFunktionVertrauenswürdige Ressource nötig?
isAdminsrc (als Zahl übergeben)booleanAdmin-Status aus den oben genannten Quellen. Datenbankergebnisse werden bei positivem Ergebnis 5 s und bei negativem 30 s zwischengespeichert. Berücksichtigt ts.AdminBypassDetections nicht.Nein
isStaffPlayersrcbooleanDie Staff-Prüfung der Bannwege. Dieselben Quellen wie isAdmin, plus txAdmin-Befehls-ACEs (command.kick/ban/resources/restart/screenshot/unban), außer bei ts.txAdminAuth = false.Nein
isAdminMenuAllowedsrcbooleanOb der Spieler das Admin-Menü öffnen darf. false, wenn das Menü deaktiviert ist. Reine txAdmin-ACEs (txadmin, tx.admin), ts.AdminBypassAces und ts.AdminBypassIdentifiers zählen nicht. Nicht zwischengespeichert: eine Datenbankabfrage pro Aufruf.Nein
getAdminTypesrc'tx', 'config' oder falseIrreführende Bezeichnung: Jeder positive Admin-Weg setzt dasselbe Flag, daher erhalten Teammitglieder fast immer 'tx', und 'tx' bedeutet nicht txAdmin. Verwenden Sie stattdessen isAdmin.Nein
addAdminsrc (als Zahl übergeben)nil; false bei AblehnungStaff-Gewährung zur Laufzeit: Straffreiheit und Zugriff auf das Admin-Menü. Wird nicht in der Datenbank gespeichert. Wird beim Verlassen nicht zurückgesetzt: Sie bleibt an diese Server-ID gebunden, bis removeAdmin oder ein Neustart erfolgt.Ja
removeAdminsrcnil; false bei AblehnungEntfernt die manuelle Gewährung und den zwischengespeicherten Status. ACE-, txAdmin-, admins.lua- und Panel-Freigaben werden nicht entzogen und zählen bei der nächsten Prüfung wieder.Ja

Spieler-Whitelist und Bereiche#

Whitelist nach Server-ID, Whitelist nach Kennung und benannte Bereiche. Die Laufzeitlisten liegen nur im Speicher und gehen beim Neustart verloren; die Panel-Whitelist ist davon getrennt.

ExportParameterRückgabeFunktionVertrauenswürdige Ressource nötig?
whitelistPlayersrc (als Zahl übergeben); durationSec? (Standard 3600; -1 = bis zum Verlassen)nil; false bei AblehnungServerseitige Straffreiheit nach Server-ID. Kein Client-Flag. Wird beim Verlassen zurückgesetzt. SetPlayerExempt, PausePlayerDetections und BypassDetection überschreiben sie.Ja
removeWhitelistsrcnil; false bei AblehnungBeendet whitelistPlayer. Beendet auch jede serverseitige Immunität aus SetPlayerExempt, PausePlayerDetections oder BypassDetection.Ja
AddWhitelisttarget (Server-ID oder Kennungs-String); durationSec? (nil oder 0 = bis zum Neustart)true; false, wenn leer oder abgelehntFügt Kennungen zur Whitelist im Speicher hinzu (nicht in der Datenbank gespeichert). Eine Server-ID fügt alle Kennungen dieses Spielers hinzu. Kennungen werden kleingeschrieben, und das Präfix license:, license2:, discord:, steam: oder fivem: wird entfernt. Ein Wert nur aus Ziffern wird als Server-ID gelesen, übergeben Sie Discord-IDs daher mit dem Präfix discord:.Ja
RemoveWhitelisttarget (Server-ID oder Kennung)true; false, wenn leer oder abgelehntEntfernt Einträge aus der Laufzeit-Whitelist. Die Tabelle der Panel-Whitelist bleibt unberührt.Ja
IsWhitelistedsrcbooleantrue, wenn eine Kennung in der Laufzeit-Whitelist oder der zwischengespeicherten Panel-Whitelist steht. Umfasst nicht whitelistPlayer oder SetPlayerExempt. Mit ts.Debug immer false.Nein
refreshPanelWhitelistkeinenilLädt die Panel-Whitelist sofort neu (synchrone Abfrage). Sie wird außerdem 12 s nach dem Start und alle 60 s neu geladen.Nein
WhitelistAreasrc; areaName (nicht leer); durationSec? (Standard 30)true; false, wenn ungültig oder abgelehntErfasst einen benannten Bereich und setzt das Client-Ausnahme-Flag. Nur clientseitige Entlastung: Kein Servermodul liest den Bereich, daher gibt es keine serverseitige Straffreiheit.Ja
ClearAreasrc; areaName? ('' oder nil = alle Bereiche)true; false, wenn src 0 ist oder abgelehntEntfernt den Bereich. Mit einem Namen wird auch das Client-Ausnahme-Flag zurückgesetzt, was andere Client-Ausnahmen ebenfalls beendet. Mit leerem Namen bleibt das Flag unverändert.Ja
IsInAreasrc; areaName? (leer = beliebiger Bereich)booleanMit einem Namen wird der Ablauf geprüft. Mit leerem Namen gibt der Export für jeden Eintrag true zurück, auch für abgelaufene.Nein

Strafen und Banns#

Bestrafen Sie Spieler über die AC-Pipeline, bannen Sie Offline-Spieler und lesen Sie Banns. Alle schreibenden Exports hier erfordern Vertrauen.

ExportParameterRückgabeFunktionVertrauenswürdige Ressource nötig?
punishsrc (online); reason; image? (Screenshot-URL oder Daten); configKey?; punishment? ('BAN', 'KICK' oder 'LOG')nil; false bei AblehnungFührt die vollständige Straf-Pipeline des AC aus. Ausgenommene Spieler werden übersprungen. Siehe Wie punish() die Strafe wählt.Ja
bansrc (online); reasonnil; false bei AblehnungDieselbe Pipeline mit dem Konfigurationsschlüssel 'Banned via Export' und der Strafe ts.punishType. Nicht immer permanent: Die Dauer ist ts.BanDurations['default'] (0 = permanent), und hat der Betreiber ts.punishType auf KICK oder LOG gesetzt, wird stattdessen gekickt oder protokolliert. Ausgenommene Spieler werden stumm übersprungen.Ja
BanPlayerExtsrc (online); reason? (Standard 'Banned by script')true, wenn ausgeführt; false, wenn nicht vertrauenswürdig oder offlineWie ban().Ja
KickPlayersrc (online); reason? (Standard 'Kicked by script')true; false, wenn nicht vertrauenswürdig oder offlineEinfacher Kick mit der Nachricht '[Tosun AC] ' plus Grund. Keine Ausnahmeprüfung: Auch Teammitglieder und Spieler auf der Whitelist werden gekickt. Es wird nichts protokolliert.Ja
offlineBandata { playername, license, steam, discord, ip, HWID, HWID2 bis HWID5 } (Kennungen ohne Präfix); reasonnil; false bei AblehnungPermanente Bannzeile für einen Offline-Spieler. Fehlende Kennungen werden als Platzhalter gespeichert, die beim Verbinden nie passen. Setzen Sie immer data.playername und reason: Ohne sie schlägt das Eintragen unter STRICT sql_mode fehl, und der Aufrufer erfährt es nicht. Gibt eine Konsolenzeile aus. data = nil wirft einen Lua-Fehler.Ja
offlineBanByLicenselicense (reines Hex oder 'license:...'); reason? (Standard 'Sebep yok', Türkisch); actor? (Standard 'panel'); name?; citizenid?true, banID ('O' + 8 Hex); false, 'license required'; false bei AblehnungPermanenter License-Bann plus eine Verlaufszeile in ac_offline_bans. Kehrt zurück, bevor die Datenbankschreibvorgänge abgeschlossen sind, daher werden Datenbankfehler nicht gemeldet. Kickt keinen Spieler, der online ist. Eine license, die kein String ist, wirft einen Lua-Fehler.Ja
unbanbanIDimmer nilAsynchron: Wenn der Bann existiert, wird er gelöscht, ein Discord-Log an den Webhook des Admin-Menüs gesendet und das Server-Event ts_anticheat:playerUnbanned ausgelöst. Verlaufszeilen in ac_offline_bans bleiben erhalten.Ja
getBanslimit? (Standard 100, nicht begrenzt); offset? (Standard 0)Bannzeilen, neueste zuerstVollständige Zeilen, einschließlich der Spalten IP, License, Steam, Discord und HWID. Synchrone Abfrage.Nein
getBanInfobanIDvollständige Bannzeile oder nilSynchrone Abfrage.Nein

Wie punish() die Strafe wählt#

punish(), ban() und BanPlayerExt() teilen sich eine Pipeline. Sie folgt dieser Reihenfolge.

  1. Teammitglieder werden übersprungen, wenn ts.AdminBypassDetections nicht false ist. Spieler mit aktiver Ausnahme oder auf der Laufzeit- oder Panel-Whitelist werden übersprungen. ts.Debug schaltet diese Überspringungen ab. Übersprungene Aufrufe bewirken nichts und protokollieren nichts.
  2. Der Spieler muss online sein. Andernfalls wird ein Fehler in der Serverkonsole ausgegeben, und nichts passiert.
  3. Strafe: Ein gültiges Argument punishment hat Vorrang. Andernfalls ts.DetectionPunishments[configKey], dann dessen Alias, dann der Erkennungsschlüssel, dann ts.punishType, dann BAN.
  4. Jedes Ergebnis löst das Server-Event ts_anticheat:playerBanned aus, sendet eine Chatnachricht, wenn ts.chatMessages aktiv ist, fügt einen Cloud-Verstoß hinzu und schreibt das AC-Log und das Live-Log.
  5. LOG: sendet das Screenshot-Log an Discord.
  6. KICK: prüft Staff unabhängig von ts.AdminBypassDetections erneut, Teammitglieder werden also nie gekickt. Sendet dann das Screenshot-Log und trennt den Spieler.
  7. BAN: trägt den Bann mit einer Dauer aus ts.BanDurations in Stunden ein (configKey, Alias, Erkennungsschlüssel, Präfix, dann default; 0 = permanent) und bannedBy 'anticheat:' plus Schlüssel. Löst ts_anticheat:banCommitted aus, benachrichtigt das Panel und trennt den Spieler (erneuter Versuch nach 3 s).
exports['tosun-ac']:punish(src, 'Money exploit', nil, 'my_shop_exploit', 'BAN')

Moderation eines einzelnen Spielers#

Wirken auf einen Spieler. Lesen Sie die Vertrauensspalte genau: Mehrere dieser Exports haben keine Vertrauensprüfung.

ExportParameterRückgabeFunktionVertrauenswürdige Ressource nötig?
freezePlayersrc (online); freeze (boolean)true; false, wenn offlineFriert den Spieler ein oder taut ihn auf und sendet einen lokalisierten Chathinweis. Das Eingefroren-Flag wird beim Verlassen nicht zurückgesetzt.Nein
isPlayerFrozensrcbooleanSpiegelt nur freezePlayer wider, nicht massFreeze.Nein
slayPlayersrc (online)true; false, wenn offlineTötet den Spieler auf seinem Client und zeigt eine Benachrichtigung.Nein
warnPlayersrc (online); reason?; actor? (Standard 'console')true; false, wenn offlineChat-Verwarnung an den Spieler und eine Zeile in ac_player_warnings.Nein
mutePlayersrc (online); durationSec? (Zahl; nil oder 0 = permanent); reason?; actor? (Standard 'system')true; false, wenn offlineBlockiert die alten chatMessage-Events des Spielers und speichert eine Zeile in ac_player_mutes. Befristete Stummschaltungen enden innerhalb von 15 s nach Ablauf. Eine permanente Stummschaltung wird beim Verlassen nicht zurückgesetzt und geht auf den nächsten Spieler mit derselben Server-ID über, bis unmutePlayer oder ein Neustart erfolgt. Die Chathinweise an den Spieler sind fest auf Türkisch.Nein
unmutePlayersrctrue; false, wenn src nil istHebt die Stummschaltung auf und benachrichtigt den Spieler, wenn er online ist (Chathinweis fest auf Türkisch).Nein
isPlayerMutedsrcbooleanNur lesend.Nein
setPlayerHealthsrc (online); hp? (Standard 100, 0 bis 200)true; false, wenn offline oder abgelehntSetzt die Gesundheit auf dem Client und die maximale Gesundheit auf 200.Ja
setPlayerArmorsrc (online); armor? (Standard 0, 0 bis 100)true; false, wenn offline oder abgelehntSetzt die Rüstung auf dem Client.Ja
giveWeaponsrc (online); weapon? (Standard 'WEAPON_PISTOL'); ammo? (Standard 60)true; false, wenn offline oder abgelehntVerwendet ox_inventory, wenn gestartet; sonst das QB-Inventar (nur Framework 'qb' oder 'qbox', nicht 'qbcore'); sonst ESX addWeapon; sonst eine native Vergabe. Gibt true zurück, auch wenn das Inventar den Gegenstand abgelehnt hat. Ruft AllowWeapon nicht auf, daher kann eine nativ vergebene Waffe von der Prüfung Waffe gegen Inventar markiert werden (Standardaktion log).Ja
stripWeaponssrc (online)true; false, wenn offline oder abgelehntEntfernt alle Waffen vom Ped. Inventargegenstände bleiben unberührt.Ja
clearInventorysrc (online)true; false, wenn offline oder abgelehntLeert das Inventar über ox_inventory. Ohne ox_inventory wird nur eine Benachrichtigung angezeigt und nichts geleert, der Export gibt aber trotzdem true zurück.Ja
spectatePlayeradminSrc; targetSrctrue; false, wenn ein Argument nil ist oder das Ziel keinen Ped hatKein echtes Zuschauen: teleportiert adminSrc zum Ziel. Jeder Aufruf gibt adminSrc außerdem eine Bewegungsausnahme von 15 s ohne Budget.Nein

Serverweite Aktionen#

Aktionen, die jeden Spieler oder jede neue Verbindung betreffen.

ExportParameterRückgabeFunktionVertrauenswürdige Ressource nötig?
lockdownStatuskeineactive (boolean), reason (string)Nur lesend.Nein
setLockdownstate (boolean); reason (beim Aktivieren einen String übergeben)nil; false bei AblehnungSolange aktiv, wird jede neue Verbindung mit einer LOCKDOWN-Nachricht und dem Grund abgewiesen. Es gibt keine Umgehung für Staff. Nur zur Laufzeit. Sendet eine Chatzeile an alle. Ein Aufruf mit state true und ohne Grund setzt den Lockdown und wirft danach einen Lua-Fehler.Ja
emergencyLockdownreason? (Lockdown-Grund, Standard 'Acil durum', Türkisch)Anzahl gekickter Spieler; false bei AblehnungAktiviert den Lockdown und kickt jeden Spieler ohne Staff-Status mit einer lokalisierten Nachricht.Ja
massFreezestate (boolean)Anzahl der Spieler; false bei AblehnungFriert jeden Spieler ein oder taut ihn auf, auch Teammitglieder, und sendet eine Chatzeile an alle. Die Chatzeile ist fest auf Türkisch.Ja
healAllkeineAnzahl der Spieler, an die die Heilung gesendet wurde; false bei AblehnungSetzt die Gesundheit auf das Maximum und die Rüstung auf 100 für jeden Spieler mit Ped.Ja
setSpeedLimitkmh (0 deaktiviert)das angewendete Limit; false bei AblehnungBegrenzt die Fahrzeuggeschwindigkeit für aktuell verbundene Spieler. Später verbundene Spieler erhalten das Limit nicht.Ja
applyWeatherWithFrameworkweather (nicht geprüft)true, Liste der versuchten MethodenVersucht qb-weather, Renewed-Weathersync, cd_easytime, dann wd_weather, weathersync, vSync und qb-weathersync, andernfalls Broadcast an jeden Client. Existiert nur, wenn das Admin-Menü aktiviert ist.Nein
applyTimeWithFrameworkhour; minute (nicht begrenzt)true, Liste der versuchten MethodenDieselbe Fallback-Kette für die Uhrzeit. Existiert nur, wenn das Admin-Menü aktiviert ist.Nein

Quarantäne und Payload-Schutz#

Isolieren Sie einen verdächtigen Spieler und schützen Sie Ihre eigenen Net-Events vor Crash-Payloads und Spam.

ExportParameterRückgabeFunktionVertrauenswürdige Ressource nötig?
quarantinesrc (online); reason? (Standard 'supheli davranis', Türkisch); seconds? (Standard 300, 30 bis 1800)true (auch, wenn bereits festgehalten); false bei ausgenommenen oder ungültigen Spielern, Bucket-Fehler oder nicht vertrauenswürdigem AufruferVerschiebt den Spieler in einen isolierten Routing-Bucket (Standard 9001 bis 9500, strikter Entity-Lockdown, keine Population). Protokolliert eine QUARANTINE-Erkennung und sendet dem Spieler einen Chathinweis, außer bei notifyPlayer = false. Der Hinweis ist fest auf Türkisch. Wird nach Ablauf automatisch freigegeben.Ja
releaseQuarantinesrctrue, wenn freigegeben; false, wenn nicht festgehalten oder abgelehntStellt den ursprünglichen Routing-Bucket wieder her, protokolliert und benachrichtigt den Spieler (Chathinweis fest auf Türkisch, außer bei notifyPlayer = false).Ja
isQuarantinedsrcbooleanNur lesend.Nein
quarantineListkeine{ id, name, reason, remaining }[] (remaining in Sekunden)Nur lesend.Nein
crashGuardInspectvalue (beliebige Payload)nil, wenn sicher; andernfalls eine Problembeschreibung auf TürkischPrüft auf NaN/Inf-Zahlen, ungültige Vektoren, Strings über 32768 Zeichen, Verschachtelung tiefer als 8, mehr als 2000 Elemente, insgesamt etwa 64 KB, Schlüssel über 512 Zeichen, nicht unterstützte Typen und Rekursion. Keine Nebenwirkungen.Nein
crashGuardRejectsrc (online); payloadtrue, wenn die Payload fehlerhaft ist (verwerfen); false, wenn sauber oder src ungültigDieselbe Prüfung plus ein Strike für den Spieler. 3 Strikes innerhalb von 60 s wenden ts.crashGuard.action an: 'kick' (Standard), 'ban' oder jeder andere Wert = nur Konsole und Log. Ausgenommene Spieler werden übersprungen.Nein
RateLimitsrc; key? (Standard 'default'); max? (Standard 10, min. 1); windowMs? (Standard 10000, min. 100)true = erlaubt; false = über dem LimitZähler mit festem Fenster pro Spieler und Schlüssel. Schlüssel werden von allen Ressourcen geteilt, stellen Sie ihnen daher Ihren Ressourcennamen voran. src 0 oder ungültig gibt immer true zurück. Wird beim Verlassen zurückgesetzt.Nein
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
    -- den Kauf verarbeiten
end)

Spieler und Erkennungen#

Fragen Sie Spieler, Kennungen, Banns pro Spieler, Bedrohungswerte und verknüpfte Konten ab. Einige Ergebnisse enthalten personenbezogene Daten wie IP-Adressen.

ExportParameterRückgabeFunktionVertrauenswürdige Ressource nötig?
GetPlayerInfosrc (online){ id, name, ping, license, discord, steam, citizenid, isAdmin, coords, endpoint } oder nilKennungen ohne Präfix (license fällt auf license2 zurück). endpoint ist die IP des Spielers. citizenid ist nur bei Framework 'qb', 'qbcore' oder 'esx' gefüllt; bei 'qbox' ist es leer. isAdmin kann die Datenbank abfragen.Nein
GetNearbyPlayerssrc; radius? (Standard 30.0){ id, name, distance }[]Spieler in der Nähe von src nach serverseitiger Ped-Position (OneSync), ohne src.Nein
getOnlinePlayerskeine{ id, name, ping, license, discord, steam, isAdmin }[]Kennungen behalten hier ihr Präfix (license:..., discord:..., steam:...). isAdmin kann für jeden Spieler die Datenbank abfragen.Nein
GetDetectionssrc (online); limit? (Standard 25){ banID, reason, banDate, banUntil }[] oder {}Historischer Name: gibt die BAN-Zeilen des Spielers zurück, gefunden über die License, keine Erkennungen.Nein
GetCloudThreatScoresrc0 bis 100Anzeigewert: 8 pro Sitzungsverstoß (max. 40, nur solange der letzte jünger als 10 Minuten ist), 10 pro verpasstem Shield-Check-in (max. 30) und 12 pro Bedrohungspunkt des Native-Guards (max. 30). 0 bei ts.cloudBridge.enabled = false.Nein
NoteCloudViolationsrc; reason?; punishment? ('LOG', 'KICK' oder 'BAN')nilFügt dem Wert des Spielers einen Verstoß hinzu; bewirkt nichts bei ts.cloudBridge.enabled = false. Jede KICK- oder BAN-Notiz erhöht den Intel-Wert um 25 (max. 100, solange die letzte jünger als 10 Minuten ist); ab 50 wird die License an die serverübergreifende Bedrohungsdatenbank des Panels gemeldet (benötigt Panel-URL und Token). Spätere Verbindungen werden nur bei ts.cloudBridge.threatIntelAction = 'kick' blockiert (Standard 'log'). Das AC ruft den Export bereits bei jeder Strafe auf.Nein
ForensicLinksOflicense (reines Hex, ohne Präfix license:)verknüpfte Licenses (String-Liste); {}, wenn unbekanntFindet Zweitkonten, die Steam-, Discord- oder HWID-Werte teilen (IP nur bei ts.forensics.linkByIp = true), bis zu ts.forensics.maxHops (Standard 3, max. 5). Blockierende Abfragen. Funktioniert auch mit deaktivierter Forensik, dann werden aber keine neuen Verknüpfungen erfasst.Nein
checkIpReputationip{ vpn, proxy, hosting, country, org, expiresAt } oder nilLiest nur den Cache. Gibt nur Daten für IPs zurück, die beim Verbinden innerhalb von ts.v12.ipCheckCacheHours (24) geprüft wurden. Keine Live-Abfrage.Nein
webBridgeFindByLicenselicense (String, mit oder ohne license:)Server-ID online oder nilFindet einen Spieler, der online ist. In der Praxis passt jede Kennung exakt, zum Beispiel license2:... oder discord:....Nein
webBridgeFindByCitizencid (QB-citizenid oder ESX-identifier)Server-ID online oder nilFunktioniert nur bei Framework 'qb', 'qbcore' und 'esx'; gibt bei 'qbox' nil zurück.Nein

Benachrichtigungen und Sprache#

Senden Sie Telefon-Benachrichtigungen und verwenden Sie die Übersetzungstabellen des AC. phoneNotify und phoneNotifyAdmins existieren nur, wenn ts.AdminMenu.enable aktiv ist.

ExportParameterRückgabeFunktionVertrauenswürdige Ressource nötig?
phoneNotifysrc (online); title; body; opts? { icon, color, app }true; false, wenn offlineSendet an das erste gestartete Telefon: qb-phone, qs-smartphone, lb-phone, yseries, gks_phone, npwd oder roadphone, andernfalls an den Chat. Das Telefon wird einmal erkannt, ein später gestartetes Telefon wird daher bis zum Neustart ignoriert.Nein
phoneNotifyAdminstitle; body; opts?nilphoneNotify an jedes Teammitglied online. Kann für jeden Spieler die Datenbank abfragen.Nein
getPlayerLocalesrcSprachcode; Standard ts.Locale ('tr')Nur lesend. Nur serverseitig.Nein
setPlayerLocalesrc; lang (2 oder 3 Kleinbuchstaben mit vorhandener Locale-Datei)true, wenn gesetzt; sonst falseSetzt die serverseitige Sprache des Spielers. Anders als der Befehl ts_setlang synchronisiert der Export die Sprache nicht auf den Client. Wird beim Verlassen zurückgesetzt.Nein
translatekey; ... (Werte für {0}, {1} oder eine Tabelle für {name})übersetzter String; englischer Fallback; der Schlüssel selbst, wenn er fehltVerwendet ts.Locale. Ein angehängter Code aus 2 oder 3 Buchstaben mit Locale-Datei wählt die Sprache. Vorlagen mit %s kommen unformatiert zurück; formatieren Sie sie selbst.Nein
translateForPlayersrc; key; ...String in der Sprache des SpielersWie translate, mit der Sprache des Spielers. Kein angehängter Sprachcode.Nein

Screenshots#

Fordern Sie Screenshots von Spielern für das Panel an. Die Log-Exports des AC sind intern und hier nicht aufgeführt.

ExportParameterRückgabeFunktionVertrauenswürdige Ressource nötig?
v6ScreenWatchRequestserverId (online); mode? (Standard 'once'); requestedBy? (Standard 'panel'); panelUrl?; forceBase64?Anfrage-ID; oder nil, 'invalid_id'; oder nil, 'offline'Stellt einen Screenshot in die Warteschlange und fordert den Client auf, ihn mit einem Token pro Upload an das Panel hochzuladen. Eine panelUrl muss https sein und zu ts_public_panel_url oder ts.webPanelURL passen, sonst wird der Client nicht gefragt. Offene Anfragen laufen nach 30 s ab und werden nach 90 s entfernt.Nein
v6ScreenWatchPollrid{ pending = true }, solange offen; sonst der Eintrag mit status ('done', 'failed' oder 'expired') und url; oder nil, 'not_found'Nur lesend.Nein
v6ScreenWatchLatestserverIdneuester Anfrage-Eintrag oder nilNur lesend.Nein
RequestShieldScreenshotsrc (online)true; false, wenn offlineFordert beim Client-Shield einen Screenshot an (Anfrage 60 s gültig). Eine signierte Antwort wird an das Panel gesendet und löst das Server-Event ts_anticheat:shield:screenshot_saved(src, b64) aus.Nein
screenCapturesrc (online); requestedBy? (Standard 'panel')true; false, wenn offlineVeraltet. Benötigt die Ressource screenshot-basic und die mit setr gesetzte Convar ts_screen_upload (Standard http://localhost/api/screen_upload.php). Das AC speichert das Ergebnis nicht. Verwenden Sie stattdessen v6ScreenWatchRequest oder RequestShieldScreenshot.Nein

Status und Diagnose#

Lesen Sie den AC-Zustand für Dashboards und Health-Checks.

ExportParameterRückgabeFunktionVertrauenswürdige Ressource nötig?
GetStatuskeine{ version, online, detections, debug, framework }version ist die Ressourcenversion aus fxmanifest. detections zählt nur Meldungen aus einem alten, unsignierten Client-Kanal und bleibt bei aktiver Signierung (Standard) nahe 0; es ist keine Anzahl von Erkennungen oder Banns. Es gibt kein Feld für die Laufzeit.Nein
getConfig (server)configType? ('webhooks' oder etwas anderes)bereinigte Kopie der Konfiguration; bei 'webhooks' die Tabelle Webhooks für vertrauenswürdige Aufrufer und {} für andereDie Kopie lässt Funktionen weg, Schlüssel, die secret, password, token oder webhook enthalten, Schlüssel, die auf key enden (außer Namen, die auf hotkey enden, und dem reinen Namen key), sowie alles, was tiefer als 6 Ebenen verschachtelt ist. 5 s zwischengespeichert.Nur für 'webhooks'
licenseStatuskeine{ checked, ok, reason, serverId, licenseSet }Zustand der Lizenzsperre. reason ist 'disabled', wenn ts.licenseLock.enabled nicht true ist, und 'not_checked' vor der ersten Prüfung 1,5 s nach dem Start.Nein
GetServerAuthorityStatuskeine{ enabled, checks = { [id] = { available, enabled, action } } }Zeigt, welche serverautoritativen Prüfungen dieser Server-Build unterstützt und wie sie eingestellt sind. IDs: superJump, damageMod, meleeMod, defenseMod, weapon, godmode, invisible, noclip, focus.Nein
getRuntimeStatskeine{ uptime_sec, connect_buckets, subnet_buckets, license_tracking }Zähler der Verbindungshärtung.Nein
getBatchStatskeine{ log_pending, detection_pending, webhook_pending }Warteschlangengrößen des 5-s-Batch-Writers.Nein
getCleanupStatskeine{ runs, last_run_at, last_summary, cleaned }Nur lesend.Nein
runCleanupkeinedie Statistiktabelle; false bei AblehnungFührt die Aufbewahrungsbereinigung sofort aus: veraltete Zeilen von Spielern online, alte Erkennungen, Admin-Logs, Panel-Audit, IP-Reputation, Befehls- und Screenshot-Warteschlangen, Login-Versuche und abgelaufene Sitzungen (Grenzen aus den keep-Einstellungen von ts.v12). Die Löschungen sind asynchron, die zurückgegebenen Statistiken enthalten diesen Lauf also noch nicht.Ja

Resource Guard#

Lesen und ändern Sie die freigegebene Ressourcen-Baseline. Alle diese Exports sind registriert, auch wenn der Resource Guard deaktiviert ist.

ExportParameterRückgabeFunktionVertrauenswürdige Ressource nötig?
getBaselinekeine{ [resource] = { manifest_hash, deep_hash } }Die freigegebene Baseline.Nein
getResourceskeine{ [resource] = true }Bekannte Ressourcen.Nein
getSuspiciouskeine{ [resource] = { reason, state, hash, manifest, at } }Als geändert oder verdächtig markierte Ressourcen.Nein
getStatskeine{ lastScan, violations, driftedResources }Zähler des Guards.Nein
rescanResourceskeinevollständiger Guard-Zustand (ready, resources, hashes, suspicious, drift_count, violation_count, last_scan und mehr)Erstellt den Ressourcen-Snapshot synchron neu.Nein
approveResourceresourceName; approvedBy? (Standard 'web_panel')true; false, 'resource_missing'; false bei AblehnungFügt den aktuellen Manifest-Hash zur Baseline hinzu, entfernt die Markierungen verdächtig und blockiert, speichert in der Datenbank und aktualisiert alle Clients.Ja
blockResourceresourceName; reason? (Standard 'Manuel blok', Türkisch)true; false bei AblehnungMarkiert die Ressource als blockiert, entfernt sie aus der Baseline, speichert in der Datenbank und stoppt sie, falls sie gestartet ist.Ja
tsAutoSetupkeinetrue (auch, wenn bereits ein Setup läuft); false bei AblehnungWie der Konsolenbefehl tosunac_setup: erkennt das Framework, führt den Backdoor-Scan (120 s Timeout) und den Signaturscan aus, gibt nur gestartete Ressourcen frei, deren Backdoor- und Signaturergebnisse vollständig, sauber und unverändert sind, und führt dann den Event-Scan aus. Bricht ab, ohne etwas freizugeben, wenn der Backdoor Guard deaktiviert oder beschäftigt ist.Ja

Signatur-, Backdoor- und Event-Scans#

Führen Sie Scans aus und verwalten Sie Signaturen, Ausnahmen für Fehlalarme und Escrow-Überspringungen. Scans können dauern; führen Sie sie aus einem Thread aus.

ExportParameterRückgabeFunktionVertrauenswürdige Ressource nötig?
scanAllResourceskeine{ total, scanned, infected, clean, errors, cached, skipped }; oder nil, 'already_scanning'Signaturscan jeder Ressource. Gibt die Ausführung ab (yield). Setzt die Liste infizierter Ressourcen zurück. Blockiert infizierte Ressourcen, wenn ts.ResourceGuard.autoBlockInfected aktiv ist.Nein
scanSingleResourcenameinfected (boolean), reasonreason ist einer von self, escrow_signature_skip, whitelisted, snapshot_unavailable, incomplete, clean, cached_clean, infected, cached_infected, blocked. Kann die Ausführung abgeben (yield).Nein
getInfectedFileskeineZuordnung infizierter DateienErgebnis des letzten Scans.Nein
addCheatSignaturepattern (Muster für Ressourcennamen); signatureName?; severity? (Standard 'critical')true; false, wenn leer oder abgelehntFügt das Muster im Speicher und in der Datenbank hinzu. severity: info (niedrig), warning (mittel), low, medium, high oder critical; unbekannte Werte werden zu high.Ja
invalidateSignatureCachekeinetrueLeert den Muster-Cache und die gespeicherten Scanergebnisse, sodass der nächste Scan jede Ressource neu einliest.Nein
reloadSignatureExceptionskeinetrueVerwirft die Caches für Ausnahmen und Escrow-Überspringungen sowie die gespeicherten Scanergebnisse. Sie werden bei der nächsten Verwendung neu geladen.Nein
reloadSignatureScanCacheskeinetrueLädt Muster, Whitelist, Ausnahmen und Escrow-Überspringungen sofort neu aus der Datenbank.Nein
addSignatureEscrowSkipresourceName; note?true; false, wenn leer, kein MySQL oder abgelehntÜberspringt den gesamten Signaturscan für diese Ressource (für Escrow-Code).Ja
removeSignatureEscrowSkipidOrName (Zeilen-ID oder Ressourcenname)true; false, wenn ungültig, kein MySQL oder abgelehntEntfernt die Escrow-Überspringung.Ja
addSignatureExceptionresourceName; filePath? ('' = alle Dateien); signatureName; note?true; false, wenn Felder fehlen, kein MySQL oder abgelehntMarkiert einen Signaturtreffer in dieser Ressource als Fehlalarm.Ja
removeSignatureExceptionid (Zahl)true; false, wenn nicht numerisch, kein MySQL oder abgelehntLöscht die Ausnahme.Ja
tsScanBackdoorscallback?(report) mit report = { complete, resources, finished_at, trigger }true, wenn gestartet; false, wenn bereits ein Scan läuftFührt den Backdoor-Scan in einem Thread aus. Funde gehen an die Datenbank und das Panel. Mit aktivem ts.BackdoorGuard.autoQuarantine stoppen kritische Treffer die Ressource.Nein
tsScanEventskeinetrue, wenn gestartet; false, wenn bereits ein Scan läuftErstellt ein statisches Verzeichnis der Events und Trigger in allen Ressourcen und sendet es an das Panel.Nein

Honeypot-Events#

Machen Sie Eventnamen zu Fallen oder geben Sie sie wieder frei. Beide schreiben in ac_protected_events und laden neu aus der Datenbank.

ExportParameterRückgabeFunktionVertrauenswürdige Ressource nötig?
fakeTriggerTrapeventName; type ('client' oder 'server')true, wenn ausgeführt; false, wenn nicht vertrauenswürdig oder type ungültigMacht das Event zu einem Honeypot (active = 1). Starten Sie das AC neu (ensure tosun-ac), damit es voll wirkt.Ja
fakeTriggerWhitelisteventNametrue, wenn ausgeführt (auch bei leerem Namen, der nichts bewirkt); false, wenn nicht vertrauenswürdigDeaktiviert den Honeypot für dieses Event (active = 0). Bereits registrierte Handler erfordern eventuell einen AC-Neustart; die Konsole weist darauf hin.Ja

Funktionsabhängige Exports#

Diese Exports werden nur registriert, wenn ihre Funktion aktiv ist. Ist die Funktion aus, wirft ein Aufruf einen Fehler.

ExportsNur registriert, wenn
quarantine, releaseQuarantine, isQuarantined, quarantineListts.quarantine.enabled nicht false ist
crashGuardInspect, crashGuardRejectts.crashGuard.enabled nicht false ist
runCleanup, getCleanupStatsts.v12.enableAutoCleanup nicht false ist
tsScanBackdoorsts.BackdoorGuard.enabled nicht false ist
tsScanEventsts.EventScanner.enabled nicht false ist
applyWeatherWithFramework, applyTimeWithFrameworkdas Admin-Menü aktiviert ist (ts.AdminMenu existiert und weder enable noch enabled ist false)
phoneNotify, phoneNotifyAdminsts.AdminMenu.enable aktiv ist

Clientseitige Exports#

Rufen Sie diese aus Client-Skripten auf. Jede Client-Ressource kann sie aufrufen; es gibt keine Vertrauensprüfung. Sie betreffen nur Prüfungen auf diesem Client und ändern nie die serverseitige Durchsetzung.

ExportParameterRückgabeFunktionVertrauenswürdige Ressource nötig?
SetExempt (client)state (boolean); durationMs? (Standard 30000, max. 300000); reason? (Schlüssel, Standard 'unknown')nilFügt unter diesem reason eine lokale Ausnahme hinzu oder entfernt sie. Eine neue Gewährung ersetzt die Endzeit für denselben reason. Solange aktiv, werden die meisten Client-Prüfungen übersprungen; Erkennungen, die trotzdem den Client-Bannweg erreichen, werden zu LOG-Einträgen mit dem Tag [exempt] herabgestuft. state = false entfernt nur diesen reason.Nein
PauseDetectionsdurationMs? (Standard 10000, max. 300000)nilPausiert lokale Client-Prüfungen. Jeder Aufruf ersetzt die Endzeit, daher beendet PauseDetections(0) eine Pause, und ein kürzerer Wert verkürzt sie.Nein
IsPlayerAdminkeinebooleanLokales Staff-Flag, alle 2 s aus dem vom Server bestätigten Admin-Zustand aufgefrischt, nicht aus einem State Bag, den der Client schreiben kann.Nein
IsExemptkeinebooleantrue, wenn der Spieler Staff ist, eine Server-Ausnahme oder -Pause aktiv ist, PauseDetections aktiv ist oder ein SetExempt-reason aktiv ist.Nein
GetExemptionskeine{ [reason] = remainingMs }Listet nur SetExempt-reasons und den State Bag tsAcExempt. Zeigt weder PauseDetections noch Server-Ausnahmen oder den Staff-Status; verwenden Sie IsExempt für die vollständige Antwort.Nein
SetSpawnedstate (boolean)niltrue markiert den Spieler als gespawnt. false pausiert Bewegungs- und visuelle Prüfungen, zum Beispiel bei der Charakterauswahl; wird höchstens einmal alle 5 Minuten berücksichtigt, und die Prüfungen laufen nach etwa 30 s normaler sichtbarer Bewegung wieder an.Nein
getConfig (client)keineClient-KonfigurationstabelleNur clientsichere Einstellungen werden an Clients synchronisiert.Nein
-- Charakterauswahl
exports['tosun-ac']:SetSpawned(false)
-- ... Spieler wählt einen Charakter ...
exports['tosun-ac']:SetSpawned(true)

JavaScript-Exports#

Tosun AC registriert auf dem Server einige JavaScript-Exports für Ressourcen-Scans und Lizenzprüfung. Sie sind intern, nicht durch die Vertrauensprüfung abgesichert und keine unterstützte API. Rufen Sie sie nicht auf. Es gibt keine öffentlichen JavaScript-Exports.

Bridge-Dateien: Einrichtung#

Die optionalen Bridge-Dateien in tosun-ac/bridge geben Ihrer Ressource eine globale Tabelle TosunAC mit kurzen Hilfsfunktionen. Sie rufen die Exports innerhalb von pcall auf, sodass Ihr Skript weiterläuft, wenn das AC gestoppt ist. Das AC sieht Ihre Ressource als Aufrufer.

  1. Fügen Sie die Bridge zur fxmanifest.lua Ihrer Ressource hinzu: server_script '@tosun-ac/bridge/tosun_ac_server.lua' und bei Bedarf client_script '@tosun-ac/bridge/tosun_ac_client.lua'.
  2. Hat der AC-Ordner einen anderen Namen, fügen Sie setr tosun_ac_resource "folder-name" zu server.cfg hinzu. Verwenden Sie setr: Die Client-Bridge liest diese Convar auf dem Client.
  3. Optional: set tosun_ac_bridge_server_ms (Standard 60000), set tosun_ac_bridge_cooldown_ms (Standard 750, 0 deaktiviert) und setr tosun_ac_bridge_client_ms (Standard 60000).
  4. Für volle Server-Ausnahmen fügen Sie Ihre Ressource zu tosun_ac_trusted_resources hinzu. Ohne Vertrauen fällt TosunAC.PlayerExempt auf eine weiche Ausnahme zurück und gibt einmalig einen Hinweis in der Serverkonsole aus (der Hinweistext ist auf Türkisch).
-- fxmanifest.lua Ihrer 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"

-- Server-Skript
local ok, mode = TosunAC.PlayerExempt(src, 'long', 'clothing')
-- mode ist 'full' (vertrauenswürdig) oder 'soft' (nur Bewegung, max. 15 s)

Bridge: Server-Hilfsfunktionen#

Definiert durch bridge/tosun_ac_server.lua in Ihrer Ressource. Presets: SHORT 30000, MEDIUM 60000, LONG 120000, XL 180000 ms (TosunAC.Presets). TosunAC.Version ist '1.2'.

ExportParameterRückgabeFunktionVertrauenswürdige Ressource nötig?
TosunAC.MarkTeleportplayerId (1 oder höher); durationMs? (Standard 8000)true nur, wenn der Export true zurückgegeben hatRuft MarkTeleport mit dem Grund 'bridge:teleport' auf.Nein (ist Ihre Ressource nicht vertrauenswürdig, gilt das MarkTeleport-Budget pro Spieler)
TosunAC.PlayerExemptplayerId; durationMs (500 bis 300000), Preset-Name oder nil (= tosun_ac_bridge_server_ms); tag? (Standard: Ihr Ressourcenname)true, 'full'; true, 'soft'; oder falseVersucht SetPlayerExempt. Bei Ablehnung Rückfall auf MarkTeleport für bis zu 15 s. Ein Cooldown pro Spieler (Standard 750 ms, geteilt mit PlayerExemptPreset) gibt ein einzelnes false zurück. Im Audit-Modus ist das Ergebnis auch für nicht gelistete Ressourcen 'full'.Nur für 'full'
TosunAC.PlayerExemptPresetplayerId; presetName? (Standard 'MEDIUM', Groß-/Kleinschreibung egal); tag?wie PlayerExemptPlayerExempt mit einer Preset-Dauer. Unbekannte Namen verwenden MEDIUM. Ignoriert tosun_ac_bridge_server_ms.Nur für 'full'
TosunAC.PlayerExemptOffplayerId; tag? (vom AC nicht verwendet)true, wenn akzeptiertRuft SetPlayerExempt(playerId, false) auf. Nicht vertrauenswürdige Ressourcen erhalten false, und ein weiches Fenster wird nicht beendet.Ja
TosunAC.IsTrustedkeinebooleanGetIntegrationStatus().trusted. Gibt für nicht gelistete Ressourcen false zurück, auch im Audit-Modus, in dem abgesicherte Aufrufe trotzdem durchgehen.Nein
TosunAC.IsAvailablekeinebooleantrue, wenn die AC-Ressource gestartet ist.Nein

Bridge: Client-Hilfsfunktionen#

Definiert durch bridge/tosun_ac_client.lua in Ihrer Ressource. Sie kapseln den Client-Export SetExempt und bieten daher nur clientseitige Entlastung.

ExportParameterRückgabeFunktionVertrauenswürdige Ressource nötig?
TosunAC.ExemptdurationMs (500 bis 300000), Preset-Name oder nil (= tosun_ac_bridge_client_ms); tag? (Standard: Ihr Ressourcenname)nilRuft den Client-Export SetExempt mit dem Schlüssel 'bridge:' plus tag auf.Nein
TosunAC.ExemptOfftag? (muss dem in Exempt verwendeten tag entsprechen)nilEntfernt diese Ausnahme.Nein
TosunAC.ExemptPresetname? (Standard 'MEDIUM')nilExempt mit einer Preset-Dauer und dem Standard-tag. Kein tag-Parameter.Nein
TosunAC.RunWithExemptdurationMs; tag; fntrue plus die Ergebnisse von fn; false, err; oder false, wenn fn keine Funktion istNimmt aus, führt fn innerhalb von pcall aus und ruft danach ExemptOff(tag) auf.Nein
TosunAC.RunWithExemptPresetpresetName; fnwie RunWithExemptRunWithExempt mit einer Preset-Dauer und dem Standard-tag.Nein
TosunAC.IsAvailablekeinebooleantrue, wenn die AC-Ressource gestartet ist.Nein
tosun-ac:bridge:clientExempt (net event)durationMs?; tag?nichtsIn jeder Ressource registriert, die die Client-Bridge einbindet. Ein Server-Skript kann es mit TriggerClientEvent senden, um TosunAC.Exempt auf diesem Client auszuführen. Binden mehrere Ressourcen die Bridge ein, wendet jede ihre eigene Ausnahme an. In tosun-ac sendet nichts dieses Event.Nein (Server-Skripte oder lokale Client-Skripte mit TriggerEvent)

Exports, die jede Ressource aufrufen kann#

Diese Exports haben keine Vertrauensprüfung und haben Nebenwirkungen. Jede Server-Ressource kann sie aufrufen. Setzen Sie nur Ressourcen ein, denen Sie vertrauen; beachten Sie, dass jede Server-Ressource ohnehin über FiveM-Natives Spieler kicken oder Client-Events auslösen kann.

  • MarkTeleport: Bewegungsausnahme, begrenzt durch das Budget pro Spieler.
  • spectatePlayer: teleportiert einen Spieler und gewährt bei jedem Aufruf eine Bewegungsausnahme von 15 s ohne Budget.
  • NoteCloudViolation: erhöht den Bedrohungswert eines Spielers und kann die License an die serverübergreifende Bedrohungsdatenbank melden.
  • warnPlayer und mutePlayer: schreiben Verwarnungs- und Stummschaltungseinträge.
  • freezePlayer und slayPlayer: wirken direkt auf einen Spieler.
  • crashGuardReject: fügt Strikes hinzu, die zu Kick oder Bann führen können.
  • screenCapture, v6ScreenWatchRequest und RequestShieldScreenshot: fordern Screenshots an.
  • rescanResources, scanAllResources, scanSingleResource, tsScanBackdoors und tsScanEvents: starten Scans. scanAllResources kann blockieren, und tsScanBackdoors kann Ressourcen stoppen, wenn automatisches Blockieren oder automatische Quarantäne aktiv ist.
  • applyWeatherWithFramework und applyTimeWithFramework: ändern Wetter und Uhrzeit für alle.
  • invalidateSignatureCache, reloadSignatureExceptions, reloadSignatureScanCaches und refreshPanelWhitelist: laden Caches neu.
  • setPlayerLocale und unmutePlayer: ändern den Spielerzustand.
  • phoneNotify und phoneNotifyAdmins: senden Telefon- oder Chatnachrichten an Spieler.

Veraltete und irreführende Namen#

Diese Exports funktionieren weiterhin, aber ihre Namen oder ältere Dokumentation lassen etwas vermuten, das sie nicht tun.

  • Ältere Anleitungen (INTEGRATION.md für 9.6.6, CONFIG-EXPORTS-MULTILANG.md für 8.6.1 und der Weiterleitungs-Stub TOSUN-AC-EXPORTS.md) sind veraltet. Wo sie abweichen, entspricht diese Referenz dem Code von 9.6.15.
  • SetPlayerExempt, PausePlayerDetections, PauseAllDetections, BypassDetection, AddWhitelist, RemoveWhitelist, WhitelistArea, ClearArea, addAdmin, fakeTriggerTrap und fakeTriggerWhitelist erfordern eine vertrauenswürdige Ressource, obwohl CONFIG-EXPORTS-MULTILANG.md sie ohne diese Voraussetzung aufführt.
  • Die Standard-Vertrauensliste ist qbx_core, qb-core, es_extended, ox_inventory und ox_lib. In INSTALLER-READY.md fehlen qb-core und es_extended.
  • GetIntegrationStatus() gibt außerdem ein Feld version zurück.
  • punish, ban, BanPlayerExt, KickPlayer, offlineBan und offlineBanByLicense erfordern eine vertrauenswürdige Ressource.
  • ban() und BanPlayerExt() folgen ts.punishType und ts.BanDurations['default'] und sind daher nicht immer permanent.
  • KickPlayer prüft keine Ausnahmen. In der Straf-Pipeline verschont KICK Teammitglieder immer, während BAN und LOG ts.AdminBypassDetections folgen.
  • Während einer Client-Ausnahme werden die meisten Client-Prüfungen vollständig übersprungen. Nur Erkennungen, die trotzdem den Bannweg erreichen, werden zu LOG-Einträgen mit dem Tag [exempt].
  • NoteCloudViolation blockiert spätere Verbindungen nur bei ts.cloudBridge.threatIntelAction = 'kick'.
  • Mit der Client-Bridge müssen die Convars tosun_ac_resource und tosun_ac_bridge_client_ms mit setr gesetzt werden, nicht mit set.
  • Die Obergrenze pro Aufruf von MarkTeleport (ts.Integration.markTeleportMaxMs) gilt auch für vertrauenswürdige Aufrufer. Nur das Budget von 180 s pro 10 Minuten betrifft nicht vertrauenswürdige Aufrufer.
ExportWissenswertStattdessen verwenden
BypassDetectionDer Erkennungsschlüssel wird ignoriert. Gewährt eine volle Ausnahme für 0,5 bis 60 s.SetPlayerExempt mit kurzer Dauer oder MarkTeleport für Teleports
GetDetectionsGibt die Bannzeilen des Spielers zurück, keine Erkennungen.getBans oder getBanInfo
getAdminType'tx' bedeutet nicht txAdmin; Teammitglieder erhalten fast immer 'tx'.isAdmin oder isStaffPlayer
SetExempt (server)Alias von SetPlayerExempt(src, true, ...). Die Argumente unterscheiden sich vom Client-Export SetExempt.SetPlayerExempt
WhitelistAreaNur clientseitige Entlastung; keine serverseitige Straffreiheit.SetPlayerExempt für serverseitige Immunität
screenCaptureDas AC speichert das Ergebnis nicht.v6ScreenWatchRequest oder RequestShieldScreenshot
GetStatus().detectionsKeine Anzahl von Erkennungen oder Banns.Nicht als Zähler verwenden
isAdmin, addAdminIm Quellcode zweimal registriert. Die Versionen aus anticheat_server.lua laufen.Normal aufrufen