[Lua/Dialog] Закрыть диалог с нужным мне выбором.

Aizen Sosuke

Участник
Автор темы
120
20
Версия MoonLoader
.026-beta
Здравствуйте.
Получаю в onShowDialog нужный мне id диалога, после чего ищу нужный текст и вывожу его:
Lua:
function sampev.onShowDialog(dialogId, dialogStyle, dialogTitle, okButtonText, cancelButtonText, dialogText)
    if dialogId == 1421 then
        if dialogText:find('Nevada') then
            sampAddChatMessage('Nevada', -1);
        end
    end
end
Вопрос. Как мне закрыть диалог с нужным мне выбором? В моём случае, Nevada.
Скрин с диалога ниже.

O5GiDSo.png
 

Josuke12

Новичок
6
3
Попробуй
sampSendDialogResponse(int id, int button, int listitem, zstring input)
В первый аргумент вводишь ид диалога, во второй кнопку, а в третий номер элемента в списке. Так ты сразу сможешь сделать чтоб выбирался нужный самолёт. Подробнее сможешь прочитать тут:
 
  • Нравится
Реакции: Aizen Sosuke

Sidney31

Известный
1,132
385
Здравствуйте.
Получаю в onShowDialog нужный мне id диалога, после чего ищу нужный текст и вывожу его:
Lua:
function sampev.onShowDialog(dialogId, dialogStyle, dialogTitle, okButtonText, cancelButtonText, dialogText)
    if dialogId == 1421 then
        if dialogText:find('Nevada') then
            sampAddChatMessage('Nevada', -1);
        end
    end
end
Вопрос. Как мне закрыть диалог с нужным мне выбором? В моём случае, Nevada.
Скрин с диалога ниже.

O5GiDSo.png
Lua:
function getDialogItem(dText, findLine)
    local i = -1
    for line in dText:gmatch('([^\n\r]+)') do
        i = i + 1
        if line:find(findLine) then
            return i
        end
    end
    return -1
end

function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
    if dialog == 1421 then
        sampSendDialogResponse(1421, 1, getDialogItem(text, 'Nevada'), -1)
    end
end
 
  • Нравится
Реакции: Aizen Sosuke

Aizen Sosuke

Участник
Автор темы
120
20
Lua:
function getDialogItem(dText, findLine)
    local i = -1
    for line in dText:gmatch('([^\n\r]+)') do
        i = i + 1
        if line:find(findLine) then
            return i
        end
    end
    return -1
end

function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
    if dialog == 1421 then
        sampSendDialogResponse(1421, 1, getDialogItem(text, 'Nevada'), -1)
    end
end
Не работает после sampSendDialogResponse(1421, 1, getDialogItem(text, 'Nevada'), -1)

Попробуй
sampSendDialogResponse(int id, int button, int listitem, zstring input)
В первый аргумент вводишь ид диалога, во второй кнопку, а в третий номер элемента в списке. Так ты сразу сможешь сделать чтоб выбирался нужный самолёт. Подробнее сможешь прочитать тут:
Да дело в том, что по 3 аргументу, где номер в списке легко сделать, но самолёты всегда в разброс слетают
 
Последнее редактирование:

Sidney31

Известный
1,132
385
Не работает после sampSendDialogResponse(1421, 1, getDialogItem(text, 'Nevada'), -1)


Да дело в том, что по 3 аргументу, где номер в списке легко сделать, но самолёты всегда в разброс слетают
Lua:
if dialogId == 1421 then
    sampSendDialogResponse(1421, 1, getDialogItem(text, 'Nevada'), -1)
end
Да, я ошибся, измени.
 

Aizen Sosuke

Участник
Автор темы
120
20
Lua:
if dialogId == 1421 then
    sampSendDialogResponse(1421, 1, getDialogItem(text, 'Nevada'), -1)
end
Да, я ошибся, измени.
да я уже заменял, сам заметил, видимо проблема где то в получении текста самого окна, потому что код стопорится именно в sendDialog
 

Gorskin

{Reverse Developer} ✓
Проверенный
1,255
1,057
Lua:
function sampev.onShowDialog(dialogId, dialogStyle, dialogTitle, okButtonText, cancelButtonText, dialogText)
    if dialogId == 1421 then
        lua_thread.create(function()
            wait(100);

            sampSendDialogResponse(1421, 1, getDialogItem(text, 'Nevada'), -1);
        end)
    end  
end

если нужно могу прям весь кинуть
Замени
Lua:
sampSendDialogResponse(1421, 1, getDialogItem(text, 'Nevada'), -1);
на
Lua:
sampSendDialogResponse(1421, 1, getDialogItem(dialogText, 'Nevada'), -1);
 
  • Нравится
Реакции: Aizen Sosuke и Sidney31

Aizen Sosuke

Участник
Автор темы
120
20
Lua:
sampSendDialogResponse(1421, 1, getDialogItem(dialogText, 'Shamal'), -1);
sampAddChatMessage(getDialogItem(dialogText, 'Shamal'), -1);
Вроде выводит позицию (цифру) нужного самолета, но диалог не закрывает. Если добавить:
Lua:
sampCloseCurrentDialogWithButton(1);
Оно будет закрывать диалог, но будет работать криво, ибо не выбирает нужный мне самолет из списка.
 

Gorskin

{Reverse Developer} ✓
Проверенный
1,255
1,057
Lua:
sampSendDialogResponse(1421, 1, getDialogItem(dialogText, 'Shamal'), -1);
sampAddChatMessage(getDialogItem(dialogText, 'Shamal'), -1);
Вроде выводит позицию (цифру) нужного самолета, но диалог не закрывает. Если добавить:
Lua:
sampCloseCurrentDialogWithButton(1);
Оно будет закрывать диалог, но будет работать криво, ибо не выбирает нужный мне самолет из списка.
Попробуй так sampSendDialogResponse(1421, 0, getDialogItem(dialogText, 'Shamal'), -1);