getTickCount vai retornar sempre um valor diferente, a cada execução, pois ele retorna o tempo em milissegundos desde que o sistema do servidor foi iniciado (clientside o do sistema do cliente).
Então isto:
local tick = getTickCount()
No onClientResourceStart, vai guardar o tempo do momento que o onClientResourceStart ocorrer.
É como um cronômetro, você aperta ele e fazendo uma analogia, a variável tick = getTickCount é executada. Então você para esse cronometro e você quer saber quanto tempo se passou, então terá de fazer o seguinte, já tendo o 'tick' com o tempo em que o cronômetro foi ativado:
tempo_decorrido = getTickCount() - tick
print("se passaram ".. tempo_decorrido .." milissegundos" )
* Lembrando que getTickCount() sempre será maior que o 'tick' armazenado anteriormente. Então:
tick-getTickCount()
É uma forma equivocada de subtrair, isso vai retornar um valor negativo.
Não sei se conseguiu entender, mas é essa lógica que está no código.
if getTickCount()-tick > 20000 then
--[[
Subtrai o tempo atual com o tempo armazenado na variável 'tick'
e verifica se a diferença é de 20000ms (20 segundos)
Se for, armazena novamente getTickCount na variável 'tick' e esse ciclo sempre irá
se repetir
]]
Quanto a este trecho:
imgAtual = (imgAtual == imagensTotal and 1) or (imgAtual + 1)
É uma simplificação de uma condição if (operação ternária com and, or).
Com if statements ficaria assim:
if imgAtual == 2 then
imgAtual = 1
else
imgAtual = imgAtual+ 1
end
imgAtual == imagensTotal
Isso representa uma comparação, e irá retornar uma boolean (true/false)
Aplicando no exemplo do meu código, se for true imgAtual irá receber 1 or (se não for) imgAtual terá o valor de imgAtual + 1
Vai retornar uma interger (número inteiro). Por isso lá no dxDrawImage estou convertendo para uma string, que seria "1.png" imagem com o nome 1, extensão png.
Se suas imagens são na sequencia img1.png, img2.png basta você fazer um tostring da forma que o Lord Henry mostrou.