PT-BR/SetTimer
![]() |
Nota Importante: A velocidade na qual um timer em client-side é executado pode não ser totalmente confiável se este client estiver modificando maliciosamente a velocidade do sistema operacional, os timers poderão ser executados muito mais rápido ou mais devagar. |
![]() |
Nota Importante: Usando o código abaixo pode haver problemas na performance. Ao invés disso, use onClientPreRender. setTimer(Funcao, 0, 0) |
Esta função permite você acionar uma função depois de um número de milissegundos estiver decorrido. Você pode executar funções que tenham um nome sendo uma variável, uma função anônima, ou uma função do MTA (tipo setElementModel). Por exemplo, você pode definir um timer para spawnar um jogador depois de alguns segundos.
A partir que o timer termina suas execuções, ele deixa de existir.
O invervalo mínimo aceito é 0ms.
O MTA garante que o timer será acionado após pelo menos o intervalo especificado. O funcionamento do timer está vinculado à taxa de quadros (lado do servidor e lado do cliente). Todos os timers finalizados são acionados em um único ponto em cada quadro(frame). Isto significa que se, por exemplo, o jogador está rodando a 30 fps, então dois timers criados para acionar suas funções em 100ms e 110ms provavelmente ocorrerão durante o mesmo frame, pois a diferença de tempo entre os dois temporizadores (10 ms) é menor que a metade do comprimento do quadro (33 ms). Como na maioria dos timers fornecidos por outras linguagens de programação, você não deve confiar no disparo do cronômetro em um ponto exato no futuro.
Sintaxe
timer setTimer ( function theFunction, int timeInterval, int timesToExecute [, var arguments... ] )
Sintaxe POO(OOP) Não entendeu o que significa isso?
- Método: Timer(...)
Argumentos Necessários
- theFunction: A função que o timer vai executar quando estiver decorrido o invervalo definido.
![]() |
Nota: A variável global escondida (sourceTimer) da função que foi executada pelo timer contém a atual userdata deste timer que está em execução. |
- timeInterval: Número de milissegundos que deve decorrer antes da função especificada ser exeuctada. [o mínimo é 50 (0 a partir da versão 1.5.6 r16715); 1000 milissegundos = 1 segundo]
- timerToExecute: O número de vezes que o timer deve executar. 0 significa que o timer vai ser repetido infinitas vezes.
Argumentos Opcionais
NOTA: Ao usar argumentos opcionais, pode ser necessário fornecer todos os argumentos anteriores ao que você deseja usar. Para obter mais informações sobre argumentos opcionais, consulte Argumentos Opcionais.
- arguments: Qualquer argumento que você deseja passar para a função podem ser listados depois do argumento timesToExecute. Note que qualquer tabela que você deseja passar será clonada, enquanto que referências de metatabelas e funções passadas na tabela serão perdidas. As alterações feitas na tabela original antes que a função seja chamada não serão transferidas.
Retorna
Retorna um timer se for criado com sucesso, false se os argumentos são inválidos ou se o timer não pôde ser definido.
Exemplos
Este exemplo vai exibir no chat algum texto depois de um pequeno delay.
-- defina a função que vai ser executada function chatAtrasado ( text ) outputChatBox ( "Texto atrasado: " .. text ) end -- Defina um timer e então a função será executada depois de 1 segundo setTimer ( chatAtrasado, 1000, 1, "Olá Brasil!" )
1 segundo depois que a linha acima for executada, o texto Texto atrasado: Olá Brasil! vai ser exibido no chat.
Este exemplo aninha uma função inteira dentro de um timer. Isso é bom para coisas como definir variáveis sem precisar chamar uma função fora do seu bloco de código.
function funcaoPrincipal() outputChatBox ("Texto agora!") setTimer ( function() outputChatBox ( "Texto depois de 5 segundos depois do último!" ) end, 5000, 1 ) end funcaoPrincipal() -- execute a função
Este exemplo deve enviar no chat global algo sobre a morte de um jogador em um tempo aleatório. Eu usei math.round neste exemplo para se tornar mais útil.
function math.round(number, decimals, method) -- math.round, função útil obtida de wiki: https://wiki.multitheftauto.com/wiki/Math.round decimals = decimals or 0 local factor = 10 ^ decimals if (method == "ceil" or method == "floor") then return math[method](number * factor) / factor else return tonumber(("%."..decimals.."f"):format(number)) end end function quandoMorto() local delay = math.random(500, 5000) -- 0.5s até 5s de delay setTimer(function(thePlayer) -- Inicia o timer local whoDied = "Someone" -- Caso o nome não seja obtido, Someone será usado if isElement(thePlayer) then -- Isto checa se o elemento thePlayer ainda existe (que significa que o thePlayer não desconectou ainda) whoDied = getPlayerName(thePlayer) -- Aqui obtemos o nome do jogador end outputChatBox(whoDied.." #FF0000morreu #FFFFFF"..math.round(delay/1000, 1).." segundos atrás.", root, 255, 175, 0, true) -- Isto vai exibir para todos no servidor que aquele thePlayer (ou alguém) morreu X segundos atrás. end delay, 1, source) -- O source no final é um argumento para a função que fizemos antes, você não pode usar source diretamente pois ele não estaria definido mais end addEventHandler("onPlayerWasted", root, quandoMorto) -- Executado a cada vez que alguém morre
Veja também
Shared
- addDebugHook
- base64Decode
- base64Encode
- debugSleep
- decodeString
- encodeString
- fromJSON
- generateKeyPair
- getColorFromString
- getDevelopmentMode
- getDistanceBetweenPoints2D
- getDistanceBetweenPoints3D
- getEasingValue
- getNetworkStats
- getNetworkUsageData
- getPerformanceStats
- getRealTime
- getTickCount
- getTimerDetails
- getTimers
- getFPSLimit
- getUserdataType
- getVersion
- gettok
- isTransferBoxVisible
- setTransferBoxVisible
- hash
- inspect
- interpolateBetween
- iprint
- isOOPEnabled
- isTimer
- killTimer
- md5
- passwordHash
- passwordVerify
- pregFind
- pregMatch
- pregReplace
- removeDebugHook
- resetTimer
- setDevelopmentMode
- setFPSLimit
- setTimer
- ref
- deref
- sha256
- split
- teaDecode
- teaEncode
- toJSON
- tocolor
- getProcessMemoryStats
- utfChar
- utfCode
- utfLen
- utfSeek
- utfSub