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

kizn

О КУ)))
Всефорумный модератор
2,405
2,054

memir

🇷🇺
Автор темы
Всефорумный модератор
333
597
фиксы + добавлен метод isAlive возвращающий ID задачи
 
  • Нравится
Реакции: kizn

Dozor

Потрачен
359
143
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обновив библиотеку, потерялась обратная совместимость, т.е. скрипты, которые нормально работали на старой версии, не работают на новой(Какая-то ошибка, хер пойми с чем связна).. И не ебу как решить проблему.. Вот пример:
[ERROR] Ошибка скрипта "rakchest1.2.3upd.lua": ...\Desktop\RAKBOT~1.1\RAKBOT~1.1\/scripts/libs/Tasking.lua:59: attempt to index local 'task' (a function value)
[ERROR] stack traceback:
[ERROR] [C]: in function 'error'
[ERROR] ...\Desktop\RAKBOT~1.1\RAKBOT~1.1\/scripts/libs/Tasking.lua:49: in function <...\Desktop\RAKBOT~1.1\RAKBOT~1.1\/scripts/libs/Tasking.lua:40>
 

Aniki

🐰
Администратор
1,225
1,506
Обновив библиотеку, потерялась обратная совместимость, т.е. скрипты, которые нормально работали на старой версии, не работают на новой(Какая-то ошибка, хер пойми с чем связна).. И не ебу как решить проблему.. Вот пример:
[ERROR] Ошибка скрипта "rakchest1.2.3upd.lua": ...\Desktop\RAKBOT~1.1\RAKBOT~1.1\/scripts/libs/Tasking.lua:59: attempt to index local 'task' (a function value)
[ERROR] stack traceback:
[ERROR] [C]: in function 'error'
[ERROR] ...\Desktop\RAKBOT~1.1\RAKBOT~1.1\/scripts/libs/Tasking.lua:49: in function <...\Desktop\RAKBOT~1.1\RAKBOT~1.1\/scripts/libs/Tasking.lua:40>
Как раз это место и не менялось как ни странно, скорее всего что-то не так пошло внутри корутины, что и повлекло вызов error. Без кода сложно сказать
 

Dozor

Потрачен
359
143
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Вообщем решил я немного разобраться, в чем причина той ошибки. Не уверен до конца, но конкретно когда я вызываю Tasking.remove оно и выбивает эту ошибку. Подозреваю что вы что-то намутили с Tasking.tick. В новой версии вы вызываете Tasking.remove внутри функции Tasking.tick, мб в этом и проблема.
https://www.blast.hk/threads/89958/ мой скрипт, который не работает с новой версией!

луа:
function Tasking.tick()
local task = sparse[v]
if task.wake_time < os.clock() and not task.halted then
    if coroutine.status(task.f) == 'dead' then
        Tasking.remove(task)
    else
...
Конкретно вот, переменная task хранит в себе массив, вы же запихаете её потом в Tasking.remove. Я конечно могу быть не прав, но мне кажеться так не должно быть
 
Последнее редактирование:

lorgon

Известный
657
267
Можно ли использовать эту библиотеку как независимую от РакБота?(В самостоятельных луа скриптах). Если это возможно, скиньте примерв 2-3 строках.
 

memir

🇷🇺
Автор темы
Всефорумный модератор
333
597
Можно ли использовать эту библиотеку как независимую от РакБота?(В самостоятельных луа скриптах). Если это возможно, скиньте примерв 2-3 строках.
да можно. просто вызывай tick в бесконечном цикле каком-нибудь и все будет работать
 

lorgon

Известный
657
267
да можно. просто вызывай tick в бесконечном цикле каком-нибудь и все будет работать
Ничего не происходит.

1639862839450.png
 

Dozor

Потрачен
359
143
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Я туда всё что можно и нельзя уже писал, ничего не происходит. 😭
Потому что это всё должно находиться в какой-то функции (main к примеру), а оно у тебя просто как часть кода которая нигде не используется и нигде не вызывается, судя по скрину...
Lua:
require "Tasking"

function main()
while true do
Taskind.tick()
end
Tasking.new(govno)
end

function govno()
 Сюда запихни свой код
 Можно без Tasking.new, задержка и так будет работать, потому что мы из под main вызываем эту функцию при помощи Tasking.new
end
 

lorgon

Известный
657
267
Потому что это всё должно находиться в какой-то функции (main к примеру), а оно у тебя просто как часть кода которая нигде не используется и нигде не вызывается, судя по скрину...
Lua:
require "Tasking"

function main()
while true do
Taskind.tick()
end
Tasking.new(govno)
end

function govno()
 Сюда запихни свой код
 Можно без Tasking.new, задержка и так будет работать, потому что мы из под main вызываем эту функцию при помощи Tasking.new
end
У меня обычный луа скрипт, без мунлоадера или чего-то ещё. Я сам его запускаю, отдельно. Даже с твоим кодом ничего не происходит.
Lua:
require "Tasking"

function main()
    while true do
        Tasking.tick()
    end
    Tasking.new(govno)
end

function govno()
 print('lol')
end
P.S: Я и мейн вызвал и чего только не делал. Цикл(while true do) работает, но ничего не происходит.
 

frit

Известный
389
174
У меня обычный луа скрипт, без мунлоадера или чего-то ещё. Я сам его запускаю, отдельно. Даже с твоим кодом ничего не происходит.
Lua:
require "Tasking"

function main()
    while true do
        Tasking.tick()
    end
    Tasking.new(govno)
end

function govno()
 print('lol')
end
P.S: Я и мейн вызвал и чего только не делал. Цикл(while true do) работает, но ничего не происходит.
ну так у тебя обращение к методу new стоит после бесконечного цикла