Помощь с кодом скрипта

XRLM

Известный
Автор темы
2,532
850
мне нужно чтобы по команде /spr скрипт открыл инвентарь на /y и начал искать Справочник среди содержимого, после закрыть диалог на 1 кнопку.
когда пишу /spr, скрипт открывает инв и походу ищет справочник, но найти не может, потому что мб я не правильно что то сделал.
как выглядит справочник в инвентаре (11 строчка) -

Посмотреть вложение 160362
и если что, мне надо чтобы это работало на других аккаунтах, где справочник может быть в другом слоту инвентаря.

Lua:
local sampev = require ('lib.samp.events')
local state = false

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('spr', function()
        state = not state
    end)
end

function sampev.onShowDialog(id, style, title, button1, button2, text)
    if state == true then
        sampSendChat('/y')
        if text:find('(%d+)%. Справочник%[(%d+)%]') then
            lua_thread.create(function()
            wait(0)
            listbox = sampGetListboxItemByText('(%d+)%. Справочник%[(%d+)%]')
            sampSendDialogResponse(id, 1, listbox, nil)
            end)
        end
    end
end

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
            return i
        end
    end
    return -1
end
 

YarikVL

Известный
Проверенный
4,812
1,819
мне нужно чтобы по команде /spr скрипт открыл инвентарь на /y и начал искать Справочник среди содержимого, после закрыть диалог на 1 кнопку.
когда пишу /spr, скрипт открывает инв и походу ищет справочник, но найти не может, потому что мб я не правильно что то сделал.
как выглядит справочник в инвентаре (11 строчка) -

Посмотреть вложение 160362
и если что, мне надо чтобы это работало на других аккаунтах, где справочник может быть в другом слоту инвентаря.

Lua:
local sampev = require ('lib.samp.events')
local state = false

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('spr', function()
        state = not state
    end)
end

function sampev.onShowDialog(id, style, title, button1, button2, text)
    if state == true then
        sampSendChat('/y')
        if text:find('(%d+)%. Справочник%[(%d+)%]') then
            lua_thread.create(function()
            wait(0)
            listbox = sampGetListboxItemByText('(%d+)%. Справочник%[(%d+)%]')
            sampSendDialogResponse(id, 1, listbox, nil)
            end)
        end
    end
end

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
            return i
        end
    end
    return -1
end
так там вроде после справочника цвет и цифра в указанном цвете. Попробуй сделать: (%d+)%. Справочник(.+)
 

XRLM

Известный
Автор темы
2,532
850
так там вроде после справочника цвет и цифра в указанном цвете. Попробуй сделать: (%d+)%. Справочник(.+)
сделал. всё также. мне кажется у меня ошибка в 17 строке в скобках. я взял код с этой темы https://www.blast.hk/threads/89673/#post-757527 , там 14 и 17 строки отличаются.
1659286751395.png

регулярные вроде правильно расставил {FFFFFF}(%d+)%. Справочник%[{FF9945}(%d+){FFFFFF}%]
 

XRLM

Известный
Автор темы
2,532
850
Кинь кусок кода с исправлениями
Lua:
function sampev.onShowDialog(id, style, title, button1, button2, text)
    if state == true then
        sampSendChat('/y')
        if text:find('{FFFFFF}(%d+)%.    Справочник%[{FF9945}(%d+){FFFFFF}%]') then --(%d+)%. BMX%[(%d+)%]
            lua_thread.create(function()
            wait(1)
            listbox = sampGetListboxItemByText('{FFFFFF}(%d+)%.    Справочник%[{FF9945}(%d+){FFFFFF}%]')
            sampSendDialogResponse(id, 1, listbox, nil)
            end)
        end
    end
end
 

YarikVL

Известный
Проверенный
4,812
1,819
Lua:
function sampev.onShowDialog(id, style, title, button1, button2, text)
    if state == true then
        sampSendChat('/y')
        if text:find('{FFFFFF}(%d+)%.    Справочник%[{FF9945}(%d+){FFFFFF}%]') then --(%d+)%. BMX%[(%d+)%]
            lua_thread.create(function()
            wait(1)
            listbox = sampGetListboxItemByText('{FFFFFF}(%d+)%.    Справочник%[{FF9945}(%d+){FFFFFF}%]')
            sampSendDialogResponse(id, 1, listbox, nil)
            end)
        end
    end
end
Скобки {} тоже экранировать надо, а цвет в них делают точками, пример: %{……%}

Символы которые экранировать надо:
64628817-4F3A-4C8E-92EF-9DBD3657AF82.jpeg
 
  • Ха-ха
Реакции: Andrinall

XRLM

Известный
Автор темы
2,532
850

YarikVL

Известный
Проверенный
4,812
1,819
не, я пытался экранировать цвет в другом скрипте, но он не работал.
Код:
function sampev.onShowDialog(id, style, title, button1, button2, text)
    if state == true then
        sampSendChat('/y')
        if text:find('%{......%}(%d+)%.(%s*)Справочник%[%{......%}(%d+)%{......%}%]') then
            lua_thread.create(function()
            wait(1)
            sampAddChatMessage("rabotaet", -1)
            listbox = sampGetListboxItemByText('%{......%}(%d+)%.(%s*)Справочник%[%{......%}(%d+)%{......%}%]')
            sampSendDialogResponse(id, 1, listbox, nil)
            end)
        end
    end
end
Пробуй, скажешь выведет ли в чат чёт