Documentação 9.6.24
Referência de exports
Todos os exports públicos do Tosun AC 9.6.15, com parâmetros, valores de retorno, efeitos colaterais e se o resource que chama precisa ser confiável. Para um passo a passo por tarefa, comece pelo guia de integração.
Chamar um export#
Chame exports de servidor a partir dos scripts de servidor do seu resource e exports de cliente a partir dos scripts de cliente dele. O nome do resource tem hífen, então use sempre a forma com colchetes exports['tosun-ac']. A forma exports.tosun-ac não é Lua válido.
- Passe os ids de servidor como números. Vários exports usam o id diretamente como chave de tabela.
- Alguns exports executam uma query síncrona no banco de dados e fazem yield. Chame-os a partir de uma thread ou de um handler de evento: getBans, getBanInfo, GetDetections, isAdmin e as outras verificações de staff, IsExemptFromPunish, ForensicLinksOf e refreshPanelWhitelist. scanAllResources e scanSingleResource também fazem yield.
- Um export protegido que rejeita o seu resource retorna false, mesmo que normalmente retorne nil.
- Alguns exports só existem quando o recurso correspondente está ativado (veja Exports que dependem de recursos). Chamar um export que não está registrado gera um erro, então envolva essas chamadas em pcall.
- Vários exports não aparecem nas listas de exports do fxmanifest.lua (por exemplo MarkTeleport, punish e AllowWeapon). Essas listas são só informativas; os exports funcionam.
- As tabelas abaixo dizem Sim na última coluna quando o resource que chama precisa ser confiável. Veja Resources confiáveis.
-- script de servidor no seu próprio resource
local status = exports['tosun-ac']:GetIntegrationStatus()
if not status.trusted then
print(status.hint) -- a linha a adicionar no server.cfg
end
-- avise o AC sobre um teleporte e depois mova o jogador
exports['tosun-ac']:MarkTeleport(src, 8000)
SetEntityCoords(GetPlayerPed(src), x, y, z)
-- script de cliente no seu próprio resource
exports['tosun-ac']:SetExempt(true, 60000, 'my_menu')Resources confiáveis#
Exports marcados com Sim na coluna de confiança alteram isenções, direitos de staff, bans, vida do jogador, armas ou inventário, quarentena, resources e assinaturas, ou o servidor inteiro. Eles só aceitam chamadas de um resource confiável. Uma chamada rejeitada não faz nada e retorna false.
Quem chama é confiável quando é o console do servidor, o próprio tosun-ac, um resource listado em ts.ExportCallerWhitelist na config, ou um resource listado na convar tosun_ac_trusted_resources. A lista padrão da config é qbx_core, qb-core, es_extended, ox_inventory e ox_lib.
Prefira a convar. Ela fica no server.cfg e sobrevive às atualizações do AC, enquanto edições no arquivo de config podem se perder quando você atualiza o AC. Separe os nomes com vírgulas ou espaços. A lista de confiança fica em cache por 10 segundos, então uma mudança feita em tempo de execução vale em até 10 segundos.
Na primeira rejeição de cada par de resource e export, o AC imprime um aviso no console do servidor com a linha exata a adicionar no server.cfg e grava uma linha nos logs do painel. A linha de log do painel é sempre em turco.
Modo de auditoria: com ts.EnforceExportCallerWhitelist = false, chamadas não confiáveis rodam e cada par de resource e export é impresso uma vez no console do servidor (sem linha de log no painel). O padrão é true. Use o modo de auditoria só durante o setup, para ver quais scripts chamam o quê.
Rode tosunac_integration no console do servidor para imprimir o modo de aplicação, os resources confiáveis com a origem de cada um (config ou convar) e as últimas 20 chamadas rejeitadas. A partir de um script, chame GetIntegrationStatus().
A confiança também remove o orçamento do MarkTeleport: resources confiáveis podem marcar teleportes sem o limite de tempo por jogador.
O Tosun AC também registra exports e eventos de rede internos para o seu próprio funcionamento (bridge do painel, assinatura, varredura, licenciamento, processamento em lote). Eles não fazem parte desta referência e não são uma API suportada. Alguns são protegidos pela verificação de confiança ou por uma verificação interna de quem chama. Não os chame.
# server.cfg
set tosun_ac_trusted_resources "my-housing,my-clothing"Integração e isenções#
Exports de servidor que avisam o AC sobre ações legítimas nos seus scripts e informam se um jogador está isento.
| Export | Parâmetros | Retorno | O que faz | Exige resource confiável? |
|---|---|---|---|---|
MarkTeleport | src; ms? (padrão 8000, limitado de 1000 a ts.Integration.markTeleportMaxMs, padrão 15000); reason? (tag de log) | true se foi concedido ou já estava coberto; false se o jogador é inválido ou está offline, ou se o orçamento não cobre | Isenção leve. Chame logo antes de mover um jogador. Deixa mais tolerantes as verificações de movimento do servidor, as verificações de godmode/invisible/noclip/focus e as próprias verificações de cliente do jogador. As punições de arma, dinheiro, dano, abuso de eventos, injeção e crash continuam valendo. Limpa na desconexão. | Não. Resources não confiáveis dividem um orçamento de 180000 ms por jogador a cada 10 minutos (ts.Integration.markTeleportBudgetMs). Um pedido que não cabe é recusado por inteiro. |
IsMovementExempt | src | boolean | true enquanto uma janela leve de MarkTeleport ou de DetectionExempt.serverEvents estiver ativa. | Não |
GetIntegrationStatus | nenhum (quem chama é detectado automaticamente) | { version, resource, trusted, trustedVia ('config', 'convar', 'self' or nil), enforcing, hint } | Informa ao seu resource se ele é confiável e como. hint é a linha a adicionar no server.cfg quando não é. enforcing = false significa modo de auditoria. | Não |
SetPlayerExempt | src; state (true concede, false remove); durationMs? (padrão 30000, máx. 300000); reason? | true; false se não for confiável ou se src não for um número | Isenção completa: imunidade contra punição no servidor mais a marca de isenção no cliente. A maioria das verificações do cliente é pulada; detecções que ainda chegam ao caminho de ban do cliente são rebaixadas para entradas LOG com a tag [exempt]. Divide um único timer com whitelistPlayer, PausePlayerDetections e BypassDetection, então uma nova concessão pode encurtar uma anterior, e state = false cancela todas. Limpa na desconexão. | Sim |
SetExempt (server) | src; durationMs? (padrão 30000, máx. 300000); reason? | o mesmo que SetPlayerExempt | Alias de SetPlayerExempt(src, true, durationMs, reason). O export de cliente com o mesmo nome recebe argumentos diferentes. | Sim |
BypassDetection | src; detectionKey (obrigatório, mas o valor é ignorado); durationMs? (padrão 5000, de 500 a 60000) | true; false se não for confiável, se src estiver ausente ou for 0, ou se key for nil | Nome legado. Concede a mesma isenção completa que SetPlayerExempt; não se limita a uma detecção. Uma tabela vazia como key retorna true, mas não concede nada. | Sim |
PausePlayerDetections | src; durationMs? (padrão 15000, máx. 300000) | true; false se não for confiável ou se src não for um número | Imunidade contra punição no servidor mais uma marca de pausa no cliente, para um jogador. | Sim |
PauseAllDetections | durationMs? (padrão 10000, máx. 300000) | true; false se não for confiável | Pausa as detecções do cliente para todos os jogadores online agora. Sem isenção do lado do servidor. Jogadores que entram depois não ficam pausados. Não há limite de frequência. | Sim |
AllowWeapon | src; weapon? (nome como 'WEAPON_PISTOL', hash, '*' ou nil para todas as armas); ms? (padrão 600000, de 1000 a 3600000) | true; false se não for confiável, se o jogador for inválido ou estiver offline, ou se um número for NaN/inf | Permite que um jogador segure e use uma arma que não está no inventário dele. Só deixa mais tolerante a verificação de arma contra inventário (arma em mãos e dano). Limpa na desconexão. | Sim |
IsExemptFromPunish | src | boolean (true = não punir) | A regra central usada pelos módulos de aplicação. true para a staff (quando ts.AdminBypassDetections não é false), isenções ativas, a whitelist de runtime e a do painel, e jogadores protegidos. Por causa da última regra, a staff continua isenta aqui mesmo com AdminBypassDetections = false. Sempre false com ts.Debug. Pode consultar o banco de dados. | Não |
IsPlayerProtected | src | boolean | true para staff, status de admin ou uma isenção ativa. Ignora ts.AdminBypassDetections e ts.Debug. Não inclui a whitelist de runtime nem a do painel; use IsExemptFromPunish para a regra completa. Pode consultar o banco de dados. | Não |
Escolher uma isenção#
Use a isenção mais restrita que cobre o seu script. Várias isenções dividem a mesma marca de isenção do cliente, então uma pode encerrar outra: ClearArea com um nome de área zera a marca que SetPlayerExempt, MarkTeleport e BypassDetection também definem.
| Export | Imunidade contra punição no servidor | Verificações do cliente | Duração | Exige resource confiável? |
|---|---|---|---|---|
MarkTeleport | Só verificações de movimento e de visibilidade | Isento (a janela só é estendida, nunca encurtada) | 8 s por padrão, mín. 1 s; máx. ts.Integration.markTeleportMaxMs por chamada (15 s por padrão) | Não (com orçamento) |
SetPlayerExempt, SetExempt (server) | Sim | Isento | 30 s por padrão, máx. 300 s | Sim |
BypassDetection | Sim | Isento | 5 s por padrão, de 0,5 a 60 s | Sim |
PausePlayerDetections | Sim | Pausado | 15 s por padrão, máx. 300 s | Sim |
PauseAllDetections | Não | Pausado para os jogadores online agora | 10 s por padrão, máx. 300 s | Sim |
whitelistPlayer | Sim | Sem marca no cliente | 3600 s por padrão, -1 = até a desconexão | Sim |
AddWhitelist | Sim, por identificador | Sem marca no cliente | Até o restart, ou durationSec | Sim |
WhitelistArea | Não | Isento | 30 s por padrão | Sim |
AllowWeapon | Só a verificação de arma contra inventário | Sem alteração | 600 s por padrão, máx. 3600 s | Sim |
Client SetExempt, PauseDetections | Não | Isento ou pausado naquele cliente | 30 s ou 10 s por padrão, máx. 300 s | Não (qualquer resource de cliente) |
Staff e permissões#
Leia e altere quem o AC trata como staff. As verificações de staff podem consultar o banco de dados, então chame-as a partir de uma thread ou de um handler de evento.
isAdmin retorna true para: uma concessão manual via addAdmin; as ACEs txadmin, tx.admin, txadmin.menu, txadmin.advanced, command.txadmin, command.ts, command.ban, command.kick, tosun.admin, ts.admin e qualquer uma em ts.AdminBypassAces; os principals group.admin, group.superadmin, group.moderator e group.god; command.kick/ban/resources/restart quando ts.txAdminAuth está ligado; identificadores em admins.lua, ts.AdminMenu.allowedIds e ts.AdminBypassIdentifiers; e concessões do painel no banco de dados. Uma ACE que também é concedida a builtin.everyone não conta.
isAdmin e addAdmin são registrados duas vezes no código-fonte. As versões em anticheat_server.lua carregam por último e são as que rodam; esta referência descreve essas.
| Export | Parâmetros | Retorno | O que faz | Exige resource confiável? |
|---|---|---|---|---|
isAdmin | src (passe um número) | boolean | Status de admin a partir das fontes listadas acima. Os resultados do banco de dados ficam em cache por 5 s quando positivos e por 30 s quando negativos. Não olha ts.AdminBypassDetections. | Não |
isStaffPlayer | src | boolean | A verificação de staff usada pelos caminhos de ban. As mesmas fontes de isAdmin, mais as ACEs de comando do txAdmin (command.kick/ban/resources/restart/screenshot/unban), a menos que ts.txAdminAuth = false. | Não |
isAdminMenuAllowed | src | boolean | Se o jogador pode abrir o menu de admin. false quando o menu está desativado. ACEs exclusivas do txAdmin (txadmin, tx.admin), ts.AdminBypassAces e ts.AdminBypassIdentifiers não contam. Sem cache: uma query no banco de dados por chamada. | Não |
getAdminType | src | 'tx', 'config' ou false | Rótulo enganoso: todo caminho positivo de admin define a mesma marca, então a staff quase sempre recebe 'tx', e 'tx' não significa txAdmin. Use isAdmin. | Não |
addAdmin | src (passe um número) | nil; false se rejeitado | Concessão de staff em runtime: imunidade contra punição e acesso ao menu de admin. Não é salva no banco de dados. Não é limpa na desconexão: fica presa àquele id de servidor até removeAdmin ou um restart. | Sim |
removeAdmin | src | nil; false se rejeitado | Remove a concessão manual e o status em cache. Concessões por ACE, txAdmin, admins.lua e painel não são revogadas e voltam a contar na próxima verificação. | Sim |
Whitelist de jogadores e áreas#
Whitelist por id de servidor, whitelist por identificador e áreas nomeadas. As listas de runtime ficam só na memória e se perdem no restart; a whitelist do painel é separada.
| Export | Parâmetros | Retorno | O que faz | Exige resource confiável? |
|---|---|---|---|---|
whitelistPlayer | src (passe um número); durationSec? (padrão 3600; -1 = até a desconexão) | nil; false se rejeitado | Imunidade contra punição no servidor por id de servidor. Sem marca no cliente. Limpa na desconexão. SetPlayerExempt, PausePlayerDetections e BypassDetection a sobrescrevem. | Sim |
removeWhitelist | src | nil; false se rejeitado | Encerra o whitelistPlayer. Também encerra qualquer imunidade de servidor de SetPlayerExempt, PausePlayerDetections ou BypassDetection. | Sim |
AddWhitelist | target (id de servidor ou string de identificador); durationSec? (nil ou 0 = até o restart) | true; false se vazio ou rejeitado | Adiciona identificadores à whitelist em memória (não é salva no banco de dados). Um id de servidor adiciona todos os identificadores daquele jogador. Os identificadores são convertidos para minúsculas e o prefixo license:, license2:, discord:, steam: ou fivem: é removido. Um valor só com dígitos é lido como id de servidor, então passe ids do Discord com o prefixo discord:. | Sim |
RemoveWhitelist | target (id de servidor ou identificador) | true; false se vazio ou rejeitado | Remove entradas da whitelist de runtime. A tabela da whitelist do painel não é tocada. | Sim |
IsWhitelisted | src | boolean | true se algum identificador estiver na whitelist de runtime ou na whitelist do painel em cache. Não inclui whitelistPlayer nem SetPlayerExempt. Sempre false com ts.Debug. | Não |
refreshPanelWhitelist | nenhum | nil | Recarrega a whitelist do painel agora (query síncrona). Ela também recarrega 12 s depois do início e a cada 60 s. | Não |
WhitelistArea | src; areaName (não vazio); durationSec? (padrão 30) | true; false se inválido ou rejeitado | Registra uma área nomeada e define a marca de isenção do cliente. Só alivia do lado do cliente: nenhum módulo do servidor lê a área, então não há imunidade contra punição no servidor. | Sim |
ClearArea | src; areaName? ('' ou nil = todas as áreas) | true; false se src for 0 ou se for rejeitado | Remove a área. Com um nome, também zera a marca de isenção do cliente, o que encerra outras isenções do cliente também. Com um nome vazio, a marca fica como está. | Sim |
IsInArea | src; areaName? (vazio = qualquer área) | boolean | Com um nome, verifica a expiração. Com um nome vazio, retorna true para qualquer entrada, inclusive as expiradas. | Não |
Punições e bans#
Puna jogadores pelo pipeline do AC, bana jogadores offline e leia bans. Todos os exports de escrita aqui exigem confiança.
| Export | Parâmetros | Retorno | O que faz | Exige resource confiável? |
|---|---|---|---|---|
punish | src (online); reason; image? (URL ou dados da captura de tela); configKey?; punishment? ('BAN', 'KICK' ou 'LOG') | nil; false se rejeitado | Executa o pipeline completo de punição do AC. Jogadores isentos são pulados. Veja Como o punish() escolhe a punição. | Sim |
ban | src (online); reason | nil; false se rejeitado | O mesmo pipeline com a chave de config 'Banned via Export' e a punição ts.punishType. Nem sempre é permanente: a duração é ts.BanDurations['default'] (0 = permanente), e se o dono definiu ts.punishType como KICK ou LOG, ele expulsa ou registra em vez de banir. Jogadores isentos são pulados em silêncio. | Sim |
BanPlayerExt | src (online); reason? (padrão 'Banned by script') | true se foi despachado; false se não for confiável ou se estiver offline | O mesmo que ban(). | Sim |
KickPlayer | src (online); reason? (padrão 'Kicked by script') | true; false se não for confiável ou se estiver offline | Kick simples com a mensagem '[Tosun AC] ' mais o motivo. Sem verificação de isenção: staff e jogadores na whitelist também são expulsos. Nada é registrado. | Sim |
offlineBan | data { playername, license, steam, discord, ip, HWID, HWID2 a HWID5 } (identificadores sem prefixo); reason | nil; false se rejeitado | Linha de ban permanente para um jogador offline. Identificadores ausentes são salvos como placeholders que nunca correspondem na conexão. Sempre defina data.playername e reason: sem eles, a inserção falha com sql_mode STRICT e quem chamou não é avisado. Imprime uma linha no console. data = nil gera um erro de Lua. | Sim |
offlineBanByLicense | license (hex puro ou 'license:...'); reason? (padrão 'Sebep yok', em turco); actor? (padrão 'panel'); name?; citizenid? | true, banID ('O' + 8 hex); false, 'license required'; false se rejeitado | Ban permanente por license mais uma linha de histórico em ac_offline_bans. Retorna antes de as gravações no banco de dados terminarem, então erros do banco não são informados. Não expulsa um jogador que esteja online. Uma license que não seja string gera um erro de Lua. | Sim |
unban | banID | sempre nil | Assíncrono: se o ban existir, apaga, envia um log no Discord para o webhook do menu de admin e dispara o evento de servidor ts_anticheat:playerUnbanned. As linhas de histórico de ac_offline_bans são mantidas. | Sim |
getBans | limit? (padrão 100, sem teto); offset? (padrão 0) | linhas de ban, as mais recentes primeiro | Linhas completas, incluindo as colunas de IP, license, Steam, Discord e HWID. Query síncrona. | Não |
getBanInfo | banID | linha de ban completa ou nil | Query síncrona. | Não |
Como o punish() escolhe a punição#
punish(), ban() e BanPlayerExt() dividem um único pipeline. Esta é a ordem que ele segue.
- A staff é pulada quando ts.AdminBypassDetections não é false. Jogadores com uma isenção ativa ou na whitelist de runtime ou do painel são pulados. ts.Debug desliga esses pulos. Chamadas puladas não fazem nada e não registram nada.
- O jogador precisa estar online. Caso contrário, um erro é impresso no console do servidor e nada acontece.
- Punição: um argumento punishment válido vence. Caso contrário, ts.DetectionPunishments[configKey], depois o alias dele, depois a chave da detecção, depois ts.punishType, depois BAN.
- Todo resultado dispara o evento de servidor ts_anticheat:playerBanned, envia uma mensagem no chat quando ts.chatMessages está ligado, adiciona uma violação na nuvem e grava o log do AC e o log ao vivo.
- LOG: envia o log com captura de tela para o Discord.
- KICK: verifica a staff de novo, independentemente de ts.AdminBypassDetections, então a staff nunca é expulsa. Depois envia o log com captura de tela e derruba o jogador.
- BAN: insere o ban com uma duração de ts.BanDurations em horas (configKey, alias, chave da detecção, prefixo e por fim default; 0 = permanente) e bannedBy 'anticheat:' mais a chave. Dispara ts_anticheat:banCommitted, avisa o painel e derruba o jogador (com nova tentativa depois de 3 s).
exports['tosun-ac']:punish(src, 'Money exploit', nil, 'my_shop_exploit', 'BAN')Moderação de um único jogador#
Agem sobre um jogador. Leia a coluna de confiança com atenção: vários destes não têm verificação de confiança.
| Export | Parâmetros | Retorno | O que faz | Exige resource confiável? |
|---|---|---|---|---|
freezePlayer | src (online); freeze (boolean) | true; false se estiver offline | Congela ou descongela o jogador e envia um aviso localizado no chat. A marca de congelado não é limpa na desconexão. | Não |
isPlayerFrozen | src | boolean | Reflete só o freezePlayer, não o massFreeze. | Não |
slayPlayer | src (online) | true; false se estiver offline | Mata o jogador no cliente dele e mostra uma notificação. | Não |
warnPlayer | src (online); reason?; actor? (padrão 'console') | true; false se estiver offline | Aviso no chat para o jogador e uma linha em ac_player_warnings. | Não |
mutePlayer | src (online); durationSec? (número; nil ou 0 = permanente); reason?; actor? (padrão 'system') | true; false se estiver offline | Bloqueia os eventos chatMessage legados do jogador e salva uma linha em ac_player_mutes. Mutes com tempo terminam em até 15 s depois de expirarem. Um mute permanente não é limpo na desconexão e passa para o próximo jogador que receber o mesmo id de servidor, até unmutePlayer ou um restart. Os avisos no chat para o jogador são fixos em turco. | Não |
unmutePlayer | src | true; false se src for nil | Remove o mute e avisa o jogador se estiver online (aviso no chat fixo em turco). | Não |
isPlayerMuted | src | boolean | Somente leitura. | Não |
setPlayerHealth | src (online); hp? (padrão 100, de 0 a 200) | true; false se estiver offline ou se for rejeitado | Define a vida no cliente e define a vida máxima como 200. | Sim |
setPlayerArmor | src (online); armor? (padrão 0, de 0 a 100) | true; false se estiver offline ou se for rejeitado | Define o colete no cliente. | Sim |
giveWeapon | src (online); weapon? (padrão 'WEAPON_PISTOL'); ammo? (padrão 60) | true; false se estiver offline ou se for rejeitado | Usa o ox_inventory se estiver iniciado; senão o inventário QB (só framework 'qb' ou 'qbox', não 'qbcore'); senão o addWeapon do ESX; senão uma entrega nativa. Retorna true mesmo quando o inventário recusou o item. Não chama AllowWeapon, então uma arma entregue de forma nativa pode ser marcada pela verificação de arma contra inventário (ação padrão log). | Sim |
stripWeapons | src (online) | true; false se estiver offline ou se for rejeitado | Remove todas as armas do ped. Os itens do inventário não são tocados. | Sim |
clearInventory | src (online) | true; false se estiver offline ou se for rejeitado | Limpa o inventário com o ox_inventory. Sem ox_inventory, só mostra uma notificação e não limpa nada, mas ainda retorna true. | Sim |
spectatePlayer | adminSrc; targetSrc | true; false se um argumento for nil ou se o alvo não tiver ped | Não é um spectate de verdade: teleporta adminSrc até o alvo. Toda chamada também dá a adminSrc uma isenção de movimento de 15 s sem orçamento. | Não |
Ações para o servidor inteiro#
Ações que afetam todos os jogadores ou todas as novas conexões.
| Export | Parâmetros | Retorno | O que faz | Exige resource confiável? |
|---|---|---|---|---|
lockdownStatus | nenhum | active (boolean), reason (string) | Somente leitura. | Não |
setLockdown | state (boolean); reason (passe uma string ao ativar) | nil; false se rejeitado | Enquanto ativo, toda nova conexão é recusada com uma mensagem de LOCKDOWN e o motivo. Não há exceção para a staff. Só em runtime. Envia uma linha no chat para todos. Chamar com state true e sem reason ativa o lockdown e depois gera um erro de Lua. | Sim |
emergencyLockdown | reason? (o motivo do lockdown tem como padrão 'Acil durum', em turco) | número de jogadores expulsos; false se rejeitado | Liga o lockdown e expulsa todos os jogadores que não são staff com uma mensagem localizada. | Sim |
massFreeze | state (boolean) | número de jogadores; false se rejeitado | Congela ou descongela todos os jogadores, inclusive a staff, e envia uma linha no chat para todos. A linha do chat é fixa em turco. | Sim |
healAll | nenhum | número de jogadores que receberam a cura; false se rejeitado | Define a vida no máximo e o colete em 100 para todos os jogadores que têm ped. | Sim |
setSpeedLimit | kmh (0 desativa) | o limite aplicado; false se rejeitado | Limita a velocidade dos veículos dos jogadores online agora. Jogadores que entram depois não recebem o limite. | Sim |
applyWeatherWithFramework | weather (não é validado) | true, lista dos métodos tentados | Tenta qb-weather, Renewed-Weathersync, cd_easytime, depois wd_weather, weathersync, vSync e qb-weathersync; senão, envia para todos os clientes. Só existe quando o menu de admin está ativado. | Não |
applyTimeWithFramework | hour; minute (sem limite de faixa) | true, lista dos métodos tentados | A mesma cadeia de alternativas para o relógio. Só existe quando o menu de admin está ativado. | Não |
Quarentena e proteção de payload#
Isole um jogador suspeito e proteja os seus próprios eventos de rede contra payloads de crash e spam.
| Export | Parâmetros | Retorno | O que faz | Exige resource confiável? |
|---|---|---|---|---|
quarantine | src (online); reason? (padrão 'supheli davranis', em turco); seconds? (padrão 300, de 30 a 1800) | true (também se já estiver retido); false para jogadores isentos ou inválidos, falha no bucket ou quem chama não confiável | Move o jogador para um routing bucket isolado (padrão 9001 a 9500, bloqueio estrito de entidades, sem população). Registra uma detecção QUARANTINE e envia um aviso no chat para o jogador, a menos que notifyPlayer = false. O aviso é fixo em turco. Liberado automaticamente ao expirar. | Sim |
releaseQuarantine | src | true se foi liberado; false se não estava retido ou se foi rejeitado | Restaura o routing bucket original, registra e avisa o jogador (aviso no chat fixo em turco, a menos que notifyPlayer = false). | Sim |
isQuarantined | src | boolean | Somente leitura. | Não |
quarantineList | nenhum | { id, name, reason, remaining }[] (remaining em segundos) | Somente leitura. | Não |
crashGuardInspect | value (qualquer payload) | nil se for seguro; senão, uma descrição do problema em turco | Verifica números NaN/Inf, vetores inválidos, strings com mais de 32768 caracteres, aninhamento com mais de 8 níveis, mais de 2000 elementos, cerca de 64 KB no total, chaves com mais de 512 caracteres, tipos não suportados e recursão. Sem efeitos colaterais. | Não |
crashGuardReject | src (online); payload | true se o payload for ruim (descarte-o); false se estiver limpo ou se src for inválido | A mesma verificação mais um strike para o jogador. 3 strikes em 60 s aplicam ts.crashGuard.action: 'kick' (padrão), 'ban' ou qualquer outro valor = só console e log. Jogadores isentos são pulados. | Não |
RateLimit | src; key? (padrão 'default'); max? (padrão 10, mín. 1); windowMs? (padrão 10000, mín. 100) | true = permitido; false = acima do limite | Contador de janela fixa por jogador e chave. As chaves são compartilhadas por todos os resources, então prefixe-as com o nome do seu resource. src 0 ou inválido sempre retorna true. Limpa na desconexão. | Não |
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
-- processa a compra
end)Jogadores e detecções#
Consulte jogadores, identificadores, bans por jogador, pontuações de ameaça e contas vinculadas. Alguns resultados contêm dados pessoais, como endereços IP.
| Export | Parâmetros | Retorno | O que faz | Exige resource confiável? |
|---|---|---|---|---|
GetPlayerInfo | src (online) | { id, name, ping, license, discord, steam, citizenid, isAdmin, coords, endpoint } ou nil | Identificadores sem prefixo (license usa license2 como alternativa). endpoint é o IP do jogador. citizenid só é preenchido para os frameworks 'qb', 'qbcore' ou 'esx'; fica vazio no 'qbox'. isAdmin pode consultar o banco de dados. | Não |
GetNearbyPlayers | src; radius? (padrão 30.0) | { id, name, distance }[] | Jogadores perto de src, pela posição do ped no lado do servidor (OneSync), sem incluir src. | Não |
getOnlinePlayers | nenhum | { id, name, ping, license, discord, steam, isAdmin }[] | Aqui os identificadores mantêm o prefixo (license:..., discord:..., steam:...). isAdmin pode consultar o banco de dados para cada jogador. | Não |
GetDetections | src (online); limit? (padrão 25) | { banID, reason, banDate, banUntil }[] ou {} | Nome histórico: retorna as linhas de BAN do jogador encontradas pela license, não detecções. | Não |
GetCloudThreatScore | src | 0 a 100 | Pontuação de exibição: 8 por violação na sessão (máx. 40, só enquanto a mais recente tiver menos de 10 minutos), 10 por check-in do shield perdido (máx. 30) e 12 por ponto de ameaça do native-guard (máx. 30). 0 quando ts.cloudBridge.enabled = false. | Não |
NoteCloudViolation | src; reason?; punishment? ('LOG', 'KICK' ou 'BAN') | nil | Adiciona uma violação à pontuação do jogador; não faz nada quando ts.cloudBridge.enabled = false. Cada nota de KICK ou BAN soma 25 à pontuação de intel (máx. 100, enquanto a última tiver menos de 10 minutos); com 50 ou mais, a license é reportada ao banco de dados de ameaças entre servidores do painel (exige a URL e o token do painel). Entradas futuras só são bloqueadas quando ts.cloudBridge.threatIntelAction = 'kick' (padrão 'log'). O AC já chama este export em toda punição. | Não |
ForensicLinksOf | license (hex puro, sem o prefixo license:) | licenses vinculadas (lista de strings); {} se desconhecida | Encontra contas alternativas que compartilham valores de Steam, Discord ou HWID (IP só com ts.forensics.linkByIp = true), até ts.forensics.maxHops (padrão 3, máx. 5). Queries bloqueantes. Funciona com a forense desativada, mas aí nenhum vínculo novo é registrado. | Não |
checkIpReputation | ip | { vpn, proxy, hosting, country, org, expiresAt } ou nil | Só leitura de cache. Retorna dados apenas para IPs verificados na conexão dentro de ts.v12.ipCheckCacheHours (24). Sem consulta ao vivo. | Não |
webBridgeFindByLicense | license (string, com ou sem license:) | id de servidor online ou nil | Encontra um jogador online. Na prática, corresponde exatamente a qualquer identificador, por exemplo license2:... ou discord:.... | Não |
webBridgeFindByCitizen | cid (citizenid do QB ou identifier do ESX) | id de servidor online ou nil | Funciona só com os frameworks 'qb', 'qbcore' e 'esx'; retorna nil no 'qbox'. | Não |
Notificações e idioma#
Envie notificações de celular e use as tabelas de tradução do AC. phoneNotify e phoneNotifyAdmins só existem quando ts.AdminMenu.enable está ligado.
| Export | Parâmetros | Retorno | O que faz | Exige resource confiável? |
|---|---|---|---|---|
phoneNotify | src (online); title; body; opts? { icon, color, app } | true; false se estiver offline | Envia para o primeiro celular iniciado: qb-phone, qs-smartphone, lb-phone, yseries, gks_phone, npwd ou roadphone; senão, para o chat. O celular é detectado uma vez, então um celular iniciado depois é ignorado até o restart. | Não |
phoneNotifyAdmins | title; body; opts? | nil | phoneNotify para cada membro da staff online. Pode consultar o banco de dados para cada jogador. | Não |
getPlayerLocale | src | código de idioma; padrão ts.Locale ('tr') | Somente leitura. Só no lado do servidor. | Não |
setPlayerLocale | src; lang (2 ou 3 letras minúsculas com um arquivo em locales) | true se foi definido; false caso contrário | Define o idioma do jogador no lado do servidor. Ao contrário do comando ts_setlang, não sincroniza o idioma com o cliente. Limpa na desconexão. | Não |
translate | key; ... (valores para {0}, {1}, ou uma tabela para {name}) | string traduzida; alternativa em inglês; a própria chave se estiver ausente | Usa ts.Locale. Um código de 2 ou 3 letras no final, com um arquivo de idioma, escolhe o idioma. Templates que usam %s voltam sem formatação; formate-os você mesmo. | Não |
translateForPlayer | src; key; ... | string no idioma do jogador | Como translate, usando o idioma do jogador. Sem código de idioma no final. | Não |
Capturas de tela#
Solicite capturas de tela de jogadores para o painel. Os exports do AC que gravam logs são internos e não estão listados aqui.
| Export | Parâmetros | Retorno | O que faz | Exige resource confiável? |
|---|---|---|---|---|
v6ScreenWatchRequest | serverId (online); mode? (padrão 'once'); requestedBy? (padrão 'panel'); panelUrl?; forceBase64? | id da requisição; ou nil, 'invalid_id'; ou nil, 'offline' | Coloca uma captura de tela na fila e pede ao cliente que a envie ao painel com um token por upload. Um panelUrl precisa ser https e corresponder a ts_public_panel_url ou ts.webPanelURL; caso contrário, o cliente não recebe o pedido. Requisições pendentes expiram depois de 30 s e são removidas depois de 90 s. | Não |
v6ScreenWatchPoll | rid | { pending = true } enquanto pendente; senão, a entrada com status ('done', 'failed' ou 'expired') e url; ou nil, 'not_found' | Somente leitura. | Não |
v6ScreenWatchLatest | serverId | entrada da requisição mais recente ou nil | Somente leitura. | Não |
RequestShieldScreenshot | src (online) | true; false se estiver offline | Pede ao shield do cliente uma captura de tela (pedido válido por 60 s). Uma resposta assinada é enviada ao painel e dispara o evento de servidor ts_anticheat:shield:screenshot_saved(src, b64). | Não |
screenCapture | src (online); requestedBy? (padrão 'panel') | true; false se estiver offline | Legado. Exige o resource screenshot-basic e a convar ts_screen_upload definida com setr (padrão http://localhost/api/screen_upload.php). O AC não guarda o resultado. Use v6ScreenWatchRequest ou RequestShieldScreenshot. | Não |
Status e diagnóstico#
Leia o estado do AC para dashboards e verificações de saúde.
| Export | Parâmetros | Retorno | O que faz | Exige resource confiável? |
|---|---|---|---|---|
GetStatus | nenhum | { version, online, detections, debug, framework } | version é a versão do resource no fxmanifest. detections só conta relatos de um canal de cliente legado sem assinatura e fica perto de 0 com a assinatura ligada (o padrão); não é uma contagem de detecções nem de bans. Não há campo de uptime. | Não |
getConfig (server) | configType? ('webhooks' ou qualquer outro valor) | cópia sanitizada da config; para 'webhooks', a tabela Webhooks para quem chama confiável e {} para os demais | A cópia descarta funções, chaves que contêm secret, password, token ou webhook, chaves que terminam em key (exceto nomes que terminam em hotkey e o nome key sozinho) e tudo o que estiver aninhado em mais de 6 níveis. Cache de 5 s. | Só para 'webhooks' |
licenseStatus | nenhum | { checked, ok, reason, serverId, licenseSet } | Estado do bloqueio de licença. reason é 'disabled' quando ts.licenseLock.enabled não é true, e 'not_checked' antes da primeira verificação, 1,5 s depois do início. | Não |
GetServerAuthorityStatus | nenhum | { enabled, checks = { [id] = { available, enabled, action } } } | Mostra quais verificações de autoridade do servidor esta build do servidor suporta e como estão configuradas. Ids: superJump, damageMod, meleeMod, defenseMod, weapon, godmode, invisible, noclip, focus. | Não |
getRuntimeStats | nenhum | { uptime_sec, connect_buckets, subnet_buckets, license_tracking } | Contadores do endurecimento de conexão. | Não |
getBatchStats | nenhum | { log_pending, detection_pending, webhook_pending } | Tamanhos das filas do gravador em lote de 5 s. | Não |
getCleanupStats | nenhum | { runs, last_run_at, last_summary, cleaned } | Somente leitura. | Não |
runCleanup | nenhum | a tabela de estatísticas; false se rejeitado | Executa a limpeza de retenção agora: linhas obsoletas de jogadores online, detecções antigas, logs de admin, auditoria do painel, reputação de IP, filas de comandos e de capturas de tela, tentativas de login e sessões expiradas (limites das configurações keep de ts.v12). As exclusões são assíncronas, então as estatísticas retornadas ainda não incluem esta execução. | Sim |
Resource guard#
Leia e altere a baseline de resources aprovados. Todos estes exports são registrados mesmo quando o resource guard está desativado.
| Export | Parâmetros | Retorno | O que faz | Exige resource confiável? |
|---|---|---|---|---|
getBaseline | nenhum | { [resource] = { manifest_hash, deep_hash } } | A baseline aprovada. | Não |
getResources | nenhum | { [resource] = true } | Resources conhecidos. | Não |
getSuspicious | nenhum | { [resource] = { reason, state, hash, manifest, at } } | Resources marcados como alterados ou suspeitos. | Não |
getStats | nenhum | { lastScan, violations, driftedResources } | Contadores do guard. | Não |
rescanResources | nenhum | estado completo do guard (ready, resources, hashes, suspicious, drift_count, violation_count, last_scan e mais) | Reconstrói o snapshot dos resources de forma síncrona. | Não |
approveResource | resourceName; approvedBy? (padrão 'web_panel') | true; false, 'resource_missing'; false se rejeitado | Adiciona o hash atual do manifest à baseline, limpa as marcas de suspeito e bloqueado, salva no banco de dados e atualiza todos os clientes. | Sim |
blockResource | resourceName; reason? (padrão 'Manuel blok', em turco) | true; false se rejeitado | Marca o resource como bloqueado, remove-o da baseline, salva no banco de dados e o para se estiver iniciado. | Sim |
tsAutoSetup | nenhum | true (também se um setup já estiver rodando); false se rejeitado | O mesmo que o comando de console tosunac_setup: detecta o framework, roda a varredura de backdoors (timeout de 120 s) e a varredura de assinaturas, aprova só os resources iniciados cujos resultados de backdoor e de assinatura estão completos, limpos e sem alterações, e depois roda a varredura de eventos. Aborta sem aprovar nada se o backdoor guard estiver desativado ou ocupado. | Sim |
Varreduras de assinaturas, backdoors e eventos#
Execute varreduras e gerencie assinaturas, exceções de falso positivo e skips de escrow. As varreduras podem demorar; rode-as a partir de uma thread.
| Export | Parâmetros | Retorno | O que faz | Exige resource confiável? |
|---|---|---|---|---|
scanAllResources | nenhum | { total, scanned, infected, clean, errors, cached, skipped }; ou nil, 'already_scanning' | Varredura de assinaturas de todos os resources. Faz yield. Zera a lista de infectados. Bloqueia resources infectados quando ts.ResourceGuard.autoBlockInfected está ligado. | Não |
scanSingleResource | name | infected (boolean), reason | reason é um destes: self, escrow_signature_skip, whitelisted, snapshot_unavailable, incomplete, clean, cached_clean, infected, cached_infected, blocked. Pode fazer yield. | Não |
getInfectedFiles | nenhum | mapa de arquivos infectados | Resultado da última varredura. | Não |
addCheatSignature | pattern (padrão de nome de resource); signatureName?; severity? (padrão 'critical') | true; false se vazio ou rejeitado | Adiciona o padrão na memória e no banco de dados. severity: info (baixa), warning (média), low, medium, high ou critical; valores desconhecidos viram high. | Sim |
invalidateSignatureCache | nenhum | true | Limpa o cache de padrões e os resultados de varredura salvos, então a próxima varredura lê de novo todos os resources. | Não |
reloadSignatureExceptions | nenhum | true | Invalida os caches de exceções e de skips de escrow e os resultados de varredura salvos. Eles recarregam no próximo uso. | Não |
reloadSignatureScanCaches | nenhum | true | Recarrega agora do banco de dados os padrões, a whitelist, as exceções e os skips de escrow. | Não |
addSignatureEscrowSkip | resourceName; note? | true; false se vazio, sem MySQL ou rejeitado | Pula toda a varredura de assinaturas para aquele resource (para código com escrow). | Sim |
removeSignatureEscrowSkip | idOrName (id da linha ou nome do resource) | true; false se inválido, sem MySQL ou rejeitado | Remove o skip de escrow. | Sim |
addSignatureException | resourceName; filePath? ('' = todos os arquivos); signatureName; note? | true; false se faltarem campos, sem MySQL ou rejeitado | Marca um acerto de assinatura naquele resource como falso positivo. | Sim |
removeSignatureException | id (número) | true; false se não for numérico, sem MySQL ou rejeitado | Apaga a exceção. | Sim |
tsScanBackdoors | callback?(report) com report = { complete, resources, finished_at, trigger } | true se foi iniciada; false se já houver uma varredura rodando | Roda a varredura de backdoors em uma thread. Os achados vão para o banco de dados e para o painel. Com ts.BackdoorGuard.autoQuarantine ligado, acertos críticos param o resource. | Não |
tsScanEvents | nenhum | true se foi iniciada; false se já houver uma varredura rodando | Monta um inventário estático de eventos e triggers em todos os resources e envia para o painel. | Não |
Eventos honeypot#
Transforme nomes de eventos em armadilhas ou libere-os. Os dois gravam em ac_protected_events e recarregam do banco de dados.
| Export | Parâmetros | Retorno | O que faz | Exige resource confiável? |
|---|---|---|---|---|
fakeTriggerTrap | eventName; type ('client' ou 'server') | true se foi despachado; false se não for confiável ou se o type for inválido | Transforma o evento em honeypot (active = 1). Reinicie o AC (ensure tosun-ac) para o efeito completo. | Sim |
fakeTriggerWhitelist | eventName | true se foi despachado (também para um nome vazio, que não faz nada); false se não for confiável | Desativa o honeypot daquele evento (active = 0). Handlers que já estão registrados podem exigir um restart do AC; o console avisa. | Sim |
Exports que dependem de recursos#
Estes exports só são registrados quando o recurso correspondente está ligado. Se o recurso estiver desligado, chamá-los gera um erro.
| Exports | Registrado só quando |
|---|---|
quarantine, releaseQuarantine, isQuarantined, quarantineList | ts.quarantine.enabled não é false |
crashGuardInspect, crashGuardReject | ts.crashGuard.enabled não é false |
runCleanup, getCleanupStats | ts.v12.enableAutoCleanup não é false |
tsScanBackdoors | ts.BackdoorGuard.enabled não é false |
tsScanEvents | ts.EventScanner.enabled não é false |
applyWeatherWithFramework, applyTimeWithFramework | o menu de admin está ativado (ts.AdminMenu existe e nem enable nem enabled é false) |
phoneNotify, phoneNotifyAdmins | ts.AdminMenu.enable está ligado |
Exports do lado do cliente#
Chame estes a partir de scripts de cliente. Qualquer resource de cliente pode chamá-los; não há verificação de confiança. Eles só afetam as verificações naquele cliente e nunca mudam a aplicação das regras no servidor.
| Export | Parâmetros | Retorno | O que faz | Exige resource confiável? |
|---|---|---|---|---|
SetExempt (client) | state (boolean); durationMs? (padrão 30000, máx. 300000); reason? (chave, padrão 'unknown') | nil | Adiciona ou remove uma isenção local sob esse reason. Uma nova concessão substitui o horário de término para o mesmo reason. A maioria das verificações do cliente é pulada enquanto ativa; detecções que ainda chegam ao caminho de ban do cliente são rebaixadas para entradas LOG com a tag [exempt]. state = false remove só aquele reason. | Não |
PauseDetections | durationMs? (padrão 10000, máx. 300000) | nil | Pausa as verificações locais do cliente. Cada chamada substitui o horário de término, então PauseDetections(0) encerra uma pausa e um valor menor a encurta. | Não |
IsPlayerAdmin | nenhum | boolean | Marca local de staff, atualizada a cada 2 s a partir do estado de admin verificado pelo servidor, não a partir de um state bag que o cliente pode escrever. | Não |
IsExempt | nenhum | boolean | true se o jogador é staff, se uma isenção ou pausa do servidor está ativa, se PauseDetections está ativo ou se algum reason de SetExempt está ativo. | Não |
GetExemptions | nenhum | { [reason] = remainingMs } | Lista só os reasons de SetExempt e o state bag tsAcExempt. Não mostra PauseDetections, isenções do servidor nem status de staff; use IsExempt para a resposta completa. | Não |
SetSpawned | state (boolean) | nil | true marca o jogador como já tendo dado spawn. false pausa as verificações de movimento e visuais, por exemplo na seleção de personagem; é respeitado no máximo uma vez a cada 5 minutos, e as verificações voltam depois de cerca de 30 s de movimento visível normal. | Não |
getConfig (client) | nenhum | tabela de config do cliente | Só as configurações seguras para o cliente são sincronizadas com os clientes. | Não |
-- seleção de personagem
exports['tosun-ac']:SetSpawned(false)
-- ... o jogador escolhe um personagem ...
exports['tosun-ac']:SetSpawned(true)Exports em JavaScript#
O Tosun AC registra alguns exports em JavaScript no servidor para a varredura de resources e a verificação de licença. Eles são internos, não passam pela verificação de resource confiável e não são uma API suportada. Não os chame. Não existem exports públicos em JavaScript.
Arquivos de bridge: setup#
Os arquivos de bridge opcionais em tosun-ac/bridge dão ao seu resource uma tabela global TosunAC com helpers curtos. Eles chamam os exports dentro de pcall, então o seu script continua rodando quando o AC está parado. O AC vê o seu resource como quem chama.
- Adicione a bridge ao fxmanifest.lua do seu resource: server_script '@tosun-ac/bridge/tosun_ac_server.lua' e, se precisar, client_script '@tosun-ac/bridge/tosun_ac_client.lua'.
- Se a pasta do AC tiver outro nome, adicione setr tosun_ac_resource "folder-name" ao server.cfg. Use setr: a bridge do cliente lê essa convar no cliente.
- Opcional: set tosun_ac_bridge_server_ms (padrão 60000), set tosun_ac_bridge_cooldown_ms (padrão 750, 0 desativa) e setr tosun_ac_bridge_client_ms (padrão 60000).
- Para isenções completas no servidor, adicione o seu resource a tosun_ac_trusted_resources. Sem confiança, TosunAC.PlayerExempt recorre a uma isenção leve e imprime uma dica única no console do servidor (o texto da dica é em turco).
-- fxmanifest.lua do seu resource
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 é 'full' (confiável) ou 'soft' (só movimento, máx. 15 s)Bridge: helpers do servidor#
Definidos por bridge/tosun_ac_server.lua dentro do seu resource. Presets: SHORT 30000, MEDIUM 60000, LONG 120000, XL 180000 ms (TosunAC.Presets). TosunAC.Version é '1.2'.
| Export | Parâmetros | Retorno | O que faz | Exige resource confiável? |
|---|---|---|---|---|
TosunAC.MarkTeleport | playerId (1 ou mais); durationMs? (padrão 8000) | true só se o export retornou true | Chama MarkTeleport com o reason 'bridge:teleport'. | Não (se o seu resource não for confiável, vale o orçamento por jogador do MarkTeleport) |
TosunAC.PlayerExempt | playerId; durationMs (500 a 300000), nome de preset ou nil (= tosun_ac_bridge_server_ms); tag? (padrão: o nome do seu resource) | true, 'full'; true, 'soft'; ou false | Tenta SetPlayerExempt. Se for rejeitado, recorre a MarkTeleport por até 15 s. Um cooldown por jogador (padrão 750 ms, compartilhado com PlayerExemptPreset) retorna um único false. No modo de auditoria, o resultado é 'full' mesmo para resources que não estão na lista. | Só para 'full' |
TosunAC.PlayerExemptPreset | playerId; presetName? (padrão 'MEDIUM', sem diferenciar maiúsculas de minúsculas); tag? | o mesmo que PlayerExempt | PlayerExempt com a duração de um preset. Nomes desconhecidos usam MEDIUM. Ignora tosun_ac_bridge_server_ms. | Só para 'full' |
TosunAC.PlayerExemptOff | playerId; tag? (não usado pelo AC) | true se foi aceito | Chama SetPlayerExempt(playerId, false). Resources não confiáveis recebem false, e uma janela leve não é encerrada. | Sim |
TosunAC.IsTrusted | nenhum | boolean | GetIntegrationStatus().trusted. Retorna false para resources que não estão na lista, mesmo no modo de auditoria, em que as chamadas protegidas ainda passam. | Não |
TosunAC.IsAvailable | nenhum | boolean | true quando o resource do AC está iniciado. | Não |
Bridge: helpers do cliente#
Definidos por bridge/tosun_ac_client.lua dentro do seu resource. Eles envolvem o export de cliente SetExempt, então dão alívio só do lado do cliente.
| Export | Parâmetros | Retorno | O que faz | Exige resource confiável? |
|---|---|---|---|---|
TosunAC.Exempt | durationMs (500 a 300000), nome de preset ou nil (= tosun_ac_bridge_client_ms); tag? (padrão: o nome do seu resource) | nil | Chama o SetExempt do cliente com a chave 'bridge:' mais a tag. | Não |
TosunAC.ExemptOff | tag? (precisa ser igual à tag usada em Exempt) | nil | Remove essa isenção. | Não |
TosunAC.ExemptPreset | name? (padrão 'MEDIUM') | nil | Exempt com a duração de um preset e a tag padrão. Sem parâmetro de tag. | Não |
TosunAC.RunWithExempt | durationMs; tag; fn | true mais os resultados de fn; false, err; ou false se fn não for uma função | Isenta, executa fn dentro de pcall e depois chama ExemptOff(tag). | Não |
TosunAC.RunWithExemptPreset | presetName; fn | o mesmo que RunWithExempt | RunWithExempt com a duração de um preset e a tag padrão. | Não |
TosunAC.IsAvailable | nenhum | boolean | true quando o resource do AC está iniciado. | Não |
tosun-ac:bridge:clientExempt (net event) | durationMs?; tag? | nada | Registrado dentro de todo resource que inclui a bridge do cliente. Um script de servidor pode enviá-lo com TriggerClientEvent para executar TosunAC.Exempt naquele cliente. Se vários resources incluírem a bridge, cada um aplica a sua própria isenção. Nada no tosun-ac envia este evento. | Não (scripts de servidor, ou scripts de cliente locais com TriggerEvent) |
Exports que qualquer resource pode chamar#
Estes exports não têm verificação de confiança e têm efeitos colaterais. Qualquer resource do servidor pode chamá-los. Rode só resources em que você confia; lembre que qualquer resource do servidor já pode expulsar jogadores ou disparar eventos de cliente pelos natives do FiveM.
- MarkTeleport: isenção de movimento, limitada pelo orçamento por jogador.
- spectatePlayer: teleporta um jogador e concede, a cada chamada, uma isenção de movimento de 15 s sem orçamento.
- NoteCloudViolation: aumenta a pontuação de ameaça de um jogador e pode reportar a license ao banco de dados de ameaças entre servidores.
- warnPlayer e mutePlayer: gravam registros de aviso e de mute.
- freezePlayer e slayPlayer: agem diretamente sobre um jogador.
- crashGuardReject: adiciona strikes que podem expulsar ou banir.
- screenCapture, v6ScreenWatchRequest e RequestShieldScreenshot: solicitam capturas de tela.
- rescanResources, scanAllResources, scanSingleResource, tsScanBackdoors e tsScanEvents: iniciam varreduras. scanAllResources pode bloquear e tsScanBackdoors pode parar resources quando o bloqueio automático ou a quarentena automática estão ligados.
- applyWeatherWithFramework e applyTimeWithFramework: mudam o clima e o horário para todos.
- invalidateSignatureCache, reloadSignatureExceptions, reloadSignatureScanCaches e refreshPanelWhitelist: recarregam caches.
- setPlayerLocale e unmutePlayer: mudam o estado do jogador.
- phoneNotify e phoneNotifyAdmins: enviam mensagens de celular ou de chat para os jogadores.
Nomes legados e enganosos#
Estes exports ainda funcionam, mas os nomes deles ou a documentação antiga sugerem algo que eles não fazem.
- Guias antigos (INTEGRATION.md da 9.6.6, CONFIG-EXPORTS-MULTILANG.md da 8.6.1 e o stub de redirecionamento TOSUN-AC-EXPORTS.md) estão desatualizados. Onde houver diferença, esta referência segue o código da 9.6.15.
- SetPlayerExempt, PausePlayerDetections, PauseAllDetections, BypassDetection, AddWhitelist, RemoveWhitelist, WhitelistArea, ClearArea, addAdmin, fakeTriggerTrap e fakeTriggerWhitelist exigem um resource confiável, embora o CONFIG-EXPORTS-MULTILANG.md os liste sem essa exigência.
- A lista padrão de confiáveis é qbx_core, qb-core, es_extended, ox_inventory e ox_lib. O INSTALLER-READY.md omite qb-core e es_extended.
- GetIntegrationStatus() também retorna um campo version.
- punish, ban, BanPlayerExt, KickPlayer, offlineBan e offlineBanByLicense exigem um resource confiável.
- ban() e BanPlayerExt() seguem ts.punishType e ts.BanDurations['default'], então nem sempre são permanentes.
- KickPlayer não verifica isenções. No pipeline de punição, KICK sempre poupa a staff, enquanto BAN e LOG seguem ts.AdminBypassDetections.
- Durante uma isenção de cliente, a maioria das verificações do cliente é pulada por completo. Só as detecções que ainda chegam ao caminho de ban viram entradas LOG com a tag [exempt].
- NoteCloudViolation só bloqueia entradas futuras com ts.cloudBridge.threatIntelAction = 'kick'.
- Com a bridge do cliente, as convars tosun_ac_resource e tosun_ac_bridge_client_ms precisam ser definidas com setr, não com set.
- O teto por chamada do MarkTeleport (ts.Integration.markTeleportMaxMs) vale também para quem chama confiável. Só o orçamento de 180 s a cada 10 minutos é para quem chama não confiável.
| Export | O que saber | Use no lugar |
|---|---|---|
BypassDetection | A chave da detecção é ignorada. Concede uma isenção completa de 0,5 a 60 s. | SetPlayerExempt com uma duração curta, ou MarkTeleport para teleportes |
GetDetections | Retorna as linhas de ban do jogador, não detecções. | getBans ou getBanInfo |
getAdminType | 'tx' não significa txAdmin; a staff quase sempre recebe 'tx'. | isAdmin ou isStaffPlayer |
SetExempt (server) | Alias de SetPlayerExempt(src, true, ...). Os argumentos são diferentes dos do SetExempt do cliente. | SetPlayerExempt |
WhitelistArea | Só alívio do lado do cliente; sem imunidade contra punição no servidor. | SetPlayerExempt para imunidade no servidor |
screenCapture | O AC não guarda o resultado. | v6ScreenWatchRequest ou RequestShieldScreenshot |
GetStatus().detections | Não é uma contagem de detecções nem de bans. | Não use como contador |
isAdmin, addAdmin | Registrados duas vezes no código-fonte. As versões de anticheat_server.lua são as que rodam. | Chame normalmente |