Ir a la guía

Documentación 9.6.24

Referencia de exports

Todos los exports públicos de Tosun AC 9.6.15, con sus parámetros, valores de retorno, efectos secundarios y si el recurso que llama debe ser de confianza. Para una guía por tareas, empieza por la guía de integración.

Llamar a un export#

Llama a los exports de servidor desde los scripts de servidor de tu recurso y a los exports de cliente desde sus scripts de cliente. El nombre del recurso lleva un guion, así que usa siempre la forma con corchetes exports['tosun-ac']. La forma exports.tosun-ac no es Lua válido.

  • Pasa los id de servidor como números. Varios exports usan el id directamente como clave de una tabla.
  • Algunos exports ejecutan una consulta síncrona a la base de datos y ceden el hilo (yield). Llámalos desde un thread o un handler de evento: getBans, getBanInfo, GetDetections, isAdmin y las demás comprobaciones de staff, IsExemptFromPunish, ForensicLinksOf y refreshPanelWhitelist. scanAllResources y scanSingleResource también ceden el hilo.
  • Un export protegido que rechaza tu recurso devuelve false, aunque normalmente devuelva nil.
  • Algunos exports solo existen cuando su función está activada (consulta Exports que dependen de una función). Llamar a un export que no está registrado lanza un error, así que envuelve esas llamadas en pcall.
  • Varios exports faltan en las listas de exports de fxmanifest.lua (por ejemplo MarkTeleport, punish y AllowWeapon). Esas listas son solo informativas; los exports funcionan.
  • Las tablas de abajo indican Sí en la última columna cuando el recurso que llama debe ser de confianza. Consulta Recursos de confianza.
-- script de servidor en tu propio recurso
local status = exports['tosun-ac']:GetIntegrationStatus()
if not status.trusted then
    print(status.hint) -- la línea de server.cfg que debes añadir
end

-- avisa al AC de un teletransporte y luego mueve al jugador
exports['tosun-ac']:MarkTeleport(src, 8000)
SetEntityCoords(GetPlayerPed(src), x, y, z)

-- script de cliente en tu propio recurso
exports['tosun-ac']:SetExempt(true, 60000, 'my_menu')

Recursos de confianza#

Los exports marcados con Sí en la columna de confianza cambian exenciones, derechos de staff, bans, la salud, las armas o el inventario de los jugadores, la cuarentena, los recursos y las firmas, o todo el servidor. Solo aceptan llamadas de un recurso de confianza. Una llamada rechazada no hace nada y devuelve false.

Quien llama es de confianza cuando es la consola del servidor, el propio tosun-ac, un recurso listado en ts.ExportCallerWhitelist en la configuración o un recurso listado en el convar tosun_ac_trusted_resources. La lista por defecto de la configuración es qbx_core, qb-core, es_extended, ox_inventory y ox_lib.

Usa preferiblemente el convar. Vive en server.cfg y sobrevive a las actualizaciones del AC, mientras que los cambios en el archivo de configuración pueden perderse al actualizar el AC. Separa los nombres con comas o espacios. La lista de confianza se guarda en caché durante 10 segundos, así que un cambio hecho en ejecución se aplica en menos de 10 segundos.

En el primer rechazo de cada par de recurso y export, el AC imprime un aviso en la consola del servidor con la línea exacta de server.cfg que debes añadir, y escribe una línea en los logs del panel. La línea del log del panel siempre está en turco.

Modo auditoría: con ts.EnforceExportCallerWhitelist = false, las llamadas no fiables se ejecutan y cada par de recurso y export se imprime una vez en la consola del servidor (sin línea en el log del panel). El valor por defecto es true. Usa el modo auditoría solo durante la configuración para ver qué scripts llaman a qué.

Ejecuta tosunac_integration en la consola del servidor para imprimir el modo de aplicación, los recursos de confianza con su origen (config o convar) y las últimas 20 llamadas rechazadas. Desde un script, llama a GetIntegrationStatus().

La confianza también elimina el presupuesto de MarkTeleport: los recursos de confianza pueden marcar teletransportes sin el límite de tiempo por jugador.

Tosun AC también registra exports y eventos de red internos para su propio funcionamiento (puente con el panel, firma, escaneo, licencias, procesamiento por lotes). No forman parte de esta referencia ni son una API soportada. Algunos están protegidos por la comprobación de confianza o por una comprobación interna de quién llama. No los llames.

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

Integración y exenciones#

Exports de servidor que informan al AC de acciones legítimas en tus scripts y consultan si un jugador está exento.

ExportParámetrosDevuelveQué hace¿Requiere recurso de confianza?
MarkTeleportsrc; ms? (por defecto 8000, limitado entre 1000 y ts.Integration.markTeleportMaxMs, por defecto 15000); reason? (etiqueta de log)true si se concede o ya estaba cubierto; false si el jugador no es válido o está desconectado, o si el presupuesto no alcanzaExención suave. Llámalo justo antes de mover a un jugador. Relaja las comprobaciones de movimiento del servidor, las de godmode/invisible/noclip/focus y las propias comprobaciones de cliente del jugador. Las sanciones por armas, dinero, daño, abuso de eventos, inyección y crash siguen aplicándose. Se borra al desconectarse.No. Los recursos no fiables comparten un presupuesto de 180000 ms por jugador cada 10 minutos (ts.Integration.markTeleportBudgetMs). Una petición que no cabe se rechaza entera.
IsMovementExemptsrcbooleanotrue mientras haya activa una ventana suave de MarkTeleport o de DetectionExempt.serverEvents.No
GetIntegrationStatusninguno (se detecta quién llama){ version, resource, trusted, trustedVia ('config', 'convar', 'self' o nil), enforcing, hint }Indica a tu recurso si es de confianza y por qué vía. hint es la línea de server.cfg que debes añadir cuando no lo es. enforcing = false significa modo auditoría.No
SetPlayerExemptsrc; state (true concede, false quita); durationMs? (por defecto 30000, máx. 300000); reason?true; false si no es de confianza o src no es un númeroExención completa: inmunidad frente a sanciones del servidor más el indicador de exención del cliente. Se omiten la mayoría de las comprobaciones de cliente; las detecciones que aun así llegan a la vía de ban del cliente se rebajan a entradas LOG etiquetadas [exempt]. Comparte un mismo temporizador con whitelistPlayer, PausePlayerDetections y BypassDetection, así que una concesión nueva puede acortar una anterior y state = false las cancela. Se borra al desconectarse.Sí
SetExempt (server)src; durationMs? (por defecto 30000, máx. 300000); reason?igual que SetPlayerExemptAlias de SetPlayerExempt(src, true, durationMs, reason). El export de cliente con el mismo nombre recibe argumentos distintos.Sí
BypassDetectionsrc; detectionKey (obligatorio, pero su valor se ignora); durationMs? (por defecto 5000, de 500 a 60000)true; false si no es de confianza, si falta src o es 0, o si key es nilNombre heredado. Concede la misma exención completa que SetPlayerExempt; no se limita a una sola detección. Una tabla vacía como key devuelve true pero no concede nada.Sí
PausePlayerDetectionssrc; durationMs? (por defecto 15000, máx. 300000)true; false si no es de confianza o src no es un númeroInmunidad frente a sanciones del servidor más un indicador de pausa en el cliente para un jugador.Sí
PauseAllDetectionsdurationMs? (por defecto 10000, máx. 300000)true; false si no es de confianzaPausa las detecciones de cliente para todos los jugadores conectados ahora. Sin exención del lado del servidor. Los jugadores que entran después no quedan en pausa. No hay limitación de frecuencia.Sí
AllowWeaponsrc; weapon? (nombre como 'WEAPON_PISTOL', hash, '*' o nil para todas las armas); ms? (por defecto 600000, de 1000 a 3600000)true; false si no es de confianza, si el jugador no es válido o está desconectado, o si un número es NaN/infPermite a un jugador llevar y usar un arma que no está en su inventario. Solo relaja la comprobación de arma frente a inventario (arma en mano y daño). Se borra al desconectarse.Sí
IsExemptFromPunishsrcbooleano (true = no sancionar)La regla central que usan los módulos de aplicación de sanciones. true para el staff (cuando ts.AdminBypassDetections no es false), exenciones activas, la whitelist de ejecución y la del panel, y jugadores protegidos. Por la última regla, el staff sigue exento aquí incluso con AdminBypassDetections = false. Siempre false con ts.Debug. Puede consultar la base de datos.No
IsPlayerProtectedsrcbooleanotrue para staff, estado de administrador o una exención activa. Ignora ts.AdminBypassDetections y ts.Debug. No incluye la whitelist de ejecución ni la del panel; usa IsExemptFromPunish para la regla completa. Puede consultar la base de datos.No

Elegir una exención#

Usa la exención más limitada que cubra tu script. Varias exenciones comparten el mismo indicador de exención del cliente, así que una puede terminar otra: ClearArea con un nombre de área reinicia el indicador que también activan SetPlayerExempt, MarkTeleport y BypassDetection.

ExportInmunidad frente a sanciones del servidorComprobaciones de clienteDuración¿Requiere recurso de confianza?
MarkTeleportSolo comprobaciones de movimiento y visibilidadExento (la ventana solo se amplía)8 s por defecto, mín. 1 s; máx. ts.Integration.markTeleportMaxMs por llamada (15 s por defecto)No (con presupuesto)
SetPlayerExempt, SetExempt (server)SíExento30 s por defecto, máx. 300 sSí
BypassDetectionSíExento5 s por defecto, de 0,5 a 60 sSí
PausePlayerDetectionsSíEn pausa15 s por defecto, máx. 300 sSí
PauseAllDetectionsNoEn pausa para los jugadores conectados ahora10 s por defecto, máx. 300 sSí
whitelistPlayerSíSin indicador en el cliente3600 s por defecto, -1 = hasta la desconexiónSí
AddWhitelistSí, por identificadorSin indicador en el clienteHasta reiniciar, o durationSecSí
WhitelistAreaNoExento30 s por defectoSí
AllowWeaponSolo la comprobación de arma frente a inventarioSin cambios600 s por defecto, máx. 3600 sSí
Client SetExempt, PauseDetectionsNoExento o en pausa en ese cliente30 s o 10 s por defecto, máx. 300 sNo (cualquier recurso de cliente)

Staff y permisos#

Consulta y cambia a quién trata el AC como staff. Las comprobaciones de staff pueden consultar la base de datos, así que llámalas desde un thread o un handler de evento.

isAdmin devuelve true para: un permiso manual con addAdmin; los ACE txadmin, tx.admin, txadmin.menu, txadmin.advanced, command.txadmin, command.ts, command.ban, command.kick, tosun.admin, ts.admin y cualquiera de ts.AdminBypassAces; los principals group.admin, group.superadmin, group.moderator y group.god; command.kick/ban/resources/restart cuando ts.txAdminAuth está activado; identificadores en admins.lua, ts.AdminMenu.allowedIds y ts.AdminBypassIdentifiers; y permisos del panel en la base de datos. Un ACE que también está concedido a builtin.everyone no cuenta.

isAdmin y addAdmin están registrados dos veces en el código fuente. Las versiones de anticheat_server.lua se cargan las últimas y son las que se ejecutan; esta referencia describe esas.

ExportParámetrosDevuelveQué hace¿Requiere recurso de confianza?
isAdminsrc (pasa un número)booleanoEstado de administrador según las fuentes listadas arriba. Los resultados de la base de datos se guardan en caché 5 s si son positivos y 30 s si son negativos. No tiene en cuenta ts.AdminBypassDetections.No
isStaffPlayersrcbooleanoLa comprobación de staff que usan las vías de ban. Las mismas fuentes que isAdmin, más los ACE de comandos de txAdmin (command.kick/ban/resources/restart/screenshot/unban) salvo que ts.txAdminAuth = false.No
isAdminMenuAllowedsrcbooleanoSi el jugador puede abrir el menú de administración. false cuando el menú está desactivado. Los ACE solo de txAdmin (txadmin, tx.admin), ts.AdminBypassAces y ts.AdminBypassIdentifiers no cuentan. Sin caché: una consulta a la base de datos por llamada.No
getAdminTypesrc'tx', 'config' o falseEtiqueta engañosa: todas las vías de administrador positivas activan el mismo indicador, así que el staff casi siempre recibe 'tx', y 'tx' no significa txAdmin. Usa isAdmin en su lugar.No
addAdminsrc (pasa un número)nil; false si se rechazaPermiso de staff en ejecución: inmunidad frente a sanciones y acceso al menú de administración. No se guarda en la base de datos. No se borra al desconectarse: queda ligado a ese id de servidor hasta removeAdmin o un reinicio.Sí
removeAdminsrcnil; false si se rechazaQuita el permiso manual y el estado en caché. Los permisos por ACE, txAdmin, admins.lua y panel no se revocan y vuelven a contar en la siguiente comprobación.Sí

Whitelist de jugadores y áreas#

Whitelist por id de servidor, whitelist por identificador y áreas con nombre. Las listas de ejecución solo viven en memoria y se pierden al reiniciar; la whitelist del panel es aparte.

ExportParámetrosDevuelveQué hace¿Requiere recurso de confianza?
whitelistPlayersrc (pasa un número); durationSec? (por defecto 3600; -1 = hasta la desconexión)nil; false si se rechazaInmunidad frente a sanciones del servidor por id de servidor. Sin indicador en el cliente. Se borra al desconectarse. SetPlayerExempt, PausePlayerDetections y BypassDetection la sobrescriben.Sí
removeWhitelistsrcnil; false si se rechazaTermina whitelistPlayer. También termina cualquier inmunidad de servidor de SetPlayerExempt, PausePlayerDetections o BypassDetection.Sí
AddWhitelisttarget (id de servidor o string de identificador); durationSec? (nil o 0 = hasta reiniciar)true; false si está vacío o se rechazaAñade identificadores a la whitelist en memoria (no se guarda en la base de datos). Un id de servidor añade todos los identificadores de ese jugador. Los identificadores se pasan a minúsculas y se quita el prefijo license:, license2:, discord:, steam: o fivem:. Un valor solo con dígitos se interpreta como id de servidor, así que pasa los id de Discord con el prefijo discord:.Sí
RemoveWhitelisttarget (id de servidor o identificador)true; false si está vacío o se rechazaQuita entradas de la whitelist de ejecución. La tabla de la whitelist del panel no se toca.Sí
IsWhitelistedsrcbooleanotrue si algún identificador está en la whitelist de ejecución o en la whitelist del panel en caché. No incluye whitelistPlayer ni SetPlayerExempt. Siempre false con ts.Debug.No
refreshPanelWhitelistningunonilRecarga ahora la whitelist del panel (consulta síncrona). También se recarga 12 s después del arranque y cada 60 s.No
WhitelistAreasrc; areaName (no vacío); durationSec? (por defecto 30)true; false si no es válido o se rechazaRegistra un área con nombre y activa el indicador de exención del cliente. Solo alivio del lado del cliente: ningún módulo del servidor lee el área, así que no hay inmunidad frente a sanciones del servidor.Sí
ClearAreasrc; areaName? ('' o nil = todas las áreas)true; false si src es 0 o se rechazaQuita el área. Con un nombre también reinicia el indicador de exención del cliente, lo que termina también otras exenciones de cliente. Con un nombre vacío el indicador se deja como está.Sí
IsInAreasrc; areaName? (vacío = cualquier área)booleanoCon un nombre, comprueba la caducidad. Con un nombre vacío, devuelve true para cualquier entrada, incluidas las caducadas.No

Sanciones y bans#

Sanciona a jugadores mediante el flujo del AC, banea a jugadores desconectados y consulta bans. Todos los exports de escritura de aquí necesitan confianza.

ExportParámetrosDevuelveQué hace¿Requiere recurso de confianza?
punishsrc (conectado); reason; image? (URL o datos de la captura); configKey?; punishment? ('BAN', 'KICK' o 'LOG')nil; false si se rechazaEjecuta el flujo completo de sanciones del AC. Los jugadores exentos se omiten. Consulta Cómo elige punish() la sanción.Sí
bansrc (conectado); reasonnil; false si se rechazaEl mismo flujo con la clave de configuración 'Banned via Export' y la sanción ts.punishType. No siempre es permanente: la duración es ts.BanDurations['default'] (0 = permanente), y si el dueño puso ts.punishType en KICK o LOG, expulsa o registra en su lugar. Los jugadores exentos se omiten en silencio.Sí
BanPlayerExtsrc (conectado); reason? (por defecto 'Banned by script')true si se envía; false si no es de confianza o está desconectadoIgual que ban().Sí
KickPlayersrc (conectado); reason? (por defecto 'Kicked by script')true; false si no es de confianza o está desconectadoExpulsión simple con el mensaje '[Tosun AC] ' más el motivo. Sin comprobación de exenciones: el staff y los jugadores en whitelist también se expulsan. No se registra nada.Sí
offlineBandata { playername, license, steam, discord, ip, HWID, HWID2 a HWID5 } (identificadores sin prefijo); reasonnil; false si se rechazaFila de ban permanente para un jugador desconectado. Los identificadores que faltan se guardan como marcadores que nunca coinciden al conectar. Define siempre data.playername y reason: sin ellos la inserción falla con el sql_mode STRICT y no se avisa a quien llama. Imprime una línea en consola. data = nil lanza un error de Lua.Sí
offlineBanByLicenselicense (hex sin prefijo o 'license:...'); reason? (por defecto 'Sebep yok', en turco); actor? (por defecto 'panel'); name?; citizenid?true, banID ('O' + 8 hex); false, 'license required'; false si se rechazaBan permanente por licencia más una fila de historial en ac_offline_bans. Devuelve antes de que terminen las escrituras en la base de datos, así que no se informa de errores de la base de datos. No expulsa a un jugador que esté conectado. Una licencia que no sea string lanza un error de Lua.Sí
unbanbanIDsiempre nilAsíncrono: si el ban existe, lo borra, envía un log de Discord al webhook del menú de administración y dispara el evento de servidor ts_anticheat:playerUnbanned. Las filas de historial de ac_offline_bans se conservan.Sí
getBanslimit? (por defecto 100, sin tope); offset? (por defecto 0)filas de ban, las más recientes primeroFilas completas, incluidas las columnas de IP, licencia, Steam, Discord y HWID. Consulta síncrona.No
getBanInfobanIDfila de ban completa o nilConsulta síncrona.No

Cómo elige punish() la sanción#

punish(), ban() y BanPlayerExt() comparten un mismo flujo. Este es el orden que sigue.

  1. El staff se omite cuando ts.AdminBypassDetections no es false. Los jugadores con una exención activa o en la whitelist de ejecución o del panel se omiten. ts.Debug desactiva estas omisiones. Las llamadas omitidas no hacen nada ni registran nada.
  2. El jugador debe estar conectado. Si no, se imprime un error en la consola del servidor y no pasa nada.
  3. Sanción: gana un argumento punishment válido. Si no, ts.DetectionPunishments[configKey], luego su alias, luego la clave de detección, luego ts.punishType y luego BAN.
  4. Cada resultado dispara el evento de servidor ts_anticheat:playerBanned, publica un mensaje de chat cuando ts.chatMessages está activado, añade una infracción en la nube y escribe el log del AC y el log en directo.
  5. LOG: envía el log con la captura a Discord.
  6. KICK: vuelve a comprobar el staff sin importar ts.AdminBypassDetections, así que el staff nunca se expulsa. Luego envía el log con la captura y expulsa al jugador.
  7. BAN: inserta el ban con una duración de ts.BanDurations en horas (configKey, alias, clave de detección, prefijo y luego default; 0 = permanente) y bannedBy 'anticheat:' más la clave. Dispara ts_anticheat:banCommitted, avisa al panel y expulsa al jugador (se reintenta tras 3 s).
exports['tosun-ac']:punish(src, 'Money exploit', nil, 'my_shop_exploit', 'BAN')

Moderación de un solo jugador#

Actúan sobre un jugador. Lee con atención la columna de confianza: varios de estos no tienen comprobación de confianza.

ExportParámetrosDevuelveQué hace¿Requiere recurso de confianza?
freezePlayersrc (conectado); freeze (booleano)true; false si está desconectadoCongela o descongela al jugador y publica un aviso de chat traducido. El indicador de congelado no se borra al desconectarse.No
isPlayerFrozensrcbooleanoSolo refleja freezePlayer, no massFreeze.No
slayPlayersrc (conectado)true; false si está desconectadoMata al jugador en su cliente y muestra una notificación.No
warnPlayersrc (conectado); reason?; actor? (por defecto 'console')true; false si está desconectadoAdvertencia por chat al jugador y una fila en ac_player_warnings.No
mutePlayersrc (conectado); durationSec? (número; nil o 0 = permanente); reason?; actor? (por defecto 'system')true; false si está desconectadoBloquea los eventos chatMessage heredados del jugador y guarda una fila en ac_player_mutes. Los mutes temporales terminan en los 15 s siguientes a su caducidad. Un mute permanente no se borra al desconectarse y pasa al siguiente jugador que reciba el mismo id de servidor, hasta unmutePlayer o un reinicio. Los avisos de chat al jugador están en turco fijo en el código.No
unmutePlayersrctrue; false si src es nilQuita el mute y avisa al jugador si está conectado (aviso de chat en turco fijo en el código).No
isPlayerMutedsrcbooleanoSolo lectura.No
setPlayerHealthsrc (conectado); hp? (por defecto 100, de 0 a 200)true; false si está desconectado o se rechazaFija la salud en el cliente y pone la salud máxima en 200.Sí
setPlayerArmorsrc (conectado); armor? (por defecto 0, de 0 a 100)true; false si está desconectado o se rechazaFija la armadura en el cliente.Sí
giveWeaponsrc (conectado); weapon? (por defecto 'WEAPON_PISTOL'); ammo? (por defecto 60)true; false si está desconectado o se rechazaUsa ox_inventory si está iniciado; si no, el inventario de QB (solo framework 'qb' o 'qbox', no 'qbcore'); si no, addWeapon de ESX; si no, una entrega nativa. Devuelve true incluso cuando el inventario rechazó el objeto. No llama a AllowWeapon, así que un arma entregada de forma nativa puede ser marcada por la comprobación de arma frente a inventario (acción por defecto log).Sí
stripWeaponssrc (conectado)true; false si está desconectado o se rechazaQuita todas las armas del ped. Los objetos del inventario no se tocan.Sí
clearInventorysrc (conectado)true; false si está desconectado o se rechazaVacía el inventario con ox_inventory. Sin ox_inventory solo muestra una notificación y no vacía nada, pero aun así devuelve true.Sí
spectatePlayeradminSrc; targetSrctrue; false si un argumento es nil o el objetivo no tiene pedNo es un modo espectador real: teletransporta a adminSrc hasta el objetivo. Cada llamada también da a adminSrc una exención de movimiento de 15 s sin presupuesto.No

Acciones para todo el servidor#

Acciones que afectan a todos los jugadores o a todas las conexiones nuevas.

ExportParámetrosDevuelveQué hace¿Requiere recurso de confianza?
lockdownStatusningunoactive (booleano), reason (string)Solo lectura.No
setLockdownstate (booleano); reason (pasa un string al activarlo)nil; false si se rechazaMientras está activo, toda conexión nueva se rechaza con un mensaje LOCKDOWN y el motivo. No hay excepción para el staff. Solo en ejecución. Envía una línea al chat. Llamarlo con state true y sin motivo activa el lockdown y luego lanza un error de Lua.Sí
emergencyLockdownreason? (el motivo del lockdown por defecto es 'Acil durum', en turco)número de jugadores expulsados; false si se rechazaActiva el lockdown y expulsa a todos los jugadores que no son staff con un mensaje traducido.Sí
massFreezestate (booleano)número de jugadores; false si se rechazaCongela o descongela a todos los jugadores, staff incluido, y envía una línea al chat. La línea de chat está en turco fijo en el código.Sí
healAllningunonúmero de jugadores a los que se envió la curación; false si se rechazaPone la salud al máximo y la armadura en 100 para cada jugador con ped.Sí
setSpeedLimitkmh (0 lo desactiva)el límite aplicado; false si se rechazaLimita la velocidad de los vehículos para los jugadores conectados ahora. Los jugadores que entran después no reciben el límite.Sí
applyWeatherWithFrameworkweather (no se valida)true, lista de métodos probadosPrueba qb-weather, Renewed-Weathersync, cd_easytime, luego wd_weather, weathersync, vSync y qb-weathersync; si no, lo envía a todos los clientes. Solo existe cuando el menú de administración está activado.No
applyTimeWithFrameworkhour; minute (sin límites)true, lista de métodos probadosLa misma cadena de alternativas para la hora. Solo existe cuando el menú de administración está activado.No

Cuarentena y protección de payloads#

Aísla a un jugador sospechoso y protege tus propios eventos de red frente a payloads de crash y spam.

ExportParámetrosDevuelveQué hace¿Requiere recurso de confianza?
quarantinesrc (conectado); reason? (por defecto 'supheli davranis', en turco); seconds? (por defecto 300, de 30 a 1800)true (también si ya estaba retenido); false para jugadores exentos o no válidos, fallo del bucket o quien llama no es de confianzaMueve al jugador a un routing bucket aislado (por defecto 9001 a 9500, bloqueo estricto de entidades, sin población). Registra una detección QUARANTINE y publica un aviso de chat al jugador salvo que notifyPlayer = false. El aviso está en turco fijo en el código. Se libera automáticamente al caducar.Sí
releaseQuarantinesrctrue si se libera; false si no estaba retenido o se rechazaRestaura el routing bucket original, lo registra y avisa al jugador (aviso de chat en turco fijo en el código, salvo que notifyPlayer = false).Sí
isQuarantinedsrcbooleanoSolo lectura.No
quarantineListninguno{ id, name, reason, remaining }[] (remaining en segundos)Solo lectura.No
crashGuardInspectvalue (cualquier payload)nil si es seguro; si no, una descripción del problema en turcoBusca números NaN/Inf, vectores no válidos, strings de más de 32768 caracteres, anidamiento de más de 8 niveles, más de 2000 elementos, unos 64 KB en total, claves de más de 512 caracteres, tipos no soportados y recursión. Sin efectos secundarios.No
crashGuardRejectsrc (conectado); payloadtrue si el payload es malo (descártalo); false si está limpio o src no es válidoLa misma comprobación más un strike para el jugador. 3 strikes en 60 s aplican ts.crashGuard.action: 'kick' (por defecto), 'ban' o cualquier otro valor = solo consola y log. Los jugadores exentos se omiten.No
RateLimitsrc; key? (por defecto 'default'); max? (por defecto 10, mín. 1); windowMs? (por defecto 10000, mín. 100)true = permitido; false = por encima del límiteContador de ventana fija por jugador y clave. Las claves las comparten todos los recursos, así que ponles como prefijo el nombre de tu recurso. src 0 o no válido siempre devuelve true. Se borra al desconectarse.No
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
    -- gestiona la compra
end)

Jugadores y detecciones#

Busca jugadores, identificadores, bans por jugador, puntuaciones de amenaza y cuentas vinculadas. Algunos resultados contienen datos personales como direcciones IP.

ExportParámetrosDevuelveQué hace¿Requiere recurso de confianza?
GetPlayerInfosrc (conectado){ id, name, ping, license, discord, steam, citizenid, isAdmin, coords, endpoint } o nilIdentificadores sin prefijo (license recurre a license2 si falta). endpoint es la IP del jugador. citizenid solo se rellena con el framework 'qb', 'qbcore' o 'esx'; está vacío en 'qbox'. isAdmin puede consultar la base de datos.No
GetNearbyPlayerssrc; radius? (por defecto 30.0){ id, name, distance }[]Jugadores cerca de src según la posición del ped en el servidor (OneSync), sin incluir a src.No
getOnlinePlayersninguno{ id, name, ping, license, discord, steam, isAdmin }[]Aquí los identificadores conservan su prefijo (license:..., discord:..., steam:...). isAdmin puede consultar la base de datos para cada jugador.No
GetDetectionssrc (conectado); limit? (por defecto 25){ banID, reason, banDate, banUntil }[] o {}Nombre histórico: devuelve las filas de BAN del jugador buscadas por licencia, no detecciones.No
GetCloudThreatScoresrcde 0 a 100Puntuación para mostrar: 8 por infracción de sesión (máx. 40, solo mientras la última tenga menos de 10 minutos), 10 por cada check-in de Shield perdido (máx. 30) y 12 por punto de amenaza del native guard (máx. 30). 0 cuando ts.cloudBridge.enabled = false.No
NoteCloudViolationsrc; reason?; punishment? ('LOG', 'KICK' o 'BAN')nilAñade una infracción a la puntuación del jugador; no hace nada cuando ts.cloudBridge.enabled = false. Cada nota KICK o BAN suma 25 a la puntuación de inteligencia (máx. 100, mientras la última tenga menos de 10 minutos); a partir de 50 la licencia se reporta a la base de datos de amenazas entre servidores del panel (necesita la URL y el token del panel). Las entradas posteriores solo se bloquean cuando ts.cloudBridge.threatIntelAction = 'kick' (por defecto 'log'). El AC ya lo llama en cada sanción.No
ForensicLinksOflicense (hex sin prefijo, sin license:)licencias vinculadas (lista de strings); {} si es desconocidaEncuentra cuentas secundarias que comparten valores de Steam, Discord o HWID (IP solo con ts.forensics.linkByIp = true), hasta ts.forensics.maxHops (por defecto 3, máx. 5). Consultas bloqueantes. Funciona con forensics desactivado, pero entonces no se registran vínculos nuevos.No
checkIpReputationip{ vpn, proxy, hosting, country, org, expiresAt } o nilSolo lee la caché. Solo devuelve datos de IP comprobadas al conectar dentro de ts.v12.ipCheckCacheHours (24). Sin consulta en vivo.No
webBridgeFindByLicenselicense (string, con o sin license:)id de servidor conectado o nilEncuentra a un jugador conectado. En la práctica coincide exactamente con cualquier identificador, por ejemplo license2:... o discord:....No
webBridgeFindByCitizencid (citizenid de QB o identificador de ESX)id de servidor conectado o nilSolo funciona con el framework 'qb', 'qbcore' y 'esx'; devuelve nil en 'qbox'.No

Notificaciones e idioma#

Envía notificaciones al teléfono y usa las tablas de traducción del AC. phoneNotify y phoneNotifyAdmins solo existen cuando ts.AdminMenu.enable está activado.

ExportParámetrosDevuelveQué hace¿Requiere recurso de confianza?
phoneNotifysrc (conectado); title; body; opts? { icon, color, app }true; false si está desconectadoEnvía al primer teléfono iniciado: qb-phone, qs-smartphone, lb-phone, yseries, gks_phone, npwd o roadphone; si no, al chat. El teléfono se detecta una sola vez, así que un teléfono iniciado más tarde se ignora hasta reiniciar.No
phoneNotifyAdminstitle; body; opts?nilphoneNotify a todos los miembros del staff conectados. Puede consultar la base de datos para cada jugador.No
getPlayerLocalesrccódigo de idioma; por defecto ts.Locale ('tr')Solo lectura. Solo del lado del servidor.No
setPlayerLocalesrc; lang (2 o 3 letras minúsculas con un archivo de locales)true si se fija; false en otro casoFija el idioma del jugador en el servidor. A diferencia del comando ts_setlang, no sincroniza el idioma con el cliente. Se borra al desconectarse.No
translatekey; ... (valores para {0}, {1}, o una tabla para {name})string traducido; alternativa en inglés; la propia clave si faltaUsa ts.Locale. Un código final de 2 o 3 letras con archivo de idioma selecciona el idioma. Las plantillas que usan %s se devuelven sin formatear; formatéalas tú.No
translateForPlayersrc; key; ...string en el idioma del jugadorComo translate, pero con el idioma del jugador. Sin código de idioma al final.No

Capturas de pantalla#

Pide capturas de los jugadores para el panel. Los exports del AC que escriben logs son internos y no aparecen aquí.

ExportParámetrosDevuelveQué hace¿Requiere recurso de confianza?
v6ScreenWatchRequestserverId (conectado); mode? (por defecto 'once'); requestedBy? (por defecto 'panel'); panelUrl?; forceBase64?id de petición; o nil, 'invalid_id'; o nil, 'offline'Pone una captura en cola y pide al cliente que la suba al panel con un token por subida. Un panelUrl debe ser https y coincidir con ts_public_panel_url o ts.webPanelURL; si no, no se pide nada al cliente. Las peticiones pendientes caducan a los 30 s y se eliminan a los 90 s.No
v6ScreenWatchPollrid{ pending = true } mientras está pendiente; si no, la entrada con status ('done', 'failed' o 'expired') y url; o nil, 'not_found'Solo lectura.No
v6ScreenWatchLatestserverIdúltima entrada de petición o nilSolo lectura.No
RequestShieldScreenshotsrc (conectado)true; false si está desconectadoPide una captura al Shield del cliente (petición válida 60 s). Una respuesta firmada se envía al panel y dispara el evento de servidor ts_anticheat:shield:screenshot_saved(src, b64).No
screenCapturesrc (conectado); requestedBy? (por defecto 'panel')true; false si está desconectadoHeredado. Necesita el recurso screenshot-basic y el convar ts_screen_upload definido con setr (por defecto http://localhost/api/screen_upload.php). El AC no guarda el resultado. Usa v6ScreenWatchRequest o RequestShieldScreenshot en su lugar.No

Estado y diagnóstico#

Consulta el estado del AC para paneles de control y comprobaciones de salud.

ExportParámetrosDevuelveQué hace¿Requiere recurso de confianza?
GetStatusninguno{ version, online, detections, debug, framework }version es la versión del recurso de fxmanifest. detections solo cuenta reportes de un canal de cliente heredado sin firmar y se queda cerca de 0 con la firma activada (por defecto); no es un recuento de detecciones ni de bans. No hay campo de tiempo en marcha (uptime).No
getConfig (server)configType? ('webhooks' o cualquier otro valor)copia saneada de la configuración; para 'webhooks', la tabla Webhooks para quien llama de confianza y {} para los demásLa copia quita las funciones, las claves que contienen secret, password, token o webhook, las claves que terminan en key (excepto los nombres que terminan en hotkey y el nombre key a secas) y todo lo anidado a más de 6 niveles. En caché durante 5 s.Solo para 'webhooks'
licenseStatusninguno{ checked, ok, reason, serverId, licenseSet }Estado del bloqueo de licencia. reason es 'disabled' cuando ts.licenseLock.enabled no es true, y 'not_checked' antes de la primera comprobación, 1,5 s después del arranque.No
GetServerAuthorityStatusninguno{ enabled, checks = { [id] = { available, enabled, action } } }Muestra qué comprobaciones con autoridad en el servidor admite esta build del servidor y cómo están configuradas. Ids: superJump, damageMod, meleeMod, defenseMod, weapon, godmode, invisible, noclip, focus.No
getRuntimeStatsninguno{ uptime_sec, connect_buckets, subnet_buckets, license_tracking }Contadores del endurecimiento de conexiones.No
getBatchStatsninguno{ log_pending, detection_pending, webhook_pending }Tamaños de las colas del escritor por lotes de 5 s.No
getCleanupStatsninguno{ runs, last_run_at, last_summary, cleaned }Solo lectura.No
runCleanupningunola tabla de estadísticas; false si se rechazaEjecuta ahora la limpieza por retención: filas antiguas de jugadores conectados, detecciones antiguas, logs de administración, auditoría del panel, reputación de IP, colas de comandos y capturas, intentos de inicio de sesión y sesiones caducadas (límites según los ajustes keep de ts.v12). Los borrados son asíncronos, así que las estadísticas devueltas todavía no incluyen esta ejecución.Sí

Resource guard#

Consulta y cambia la base de recursos aprobados. Todos estos exports se registran aunque el resource guard esté desactivado.

ExportParámetrosDevuelveQué hace¿Requiere recurso de confianza?
getBaselineninguno{ [resource] = { manifest_hash, deep_hash } }La base aprobada.No
getResourcesninguno{ [resource] = true }Recursos conocidos.No
getSuspiciousninguno{ [resource] = { reason, state, hash, manifest, at } }Recursos marcados como cambiados o sospechosos.No
getStatsninguno{ lastScan, violations, driftedResources }Contadores del guard.No
rescanResourcesningunoestado completo del guard (ready, resources, hashes, suspicious, drift_count, violation_count, last_scan y más)Reconstruye la instantánea de recursos de forma síncrona.No
approveResourceresourceName; approvedBy? (por defecto 'web_panel')true; false, 'resource_missing'; false si se rechazaAñade el hash actual del manifest a la base, borra los indicadores de sospechoso y bloqueado, lo guarda en la base de datos y actualiza todos los clientes.Sí
blockResourceresourceName; reason? (por defecto 'Manuel blok', en turco)true; false si se rechazaMarca el recurso como bloqueado, lo quita de la base, lo guarda en la base de datos y lo detiene si está iniciado.Sí
tsAutoSetupningunotrue (también si ya hay una instalación en marcha); false si se rechazaIgual que el comando de consola tosunac_setup: detecta el framework, ejecuta el escaneo de backdoors (límite de 120 s) y el escaneo de firmas, aprueba solo los recursos iniciados cuyos resultados de backdoors y firmas estén completos, limpios y sin cambios, y luego ejecuta el escaneo de eventos. Se cancela sin aprobar nada si el backdoor guard está desactivado u ocupado.Sí

Escaneos de firmas, backdoors y eventos#

Ejecuta escaneos y gestiona firmas, excepciones de falsos positivos y omisiones de escrow. Los escaneos pueden tardar; ejecútalos desde un thread.

ExportParámetrosDevuelveQué hace¿Requiere recurso de confianza?
scanAllResourcesninguno{ total, scanned, infected, clean, errors, cached, skipped }; o nil, 'already_scanning'Escaneo de firmas de todos los recursos. Cede el hilo. Reinicia la lista de infectados. Bloquea los recursos infectados cuando ts.ResourceGuard.autoBlockInfected está activado.No
scanSingleResourcenameinfected (booleano), reasonreason es uno de self, escrow_signature_skip, whitelisted, snapshot_unavailable, incomplete, clean, cached_clean, infected, cached_infected, blocked. Puede ceder el hilo.No
getInfectedFilesningunomapa de archivos infectadosResultado del último escaneo.No
addCheatSignaturepattern (patrón de nombre de recurso); signatureName?; severity? (por defecto 'critical')true; false si está vacío o se rechazaAñade el patrón en memoria y en la base de datos. severity: info (bajo), warning (medio), low, medium, high o critical; los valores desconocidos pasan a high.Sí
invalidateSignatureCacheningunotrueVacía la caché de patrones y los resultados de escaneo guardados, así que el siguiente escaneo vuelve a leer todos los recursos.No
reloadSignatureExceptionsningunotrueInvalida las cachés de excepciones y de omisiones de escrow y los resultados de escaneo guardados. Se recargan en el siguiente uso.No
reloadSignatureScanCachesningunotrueRecarga ahora desde la base de datos los patrones, la whitelist, las excepciones y las omisiones de escrow.No
addSignatureEscrowSkipresourceName; note?true; false si está vacío, no hay MySQL o se rechazaOmite todo el escaneo de firmas para ese recurso (para código con escrow).Sí
removeSignatureEscrowSkipidOrName (id de fila o nombre de recurso)true; false si no es válido, no hay MySQL o se rechazaQuita la omisión de escrow.Sí
addSignatureExceptionresourceName; filePath? ('' = todos los archivos); signatureName; note?true; false si faltan campos, no hay MySQL o se rechazaMarca un acierto de firma en ese recurso como falso positivo.Sí
removeSignatureExceptionid (número)true; false si no es numérico, no hay MySQL o se rechazaBorra la excepción.Sí
tsScanBackdoorscallback?(report) con report = { complete, resources, finished_at, trigger }true si se inicia; false si ya hay un escaneo en marchaEjecuta el escaneo de backdoors en un thread. Los hallazgos van a la base de datos y al panel. Con ts.BackdoorGuard.autoQuarantine activado, los aciertos críticos detienen el recurso.No
tsScanEventsningunotrue si se inicia; false si ya hay un escaneo en marchaConstruye un inventario estático de eventos y triggers de todos los recursos y lo envía al panel.No

Eventos honeypot#

Convierten nombres de evento en trampas o los liberan. Ambos escriben en ac_protected_events y recargan desde la base de datos.

ExportParámetrosDevuelveQué hace¿Requiere recurso de confianza?
fakeTriggerTrapeventName; type ('client' o 'server')true si se envía; false si no es de confianza o el tipo no es válidoConvierte el evento en un honeypot (active = 1). Reinicia el AC (ensure tosun-ac) para que tenga efecto completo.Sí
fakeTriggerWhitelisteventNametrue si se envía (también para un nombre vacío, que no hace nada); false si no es de confianzaDesactiva el honeypot de ese evento (active = 0). Los handlers que ya están registrados pueden necesitar un reinicio del AC; la consola lo indica.Sí

Exports que dependen de una función#

Estos exports solo se registran cuando su función está activada. Si la función está desactivada, llamarlos lanza un error.

ExportsSolo se registran cuando
quarantine, releaseQuarantine, isQuarantined, quarantineListts.quarantine.enabled no es false
crashGuardInspect, crashGuardRejectts.crashGuard.enabled no es false
runCleanup, getCleanupStatsts.v12.enableAutoCleanup no es false
tsScanBackdoorsts.BackdoorGuard.enabled no es false
tsScanEventsts.EventScanner.enabled no es false
applyWeatherWithFramework, applyTimeWithFrameworkel menú de administración está activado (ts.AdminMenu existe y ni enable ni enabled es false)
phoneNotify, phoneNotifyAdminsts.AdminMenu.enable está activado

Exports del lado del cliente#

Llámalos desde scripts de cliente. Cualquier recurso de cliente puede llamarlos; no hay comprobación de confianza. Solo afectan a las comprobaciones de ese cliente y nunca cambian la aplicación de sanciones del servidor.

ExportParámetrosDevuelveQué hace¿Requiere recurso de confianza?
SetExempt (client)state (booleano); durationMs? (por defecto 30000, máx. 300000); reason? (clave, por defecto 'unknown')nilAñade o quita una exención local con ese motivo. Una concesión nueva sustituye la hora de fin para el mismo motivo. La mayoría de las comprobaciones de cliente se omiten mientras está activa; las detecciones que aun así llegan a la vía de ban del cliente se rebajan a entradas LOG etiquetadas [exempt]. state = false quita solo ese motivo.No
PauseDetectionsdurationMs? (por defecto 10000, máx. 300000)nilPausa las comprobaciones locales del cliente. Cada llamada sustituye la hora de fin, así que PauseDetections(0) termina una pausa y un valor más corto la acorta.No
IsPlayerAdminningunobooleanoIndicador local de staff, actualizado cada 2 s a partir del estado de administrador verificado por el servidor, no de un state bag que el cliente pueda escribir.No
IsExemptningunobooleanotrue si el jugador es staff, hay una exención o pausa del servidor activa, PauseDetections está activo o hay algún motivo de SetExempt activo.No
GetExemptionsninguno{ [reason] = remainingMs }Solo lista los motivos de SetExempt y el state bag tsAcExempt. No muestra PauseDetections, las exenciones del servidor ni el estado de staff; usa IsExempt para la respuesta completa.No
SetSpawnedstate (booleano)niltrue marca al jugador como spawneado. false pausa las comprobaciones de movimiento y visuales, por ejemplo en la selección de personaje; se respeta como máximo una vez cada 5 minutos, y las comprobaciones se reanudan tras unos 30 s de movimiento visible normal.No
getConfig (client)ningunotabla de configuración del clienteSolo se sincronizan con los clientes los ajustes seguros para el cliente.No
-- selección de personaje
exports['tosun-ac']:SetSpawned(false)
-- ... el jugador elige un personaje ...
exports['tosun-ac']:SetSpawned(true)

Exports de JavaScript#

Tosun AC registra algunos exports de JavaScript en el servidor para el escaneo de recursos y la verificación de la licencia. Son internos, no pasan por la comprobación de recurso de confianza y no son una API soportada. No los llames. No hay exports de JavaScript públicos.

Archivos del bridge: configuración#

Los archivos opcionales del bridge en tosun-ac/bridge dan a tu recurso una tabla global TosunAC con funciones auxiliares cortas. Llaman a los exports dentro de pcall, así que tu script sigue funcionando cuando el AC está detenido. El AC ve a tu recurso como quien llama.

  1. Añade el bridge al fxmanifest.lua de tu recurso: server_script '@tosun-ac/bridge/tosun_ac_server.lua' y, si hace falta, client_script '@tosun-ac/bridge/tosun_ac_client.lua'.
  2. Si la carpeta del AC tiene otro nombre, añade setr tosun_ac_resource "folder-name" a server.cfg. Usa setr: el bridge de cliente lee este convar en el cliente.
  3. Opcional: set tosun_ac_bridge_server_ms (por defecto 60000), set tosun_ac_bridge_cooldown_ms (por defecto 750, 0 lo desactiva) y setr tosun_ac_bridge_client_ms (por defecto 60000).
  4. Para exenciones completas en el servidor, añade tu recurso a tosun_ac_trusted_resources. Sin confianza, TosunAC.PlayerExempt recurre a una exención suave e imprime una sugerencia una sola vez en la consola del servidor (el texto de la sugerencia está en turco).
-- fxmanifest.lua de tu recurso
server_script '@tosun-ac/bridge/tosun_ac_server.lua'
client_script '@tosun-ac/bridge/tosun_ac_client.lua'

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

-- script de servidor
local ok, mode = TosunAC.PlayerExempt(src, 'long', 'clothing')
-- mode es 'full' (de confianza) o 'soft' (solo movimiento, máx. 15 s)

Bridge: funciones auxiliares de servidor#

Definidas por bridge/tosun_ac_server.lua dentro de tu recurso. Presets: SHORT 30000, MEDIUM 60000, LONG 120000, XL 180000 ms (TosunAC.Presets). TosunAC.Version es '1.2'.

ExportParámetrosDevuelveQué hace¿Requiere recurso de confianza?
TosunAC.MarkTeleportplayerId (1 o mayor); durationMs? (por defecto 8000)true solo si el export devolvió trueLlama a MarkTeleport con el motivo 'bridge:teleport'.No (si tu recurso no es de confianza, se aplica el presupuesto de MarkTeleport por jugador)
TosunAC.PlayerExemptplayerId; durationMs (de 500 a 300000), nombre de preset o nil (= tosun_ac_bridge_server_ms); tag? (por defecto el nombre de tu recurso)true, 'full'; true, 'soft'; o falsePrueba SetPlayerExempt. Si se rechaza, recurre a MarkTeleport durante hasta 15 s. Un cooldown por jugador (por defecto 750 ms, compartido con PlayerExemptPreset) devuelve un único false. En modo auditoría el resultado es 'full' incluso para recursos no listados.Solo para 'full'
TosunAC.PlayerExemptPresetplayerId; presetName? (por defecto 'MEDIUM', sin distinguir mayúsculas de minúsculas); tag?igual que PlayerExemptPlayerExempt con una duración de preset. Los nombres desconocidos usan MEDIUM. Ignora tosun_ac_bridge_server_ms.Solo para 'full'
TosunAC.PlayerExemptOffplayerId; tag? (el AC no lo usa)true si se aceptaLlama a SetPlayerExempt(playerId, false). Los recursos no fiables reciben false, y una ventana suave no se termina.Sí
TosunAC.IsTrustedningunobooleanoGetIntegrationStatus().trusted. Devuelve false para recursos no listados incluso en modo auditoría, donde las llamadas protegidas siguen pasando.No
TosunAC.IsAvailableningunobooleanotrue cuando el recurso del AC está iniciado.No

Bridge: funciones auxiliares de cliente#

Definidas por bridge/tosun_ac_client.lua dentro de tu recurso. Envuelven el export de cliente SetExempt, así que solo dan alivio del lado del cliente.

ExportParámetrosDevuelveQué hace¿Requiere recurso de confianza?
TosunAC.ExemptdurationMs (de 500 a 300000), nombre de preset o nil (= tosun_ac_bridge_client_ms); tag? (por defecto el nombre de tu recurso)nilLlama al SetExempt de cliente con la clave 'bridge:' más el tag.No
TosunAC.ExemptOfftag? (debe coincidir con el tag usado en Exempt)nilQuita esa exención.No
TosunAC.ExemptPresetname? (por defecto 'MEDIUM')nilExempt con una duración de preset y el tag por defecto. Sin parámetro tag.No
TosunAC.RunWithExemptdurationMs; tag; fntrue más los resultados de fn; false, err; o false si fn no es una funciónExime, ejecuta fn dentro de pcall y luego llama a ExemptOff(tag).No
TosunAC.RunWithExemptPresetpresetName; fnigual que RunWithExemptRunWithExempt con una duración de preset y el tag por defecto.No
TosunAC.IsAvailableningunobooleanotrue cuando el recurso del AC está iniciado.No
tosun-ac:bridge:clientExempt (net event)durationMs?; tag?nadaSe registra dentro de cada recurso que incluye el bridge de cliente. Un script de servidor puede enviarlo con TriggerClientEvent para ejecutar TosunAC.Exempt en ese cliente. Si varios recursos incluyen el bridge, cada uno aplica su propia exención. Nada en tosun-ac lo envía.No (scripts de servidor, o scripts de cliente locales con TriggerEvent)

Exports que cualquier recurso puede llamar#

Estos exports no tienen comprobación de confianza y tienen efectos secundarios. Cualquier recurso del servidor puede llamarlos. Ejecuta solo recursos en los que confíes; ten en cuenta que cualquier recurso del servidor ya puede expulsar jugadores o disparar eventos de cliente mediante las natives de FiveM.

  • MarkTeleport: exención de movimiento, limitada por el presupuesto por jugador.
  • spectatePlayer: teletransporta a un jugador y concede en cada llamada una exención de movimiento de 15 s sin presupuesto.
  • NoteCloudViolation: sube la puntuación de amenaza de un jugador y puede reportar la licencia a la base de datos de amenazas entre servidores.
  • warnPlayer y mutePlayer: escriben registros de advertencias y mutes.
  • freezePlayer y slayPlayer: actúan directamente sobre un jugador.
  • crashGuardReject: añade strikes que pueden expulsar o banear.
  • screenCapture, v6ScreenWatchRequest y RequestShieldScreenshot: piden capturas.
  • rescanResources, scanAllResources, scanSingleResource, tsScanBackdoors y tsScanEvents: inician escaneos. scanAllResources puede bloquear y tsScanBackdoors puede detener recursos cuando el autobloqueo o la autocuarentena están activados.
  • applyWeatherWithFramework y applyTimeWithFramework: cambian el clima y la hora para todos.
  • invalidateSignatureCache, reloadSignatureExceptions, reloadSignatureScanCaches y refreshPanelWhitelist: recargan cachés.
  • setPlayerLocale y unmutePlayer: cambian el estado del jugador.
  • phoneNotify y phoneNotifyAdmins: envían mensajes al teléfono o al chat de los jugadores.

Nombres heredados y engañosos#

Estos exports siguen funcionando, pero sus nombres o la documentación antigua sugieren algo que no hacen.

  • Las guías antiguas (INTEGRATION.md de la 9.6.6, CONFIG-EXPORTS-MULTILANG.md de la 8.6.1 y el archivo de redirección TOSUN-AC-EXPORTS.md) están desactualizadas. Donde difieren, esta referencia coincide con el código de la 9.6.15.
  • SetPlayerExempt, PausePlayerDetections, PauseAllDetections, BypassDetection, AddWhitelist, RemoveWhitelist, WhitelistArea, ClearArea, addAdmin, fakeTriggerTrap y fakeTriggerWhitelist necesitan un recurso de confianza, aunque CONFIG-EXPORTS-MULTILANG.md los lista sin ese requisito.
  • La lista de confianza por defecto es qbx_core, qb-core, es_extended, ox_inventory y ox_lib. INSTALLER-READY.md omite qb-core y es_extended.
  • GetIntegrationStatus() también devuelve un campo version.
  • punish, ban, BanPlayerExt, KickPlayer, offlineBan y offlineBanByLicense necesitan un recurso de confianza.
  • ban() y BanPlayerExt() siguen ts.punishType y ts.BanDurations['default'], así que no siempre son permanentes.
  • KickPlayer no comprueba exenciones. En el flujo de punish, KICK siempre respeta al staff, mientras que BAN y LOG siguen ts.AdminBypassDetections.
  • Durante una exención de cliente, la mayoría de las comprobaciones de cliente se omiten por completo. Solo las detecciones que aun así llegan a la vía de ban se convierten en entradas LOG etiquetadas [exempt].
  • NoteCloudViolation solo bloquea entradas posteriores con ts.cloudBridge.threatIntelAction = 'kick'.
  • Con el bridge de cliente, los convars tosun_ac_resource y tosun_ac_bridge_client_ms deben definirse con setr, no con set.
  • El tope por llamada de MarkTeleport (ts.Integration.markTeleportMaxMs) también se aplica a quien llama siendo de confianza. Solo el presupuesto de 180 s cada 10 minutos es para quien llama sin ser de confianza.
ExportQué debes saberUsa en su lugar
BypassDetectionLa clave de detección se ignora. Concede una exención completa de 0,5 a 60 s.SetPlayerExempt con una duración corta, o MarkTeleport para teletransportes
GetDetectionsDevuelve las filas de ban del jugador, no detecciones.getBans o getBanInfo
getAdminType'tx' no significa txAdmin; el staff casi siempre recibe 'tx'.isAdmin o isStaffPlayer
SetExempt (server)Alias de SetPlayerExempt(src, true, ...). Los argumentos son distintos de los del SetExempt de cliente.SetPlayerExempt
WhitelistAreaSolo alivio del lado del cliente; sin inmunidad frente a sanciones del servidor.SetPlayerExempt para inmunidad en el servidor
screenCaptureEl AC no guarda el resultado.v6ScreenWatchRequest o RequestShieldScreenshot
GetStatus().detectionsNo es un recuento de detecciones ni de bans.No lo uses como contador
isAdmin, addAdminRegistrado dos veces en el código fuente. Se ejecutan las versiones de anticheat_server.lua.Llámalos con normalidad