Помощь в lua

Dozor

Потрачен
Автор темы
359
143
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Пытаюсь написать скрипт для ракбота, который будет открывать все сундуки с рулетками(изначально пишу только для 2 сундуков), и у меня появилась проблема! 3 день сижу и не могу придумать как это реализовать.. У меня есть вот такой код:

lua:
package.path = getRakBotPath().."/scripts/libs/?.lua;"..getRakBotPath().."/scripts/libs/?/init.lua;";
package.cpath = getRakBotPath().."/scripts/libs/?.dll";
require("luaAddons.textdraw")
require("luaAddons.fix")

local active = false
local syndyk1 = false
local syndyk2 = false
local s1 = 0
local s2 = 0
t = {}

function onRunCommand(cmd)
    if cmd == '!rt' then
        clickTextDraw(65535)
        active = not active
        sendInput('/invent')
        printLog('Auto chest start')
    end
    
    if cmd == '!stop' then
        active = not active
        clickTextDraw(65535)
    end
end

function onShowTextDraw(tId,data)
    if active then       
        
        if data.modelId == 19918 then
            s1 = tId + 1
            s2 = s1 + 2
            print('test s1: '..s1)
            if syndyk1 == true then
                clickTextDraw(tId)
            end
        end
        
        
        if data.modelId == 1353 then
            s2 = tId + 1
            print('test s2: '..s2)
            if syndyk2 == true then
                clickTextDraw(tId)
            end
        end   
        
        if data.text:match('%d- min') then
            for i = 0, 1 do
                t[i] = tId
                print('Proverka spiska:')
                print(i, t[i], sampTextdrawGetString(t[i]))
            end
        end
        
        --[[if data.text:match('%d- min') then
            printLog('idTextDraw = '..tId)
            print('s1 = '..s1)
            print('s2 = '..s2)
            if tId == s1 then
                syndyk1 = false
                sc1 = s1
                print('Vremiya do otkritiya obichnogo syndyka ne prishlo')
            elseif tId == s2 then
                syndyk2 = false
                sc2 = s2
                print('Vremiya do otkritiya platinovogo syndyka ne prishlo')
            elseif s1 == sc1 and s2 == sc2 then
                clickTextDraw(65535)
                timeout = 5000
                --timeout = (60000*10)+120000
                sc1 = nil
                sc2 = nil
                defCallAdd(timeout, true, check)
            elseif tId ~= s1 then
                syndyk1 = true
            elseif tId ~= s2 then
                syndyk2 = true
            end   
        end]]
        
        if data.text == 'USE' or data.text == '…CЊO‡’€O‹AЏ’' then
            td = tId + 1
            clickTextDraw(td)
        end
    end
end


function check()
    sendInput('/invent')
end


---- id 19918 обычный сундук
---- id 1353 сундук который выпадает после 360 часов игры


Проблема состоит в том, что этот код выполняется не по порядку(с lua я работаю впервые), как мне сделать так, что бы код выполнялся по порядку???

Cначала выполняется вот эта часть кода(с поиском модельки обычного сундука)
lua:
if data.modelId == 19918 then
    s1 = tId + 1
    s2 = s1 + 2
    print('test s1: '..s1)
    if syndyk1 == true then
        clickTextDraw(tId)
    end
end

Дальше пропускается код с вторым сундуком и сразу скрипт проходится по коду который ищет время до открытия сундука

lua:
if data.text:match('%d- min') then
    for i = 0, 1 do
        t[i] = tId
        print('Proverka spiska:')
        print(i, t[i], sampTextdrawGetString(t[i]))
    end
end

И только потом, скрипт проходится по коду с вторым сундуком и второй раз по коду, который ищет время до открытия
lua:
if data.modelId == 1353 then
    s2 = tId + 1
    print('test s2: '..s2)
    if syndyk2 == true then
        clickTextDraw(tId)
    end
end

1.jpg


Из-за того, что код выполняется не по порядку, я не могу никак сделать нормально проверку на то, готов ли нужный мне сундук до открытия или нужно ещё подождать некоторое время.. (Пытаюсь записать время и IDtextdraw в переменные, но получается так, что часть кода(с вторым сундуком) выполняется в последнюю очередь и переменная которая отвечает за IDtextdraw второго сундука получается пустой(nil)).. Надеюсь понятно пояснил суть проблемы!

P.S. использовал библиотеку с этой темы https://www.blast.hk/threads/27579/
 

Tema05

Известный
1,474
439
Тут объяснять как всё правильно сделать очень долго. Сам когда пишу скрипты для взаимодействия с интерфейсами из текстдравов нахожу кучу нюансов и подводных камней. Могу в дискорде объяснить как такое можно сделать.
 

Dozor

Потрачен
Автор темы
359
143
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Тут объяснять как всё правильно сделать очень долго. Сам когда пишу скрипты для взаимодействия с интерфейсами из текстдравов нахожу кучу нюансов и подводных камней. Могу в дискорде объяснить как такое можно сделать.
ну давай


 

Dozor

Потрачен
Автор темы
359
143
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всё, уже нет необходимости, я смог придумать как правильно(ну почти, проскакивают лишние нажатие по текстдравам, но это мелочи) реализовать скрипт)
 

Tema05

Известный
1,474
439
Всё, уже нет необходимости, я смог придумать как правильно(ну почти, проскакивают лишние нажатие по текстдравам, но это мелочи) реализовать скрипт)
Если проскакивают лишние нажатия значит что-то не так сделал)
 

Dozor

Потрачен
Автор темы
359
143
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Если проскакивают лишние нажатия значит что-то не так сделал)
Аризона не всегда обрабатывает нормально нажатия, почему то! Мне кажется это связано с тем, что сами сервера подлагивают.. А скрипт просто за секунду может нажать очень большое количество раз
 

Tema05

Известный
1,474
439
Аризона не всегда обрабатывает нормально нажатия, почему то! Мне кажется это связано с тем, что сами сервера подлагивают.. А скрипт просто за секунду может нажать очень большое количество раз
Бред полный. Аризона не может просто так проигнорировать нажатие. Максимум задержать. И почему скрипт нажимает за секунду несколько раз? Так не должно быть. Может в этом и есть причина проблем?
 

Dozor

Потрачен
Автор темы
359
143
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Бред полный. Аризона не может просто так проигнорировать нажатие. Максимум задержать. И почему скрипт нажимает за секунду несколько раз? Так не должно быть. Может в этом и есть причина проблем?
Не правильно объяснил, задерживает нажатие, ты прав! Сервер не вовремя отвечает на нажатие, из-за этого скрипт прокликивает несколько лишних раз
 

Dozor

Потрачен
Автор темы
359
143
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Просто когда я пытаюсь вручную кликать по текстдравам, нужно профлудить несколько раз, что бы сервер открыл сундук
 

Tema05

Известный
1,474
439
Не правильно объяснил, задерживает нажатие, ты прав! Сервер не вовремя отвечает на нажатие, из-за этого скрипт прокликивает несколько лишних раз
Если у тебя код не построен на ожидании событий от сервера он мягко говоря плохой. Это всё равно что проходить большие цепочки через диалогов при помощи wait, а не хука в ожидании появления нового.
 

Dozor

Потрачен
Автор темы
359
143
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Если у тебя код не построен на ожидании событий от сервера он мягко говоря плохой. Это всё равно что проходить большие цепочки через диалогов при помощи wait, а не хука в ожидании появления нового.
ну это мой первый скрипт на луа, спасибо за помощь, учту! До этого просто я не был знаком с луа вообще!
 

Tema05

Известный
1,474
439
ну это мой первый скрипт на луа, спасибо за помощь, учту! До этого просто я не был знаком с луа вообще!
Ну по мне это можно отнести к любой программе. Зачем гадать сколько там нужно ждать если можно выполнять нужные действия по происхождению определённого события.