Исходник Аналог lua_thread для RakBot, wait() и DefCall без крашей

memir

🇷🇺
Автор темы
Всефорумный модератор
333
597
Это планировщик корутин для ракбота. Добавляет возможность использовать wait() как в муне, а также юзать некрашащие defCall
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'
 

Вложения

  • example.lua
    1.1 KB · Просмотры: 614
  • Tasking.lua
    1.5 KB · Просмотры: 1,040

Rei

Известный
Друг
1,589
1,616
за лупы реально респект, выложу тогда свою жалкую попытку, реализовал только дефкалы
 

Вложения

  • call_queue.lua
    764 байт · Просмотры: 131
  • Нравится
Реакции: memir

kizn

О КУ)))
Всефорумный модератор
2,405
2,054
Ещё один пример:

MoonLoader:
lua_thread.create(function()
    print("hello")
    wait(1000)
    print("hello after 1 second")
    wait(2000)
    print("goodbye after 2 seconds")
end)

Tasking (RakBot):
Tasking.new(function()
    printLog("hello")
    Tasking.wait(1000)
    printLog("hello after 1 second")
    Tasking.wait(2000)
    printLog("goodbye after 2 seconds")
end, false)

onScriptUpdate = Tasking.tick
 
  • Нравится
Реакции: danywa и Vintik

kizn

О КУ)))
Всефорумный модератор
2,405
2,054
А как его настроить?
Конкретнее, что настроить? Подключаешь библиотеку
Установка:
Закинуть Tasking.lua в libs, а в начале скрипта использующего его прописать
Lua:
package.path = getRakBotPath().."/scripts/libs/?.lua;"..getRakBotPath().."/scripts/libs/?/init.lua;";
package.cpath = getRakBotPath().."/scripts/libs/?.dll";
require 'Tasking'
И используешь функции, которые описаны в теме. Tasking.wait нужно использовать в Tasking.new и в скрипте добавить onScriptUpdate = Tasking.tick, без этого ничего работать не будет
 

ГОХА | GoxaShow

В АРМИИ С 12.12,ЗАКАЗЫ НЕ ДЕЛАЮ,ТУПЫЕ ВОПРОСЫ-НАХУ
Проверенный
1,864
1,864
я конечно долбаеб, но напишите пожалуйста эту функцию для ракбота:

Lua:
while true do wait(0)
        if mode then
            print("раз")
            wait(100)
            print("два")
            wait(100)
        end
    end
 

_raz0r

t.me/sssecretway | ТГК: t.me/razor_code
Модератор
1,889
3,050
я конечно долбаеб, но напишите пожалуйста эту функцию для ракбота:

Lua:
while true do wait(0)
        if mode then
            print("раз")
            wait(100)
            print("два")
            wait(100)
        end
    end
Lua:
while true do
    if mode then
         printLog('One')
         Tasking.wait(100)
         printLog('Two')
         Tasking.wait(100)
    end
end
 

Mangustyan

Активный
168
25
Конкретнее, что настроить? Подключаешь библиотеку

И используешь функции, которые описаны в теме. Tasking.wait нужно использовать в Tasking.new и в скрипте добавить onScriptUpdate = Tasking.tick, без этого ничего работать не будет
Ничего не понял... Как сделать так что бы при входе оно сразу писало "/afk" ? Буду благодарен!
 

vegas

Известный
637
445
Выкидывает ракбот при использовании задержки в while
Код:
Исключение по адресу: 0x00443630
Базовый адрес: 0x00400000-0x00A14000
Причина: EXCEPTION_ACCESS_VIOLATION
Ошибка чтения по адресу: 0x00000001
EAX: 0x00B181D8 || ESI: 0x00B181D8
EBX: 0x00000000 || EDI: 0x00A8E090
ECX: 0xD3343DA0 || EBP: 0x044AFCBC
EDX: 0x00000000 || ESP: 0x044AFC98
ESP+0000: 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x0079B2CC
ESP+0010: 0x00A8E090 0x00000000 0x00A8E090 0x00000000
ESP+0020: 0x044AFD55 0x044AFF80 0x00435ABE 0x00593E64
ESP+0030: 0x044AFD44 0x00000001 0x00000008 0x00000000
ESP+0040: 0x00000000 0xFFFFFFFF 0xFFFFFFFF 0x00000000
ESP+0050: 0xD3343EB0 0x00435660 0x00435660 0x00000000
ESP+0060: 0x00A8E090 0x0079B2CC 0x7781C4AC 0x7783A7FA
ESP+0070: 0x044AFD24 0x00000001 0x00000000 0x00000000
ESP+0080: 0x044AFD24 0x777E0000 0x00000000 0x0001002F
ESP+0090: 0x00000000 0x00000000 0x00000000 0x00000000
ESP+00A0: 0x00000000 0x00000000 0x0000027F 0x00000000
ESP+00B0: 0x00000800 0x00000000 0x044AFD55 0x00000001
ESP+00C0: 0x00000000 0x00000000 0x00000000 0x00000000
ESP+00D0: 0x00000000 0x00000000 0x00000000 0x00000000
ESP+00E0: 0x00000000 0x00000000 0x00000000 0x00000000
ESP+00F0: 0x00000000 0x00000000 0x00000000 0x00000000
ESP+0100: 0x00000000 0x00000000 0x00000000 0x00000000
ESP+0110: 0x00000000 0x00000000 0x00000000 0x00000000
ESP+0120: 0x00000000 0x00000000 0x00000000 0x00000000
ESP+0130: 0x00000000 0x00000000 0x00000000 0x00000000
 

memir

🇷🇺
Автор темы
Всефорумный модератор
333
597
Выкидывает ракбот при использовании задержки в while
Код:
Исключение по адресу: 0x00443630
Базовый адрес: 0x00400000-0x00A14000
Причина: EXCEPTION_ACCESS_VIOLATION
Ошибка чтения по адресу: 0x00000001
EAX: 0x00B181D8 || ESI: 0x00B181D8
EBX: 0x00000000 || EDI: 0x00A8E090
ECX: 0xD3343DA0 || EBP: 0x044AFCBC
EDX: 0x00000000 || ESP: 0x044AFC98
ESP+0000: 0xFFFFFFFF 0xFFFFFFFF 0x00000000 0x0079B2CC
ESP+0010: 0x00A8E090 0x00000000 0x00A8E090 0x00000000
ESP+0020: 0x044AFD55 0x044AFF80 0x00435ABE 0x00593E64
ESP+0030: 0x044AFD44 0x00000001 0x00000008 0x00000000
ESP+0040: 0x00000000 0xFFFFFFFF 0xFFFFFFFF 0x00000000
ESP+0050: 0xD3343EB0 0x00435660 0x00435660 0x00000000
ESP+0060: 0x00A8E090 0x0079B2CC 0x7781C4AC 0x7783A7FA
ESP+0070: 0x044AFD24 0x00000001 0x00000000 0x00000000
ESP+0080: 0x044AFD24 0x777E0000 0x00000000 0x0001002F
ESP+0090: 0x00000000 0x00000000 0x00000000 0x00000000
ESP+00A0: 0x00000000 0x00000000 0x0000027F 0x00000000
ESP+00B0: 0x00000800 0x00000000 0x044AFD55 0x00000001
ESP+00C0: 0x00000000 0x00000000 0x00000000 0x00000000
ESP+00D0: 0x00000000 0x00000000 0x00000000 0x00000000
ESP+00E0: 0x00000000 0x00000000 0x00000000 0x00000000
ESP+00F0: 0x00000000 0x00000000 0x00000000 0x00000000
ESP+0100: 0x00000000 0x00000000 0x00000000 0x00000000
ESP+0110: 0x00000000 0x00000000 0x00000000 0x00000000
ESP+0120: 0x00000000 0x00000000 0x00000000 0x00000000
ESP+0130: 0x00000000 0x00000000 0x00000000 0x00000000
вроде не на моей стороне косяк
 

vegas

Известный
637
445
вроде не на моей стороне косяк
1619550867260.png


Lua:
function func()
    while true do Tasking.wait(0)
        for i=1, #massiv do
            repeat Tasking.wait(0) until chekd -- появляется как доходит до этой строки (поменял на repeat но всё равно не помогло)
            repeat Tasking.wait(0) until chekd2 
        end
        Tasking.wait(300000)
    end
end