PT-BR/SetTimer

From Multi Theft Auto: Wiki

[[{{{image}}}|link=]] 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.
[[{{{image}}}|link=]] 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.
[[{{{image}}}|link=]] 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

Click to collapse [-]
Exemplo 1

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.

Click to collapse [-]
Exemplo 2

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
Click to collapse [-]
Exemplo 3

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