Jump to content

Dúvida math.random e timer


Recommended Posts

function RandomWeather () -- Função do clima aleatorio
	local WeatherID = math.random(20) -- Numero aleatorio de ids
	setWeather (WeatherID) -- Id dos climas
	outputChatBox ("[Alerta Meteorológico] Aconteceu uma mudança no clima do servidor.", getRootElement(), 255, 255, 255, true) -- Texto que aparece no chat
end
setTimer(RandomWeather, math.random(60*1000*10, 60*1000*30), 0)

No script acima, onde tem um math.random vai ser rodado uma única vez o math.random ou sempre que o tempo do timer acabar e ele for reniciado ele vai gerar um novo tempo?

Minha ideia é que seja aleatório entre 10 e 30 minutos.

Link to comment
  • Other Languages Moderators

O math.random que está dentro da função, sim, sempre irá ser gerado um novo (de 1 a 20). Já o math.random que executa a função setTimer, irá ser definido apenas uma vez (de 10 a 30 minutos), ou seja, se o número gerado for, por exemplo, 900000, o seu alerta irá SEMPRE executar a cada 15 minutos.

Solução:

function changeWeather()
    local weatherId = math.random(20)
    setWeather(weatherId)

    -- Quando essa função (changeWeather) ser executada, então chamaremos novamente a função (setTimerForChangeWeather) para setar o timer
    setTimerForChangeWeather()
end

function setTimerForChangeWeather()
    local ms = math.random(60 * 1000 * 10, 60 * 1000 * 30)
    setTimer(changeWeather, ms, 1) -- Irá executar apenas uma vez, mas a função setTimerForChangeWeather() sempre será chamada, então SEMPRE terá o que fazer
end

-- Script inicia
setTimerForChangeWeather()

 

  • Like 1
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...