Считывание текста в диалоге

3211Marlon1123

Участник
Автор темы
135
13
Версия MoonLoader
.027.0-preview
Дан диалог STYLE 5 (tablist) примерно такого плана:

1646742473964.png

Мне нужно чтобы в диалоге считывало каждую строчку и каждый из параметров (маршрут и стоимость за 1 продукт (маршрут и стоимость можно разделить), кол-во продуктов, водителей на маршруте). Была тема похожая, но она на этом диалоге не работает. Не считывает кол-во продуктов и водителей на маршруте. Ниже приложу пример того кода.
Посмотреть вложение 128529

Вот тебе варианты может есть лучше но я их не знаю :D
Lua:
function main()
        sampRegisterChatCommand('findi', xz) -- нужно чтобы был открыт диалог
    while true do wait(0)

    end
end

function xz(text)
    if sampIsDialogActive() then -- если открыт диалог
        if #text == 0 then -- если в переменной 0 букв
            return sampAddChatMessage('/findi [text]', -1) -- возрат sampAddChatMessage
        else -- иначе
            for i = 0, sampGetListboxItemsCount() - 1 do print(i)
                if sampGetListboxItemText(i):find(text) then
                    sampAddChatMessage(i, -1)
                    return i
                end
            end
        end
    else
        sampAddChatMessage('Откройте диалог'-1)
    end
end

Lua:
function sampGetListboxItemByText(text, plain)
    if not sampIsDialogActive() then return -1 end
    plain = not (plain == false)
    for i = 0, sampGetListboxItemsCount() - 1 do
        if sampGetListboxItemText(i):find(text, 1, plain) then
            sampAddChatMessage(i,-1)
            return i
        end
    end
    return -1
end

function main()

    while true do wait(0)
        if on == 1 then
            local index = sampGetListboxItemByText('Донат', false)
        end
    end
end

Здесь есть подсказка, что \t делает один TAB в строчке. Главный вопрос состоит в том, как читать вот эти пробелы огромные между данными в строках. Подобный диалог на Advance RP есть, но тут 2 параметра.
1646765083557.png


Читаю строчки и пишется только название транспорта, а состояние (в гараже или на улице) не показывается вообще :( help
 
Последнее редактирование:
Решение
Lua:
local state = text:match("Turismo%s+(%w+)")


либо
Lua:
local state = text:match("Turismo%S+")
Тоже не будет работать 99 проц. Повторюсь. Я скриптом перебираю эти строки и даже в лог выводится ток название транспорта, то есть в строке в принципе не выводится состояние авто

Lua:
local state = text:match("Turismo%s+(%w+)")


либо
Lua:
local state = text:match("Turismo%S+")
Не работает, как и говорил.
Lua:
function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
    if on == 1 then
        if dialogId == 3120 then
            for i = 0, sampGetListboxItemsCount() - 1 do
            --if sampGetListboxItemText(i):find('Turismo') then...

qdIbp

Автор темы
Проверенный
1,435
1,175

Lua:
if text:find('Turismo %c (.+)') then -- %c любые отступы(\t \n и тд)
 

3211Marlon1123

Участник
Автор темы
135
13

Lua:
if text:find('Turismo %c (.+)') then -- %c любые отступы(\t \n и тд)
Не будет по идее работать, со строки считывается только первый параметр, а дальше не читает. Хотя визуально там \t. Домой приеду и проверю


Lua:
if text:find('Turismo %c (.+)') then -- %c любые отступы(\t \n и тд)
Не определяет всё равно( Перебираю скриптом, а оно пишет только названия машин, состояние игнорит(((

@chapo
 
Последнее редактирование:

SomaGnoma

Известный
436
150
Дан диалог STYLE 2 (Item list) примерно такого плана:

Посмотреть вложение 139061
Мне нужно чтобы в диалоге считывало каждую строчку и каждый из параметров (маршрут и стоимость за 1 продукт (маршрут и стоимость можно разделить), кол-во продуктов, водителей на маршруте). Была тема похожая, но она на этом диалоге не работает. Не считывает кол-во продуктов и водителей на маршруте. Ниже приложу пример того кода.


Здесь есть подсказка, что \t делает один TAB в строчке. Главный вопрос состоит в том, как читать вот эти пробелы огромные между данными в строках. Подобный диалог на Advance RP есть, но тут 2 параметра. Посмотреть вложение 139119

Читаю строчки и пишется только название транспорта, а состояние (в гараже или на улице) не показывается вообще :( help
Lua:
local state = text:match("Turismo%s+(%w+)")

Lua:
local state = text:match("Turismo%s+(%w+)")
либо
Lua:
local state = text:match("Turismo%S+")
 

3211Marlon1123

Участник
Автор темы
135
13
Lua:
local state = text:match("Turismo%s+(%w+)")


либо
Lua:
local state = text:match("Turismo%S+")
Тоже не будет работать 99 проц. Повторюсь. Я скриптом перебираю эти строки и даже в лог выводится ток название транспорта, то есть в строке в принципе не выводится состояние авто

Lua:
local state = text:match("Turismo%s+(%w+)")


либо
Lua:
local state = text:match("Turismo%S+")
Не работает, как и говорил.
Lua:
function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
    if on == 1 then
        if dialogId == 3120 then
            for i = 0, sampGetListboxItemsCount() - 1 do
            --if sampGetListboxItemText(i):find('Turismo') then
                    sampfuncsLog(sampGetListboxItemText(i))
            --end
        end
        end
    end
end
Кодом выше я перебираю все строчки и в консоли получаю:
Код:
[21:27:22] Turismo
[21:27:22] Sultan
[21:27:22] Sultan
[21:27:22] Bloodring Banger
[21:27:22] Bullet
[21:27:22] Hotring Racer A
[21:27:22] Hotring Racer A
[21:27:22] Sandking
[21:27:22] Turismo
[21:27:22] Cheetah

Блет, это проблема всех диалогов типа tablist. Сейчас локальный диалог создал и тоже самое, не читает справа всё, а первый параметр читает. Такое чувство что оно в тексте не определяет \t. Как это можно обойти и прочитать?

Вроде бы нашёл решение. Завтра днём проверю и отпишу)

Нашёл решение, оставлю его тут :)
Lua:
function ev.onShowDialog(id, st, tit, b1, b2, tx)
    if tit:find("Очень большой рюкзак") then
        local i = st == 5 and -1 or 0 -- Фикс стиля диалога, так как названия колонок тоже идёт в текст
        for line in tx:gmatch('[^\r\n]+') do
            if line:find("Бутылка с водой") then
                sampAddChatMessage("Бутылка с водой в элементе "..i, -1)
                return true
            end
            i = i + 1
        end
        sampAddChatMessage("Бутылка с водой не найдена", -1)
    end
end
 
Последнее редактирование: