Это планировщик корутин для ракбота. Добавляет возможность использовать wait() как в муне, а также юзать некрашащие defCall
Установка:
Закинуть Tasking.lua в libs, а в начале скрипта использующего его прописать
Lua:
-- Аналог lua_thread.create, создает новую задачу. Второй аргумент должен быть true
-- если задача должна быть приостановлена при запуске.
Task Tasking.new(func, halted = false)
-- Эта функция обязательно должна быть вызвана каждый тик onScriptUpdate(), без неё ничего работать не будет
Tasking.tick()
-- Полностью удаляет задачу Task
Tasking.remove(Task task)
-- Аналог DefCallAdd(), вызывает функцию через некоторое количество миллисекунд.
-- после time идут аргументы, которые будут проброшены функции func при вызове
Tasking.defer(func, time, ...)
-- Приостанавливает задачу
Task:halt()
-- Возобновляет задачу
Task:resume()
Lua:
package.path = getRakBotPath().."/scripts/libs/?.lua;"..getRakBotPath().."/scripts/libs/?/init.lua;";
package.cpath = getRakBotPath().."/scripts/libs/?.dll";
require 'Tasking'
function infinite_loop()
while true do
Tasking.wait(1000)
printLog('I am infinite loop that called every second!')
end
end
function infinite_loop2()
while true do
Tasking.wait(2000)
printLog('I am another loop that called every two seconds!')
end
end
function deferred_call(argument1, argument2)
printLog('I am deferred call that called after two seconds after script started')
printLog('My arguments: ' .. argument1 .. ' ' .. argument2)
-- Resume infinite_loop2 task, that created suspended initially
halted_task:resume()
-- Task will be halted again after 5 seconds
Tasking.defer(function() halted_task:halt() end, 5000)
end
function main()
halted_task = Tasking.new(infinite_loop2, true)
infinite_loop()
end
Tasking.new(main)
Tasking.defer(deferred_call, 2000, 123, 456.758)
-- Tasking.tick() is required to be called in some kind of infinite loop
onScriptUpdate = Tasking.tick
Закинуть Tasking.lua в libs, а в начале скрипта использующего его прописать
Lua:
package.path = getRakBotPath().."/scripts/libs/?.lua;"..getRakBotPath().."/scripts/libs/?/init.lua;";
package.cpath = getRakBotPath().."/scripts/libs/?.dll";
require 'Tasking'