Помощь с циклами

NaruBot

Известный
Автор темы
25
8
Версия MoonLoader
.027.0-preview
Добрый день, нужна помощь. Хочу сделать скрипт с imgui интерфейсом, в котором будет checkbox. При нажатии на checkbox должно происходить действие до тех пор, пока не будет найден определенный текст в чате. Пример кода ниже.
Lua:
local test = imgui.ImBool(false)

imgui.Checkbox(u8'Активация', test)

function th()
    while test.v do
            function sampev.onShowDialog(dialogId, style, title, button1, button2, text)      
                if text:find('Выполнить действие') then
                    sampSendDialogResponse(dialogId, 1, 1, 0)
                    function sampev.onServerMessage(color, textch)
                        if textch:find('Вы выполнили какое то действие') then
                            return false
                        end
                            if textch:find('У вас нет условия для выполнения!') then
                                sampAddChatMessage('Выполнение завершено',-1)
                                olen.v = not olen.v      
                            end
                    end
                end
            end
    end
end
Знающие люди, подскажите что тут не так и как это можно исправить?
 
Последнее редактирование:

kyrtion

Известный
1,110
403
Событие (каллбак) в цикл не рекомендую, это раз
Во-вторых, Событие (samp.events) вызывать один раз в каждом RPC
В-третьих, создавать событие в событии тоже не рекомендую

Вообще-то откуда у тебя такое взялось знание? И где ты такое нашел?

Lua:
local test = imgui.ImBool(false)

imgui.Checkbox(u8'Активация', test)

-- вне цикла и вне main
function sampev.onShowDialog(dialogId, style, title, button1, button2, text)  
    if text:find('Выполнить действие') and test.v then
        sampSendDialogResponse(dialogId, 1, 1, 0)
        return false
    elseif textch:find('У вас нет условия для выполнения!') and test.v then
        sampAddChatMessage('Выполнение завершено',-1)
        olen.v = not olen.v
        sampSendDialogResponse(dialogId, 1, 1, 0)
        return false
    end
end
 
function sampev.onServerMessage(color, textch)
    if textch:find('Вы выполнили какое то действие') and test.v then
        return false
    end
end
 

NaruBot

Известный
Автор темы
25
8
Событие (каллбак) в цикл не рекомендую, это раз
Во-вторых, Событие (samp.events) вызывать один раз в каждом RPC
В-третьих, создавать событие в событии тоже не рекомендую

Вообще-то откуда у тебя такое взялось знание? И где ты такое нашел?

Lua:
local test = imgui.ImBool(false)

imgui.Checkbox(u8'Активация', test)

-- вне цикла и вне main
function sampev.onShowDialog(dialogId, style, title, button1, button2, text) 
    if text:find('Выполнить действие') and test.v then
        sampSendDialogResponse(dialogId, 1, 1, 0)
        return false
    elseif textch:find('У вас нет условия для выполнения!') and test.v then
        sampAddChatMessage('Выполнение завершено',-1)
        olen.v = not olen.v
        sampSendDialogResponse(dialogId, 1, 1, 0)
        return false
    end
end
 
function sampev.onServerMessage(color, textch)
    if textch:find('Вы выполнили какое то действие') and test.v then
        return false
    end
end
Привет. Знаний мало, опирался на логическое мышление. Спасибо за помощь
 
  • Нравится
Реакции: kyrtion