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.
| Export | Parameter | Rückgabe | Funktion | Vertrauenswürdige Ressource nötig? |
|---|---|---|---|---|
MarkTeleport | src; 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 reicht | Weiche 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. |
IsMovementExempt | src | boolean | true, solange ein weiches Fenster aus MarkTeleport oder DetectionExempt.serverEvents aktiv ist. | Nein |
GetIntegrationStatus | keine (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 |
SetPlayerExempt | src; state (true gewährt, false entfernt); durationMs? (Standard 30000, max. 300000); reason? | true; false, wenn nicht vertrauenswürdig oder src keine Zahl ist | Volle 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 SetPlayerExempt | Alias für SetPlayerExempt(src, true, durationMs, reason). Der gleichnamige Client-Export erwartet andere Argumente. | Ja |
BypassDetection | src; 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 ist | Veralteter 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 |
PausePlayerDetections | src; durationMs? (Standard 15000, max. 300000) | true; false, wenn nicht vertrauenswürdig oder src keine Zahl ist | Serverseitige Straffreiheit plus ein Client-Pause-Flag für einen Spieler. | Ja |
PauseAllDetections | durationMs? (Standard 10000, max. 300000) | true; false, wenn nicht vertrauenswürdig | Pausiert Client-Erkennungen für alle aktuell verbundenen Spieler. Keine serverseitige Ausnahme. Später verbundene Spieler werden nicht pausiert. Es gibt keine Drosselung. | Ja |
AllowWeapon | src; 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 ist | Erlaubt 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 |
IsExemptFromPunish | src | boolean (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 |
IsPlayerProtected | src | boolean | true 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.
| Export | Serverseitige Straffreiheit | Client-Prüfungen | Dauer | Vertrauenswürdige Ressource nötig? |
|---|---|---|---|---|
MarkTeleport | Nur Bewegungs- und Sichtbarkeitsprüfungen | Ausgenommen (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) | Ja | Ausgenommen | Standard 30 s, max. 300 s | Ja |
BypassDetection | Ja | Ausgenommen | Standard 5 s, 0,5 bis 60 s | Ja |
PausePlayerDetections | Ja | Pausiert | Standard 15 s, max. 300 s | Ja |
PauseAllDetections | Nein | Pausiert für aktuell verbundene Spieler | Standard 10 s, max. 300 s | Ja |
whitelistPlayer | Ja | Kein Client-Flag | Standard 3600 s, -1 = bis zum Verlassen | Ja |
AddWhitelist | Ja, nach Kennung | Kein Client-Flag | Bis zum Neustart oder durationSec | Ja |
WhitelistArea | Nein | Ausgenommen | Standard 30 s | Ja |
AllowWeapon | Nur Prüfung Waffe gegen Inventar | Unverändert | Standard 600 s, max. 3600 s | Ja |
Client SetExempt, PauseDetections | Nein | Auf diesem Client ausgenommen oder pausiert | Standard 30 s bzw. 10 s, max. 300 s | Nein (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.
| Export | Parameter | Rückgabe | Funktion | Vertrauenswürdige Ressource nötig? |
|---|---|---|---|---|
isAdmin | src (als Zahl übergeben) | boolean | Admin-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 |
isStaffPlayer | src | boolean | Die 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 |
isAdminMenuAllowed | src | boolean | Ob 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 |
getAdminType | src | 'tx', 'config' oder false | Irrefü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 |
addAdmin | src (als Zahl übergeben) | nil; false bei Ablehnung | Staff-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 |
removeAdmin | src | nil; false bei Ablehnung | Entfernt 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.
| Export | Parameter | Rückgabe | Funktion | Vertrauenswürdige Ressource nötig? |
|---|---|---|---|---|
whitelistPlayer | src (als Zahl übergeben); durationSec? (Standard 3600; -1 = bis zum Verlassen) | nil; false bei Ablehnung | Serverseitige Straffreiheit nach Server-ID. Kein Client-Flag. Wird beim Verlassen zurückgesetzt. SetPlayerExempt, PausePlayerDetections und BypassDetection überschreiben sie. | Ja |
removeWhitelist | src | nil; false bei Ablehnung | Beendet whitelistPlayer. Beendet auch jede serverseitige Immunität aus SetPlayerExempt, PausePlayerDetections oder BypassDetection. | Ja |
AddWhitelist | target (Server-ID oder Kennungs-String); durationSec? (nil oder 0 = bis zum Neustart) | true; false, wenn leer oder abgelehnt | Fü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 |
RemoveWhitelist | target (Server-ID oder Kennung) | true; false, wenn leer oder abgelehnt | Entfernt Einträge aus der Laufzeit-Whitelist. Die Tabelle der Panel-Whitelist bleibt unberührt. | Ja |
IsWhitelisted | src | boolean | true, wenn eine Kennung in der Laufzeit-Whitelist oder der zwischengespeicherten Panel-Whitelist steht. Umfasst nicht whitelistPlayer oder SetPlayerExempt. Mit ts.Debug immer false. | Nein |
refreshPanelWhitelist | keine | nil | Lädt die Panel-Whitelist sofort neu (synchrone Abfrage). Sie wird außerdem 12 s nach dem Start und alle 60 s neu geladen. | Nein |
WhitelistArea | src; areaName (nicht leer); durationSec? (Standard 30) | true; false, wenn ungültig oder abgelehnt | Erfasst einen benannten Bereich und setzt das Client-Ausnahme-Flag. Nur clientseitige Entlastung: Kein Servermodul liest den Bereich, daher gibt es keine serverseitige Straffreiheit. | Ja |
ClearArea | src; areaName? ('' oder nil = alle Bereiche) | true; false, wenn src 0 ist oder abgelehnt | Entfernt 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 |
IsInArea | src; areaName? (leer = beliebiger Bereich) | boolean | Mit 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.
| Export | Parameter | Rückgabe | Funktion | Vertrauenswürdige Ressource nötig? |
|---|---|---|---|---|
punish | src (online); reason; image? (Screenshot-URL oder Daten); configKey?; punishment? ('BAN', 'KICK' oder 'LOG') | nil; false bei Ablehnung | Führt die vollständige Straf-Pipeline des AC aus. Ausgenommene Spieler werden übersprungen. Siehe Wie punish() die Strafe wählt. | Ja |
ban | src (online); reason | nil; false bei Ablehnung | Dieselbe 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 |
BanPlayerExt | src (online); reason? (Standard 'Banned by script') | true, wenn ausgeführt; false, wenn nicht vertrauenswürdig oder offline | Wie ban(). | Ja |
KickPlayer | src (online); reason? (Standard 'Kicked by script') | true; false, wenn nicht vertrauenswürdig oder offline | Einfacher 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 |
offlineBan | data { playername, license, steam, discord, ip, HWID, HWID2 bis HWID5 } (Kennungen ohne Präfix); reason | nil; false bei Ablehnung | Permanente 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 |
offlineBanByLicense | license (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 Ablehnung | Permanenter 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 |
unban | banID | immer nil | Asynchron: 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 |
getBans | limit? (Standard 100, nicht begrenzt); offset? (Standard 0) | Bannzeilen, neueste zuerst | Vollständige Zeilen, einschließlich der Spalten IP, License, Steam, Discord und HWID. Synchrone Abfrage. | Nein |
getBanInfo | banID | vollständige Bannzeile oder nil | Synchrone Abfrage. | Nein |
Wie punish() die Strafe wählt#
punish(), ban() und BanPlayerExt() teilen sich eine Pipeline. Sie folgt dieser Reihenfolge.
- 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.
- Der Spieler muss online sein. Andernfalls wird ein Fehler in der Serverkonsole ausgegeben, und nichts passiert.
- Strafe: Ein gültiges Argument punishment hat Vorrang. Andernfalls ts.DetectionPunishments[configKey], dann dessen Alias, dann der Erkennungsschlüssel, dann ts.punishType, dann BAN.
- 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.
- LOG: sendet das Screenshot-Log an Discord.
- KICK: prüft Staff unabhängig von ts.AdminBypassDetections erneut, Teammitglieder werden also nie gekickt. Sendet dann das Screenshot-Log und trennt den Spieler.
- 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.
| Export | Parameter | Rückgabe | Funktion | Vertrauenswürdige Ressource nötig? |
|---|---|---|---|---|
freezePlayer | src (online); freeze (boolean) | true; false, wenn offline | Friert den Spieler ein oder taut ihn auf und sendet einen lokalisierten Chathinweis. Das Eingefroren-Flag wird beim Verlassen nicht zurückgesetzt. | Nein |
isPlayerFrozen | src | boolean | Spiegelt nur freezePlayer wider, nicht massFreeze. | Nein |
slayPlayer | src (online) | true; false, wenn offline | Tötet den Spieler auf seinem Client und zeigt eine Benachrichtigung. | Nein |
warnPlayer | src (online); reason?; actor? (Standard 'console') | true; false, wenn offline | Chat-Verwarnung an den Spieler und eine Zeile in ac_player_warnings. | Nein |
mutePlayer | src (online); durationSec? (Zahl; nil oder 0 = permanent); reason?; actor? (Standard 'system') | true; false, wenn offline | Blockiert 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 |
unmutePlayer | src | true; false, wenn src nil ist | Hebt die Stummschaltung auf und benachrichtigt den Spieler, wenn er online ist (Chathinweis fest auf Türkisch). | Nein |
isPlayerMuted | src | boolean | Nur lesend. | Nein |
setPlayerHealth | src (online); hp? (Standard 100, 0 bis 200) | true; false, wenn offline oder abgelehnt | Setzt die Gesundheit auf dem Client und die maximale Gesundheit auf 200. | Ja |
setPlayerArmor | src (online); armor? (Standard 0, 0 bis 100) | true; false, wenn offline oder abgelehnt | Setzt die Rüstung auf dem Client. | Ja |
giveWeapon | src (online); weapon? (Standard 'WEAPON_PISTOL'); ammo? (Standard 60) | true; false, wenn offline oder abgelehnt | Verwendet 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 |
stripWeapons | src (online) | true; false, wenn offline oder abgelehnt | Entfernt alle Waffen vom Ped. Inventargegenstände bleiben unberührt. | Ja |
clearInventory | src (online) | true; false, wenn offline oder abgelehnt | Leert 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 |
spectatePlayer | adminSrc; targetSrc | true; false, wenn ein Argument nil ist oder das Ziel keinen Ped hat | Kein 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.
| Export | Parameter | Rückgabe | Funktion | Vertrauenswürdige Ressource nötig? |
|---|---|---|---|---|
lockdownStatus | keine | active (boolean), reason (string) | Nur lesend. | Nein |
setLockdown | state (boolean); reason (beim Aktivieren einen String übergeben) | nil; false bei Ablehnung | Solange 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 |
emergencyLockdown | reason? (Lockdown-Grund, Standard 'Acil durum', Türkisch) | Anzahl gekickter Spieler; false bei Ablehnung | Aktiviert den Lockdown und kickt jeden Spieler ohne Staff-Status mit einer lokalisierten Nachricht. | Ja |
massFreeze | state (boolean) | Anzahl der Spieler; false bei Ablehnung | Friert jeden Spieler ein oder taut ihn auf, auch Teammitglieder, und sendet eine Chatzeile an alle. Die Chatzeile ist fest auf Türkisch. | Ja |
healAll | keine | Anzahl der Spieler, an die die Heilung gesendet wurde; false bei Ablehnung | Setzt die Gesundheit auf das Maximum und die Rüstung auf 100 für jeden Spieler mit Ped. | Ja |
setSpeedLimit | kmh (0 deaktiviert) | das angewendete Limit; false bei Ablehnung | Begrenzt die Fahrzeuggeschwindigkeit für aktuell verbundene Spieler. Später verbundene Spieler erhalten das Limit nicht. | Ja |
applyWeatherWithFramework | weather (nicht geprüft) | true, Liste der versuchten Methoden | Versucht 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 |
applyTimeWithFramework | hour; minute (nicht begrenzt) | true, Liste der versuchten Methoden | Dieselbe 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.
| Export | Parameter | Rückgabe | Funktion | Vertrauenswürdige Ressource nötig? |
|---|---|---|---|---|
quarantine | src (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 Aufrufer | Verschiebt 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 |
releaseQuarantine | src | true, wenn freigegeben; false, wenn nicht festgehalten oder abgelehnt | Stellt den ursprünglichen Routing-Bucket wieder her, protokolliert und benachrichtigt den Spieler (Chathinweis fest auf Türkisch, außer bei notifyPlayer = false). | Ja |
isQuarantined | src | boolean | Nur lesend. | Nein |
quarantineList | keine | { id, name, reason, remaining }[] (remaining in Sekunden) | Nur lesend. | Nein |
crashGuardInspect | value (beliebige Payload) | nil, wenn sicher; andernfalls eine Problembeschreibung auf Türkisch | Prü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 |
crashGuardReject | src (online); payload | true, wenn die Payload fehlerhaft ist (verwerfen); false, wenn sauber oder src ungültig | Dieselbe 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 |
RateLimit | src; key? (Standard 'default'); max? (Standard 10, min. 1); windowMs? (Standard 10000, min. 100) | true = erlaubt; false = über dem Limit | Zä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.
| Export | Parameter | Rückgabe | Funktion | Vertrauenswürdige Ressource nötig? |
|---|---|---|---|---|
GetPlayerInfo | src (online) | { id, name, ping, license, discord, steam, citizenid, isAdmin, coords, endpoint } oder nil | Kennungen 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 |
GetNearbyPlayers | src; radius? (Standard 30.0) | { id, name, distance }[] | Spieler in der Nähe von src nach serverseitiger Ped-Position (OneSync), ohne src. | Nein |
getOnlinePlayers | keine | { 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 |
GetDetections | src (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 |
GetCloudThreatScore | src | 0 bis 100 | Anzeigewert: 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 |
NoteCloudViolation | src; reason?; punishment? ('LOG', 'KICK' oder 'BAN') | nil | Fü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 |
ForensicLinksOf | license (reines Hex, ohne Präfix license:) | verknüpfte Licenses (String-Liste); {}, wenn unbekannt | Findet 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 |
checkIpReputation | ip | { vpn, proxy, hosting, country, org, expiresAt } oder nil | Liest 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 |
webBridgeFindByLicense | license (String, mit oder ohne license:) | Server-ID online oder nil | Findet einen Spieler, der online ist. In der Praxis passt jede Kennung exakt, zum Beispiel license2:... oder discord:.... | Nein |
webBridgeFindByCitizen | cid (QB-citizenid oder ESX-identifier) | Server-ID online oder nil | Funktioniert 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.
| Export | Parameter | Rückgabe | Funktion | Vertrauenswürdige Ressource nötig? |
|---|---|---|---|---|
phoneNotify | src (online); title; body; opts? { icon, color, app } | true; false, wenn offline | Sendet 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 |
phoneNotifyAdmins | title; body; opts? | nil | phoneNotify an jedes Teammitglied online. Kann für jeden Spieler die Datenbank abfragen. | Nein |
getPlayerLocale | src | Sprachcode; Standard ts.Locale ('tr') | Nur lesend. Nur serverseitig. | Nein |
setPlayerLocale | src; lang (2 oder 3 Kleinbuchstaben mit vorhandener Locale-Datei) | true, wenn gesetzt; sonst false | Setzt 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 |
translate | key; ... (Werte für {0}, {1} oder eine Tabelle für {name}) | übersetzter String; englischer Fallback; der Schlüssel selbst, wenn er fehlt | Verwendet 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 |
translateForPlayer | src; key; ... | String in der Sprache des Spielers | Wie 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.
| Export | Parameter | Rückgabe | Funktion | Vertrauenswürdige Ressource nötig? |
|---|---|---|---|---|
v6ScreenWatchRequest | serverId (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 |
v6ScreenWatchPoll | rid | { pending = true }, solange offen; sonst der Eintrag mit status ('done', 'failed' oder 'expired') und url; oder nil, 'not_found' | Nur lesend. | Nein |
v6ScreenWatchLatest | serverId | neuester Anfrage-Eintrag oder nil | Nur lesend. | Nein |
RequestShieldScreenshot | src (online) | true; false, wenn offline | Fordert 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 |
screenCapture | src (online); requestedBy? (Standard 'panel') | true; false, wenn offline | Veraltet. 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.
| Export | Parameter | Rückgabe | Funktion | Vertrauenswürdige Ressource nötig? |
|---|---|---|---|---|
GetStatus | keine | { 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 andere | Die 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' |
licenseStatus | keine | { 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 |
GetServerAuthorityStatus | keine | { 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 |
getRuntimeStats | keine | { uptime_sec, connect_buckets, subnet_buckets, license_tracking } | Zähler der Verbindungshärtung. | Nein |
getBatchStats | keine | { log_pending, detection_pending, webhook_pending } | Warteschlangengrößen des 5-s-Batch-Writers. | Nein |
getCleanupStats | keine | { runs, last_run_at, last_summary, cleaned } | Nur lesend. | Nein |
runCleanup | keine | die Statistiktabelle; false bei Ablehnung | Fü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.
| Export | Parameter | Rückgabe | Funktion | Vertrauenswürdige Ressource nötig? |
|---|---|---|---|---|
getBaseline | keine | { [resource] = { manifest_hash, deep_hash } } | Die freigegebene Baseline. | Nein |
getResources | keine | { [resource] = true } | Bekannte Ressourcen. | Nein |
getSuspicious | keine | { [resource] = { reason, state, hash, manifest, at } } | Als geändert oder verdächtig markierte Ressourcen. | Nein |
getStats | keine | { lastScan, violations, driftedResources } | Zähler des Guards. | Nein |
rescanResources | keine | vollständiger Guard-Zustand (ready, resources, hashes, suspicious, drift_count, violation_count, last_scan und mehr) | Erstellt den Ressourcen-Snapshot synchron neu. | Nein |
approveResource | resourceName; approvedBy? (Standard 'web_panel') | true; false, 'resource_missing'; false bei Ablehnung | Fügt den aktuellen Manifest-Hash zur Baseline hinzu, entfernt die Markierungen verdächtig und blockiert, speichert in der Datenbank und aktualisiert alle Clients. | Ja |
blockResource | resourceName; reason? (Standard 'Manuel blok', Türkisch) | true; false bei Ablehnung | Markiert die Ressource als blockiert, entfernt sie aus der Baseline, speichert in der Datenbank und stoppt sie, falls sie gestartet ist. | Ja |
tsAutoSetup | keine | true (auch, wenn bereits ein Setup läuft); false bei Ablehnung | Wie 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.
| Export | Parameter | Rückgabe | Funktion | Vertrauenswürdige Ressource nötig? |
|---|---|---|---|---|
scanAllResources | keine | { 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 |
scanSingleResource | name | infected (boolean), reason | reason 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 |
getInfectedFiles | keine | Zuordnung infizierter Dateien | Ergebnis des letzten Scans. | Nein |
addCheatSignature | pattern (Muster für Ressourcennamen); signatureName?; severity? (Standard 'critical') | true; false, wenn leer oder abgelehnt | Fü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 |
invalidateSignatureCache | keine | true | Leert den Muster-Cache und die gespeicherten Scanergebnisse, sodass der nächste Scan jede Ressource neu einliest. | Nein |
reloadSignatureExceptions | keine | true | Verwirft die Caches für Ausnahmen und Escrow-Überspringungen sowie die gespeicherten Scanergebnisse. Sie werden bei der nächsten Verwendung neu geladen. | Nein |
reloadSignatureScanCaches | keine | true | Lädt Muster, Whitelist, Ausnahmen und Escrow-Überspringungen sofort neu aus der Datenbank. | Nein |
addSignatureEscrowSkip | resourceName; note? | true; false, wenn leer, kein MySQL oder abgelehnt | Überspringt den gesamten Signaturscan für diese Ressource (für Escrow-Code). | Ja |
removeSignatureEscrowSkip | idOrName (Zeilen-ID oder Ressourcenname) | true; false, wenn ungültig, kein MySQL oder abgelehnt | Entfernt die Escrow-Überspringung. | Ja |
addSignatureException | resourceName; filePath? ('' = alle Dateien); signatureName; note? | true; false, wenn Felder fehlen, kein MySQL oder abgelehnt | Markiert einen Signaturtreffer in dieser Ressource als Fehlalarm. | Ja |
removeSignatureException | id (Zahl) | true; false, wenn nicht numerisch, kein MySQL oder abgelehnt | Löscht die Ausnahme. | Ja |
tsScanBackdoors | callback?(report) mit report = { complete, resources, finished_at, trigger } | true, wenn gestartet; false, wenn bereits ein Scan läuft | Fü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 |
tsScanEvents | keine | true, wenn gestartet; false, wenn bereits ein Scan läuft | Erstellt 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.
| Export | Parameter | Rückgabe | Funktion | Vertrauenswürdige Ressource nötig? |
|---|---|---|---|---|
fakeTriggerTrap | eventName; type ('client' oder 'server') | true, wenn ausgeführt; false, wenn nicht vertrauenswürdig oder type ungültig | Macht das Event zu einem Honeypot (active = 1). Starten Sie das AC neu (ensure tosun-ac), damit es voll wirkt. | Ja |
fakeTriggerWhitelist | eventName | true, wenn ausgeführt (auch bei leerem Namen, der nichts bewirkt); false, wenn nicht vertrauenswürdig | Deaktiviert 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.
| Exports | Nur registriert, wenn |
|---|---|
quarantine, releaseQuarantine, isQuarantined, quarantineList | ts.quarantine.enabled nicht false ist |
crashGuardInspect, crashGuardReject | ts.crashGuard.enabled nicht false ist |
runCleanup, getCleanupStats | ts.v12.enableAutoCleanup nicht false ist |
tsScanBackdoors | ts.BackdoorGuard.enabled nicht false ist |
tsScanEvents | ts.EventScanner.enabled nicht false ist |
applyWeatherWithFramework, applyTimeWithFramework | das Admin-Menü aktiviert ist (ts.AdminMenu existiert und weder enable noch enabled ist false) |
phoneNotify, phoneNotifyAdmins | ts.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.
| Export | Parameter | Rückgabe | Funktion | Vertrauenswürdige Ressource nötig? |
|---|---|---|---|---|
SetExempt (client) | state (boolean); durationMs? (Standard 30000, max. 300000); reason? (Schlüssel, Standard 'unknown') | nil | Fü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 |
PauseDetections | durationMs? (Standard 10000, max. 300000) | nil | Pausiert lokale Client-Prüfungen. Jeder Aufruf ersetzt die Endzeit, daher beendet PauseDetections(0) eine Pause, und ein kürzerer Wert verkürzt sie. | Nein |
IsPlayerAdmin | keine | boolean | Lokales 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 |
IsExempt | keine | boolean | true, wenn der Spieler Staff ist, eine Server-Ausnahme oder -Pause aktiv ist, PauseDetections aktiv ist oder ein SetExempt-reason aktiv ist. | Nein |
GetExemptions | keine | { [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 |
SetSpawned | state (boolean) | nil | true 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) | keine | Client-Konfigurationstabelle | Nur 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.
- 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'.
- 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.
- 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).
- 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'.
| Export | Parameter | Rückgabe | Funktion | Vertrauenswürdige Ressource nötig? |
|---|---|---|---|---|
TosunAC.MarkTeleport | playerId (1 oder höher); durationMs? (Standard 8000) | true nur, wenn der Export true zurückgegeben hat | Ruft MarkTeleport mit dem Grund 'bridge:teleport' auf. | Nein (ist Ihre Ressource nicht vertrauenswürdig, gilt das MarkTeleport-Budget pro Spieler) |
TosunAC.PlayerExempt | playerId; durationMs (500 bis 300000), Preset-Name oder nil (= tosun_ac_bridge_server_ms); tag? (Standard: Ihr Ressourcenname) | true, 'full'; true, 'soft'; oder false | Versucht 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.PlayerExemptPreset | playerId; presetName? (Standard 'MEDIUM', Groß-/Kleinschreibung egal); tag? | wie PlayerExempt | PlayerExempt mit einer Preset-Dauer. Unbekannte Namen verwenden MEDIUM. Ignoriert tosun_ac_bridge_server_ms. | Nur für 'full' |
TosunAC.PlayerExemptOff | playerId; tag? (vom AC nicht verwendet) | true, wenn akzeptiert | Ruft SetPlayerExempt(playerId, false) auf. Nicht vertrauenswürdige Ressourcen erhalten false, und ein weiches Fenster wird nicht beendet. | Ja |
TosunAC.IsTrusted | keine | boolean | GetIntegrationStatus().trusted. Gibt für nicht gelistete Ressourcen false zurück, auch im Audit-Modus, in dem abgesicherte Aufrufe trotzdem durchgehen. | Nein |
TosunAC.IsAvailable | keine | boolean | true, 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.
| Export | Parameter | Rückgabe | Funktion | Vertrauenswürdige Ressource nötig? |
|---|---|---|---|---|
TosunAC.Exempt | durationMs (500 bis 300000), Preset-Name oder nil (= tosun_ac_bridge_client_ms); tag? (Standard: Ihr Ressourcenname) | nil | Ruft den Client-Export SetExempt mit dem Schlüssel 'bridge:' plus tag auf. | Nein |
TosunAC.ExemptOff | tag? (muss dem in Exempt verwendeten tag entsprechen) | nil | Entfernt diese Ausnahme. | Nein |
TosunAC.ExemptPreset | name? (Standard 'MEDIUM') | nil | Exempt mit einer Preset-Dauer und dem Standard-tag. Kein tag-Parameter. | Nein |
TosunAC.RunWithExempt | durationMs; tag; fn | true plus die Ergebnisse von fn; false, err; oder false, wenn fn keine Funktion ist | Nimmt aus, führt fn innerhalb von pcall aus und ruft danach ExemptOff(tag) auf. | Nein |
TosunAC.RunWithExemptPreset | presetName; fn | wie RunWithExempt | RunWithExempt mit einer Preset-Dauer und dem Standard-tag. | Nein |
TosunAC.IsAvailable | keine | boolean | true, wenn die AC-Ressource gestartet ist. | Nein |
tosun-ac:bridge:clientExempt (net event) | durationMs?; tag? | nichts | In 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.
| Export | Wissenswert | Stattdessen verwenden |
|---|---|---|
BypassDetection | Der 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 |
GetDetections | Gibt 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 |
WhitelistArea | Nur clientseitige Entlastung; keine serverseitige Straffreiheit. | SetPlayerExempt für serverseitige Immunität |
screenCapture | Das AC speichert das Ergebnis nicht. | v6ScreenWatchRequest oder RequestShieldScreenshot |
GetStatus().detections | Keine Anzahl von Erkennungen oder Banns. | Nicht als Zähler verwenden |
isAdmin, addAdmin | Im Quellcode zweimal registriert. Die Versionen aus anticheat_server.lua laufen. | Normal aufrufen |