Published: Feb 18 2024 by
Last documented edit: Feb 18 2024 by
Where to get cron
You can get Cron.lua from psiberx's cp2077-cet-kit on github. Add it to your sources, and then define it as a global:
-- don't overwrite it if it's already defined in the global scope. Or do, up to you.Cron = Cron orrequire('External/Cron.lua')
How to use cron
Cron offers a bunch of functions for executing code later. The code you want to execute has to be inside a function (=> callback) and is passed among the arguments.
For periodically running functions, you need to include logic when to stop the execution.
Performance impact
To save processor load, it is best practice to define your callback outside of the function call. This can have a noticable performance impact, so you're gonna want to do this.
Good example:
localcallback=function()-- do a little dance, make a little loveendCron.Every(0.1, callback)
The callback is defined once.
Bad example:
Cron.Every(0.1, function()-- do a little dance, make a little loveend)
The callback is defined every time cron runs.
Passing function arguments
To pass arguments to your callback function, you pass them as arguments to cron:
localcallback=function(timer) timer.tick = timer.tick +1-- do a little dance, make a little loveendCron.Every(0.1, { tick =1 }, callback)
Cron functions
Delay
Execute the callback after X seconds
localcallback=function() --[[ do a little dance, make a little love ]]endCron.After(0.2, callback)
Timer
Executes a function every X seconds.
The function will run forever unless you stop it!
localcallback=function(timer) timer.tick = timer.tick +1 spdlog.info("Timer is running: " ..tostring(timer.tick))-- do a little dance, make a little loveif timer.tick >150then Cron.Halt(timer)endend-- define outside of function scope to re-use this in Cron.Pause example belowlocal timerArg = { tick =1 }-- start timerCron.Every(0.2, timerArg, callback)
Pausing and resuming a timer
You can pause a timer by passing its reference to cron:
-- callback and timer have been defined in the example above-- the timer is runningCron.Pause(timerArg)spdlog.info("Timer is paused after " ..tostring(timerArg.tick) .." ticks")-- wait 20 seconds, then resume our functionCron.After(20, function () Cron.Resume(timerArg) end)