About
A cooldown will make an event only trigger if a certain amount of time has passed since its last occurrence.
An event cooldown can be created in several ways, and it is made by setting a condition based on time
function myFunc()
if funcNotOnCooldown then
end
end
CurTime
CurTime is a useful tool for setting a delay for an event. The function returns the uptime of the server in seconds, which means we can use it to keep track of time elapsed by saving the returned value, then calling it again.
Here's an example of a cooldown made using CurTime
local delay
= 2
local lastOccurance
= -delay
local function myFunc()
local timeElapsed
= CurTime()
- lastOccurance
if timeElapsed
< delay
then
print(
"The event is on cooldown and has not been triggered" )
else
print(
"The event has been triggered!" )
lastOccurance
= CurTime()
end
end If your event isn't related to in-game events; consider using
RealTime instead, which will always be synced to real-world time rather than server time
In the above example, we use CurTime to tell when the last event had occured. Instead, we could use it to determine when the next event should occur
local delay
= 5
local nextOccurance
= 0
local function myFunc()
local timeLeft
= nextOccurance
- CurTime()
if timeLeft
< 0 then
print(
"The event has been triggered!" )
nextOccurance
= CurTime()
+ delay
end
end Timers
Another method of setting a delay is using the timer.
local delay
= 2
local shouldOccur
= true
local function myFunc()
if shouldOccur
then
print(
"The event has been triggered!" )
shouldOccur
= false
timer.
Simple( delay,
function() shouldOccur
= true end )
else
print(
"The event is still on cooldown" )
end
end It is recommended to not use timers inside hooks that run every frame/tick such as
GM:Think and
GM:HUDPaintReal World Time
If you're dealing with long cooldowns, that should persist between map changes and even server restarts, you'll need to use real world time to set the cooldown. We can use real world time with os.time and os.date
There are different ways to save information between map changes and server restarts. In the following example I'll be using the cookie to set a 24-hour cooldown on my function
local cooldown
= 86400
local function myFunc()
local nextUse
= cookie.
GetNumber(
"myFuncNextUse",
0 )
local time
= os.
time()
if time
< nextUse
then
print(
"The event is on cooldown and has not been triggered" )
local nextUseString
= os.
date(
"%Y/%m/%d - %H:%M:%S" , nextUse )
print(
"The event will be available for use again on: " .. nextUseString )
else
print(
"The event has been successfully triggered!" )
cookie.
Set(
"myFuncNextUse", time
+ cooldown )
end
end