Pular para o conteúdo

Estatísticas e diagnóstico

Compartilhada

Funções para acompanhar o processo e a conexão do lado em que o script roda, hooks que deixam você observar cada evento e cada chamada de nativa, além de controlar a caixa exibida durante a transferência dos arquivos dos resources.

Oito funções existem no servidor e no cliente. isTransferBoxAlwaysVisible e isTransferBoxActive são a nona e a décima funções desta página e existem somente no cliente.

Quando um jogador entra, o cliente baixa os arquivos dos resources e mostra uma caixa de progresso na tela. Estas funções controlam essa caixa.

A caixa aparece quando o script pediu que ela apareça ou quando o jogador marcou nas configurações dele que ela deve aparecer sempre. Ou seja, esconder a caixa por script não passa por cima da preferência do jogador.

Um debug hook é uma função que o MTAX chama em volta de um evento ou de uma função nativa, antes ou depois de ela rodar. Serve para instrumentar um servidor — registrar, medir, auditar, bloquear — sem mexer nos resources que você quer observar.

Existem quatro tipos:

TipoDispara
"preEvent"Antes dos handlers de um evento rodarem.
"postEvent"Depois que todos eles rodaram.
"preFunction"Antes de uma função nativa rodar.
"postFunction"Depois que ela retornou.

Os hooks de função só enxergam as nativas do MTAX — as funções que esta referência documenta. Funções Lua definidas pelos seus próprios resources não são interceptadas.

Um hook de evento é chamado com os parâmetros do próprio evento no fim de um prefixo fixo:

PosiçãoNomeTipoDescrição
1resourceOrigemresourceResource que disparou o evento, ou nil quando quem disparou foi o próprio MTAX.
2nomeDoEventostringNome do evento.
3origemelementO source do evento.
4clienteelementJogador de quem o evento veio, ou nil.
5arquivostringArquivo de onde partiu o disparo.
6linhanumberLinha dentro desse arquivo.
7…—anyOs parâmetros do próprio evento, em ordem.

Um hook de função segue o mesmo formato, com os argumentos da chamada no fim:

PosiçãoNomeTipoDescrição
1resourceOrigemresourceResource que fez a chamada, ou nil.
2nomeDaFuncaostringNome da nativa sendo chamada.
3permitidoPelaACLboolSempre true. O MTAX não tem ACL por função; o argumento existe para que código de hook escrito para o MTA continue funcionando.
4arquivostringArquivo de onde partiu a chamada.
5linhanumberLinha dentro desse arquivo.
6…—anyOs argumentos com que a nativa foi chamada.

Devolva a string "skip" de um hook "preEvent" ou "preFunction" e o MTAX descarta a chamada: os handlers do evento não rodam, a nativa não executa. Qualquer outro retorno deixa passar. O que um hook "postEvent" ou "postFunction" devolve é ignorado — a essa altura a chamada já aconteceu.

O próprio addDebugHook não pode ser bloqueado.

addDebugHook("preFunction", function(resourceOrigem, nome)
if resourceOrigem and getResourceName(resourceOrigem) == "naoConfiavel" then
return "skip"
end
end, { "kickPlayer", "shutdown" })

Argumentos que carregam segredos nunca chegam a um hook como foram escritos:

NativaO que o hook vê
passwordHash, passwordVerifyA senha substituída por ***.
teaEncode, teaDecodeA chave substituída por ***.
dbConnect, dbExec, dbFree, dbPoll, dbPrepareString, dbQueryNenhum argumento.
callRemote, fetchRemoteSó a URL, sem query string nem fragmento.
encodeString, decodeStringSó os dois primeiros argumentos.